diff options
author | Julius Bünger <buenger@mytum.de> | 2018-06-08 10:11:32 +0200 |
---|---|---|
committer | Julius Bünger <buenger@mytum.de> | 2018-06-08 10:11:32 +0200 |
commit | 8900fb0e0101cd722e392ffb9aa36245c22ea770 (patch) | |
tree | 2c2472e20a69767a38389fbf9ae3500d339c3500 /src | |
parent | 365e3bcae1e79c4f71f68e0d1d41172d86c51e76 (diff) | |
download | gnunet-8900fb0e0101cd722e392ffb9aa36245c22ea770.tar.gz gnunet-8900fb0e0101cd722e392ffb9aa36245c22ea770.zip |
rps profiler: rewrite statistics handling
Diffstat (limited to 'src')
-rw-r--r-- | src/rps/gnunet-rps-profiler.c | 519 |
1 files changed, 241 insertions, 278 deletions
diff --git a/src/rps/gnunet-rps-profiler.c b/src/rps/gnunet-rps-profiler.c index 8450ee65d..5ef42187f 100644 --- a/src/rps/gnunet-rps-profiler.c +++ b/src/rps/gnunet-rps-profiler.c | |||
@@ -34,6 +34,8 @@ | |||
34 | #include <inttypes.h> | 34 | #include <inttypes.h> |
35 | 35 | ||
36 | 36 | ||
37 | #define BIT(n) (1 << (n)) | ||
38 | |||
37 | /** | 39 | /** |
38 | * How many peers do we start? | 40 | * How many peers do we start? |
39 | */ | 41 | */ |
@@ -67,6 +69,163 @@ static unsigned int mal_type = 0; | |||
67 | */ | 69 | */ |
68 | static struct GNUNET_TESTBED_Peer **testbed_peers; | 70 | static struct GNUNET_TESTBED_Peer **testbed_peers; |
69 | 71 | ||
72 | enum STAT_TYPE | ||
73 | { | ||
74 | STAT_TYPE_ROUNDS, /* 0 */ | ||
75 | STAT_TYPE_BLOCKS, /* 1 */ | ||
76 | STAT_TYPE_BLOCKS_MANY_PUSH, /* 2 */ | ||
77 | STAT_TYPE_BLOCKS_NO_PUSH, /* 3 */ | ||
78 | STAT_TYPE_BLOCKS_NO_PULL, /* 4 */ | ||
79 | STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL, /* 5 */ | ||
80 | STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL, /* 6 */ | ||
81 | STAT_TYPE_ISSUED_PUSH_SEND, /* 7 */ | ||
82 | STAT_TYPE_ISSUED_PULL_REQ, /* 8 */ | ||
83 | STAT_TYPE_ISSUED_PULL_REP, /* 9 */ | ||
84 | STAT_TYPE_SENT_PUSH_SEND, /* 10 */ | ||
85 | STAT_TYPE_SENT_PULL_REQ, /* 11 */ | ||
86 | STAT_TYPE_SENT_PULL_REP, /* 12 */ | ||
87 | STAT_TYPE_RECV_PUSH_SEND, /* 13 */ | ||
88 | STAT_TYPE_RECV_PULL_REQ, /* 14 */ | ||
89 | STAT_TYPE_RECV_PULL_REP, /* 15 */ | ||
90 | STAT_TYPE_MAX, /* 16 */ | ||
91 | }; | ||
92 | |||
93 | struct STATcls | ||
94 | { | ||
95 | struct RPSPeer *rps_peer; | ||
96 | enum STAT_TYPE stat_type; | ||
97 | }; | ||
98 | |||
99 | |||
100 | /** | ||
101 | * @brief Converts string representation to the corresponding #STAT_TYPE enum. | ||
102 | * | ||
103 | * @param stat_str string representation of statistics specifier | ||
104 | * | ||
105 | * @return corresponding enum | ||
106 | */ | ||
107 | enum STAT_TYPE stat_str_2_type (const char *stat_str) | ||
108 | { | ||
109 | if (0 == strncmp ("# rounds blocked - no pull replies", stat_str, strlen ("# rounds blocked - no pull replies"))) | ||
110 | { | ||
111 | return STAT_TYPE_BLOCKS_NO_PULL; | ||
112 | } | ||
113 | else if (0 == strncmp ("# rounds blocked - too many pushes, no pull replies", stat_str, strlen ("# rounds blocked - too many pushes, no pull replies"))) | ||
114 | { | ||
115 | return STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL; | ||
116 | } | ||
117 | else if (0 == strncmp ("# rounds blocked - too many pushes", stat_str, strlen ("# rounds blocked - too many pushes"))) | ||
118 | { | ||
119 | return STAT_TYPE_BLOCKS_MANY_PUSH; | ||
120 | } | ||
121 | else if (0 == strncmp ("# rounds blocked - no pushes, no pull replies", stat_str, strlen ("# rounds blocked - no pushes, no pull replies"))) | ||
122 | { | ||
123 | return STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL; | ||
124 | } | ||
125 | else if (0 == strncmp ("# rounds blocked - no pushes", stat_str, strlen ("# rounds blocked - no pushes"))) | ||
126 | { | ||
127 | return STAT_TYPE_BLOCKS_NO_PUSH; | ||
128 | } | ||
129 | else if (0 == strncmp ("# rounds blocked", stat_str, strlen ("# rounds blocked"))) | ||
130 | { | ||
131 | return STAT_TYPE_BLOCKS; | ||
132 | } | ||
133 | else if (0 == strncmp ("# rounds", stat_str, strlen ("# rounds"))) | ||
134 | { | ||
135 | return STAT_TYPE_ROUNDS; | ||
136 | } | ||
137 | else if (0 == strncmp ("# push send issued", stat_str, strlen ("# push send issued"))) | ||
138 | { | ||
139 | return STAT_TYPE_ISSUED_PUSH_SEND; | ||
140 | } | ||
141 | else if (0 == strncmp ("# pull request send issued", stat_str, strlen ("# pull request send issued"))) | ||
142 | { | ||
143 | return STAT_TYPE_ISSUED_PULL_REQ; | ||
144 | } | ||
145 | else if (0 == strncmp ("# pull reply send issued", stat_str, strlen ("# pull reply send issued"))) | ||
146 | { | ||
147 | return STAT_TYPE_ISSUED_PULL_REP; | ||
148 | } | ||
149 | else if (0 == strncmp ("# pushes sent", stat_str, strlen ("# pushes sent"))) | ||
150 | { | ||
151 | return STAT_TYPE_SENT_PUSH_SEND; | ||
152 | } | ||
153 | else if (0 == strncmp ("# pull requests sent", stat_str, strlen ("# pull requests sent"))) | ||
154 | { | ||
155 | return STAT_TYPE_SENT_PULL_REQ; | ||
156 | } | ||
157 | else if (0 == strncmp ("# pull replys sent", stat_str, strlen ("# pull replys sent"))) | ||
158 | { | ||
159 | return STAT_TYPE_SENT_PULL_REP; | ||
160 | } | ||
161 | else if (0 == strncmp ("# push message received", stat_str, strlen ("# push message received"))) | ||
162 | { | ||
163 | return STAT_TYPE_RECV_PUSH_SEND; | ||
164 | } | ||
165 | else if (0 == strncmp ("# pull request message received", stat_str, strlen ("# pull request message received"))) | ||
166 | { | ||
167 | return STAT_TYPE_RECV_PULL_REQ; | ||
168 | } | ||
169 | else if (0 == strncmp ("# pull reply messages received", stat_str, strlen ("# pull reply messages received"))) | ||
170 | { | ||
171 | return STAT_TYPE_RECV_PULL_REP; | ||
172 | } | ||
173 | return STAT_TYPE_MAX; | ||
174 | } | ||
175 | |||
176 | |||
177 | /** | ||
178 | * @brief Converts #STAT_TYPE enum to the equivalent string representation that | ||
179 | * is stored with the statistics service. | ||
180 | * | ||
181 | * @param stat_type #STAT_TYPE enum | ||
182 | * | ||
183 | * @return string representation that matches statistics value | ||
184 | */ | ||
185 | char* stat_type_2_str (enum STAT_TYPE stat_type) | ||
186 | { | ||
187 | switch (stat_type) | ||
188 | { | ||
189 | case STAT_TYPE_ROUNDS: | ||
190 | return "# rounds"; | ||
191 | case STAT_TYPE_BLOCKS: | ||
192 | return "# rounds blocked"; | ||
193 | case STAT_TYPE_BLOCKS_MANY_PUSH: | ||
194 | return "# rounds blocked - too many pushes"; | ||
195 | case STAT_TYPE_BLOCKS_NO_PUSH: | ||
196 | return "# rounds blocked - no pushes"; | ||
197 | case STAT_TYPE_BLOCKS_NO_PULL: | ||
198 | return "# rounds blocked - no pull replies"; | ||
199 | case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL: | ||
200 | return "# rounds blocked - too many pushes, no pull replies"; | ||
201 | case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL: | ||
202 | return "# rounds blocked - no pushes, no pull replies"; | ||
203 | case STAT_TYPE_ISSUED_PUSH_SEND: | ||
204 | return "# push send issued"; | ||
205 | case STAT_TYPE_ISSUED_PULL_REQ: | ||
206 | return "# pull request send issued"; | ||
207 | case STAT_TYPE_ISSUED_PULL_REP: | ||
208 | return "# pull reply send issued"; | ||
209 | case STAT_TYPE_SENT_PUSH_SEND: | ||
210 | return "# pushes sent"; | ||
211 | case STAT_TYPE_SENT_PULL_REQ: | ||
212 | return "# pull requests sent"; | ||
213 | case STAT_TYPE_SENT_PULL_REP: | ||
214 | return "# pull replys sent"; | ||
215 | case STAT_TYPE_RECV_PUSH_SEND: | ||
216 | return "# push message received"; | ||
217 | case STAT_TYPE_RECV_PULL_REQ: | ||
218 | return "# pull request message received"; | ||
219 | case STAT_TYPE_RECV_PULL_REP: | ||
220 | return "# pull reply messages received"; | ||
221 | case STAT_TYPE_MAX: | ||
222 | default: | ||
223 | return "ERROR"; | ||
224 | ; | ||
225 | } | ||
226 | } | ||
227 | |||
228 | |||
70 | /** | 229 | /** |
71 | * @brief Indicates whether peer should go off- or online | 230 | * @brief Indicates whether peer should go off- or online |
72 | */ | 231 | */ |
@@ -287,52 +446,9 @@ struct RPSPeer | |||
287 | /** | 446 | /** |
288 | * @brief statistics values | 447 | * @brief statistics values |
289 | */ | 448 | */ |
290 | uint64_t num_rounds; | 449 | uint64_t stats[STAT_TYPE_MAX]; |
291 | uint64_t num_blocks; | ||
292 | uint64_t num_blocks_many_push; | ||
293 | uint64_t num_blocks_no_push; | ||
294 | uint64_t num_blocks_no_pull; | ||
295 | uint64_t num_blocks_many_push_no_pull; | ||
296 | uint64_t num_blocks_no_push_no_pull; | ||
297 | uint64_t num_issued_push; | ||
298 | uint64_t num_issued_pull_req; | ||
299 | uint64_t num_issued_pull_rep; | ||
300 | uint64_t num_sent_push; | ||
301 | uint64_t num_sent_pull_req; | ||
302 | uint64_t num_sent_pull_rep; | ||
303 | uint64_t num_recv_push; | ||
304 | uint64_t num_recv_pull_req; | ||
305 | uint64_t num_recv_pull_rep; | ||
306 | }; | 450 | }; |
307 | 451 | ||
308 | enum STAT_TYPE | ||
309 | { | ||
310 | STAT_TYPE_ROUNDS = 0x1, /* 1 */ | ||
311 | STAT_TYPE_BLOCKS = 0x2, /* 2 */ | ||
312 | STAT_TYPE_BLOCKS_MANY_PUSH = 0x4, /* 3 */ | ||
313 | STAT_TYPE_BLOCKS_NO_PUSH = 0x8, /* 4 */ | ||
314 | STAT_TYPE_BLOCKS_NO_PULL = 0x10, /* 5 */ | ||
315 | STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL = 0x20, /* 6 */ | ||
316 | STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL = 0x40, /* 7 */ | ||
317 | STAT_TYPE_ISSUED_PUSH_SEND = 0x80, /* 8 */ | ||
318 | STAT_TYPE_ISSUED_PULL_REQ = 0x100, /* 9 */ | ||
319 | STAT_TYPE_ISSUED_PULL_REP = 0x200, /* 10 */ | ||
320 | STAT_TYPE_SENT_PUSH_SEND = 0x400, /* 11 */ | ||
321 | STAT_TYPE_SENT_PULL_REQ = 0x800, /* 12 */ | ||
322 | STAT_TYPE_SENT_PULL_REP = 0x1000, /* 13 */ | ||
323 | STAT_TYPE_RECV_PUSH_SEND = 0x2000, /* 14 */ | ||
324 | STAT_TYPE_RECV_PULL_REQ = 0x4000, /* 15 */ | ||
325 | STAT_TYPE_RECV_PULL_REP = 0x8000, /* 16 */ | ||
326 | STAT_TYPE_MAX = 0x80000000, /* 32 */ | ||
327 | }; | ||
328 | |||
329 | struct STATcls | ||
330 | { | ||
331 | struct RPSPeer *rps_peer; | ||
332 | enum STAT_TYPE stat_type; | ||
333 | }; | ||
334 | |||
335 | |||
336 | /** | 452 | /** |
337 | * Information for all the peers. | 453 | * Information for all the peers. |
338 | */ | 454 | */ |
@@ -2100,25 +2216,9 @@ pre_profiler (struct RPSPeer *rps_peer, struct GNUNET_RPS_Handle *h) | |||
2100 | } | 2216 | } |
2101 | 2217 | ||
2102 | void write_final_stats (void){ | 2218 | void write_final_stats (void){ |
2103 | uint32_t i; | 2219 | uint64_t sums[STAT_TYPE_MAX] = { 0 }; |
2104 | uint64_t sum_rounds = 0; | ||
2105 | uint64_t sum_blocks = 0; | ||
2106 | uint64_t sum_b_mpush = 0; | ||
2107 | uint64_t sum_b_npush = 0; | ||
2108 | uint64_t sum_b_npull = 0; | ||
2109 | uint64_t sum_b_mpush_npull = 0; | ||
2110 | uint64_t sum_b_npush_npull = 0; | ||
2111 | uint64_t sum_iss_push = 0; | ||
2112 | uint64_t sum_iss_pull_req = 0; | ||
2113 | uint64_t sum_iss_pull_rep = 0; | ||
2114 | uint64_t sum_sent_push = 0; | ||
2115 | uint64_t sum_sent_pull_req = 0; | ||
2116 | uint64_t sum_sent_pull_rep = 0; | ||
2117 | uint64_t sum_recv_push = 0; | ||
2118 | uint64_t sum_recv_pull_req = 0; | ||
2119 | uint64_t sum_recv_pull_rep = 0; | ||
2120 | 2220 | ||
2121 | for (i = 0; i < num_peers; i++) | 2221 | for (uint32_t i = 0; i < num_peers; i++) |
2122 | { | 2222 | { |
2123 | to_file ("/tmp/rps/final_stats.dat", | 2223 | to_file ("/tmp/rps/final_stats.dat", |
2124 | "%" PRIu32 " " /* index */ | 2224 | "%" PRIu32 " " /* index */ |
@@ -2130,38 +2230,34 @@ void write_final_stats (void){ | |||
2130 | PRIu64 " %" PRIu64 " %" PRIu64 /* recv */, | 2230 | PRIu64 " %" PRIu64 " %" PRIu64 /* recv */, |
2131 | i, | 2231 | i, |
2132 | GNUNET_i2s (rps_peers[i].peer_id), | 2232 | GNUNET_i2s (rps_peers[i].peer_id), |
2133 | rps_peers[i].num_rounds, | 2233 | rps_peers[i].stats[STAT_TYPE_ROUNDS], |
2134 | rps_peers[i].num_blocks, | 2234 | rps_peers[i].stats[STAT_TYPE_BLOCKS], |
2135 | rps_peers[i].num_blocks_many_push, | 2235 | rps_peers[i].stats[STAT_TYPE_BLOCKS_MANY_PUSH], |
2136 | rps_peers[i].num_blocks_no_push, | 2236 | rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PUSH], |
2137 | rps_peers[i].num_blocks_no_pull, | 2237 | rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PULL], |
2138 | rps_peers[i].num_blocks_many_push_no_pull, | 2238 | rps_peers[i].stats[STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL], |
2139 | rps_peers[i].num_blocks_no_push_no_pull, | 2239 | rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL], |
2140 | rps_peers[i].num_issued_push, | 2240 | rps_peers[i].stats[STAT_TYPE_ISSUED_PUSH_SEND], |
2141 | rps_peers[i].num_issued_pull_req, | 2241 | rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REQ], |
2142 | rps_peers[i].num_issued_pull_rep, | 2242 | rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REP], |
2143 | rps_peers[i].num_sent_push, | 2243 | rps_peers[i].stats[STAT_TYPE_SENT_PUSH_SEND], |
2144 | rps_peers[i].num_sent_pull_req, | 2244 | rps_peers[i].stats[STAT_TYPE_SENT_PULL_REQ], |
2145 | rps_peers[i].num_sent_pull_rep, | 2245 | rps_peers[i].stats[STAT_TYPE_SENT_PULL_REP], |
2146 | rps_peers[i].num_recv_push, | 2246 | rps_peers[i].stats[STAT_TYPE_RECV_PUSH_SEND], |
2147 | rps_peers[i].num_recv_pull_req, | 2247 | rps_peers[i].stats[STAT_TYPE_RECV_PULL_REQ], |
2148 | rps_peers[i].num_recv_pull_rep); | 2248 | rps_peers[i].stats[STAT_TYPE_RECV_PULL_REP]); |
2149 | sum_rounds += rps_peers[i].num_rounds; | 2249 | for (uint32_t stat_type = STAT_TYPE_ROUNDS; |
2150 | sum_blocks += rps_peers[i].num_blocks; | 2250 | stat_type < STAT_TYPE_MAX; |
2151 | sum_b_mpush += rps_peers[i].num_blocks_many_push; | 2251 | stat_type++) |
2152 | sum_b_npush += rps_peers[i].num_blocks_no_push; | 2252 | { |
2153 | sum_b_npull += rps_peers[i].num_blocks_no_pull; | 2253 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
2154 | sum_b_mpush_npull += rps_peers[i].num_blocks_many_push_no_pull; | 2254 | "Add to sum (%" PRIu64 ") %" PRIu64 " of stat type %u - %s\n", |
2155 | sum_b_npush_npull += rps_peers[i].num_blocks_no_push_no_pull; | 2255 | sums[stat_type], |
2156 | sum_iss_push += rps_peers[i].num_issued_push; | 2256 | rps_peers[i].stats[stat_type], |
2157 | sum_iss_pull_req += rps_peers[i].num_issued_pull_req; | 2257 | stat_type, |
2158 | sum_iss_pull_rep += rps_peers[i].num_issued_pull_rep; | 2258 | stat_type_2_str (stat_type)); |
2159 | sum_sent_push += rps_peers[i].num_sent_push; | 2259 | sums[stat_type] += rps_peers[i].stats[stat_type]; |
2160 | sum_sent_pull_req += rps_peers[i].num_sent_pull_req; | 2260 | } |
2161 | sum_sent_pull_rep += rps_peers[i].num_sent_pull_rep; | ||
2162 | sum_recv_push += rps_peers[i].num_recv_push; | ||
2163 | sum_recv_pull_req += rps_peers[i].num_recv_pull_req; | ||
2164 | sum_recv_pull_rep += rps_peers[i].num_recv_pull_rep; | ||
2165 | } | 2261 | } |
2166 | to_file ("/tmp/rps/final_stats.dat", | 2262 | to_file ("/tmp/rps/final_stats.dat", |
2167 | "SUM %" | 2263 | "SUM %" |
@@ -2170,22 +2266,22 @@ void write_final_stats (void){ | |||
2170 | PRIu64 " %" PRIu64 " %" PRIu64 " %" /* issued */ | 2266 | PRIu64 " %" PRIu64 " %" PRIu64 " %" /* issued */ |
2171 | PRIu64 " %" PRIu64 " %" PRIu64 " %" /* sent */ | 2267 | PRIu64 " %" PRIu64 " %" PRIu64 " %" /* sent */ |
2172 | PRIu64 " %" PRIu64 " %" PRIu64 /* recv */, | 2268 | PRIu64 " %" PRIu64 " %" PRIu64 /* recv */, |
2173 | sum_rounds, | 2269 | sums[STAT_TYPE_ROUNDS], |
2174 | sum_blocks, | 2270 | sums[STAT_TYPE_BLOCKS], |
2175 | sum_b_mpush, | 2271 | sums[STAT_TYPE_BLOCKS_MANY_PUSH], |
2176 | sum_b_npush, | 2272 | sums[STAT_TYPE_BLOCKS_NO_PUSH], |
2177 | sum_b_npull, | 2273 | sums[STAT_TYPE_BLOCKS_NO_PULL], |
2178 | sum_b_mpush_npull, | 2274 | sums[STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL], |
2179 | sum_b_npush_npull, | 2275 | sums[STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL], |
2180 | sum_iss_push, | 2276 | sums[STAT_TYPE_ISSUED_PUSH_SEND], |
2181 | sum_iss_pull_req, | 2277 | sums[STAT_TYPE_ISSUED_PULL_REQ], |
2182 | sum_iss_pull_rep, | 2278 | sums[STAT_TYPE_ISSUED_PULL_REP], |
2183 | sum_sent_push, | 2279 | sums[STAT_TYPE_SENT_PUSH_SEND], |
2184 | sum_sent_pull_req, | 2280 | sums[STAT_TYPE_SENT_PULL_REQ], |
2185 | sum_sent_pull_rep, | 2281 | sums[STAT_TYPE_SENT_PULL_REP], |
2186 | sum_recv_push, | 2282 | sums[STAT_TYPE_RECV_PUSH_SEND], |
2187 | sum_recv_pull_req, | 2283 | sums[STAT_TYPE_RECV_PULL_REQ], |
2188 | sum_recv_pull_rep); | 2284 | sums[STAT_TYPE_RECV_PULL_REP]); |
2189 | } | 2285 | } |
2190 | 2286 | ||
2191 | /** | 2287 | /** |
@@ -2208,7 +2304,7 @@ post_test_shutdown_ready_cb (void *cls, | |||
2208 | if (GNUNET_OK == success) | 2304 | if (GNUNET_OK == success) |
2209 | { | 2305 | { |
2210 | /* set flag that we we got the value */ | 2306 | /* set flag that we we got the value */ |
2211 | rps_peer->stat_collected_flags |= stat_cls->stat_type; | 2307 | rps_peer->stat_collected_flags |= BIT(stat_cls->stat_type); |
2212 | } else { | 2308 | } else { |
2213 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 2309 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
2214 | "Peer %u did not receive statistics value\n", | 2310 | "Peer %u did not receive statistics value\n", |
@@ -2237,134 +2333,6 @@ post_test_shutdown_ready_cb (void *cls, | |||
2237 | } | 2333 | } |
2238 | 2334 | ||
2239 | /** | 2335 | /** |
2240 | * @brief Converts string representation to the corresponding #STAT_TYPE enum. | ||
2241 | * | ||
2242 | * @param stat_str string representation of statistics specifier | ||
2243 | * | ||
2244 | * @return corresponding enum | ||
2245 | */ | ||
2246 | enum STAT_TYPE stat_str_2_type (const char *stat_str) | ||
2247 | { | ||
2248 | if (0 == strncmp ("# rounds blocked - no pull replies", stat_str, strlen ("# rounds blocked - no pull replies"))) | ||
2249 | { | ||
2250 | return STAT_TYPE_BLOCKS_NO_PULL; | ||
2251 | } | ||
2252 | else if (0 == strncmp ("# rounds blocked - too many pushes, no pull replies", stat_str, strlen ("# rounds blocked - too many pushes, no pull replies"))) | ||
2253 | { | ||
2254 | return STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL; | ||
2255 | } | ||
2256 | else if (0 == strncmp ("# rounds blocked - too many pushes", stat_str, strlen ("# rounds blocked - too many pushes"))) | ||
2257 | { | ||
2258 | return STAT_TYPE_BLOCKS_MANY_PUSH; | ||
2259 | } | ||
2260 | else if (0 == strncmp ("# rounds blocked - no pushes, no pull replies", stat_str, strlen ("# rounds blocked - no pushes, no pull replies"))) | ||
2261 | { | ||
2262 | return STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL; | ||
2263 | } | ||
2264 | else if (0 == strncmp ("# rounds blocked - no pushes", stat_str, strlen ("# rounds blocked - no pushes"))) | ||
2265 | { | ||
2266 | return STAT_TYPE_BLOCKS_NO_PUSH; | ||
2267 | } | ||
2268 | else if (0 == strncmp ("# rounds blocked", stat_str, strlen ("# rounds blocked"))) | ||
2269 | { | ||
2270 | return STAT_TYPE_BLOCKS; | ||
2271 | } | ||
2272 | else if (0 == strncmp ("# rounds", stat_str, strlen ("# rounds"))) | ||
2273 | { | ||
2274 | return STAT_TYPE_ROUNDS; | ||
2275 | } | ||
2276 | else if (0 == strncmp ("# push send issued", stat_str, strlen ("# push send issued"))) | ||
2277 | { | ||
2278 | return STAT_TYPE_ISSUED_PUSH_SEND; | ||
2279 | } | ||
2280 | else if (0 == strncmp ("# pull request send issued", stat_str, strlen ("# pull request send issued"))) | ||
2281 | { | ||
2282 | return STAT_TYPE_ISSUED_PULL_REQ; | ||
2283 | } | ||
2284 | else if (0 == strncmp ("# pull reply send issued", stat_str, strlen ("# pull reply send issued"))) | ||
2285 | { | ||
2286 | return STAT_TYPE_ISSUED_PULL_REP; | ||
2287 | } | ||
2288 | else if (0 == strncmp ("# pushes sent", stat_str, strlen ("# pushes sent"))) | ||
2289 | { | ||
2290 | return STAT_TYPE_SENT_PUSH_SEND; | ||
2291 | } | ||
2292 | else if (0 == strncmp ("# pull requests sent", stat_str, strlen ("# pull requests sent"))) | ||
2293 | { | ||
2294 | return STAT_TYPE_SENT_PULL_REQ; | ||
2295 | } | ||
2296 | else if (0 == strncmp ("# pull replys sent", stat_str, strlen ("# pull replys sent"))) | ||
2297 | { | ||
2298 | return STAT_TYPE_SENT_PULL_REP; | ||
2299 | } | ||
2300 | else if (0 == strncmp ("# push message received", stat_str, strlen ("# push message received"))) | ||
2301 | { | ||
2302 | return STAT_TYPE_RECV_PUSH_SEND; | ||
2303 | } | ||
2304 | else if (0 == strncmp ("# pull request message received", stat_str, strlen ("# pull request message received"))) | ||
2305 | { | ||
2306 | return STAT_TYPE_RECV_PULL_REQ; | ||
2307 | } | ||
2308 | else if (0 == strncmp ("# pull reply messages received", stat_str, strlen ("# pull reply messages received"))) | ||
2309 | { | ||
2310 | return STAT_TYPE_RECV_PULL_REP; | ||
2311 | } | ||
2312 | return STAT_TYPE_MAX; | ||
2313 | } | ||
2314 | |||
2315 | |||
2316 | /** | ||
2317 | * @brief Converts #STAT_TYPE enum to the equivalent string representation that | ||
2318 | * is stored with the statistics service. | ||
2319 | * | ||
2320 | * @param stat_type #STAT_TYPE enum | ||
2321 | * | ||
2322 | * @return string representation that matches statistics value | ||
2323 | */ | ||
2324 | char* stat_type_2_str (enum STAT_TYPE stat_type) | ||
2325 | { | ||
2326 | switch (stat_type) | ||
2327 | { | ||
2328 | case STAT_TYPE_ROUNDS: | ||
2329 | return "# rounds"; | ||
2330 | case STAT_TYPE_BLOCKS: | ||
2331 | return "# rounds blocked"; | ||
2332 | case STAT_TYPE_BLOCKS_MANY_PUSH: | ||
2333 | return "# rounds blocked - too many pushes"; | ||
2334 | case STAT_TYPE_BLOCKS_NO_PUSH: | ||
2335 | return "# rounds blocked - no pushes"; | ||
2336 | case STAT_TYPE_BLOCKS_NO_PULL: | ||
2337 | return "# rounds blocked - no pull replies"; | ||
2338 | case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL: | ||
2339 | return "# rounds blocked - too many pushes, no pull replies"; | ||
2340 | case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL: | ||
2341 | return "# rounds blocked - no pushes, no pull replies"; | ||
2342 | case STAT_TYPE_ISSUED_PUSH_SEND: | ||
2343 | return "# push send issued"; | ||
2344 | case STAT_TYPE_ISSUED_PULL_REQ: | ||
2345 | return "# pull request send issued"; | ||
2346 | case STAT_TYPE_ISSUED_PULL_REP: | ||
2347 | return "# pull reply send issued"; | ||
2348 | case STAT_TYPE_SENT_PUSH_SEND: | ||
2349 | return "# pushes sent"; | ||
2350 | case STAT_TYPE_SENT_PULL_REQ: | ||
2351 | return "# pull requests sent"; | ||
2352 | case STAT_TYPE_SENT_PULL_REP: | ||
2353 | return "# pull replys sent"; | ||
2354 | case STAT_TYPE_RECV_PUSH_SEND: | ||
2355 | return "# push message received"; | ||
2356 | case STAT_TYPE_RECV_PULL_REQ: | ||
2357 | return "# pull request message received"; | ||
2358 | case STAT_TYPE_RECV_PULL_REP: | ||
2359 | return "# pull reply messages received"; | ||
2360 | case STAT_TYPE_MAX: | ||
2361 | default: | ||
2362 | return "ERROR"; | ||
2363 | ; | ||
2364 | } | ||
2365 | } | ||
2366 | |||
2367 | /** | ||
2368 | * Callback function to process statistic values. | 2336 | * Callback function to process statistic values. |
2369 | * | 2337 | * |
2370 | * @param cls closure | 2338 | * @param cls closure |
@@ -2394,52 +2362,52 @@ stat_iterator (void *cls, | |||
2394 | switch (stat_str_2_type (name)) | 2362 | switch (stat_str_2_type (name)) |
2395 | { | 2363 | { |
2396 | case STAT_TYPE_ROUNDS: | 2364 | case STAT_TYPE_ROUNDS: |
2397 | rps_peer->num_rounds = value; | 2365 | rps_peer->stats[STAT_TYPE_ROUNDS] = value; |
2398 | break; | 2366 | break; |
2399 | case STAT_TYPE_BLOCKS: | 2367 | case STAT_TYPE_BLOCKS: |
2400 | rps_peer->num_blocks = value; | 2368 | rps_peer->stats[STAT_TYPE_BLOCKS] = value; |
2401 | break; | 2369 | break; |
2402 | case STAT_TYPE_BLOCKS_MANY_PUSH: | 2370 | case STAT_TYPE_BLOCKS_MANY_PUSH: |
2403 | rps_peer->num_blocks_many_push = value; | 2371 | rps_peer->stats[STAT_TYPE_BLOCKS_MANY_PUSH] = value; |
2404 | break; | 2372 | break; |
2405 | case STAT_TYPE_BLOCKS_NO_PUSH: | 2373 | case STAT_TYPE_BLOCKS_NO_PUSH: |
2406 | rps_peer->num_blocks_no_push = value; | 2374 | rps_peer->stats[STAT_TYPE_BLOCKS_NO_PUSH] = value; |
2407 | break; | 2375 | break; |
2408 | case STAT_TYPE_BLOCKS_NO_PULL: | 2376 | case STAT_TYPE_BLOCKS_NO_PULL: |
2409 | rps_peer->num_blocks_no_pull = value; | 2377 | rps_peer->stats[STAT_TYPE_BLOCKS_NO_PULL] = value; |
2410 | break; | 2378 | break; |
2411 | case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL: | 2379 | case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL: |
2412 | rps_peer->num_blocks_many_push_no_pull = value; | 2380 | rps_peer->stats[STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL] = value; |
2413 | break; | 2381 | break; |
2414 | case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL: | 2382 | case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL: |
2415 | rps_peer->num_blocks_no_push_no_pull = value; | 2383 | rps_peer->stats[STAT_TYPE_BLOCKS] = value; |
2416 | break; | 2384 | break; |
2417 | case STAT_TYPE_ISSUED_PUSH_SEND: | 2385 | case STAT_TYPE_ISSUED_PUSH_SEND: |
2418 | rps_peer->num_issued_push = value; | 2386 | rps_peer->stats[STAT_TYPE_ISSUED_PUSH_SEND] = value; |
2419 | break; | 2387 | break; |
2420 | case STAT_TYPE_ISSUED_PULL_REQ: | 2388 | case STAT_TYPE_ISSUED_PULL_REQ: |
2421 | rps_peer->num_issued_pull_req = value; | 2389 | rps_peer->stats[STAT_TYPE_ISSUED_PULL_REQ] = value; |
2422 | break; | 2390 | break; |
2423 | case STAT_TYPE_ISSUED_PULL_REP: | 2391 | case STAT_TYPE_ISSUED_PULL_REP: |
2424 | rps_peer->num_issued_pull_rep = value; | 2392 | rps_peer->stats[STAT_TYPE_ISSUED_PULL_REP] = value; |
2425 | break; | 2393 | break; |
2426 | case STAT_TYPE_SENT_PUSH_SEND: | 2394 | case STAT_TYPE_SENT_PUSH_SEND: |
2427 | rps_peer->num_sent_push = value; | 2395 | rps_peer->stats[STAT_TYPE_SENT_PUSH_SEND] = value; |
2428 | break; | 2396 | break; |
2429 | case STAT_TYPE_SENT_PULL_REQ: | 2397 | case STAT_TYPE_SENT_PULL_REQ: |
2430 | rps_peer->num_sent_pull_req = value; | 2398 | rps_peer->stats[STAT_TYPE_SENT_PULL_REQ] = value; |
2431 | break; | 2399 | break; |
2432 | case STAT_TYPE_SENT_PULL_REP: | 2400 | case STAT_TYPE_SENT_PULL_REP: |
2433 | rps_peer->num_sent_pull_rep = value; | 2401 | rps_peer->stats[STAT_TYPE_SENT_PULL_REP] = value; |
2434 | break; | 2402 | break; |
2435 | case STAT_TYPE_RECV_PUSH_SEND: | 2403 | case STAT_TYPE_RECV_PUSH_SEND: |
2436 | rps_peer->num_recv_push = value; | 2404 | rps_peer->stats[STAT_TYPE_RECV_PUSH_SEND] = value; |
2437 | break; | 2405 | break; |
2438 | case STAT_TYPE_RECV_PULL_REQ: | 2406 | case STAT_TYPE_RECV_PULL_REQ: |
2439 | rps_peer->num_recv_pull_req = value; | 2407 | rps_peer->stats[STAT_TYPE_RECV_PULL_REQ] = value; |
2440 | break; | 2408 | break; |
2441 | case STAT_TYPE_RECV_PULL_REP: | 2409 | case STAT_TYPE_RECV_PULL_REP: |
2442 | rps_peer->num_recv_pull_rep = value; | 2410 | rps_peer->stats[STAT_TYPE_RECV_PULL_REP] = value; |
2443 | break; | 2411 | break; |
2444 | case STAT_TYPE_MAX: | 2412 | case STAT_TYPE_MAX: |
2445 | default: | 2413 | default: |
@@ -2466,9 +2434,9 @@ void post_profiler (struct RPSPeer *rps_peer) | |||
2466 | uint32_t stat_type; | 2434 | uint32_t stat_type; |
2467 | for (stat_type = STAT_TYPE_ROUNDS; | 2435 | for (stat_type = STAT_TYPE_ROUNDS; |
2468 | stat_type < STAT_TYPE_MAX; | 2436 | stat_type < STAT_TYPE_MAX; |
2469 | stat_type = stat_type <<1) | 2437 | stat_type++) |
2470 | { | 2438 | { |
2471 | if (stat_type & cur_test_run.stat_collect_flags) | 2439 | if (BIT(stat_type) & cur_test_run.stat_collect_flags) |
2472 | { | 2440 | { |
2473 | stat_cls = GNUNET_malloc (sizeof (struct STATcls)); | 2441 | stat_cls = GNUNET_malloc (sizeof (struct STATcls)); |
2474 | stat_cls->rps_peer = rps_peer; | 2442 | stat_cls->rps_peer = rps_peer; |
@@ -2634,22 +2602,22 @@ run (void *cls, | |||
2634 | cur_test_run.have_churn = HAVE_NO_CHURN; | 2602 | cur_test_run.have_churn = HAVE_NO_CHURN; |
2635 | cur_test_run.have_quick_quit = HAVE_NO_QUICK_QUIT; | 2603 | cur_test_run.have_quick_quit = HAVE_NO_QUICK_QUIT; |
2636 | cur_test_run.have_collect_statistics = COLLECT_STATISTICS; | 2604 | cur_test_run.have_collect_statistics = COLLECT_STATISTICS; |
2637 | cur_test_run.stat_collect_flags = STAT_TYPE_ROUNDS | | 2605 | cur_test_run.stat_collect_flags = BIT(STAT_TYPE_ROUNDS) | |
2638 | STAT_TYPE_BLOCKS | | 2606 | BIT(STAT_TYPE_BLOCKS) | |
2639 | STAT_TYPE_BLOCKS_MANY_PUSH | | 2607 | BIT(STAT_TYPE_BLOCKS_MANY_PUSH) | |
2640 | STAT_TYPE_BLOCKS_NO_PUSH | | 2608 | BIT(STAT_TYPE_BLOCKS_NO_PUSH) | |
2641 | STAT_TYPE_BLOCKS_NO_PULL | | 2609 | BIT(STAT_TYPE_BLOCKS_NO_PULL) | |
2642 | STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL | | 2610 | BIT(STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL) | |
2643 | STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL | | 2611 | BIT(STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL) | |
2644 | STAT_TYPE_ISSUED_PUSH_SEND | | 2612 | BIT(STAT_TYPE_ISSUED_PUSH_SEND) | |
2645 | STAT_TYPE_ISSUED_PULL_REQ | | 2613 | BIT(STAT_TYPE_ISSUED_PULL_REQ) | |
2646 | STAT_TYPE_ISSUED_PULL_REP | | 2614 | BIT(STAT_TYPE_ISSUED_PULL_REP) | |
2647 | STAT_TYPE_SENT_PUSH_SEND | | 2615 | BIT(STAT_TYPE_SENT_PUSH_SEND) | |
2648 | STAT_TYPE_SENT_PULL_REQ | | 2616 | BIT(STAT_TYPE_SENT_PULL_REQ) | |
2649 | STAT_TYPE_SENT_PULL_REP | | 2617 | BIT(STAT_TYPE_SENT_PULL_REP) | |
2650 | STAT_TYPE_RECV_PUSH_SEND | | 2618 | BIT(STAT_TYPE_RECV_PUSH_SEND) | |
2651 | STAT_TYPE_RECV_PULL_REQ | | 2619 | BIT(STAT_TYPE_RECV_PULL_REQ) | |
2652 | STAT_TYPE_RECV_PULL_REP; | 2620 | BIT(STAT_TYPE_RECV_PULL_REP); |
2653 | cur_test_run.have_collect_view = COLLECT_VIEW; | 2621 | cur_test_run.have_collect_view = COLLECT_VIEW; |
2654 | timeout_s = 300; | 2622 | timeout_s = 300; |
2655 | 2623 | ||
@@ -2672,11 +2640,6 @@ run (void *cls, | |||
2672 | ok = 1; | 2640 | ok = 1; |
2673 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 2641 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
2674 | "before _run()\n"); | 2642 | "before _run()\n"); |
2675 | //ret_value = GNUNET_TESTBED_test_run (cur_test_run.name, | ||
2676 | // "test_rps.conf", | ||
2677 | // num_peers, | ||
2678 | // 0, NULL, NULL, | ||
2679 | // &test_run, NULL); | ||
2680 | GNUNET_TESTBED_run (NULL, | 2643 | GNUNET_TESTBED_run (NULL, |
2681 | cfg, | 2644 | cfg, |
2682 | num_peers, | 2645 | num_peers, |