diff options
author | Karsten Loesing <karsten.loesing@gmx.net> | 2009-07-13 22:43:06 +0200 |
---|---|---|
committer | Karsten Loesing <karsten.loesing@gmx.net> | 2009-07-13 22:43:06 +0200 |
commit | 8f1a973669284e5662bd6f23bc96ecfafa57c554 (patch) | |
tree | f8145dc47dee99bc85814d3bac2056a8c134e51a /src/or/rephist.c | |
parent | 707a44a7b0e12f9aef541dd69b356e2f123bcda8 (diff) | |
download | tor-8f1a973669284e5662bd6f23bc96ecfafa57c554.tar.gz tor-8f1a973669284e5662bd6f23bc96ecfafa57c554.zip |
Two tweaks to exit-port statistics.
Add two functions for round_to_next_multiple_of() for uint32_t and
uint64_t.
Avoid division in every step of the loop over all ports.
Diffstat (limited to 'src/or/rephist.c')
-rw-r--r-- | src/or/rephist.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/src/or/rephist.c b/src/or/rephist.c index f987664449..6a716d376b 100644 --- a/src/or/rephist.c +++ b/src/or/rephist.c @@ -1332,7 +1332,7 @@ rep_hist_note_bytes_read(size_t num_bytes, time_t when) #define EXIT_STATS_NUM_PORTS 65536 /** Reciprocal of threshold (= 0.01%) of total bytes that a port needs to * see in order to be included in exit stats. */ -#define EXIT_STATS_THRESHOLD 10000 +#define EXIT_STATS_THRESHOLD_RECIPROCAL 10000 /* The following data structures are arrays and no fancy smartlists or maps, * so that all write operations can be done in constant time. This comes at @@ -1354,7 +1354,7 @@ write_exit_stats(time_t when) { char t[ISO_TIME_LEN+1]; int r, i, comma; - uint64_t *b, total_bytes, other_bytes; + uint64_t *b, total_bytes, threshold_bytes, other_bytes; uint32_t other_streams; char *filename = get_datadir_fname("exit-stats"); @@ -1381,13 +1381,14 @@ write_exit_stats(time_t when) goto done; /* Count the total number of bytes, so that we can attribute all - * observations below a threshold of 1 / EXIT_STATS_THRESHOLD of all - * bytes to a special port 'other'. */ + * observations below a threshold of 1 / EXIT_STATS_THRESHOLD_RECIPROCAL + * of all bytes to a special port 'other'. */ total_bytes = 0; for (i = 1; i < EXIT_STATS_NUM_PORTS; i++) { total_bytes += exit_bytes_read[i]; total_bytes += exit_bytes_written[i]; } + threshold_bytes = total_bytes / EXIT_STATS_THRESHOLD_RECIPROCAL; /* kibibytes-(read|written) port=kibibytes,.. */ for (r = 0; r < 2; r++) { @@ -1401,11 +1402,9 @@ write_exit_stats(time_t when) other_bytes = 0; for (i = 1; i < EXIT_STATS_NUM_PORTS; i++) { if (b[i] > 0) { - if (exit_bytes_read[i] + exit_bytes_written[i] > 0 && - (total_bytes / (exit_bytes_read[i] + exit_bytes_written[i]) - < EXIT_STATS_THRESHOLD)) { - uint64_t num = round_to_next_multiple_of(b[i], - EXIT_STATS_ROUND_UP_BYTES); + if (exit_bytes_read[i] + exit_bytes_written[i] > threshold_bytes) { + uint64_t num = round_uint64_to_next_multiple_of(b[i], + EXIT_STATS_ROUND_UP_BYTES); num /= 1024; if (fprintf(out, "%s%d="U64_FORMAT, comma++ ? "," : "", i, @@ -1415,8 +1414,8 @@ write_exit_stats(time_t when) other_bytes += b[i]; } } - other_bytes = round_to_next_multiple_of(other_bytes, - EXIT_STATS_ROUND_UP_BYTES); + other_bytes = round_uint64_to_next_multiple_of(other_bytes, + EXIT_STATS_ROUND_UP_BYTES); other_bytes /= 1024; if (fprintf(out, "%sother="U64_FORMAT"\n", comma ? "," : "", other_bytes)<0) @@ -1429,11 +1428,9 @@ write_exit_stats(time_t when) other_streams = 0; for (i = 1; i < EXIT_STATS_NUM_PORTS; i++) { if (exit_streams[i] > 0) { - if (exit_bytes_read[i] + exit_bytes_written[i] > 0 && - (total_bytes / (exit_bytes_read[i] + exit_bytes_written[i]) - < EXIT_STATS_THRESHOLD)) { - uint32_t num = round_to_next_multiple_of(exit_streams[i], - EXIT_STATS_ROUND_UP_STREAMS); + if (exit_bytes_read[i] + exit_bytes_written[i] > threshold_bytes) { + uint32_t num = round_uint32_to_next_multiple_of(exit_streams[i], + EXIT_STATS_ROUND_UP_STREAMS); if (fprintf(out, "%s%d=%u", comma++ ? "," : "", i, num)<0) goto done; @@ -1441,8 +1438,8 @@ write_exit_stats(time_t when) other_streams += exit_streams[i]; } } - other_streams = round_to_next_multiple_of(other_streams, - EXIT_STATS_ROUND_UP_STREAMS); + other_streams = round_uint32_to_next_multiple_of(other_streams, + EXIT_STATS_ROUND_UP_STREAMS); if (fprintf(out, "%sother=%u\n", comma ? "," : "", other_streams)<0) goto done; |