Loading changes/ticket9658 0 → 100644 +4 −0 Original line number Diff line number Diff line o Minor features: - Track how many "TAP" and "NTor" circuit handshake requests we get, and how many we complete, and log it every hour to help relay operators follow trends in network load. Addresses ticket 9658. src/or/command.c +3 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include "hibernate.h" #include "nodelist.h" #include "onion.h" #include "rephist.h" #include "relay.h" #include "router.h" #include "routerlist.h" Loading Loading @@ -277,6 +278,8 @@ command_process_create_cell(cell_t *cell, channel_t *chan) if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) { /* hand it off to the cpuworkers, and then return. */ if (connection_or_digest_is_known_relay(chan->identity_digest)) rep_hist_note_circuit_handshake_requested(create_cell->handshake_type); if (assign_onionskin_to_cpuworker(NULL, circ, create_cell) < 0) { log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing."); circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT); Loading src/or/cpuworker.c +5 −0 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ #include "circuitlist.h" #include "config.h" #include "connection.h" #include "connection_or.h" #include "cpuworker.h" #include "main.h" #include "onion.h" #include "rephist.h" #include "router.h" /** The maximum number of cpuworker processes we will keep around. */ Loading Loading @@ -683,6 +685,9 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker, return -1; } if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest)) rep_hist_note_circuit_handshake_completed(onionskin->handshake_type); should_time = should_time_request(onionskin->handshake_type); memset(&req, 0, sizeof(req)); req.magic = CPUWORKER_REQUEST_MAGIC; Loading src/or/main.c +5 −0 Original line number Diff line number Diff line Loading @@ -1353,6 +1353,11 @@ run_scheduled_events(time_t now) next_time_to_write_stats_files = next_write; } time_to_write_stats_files = next_time_to_write_stats_files; /* Also commandeer this opportunity to log how our circuit handshake * stats have been doing. */ if (public_server_mode(options)) rep_hist_log_circuit_handshake_stats(now); } /* 1h. Check whether we should write bridge statistics to disk. Loading src/or/rephist.c +41 −0 Original line number Diff line number Diff line Loading @@ -3011,6 +3011,47 @@ rep_hist_conn_stats_write(time_t now) return start_of_conn_stats_interval + WRITE_STATS_INTERVAL; } /** Internal statistics to track how many requests of each type of * handshake we've received, and how many we've completed. Useful for * seeing trends in cpu load. * @{ */ static int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0}; static int onion_handshakes_completed[MAX_ONION_HANDSHAKE_TYPE+1] = {0}; /**@}*/ /** A new onionskin (using the <b>type</b> handshake) has arrived. */ void rep_hist_note_circuit_handshake_requested(uint16_t type) { if (type <= MAX_ONION_HANDSHAKE_TYPE) onion_handshakes_requested[type]++; } /** We've sent an onionskin (using the <b>type</b> handshake) to a * cpuworker. */ void rep_hist_note_circuit_handshake_completed(uint16_t type) { if (type <= MAX_ONION_HANDSHAKE_TYPE) onion_handshakes_completed[type]++; } /** Log our onionskin statistics since the last time we were called. */ void rep_hist_log_circuit_handshake_stats(time_t now) { (void)now; /* XXX024 maybe quiet this log message before 0.2.4 goes stable for real */ log_notice(LD_HIST, "Circuit handshake stats since last time: " "%d/%d TAP, %d/%d NTor.", onion_handshakes_completed[ONION_HANDSHAKE_TYPE_TAP], onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP], onion_handshakes_completed[ONION_HANDSHAKE_TYPE_NTOR], onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR]); memset(onion_handshakes_completed, 0, sizeof(onion_handshakes_completed)); memset(onion_handshakes_requested, 0, sizeof(onion_handshakes_requested)); } /** Free all storage held by the OR/link history caches, by the * bandwidth history arrays, by the port history, or by statistics . */ void Loading Loading
changes/ticket9658 0 → 100644 +4 −0 Original line number Diff line number Diff line o Minor features: - Track how many "TAP" and "NTor" circuit handshake requests we get, and how many we complete, and log it every hour to help relay operators follow trends in network load. Addresses ticket 9658.
src/or/command.c +3 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include "hibernate.h" #include "nodelist.h" #include "onion.h" #include "rephist.h" #include "relay.h" #include "router.h" #include "routerlist.h" Loading Loading @@ -277,6 +278,8 @@ command_process_create_cell(cell_t *cell, channel_t *chan) if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) { /* hand it off to the cpuworkers, and then return. */ if (connection_or_digest_is_known_relay(chan->identity_digest)) rep_hist_note_circuit_handshake_requested(create_cell->handshake_type); if (assign_onionskin_to_cpuworker(NULL, circ, create_cell) < 0) { log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing."); circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT); Loading
src/or/cpuworker.c +5 −0 Original line number Diff line number Diff line Loading @@ -19,9 +19,11 @@ #include "circuitlist.h" #include "config.h" #include "connection.h" #include "connection_or.h" #include "cpuworker.h" #include "main.h" #include "onion.h" #include "rephist.h" #include "router.h" /** The maximum number of cpuworker processes we will keep around. */ Loading Loading @@ -683,6 +685,9 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker, return -1; } if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest)) rep_hist_note_circuit_handshake_completed(onionskin->handshake_type); should_time = should_time_request(onionskin->handshake_type); memset(&req, 0, sizeof(req)); req.magic = CPUWORKER_REQUEST_MAGIC; Loading
src/or/main.c +5 −0 Original line number Diff line number Diff line Loading @@ -1353,6 +1353,11 @@ run_scheduled_events(time_t now) next_time_to_write_stats_files = next_write; } time_to_write_stats_files = next_time_to_write_stats_files; /* Also commandeer this opportunity to log how our circuit handshake * stats have been doing. */ if (public_server_mode(options)) rep_hist_log_circuit_handshake_stats(now); } /* 1h. Check whether we should write bridge statistics to disk. Loading
src/or/rephist.c +41 −0 Original line number Diff line number Diff line Loading @@ -3011,6 +3011,47 @@ rep_hist_conn_stats_write(time_t now) return start_of_conn_stats_interval + WRITE_STATS_INTERVAL; } /** Internal statistics to track how many requests of each type of * handshake we've received, and how many we've completed. Useful for * seeing trends in cpu load. * @{ */ static int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0}; static int onion_handshakes_completed[MAX_ONION_HANDSHAKE_TYPE+1] = {0}; /**@}*/ /** A new onionskin (using the <b>type</b> handshake) has arrived. */ void rep_hist_note_circuit_handshake_requested(uint16_t type) { if (type <= MAX_ONION_HANDSHAKE_TYPE) onion_handshakes_requested[type]++; } /** We've sent an onionskin (using the <b>type</b> handshake) to a * cpuworker. */ void rep_hist_note_circuit_handshake_completed(uint16_t type) { if (type <= MAX_ONION_HANDSHAKE_TYPE) onion_handshakes_completed[type]++; } /** Log our onionskin statistics since the last time we were called. */ void rep_hist_log_circuit_handshake_stats(time_t now) { (void)now; /* XXX024 maybe quiet this log message before 0.2.4 goes stable for real */ log_notice(LD_HIST, "Circuit handshake stats since last time: " "%d/%d TAP, %d/%d NTor.", onion_handshakes_completed[ONION_HANDSHAKE_TYPE_TAP], onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP], onion_handshakes_completed[ONION_HANDSHAKE_TYPE_NTOR], onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR]); memset(onion_handshakes_completed, 0, sizeof(onion_handshakes_completed)); memset(onion_handshakes_requested, 0, sizeof(onion_handshakes_requested)); } /** Free all storage held by the OR/link history caches, by the * bandwidth history arrays, by the port history, or by statistics . */ void Loading