aboutsummaryrefslogtreecommitdiff
path: root/src/util/load.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-08-15 21:46:35 +0000
committerChristian Grothoff <christian@grothoff.org>2011-08-15 21:46:35 +0000
commit502af2167f7c218366666ca4944bd7cc54b5b19a (patch)
treea91fec5cc9769d260640bd91c6633cb9cf395524 /src/util/load.c
parent03af5a603b7cc53432249d5854cd412aa90dde0d (diff)
downloadgnunet-502af2167f7c218366666ca4944bd7cc54b5b19a.tar.gz
gnunet-502af2167f7c218366666ca4944bd7cc54b5b19a.zip
indentation
Diffstat (limited to 'src/util/load.c')
-rw-r--r--src/util/load.c79
1 files changed, 40 insertions, 39 deletions
diff --git a/src/util/load.c b/src/util/load.c
index 9bbea6c14..c7ef07295 100644
--- a/src/util/load.c
+++ b/src/util/load.c
@@ -31,7 +31,7 @@
31/** 31/**
32 * Values we track for load calculations. 32 * Values we track for load calculations.
33 */ 33 */
34struct GNUNET_LOAD_Value 34struct GNUNET_LOAD_Value
35{ 35{
36 36
37 /** 37 /**
@@ -41,7 +41,7 @@ struct GNUNET_LOAD_Value
41 41
42 /** 42 /**
43 * Last time this load value was updated by an event. 43 * Last time this load value was updated by an event.
44 */ 44 */
45 struct GNUNET_TIME_Absolute last_update; 45 struct GNUNET_TIME_Absolute last_update;
46 46
47 /** 47 /**
@@ -50,19 +50,19 @@ struct GNUNET_LOAD_Value
50 * first 4 billion requests). 50 * first 4 billion requests).
51 */ 51 */
52 uint64_t cummulative_delay; 52 uint64_t cummulative_delay;
53 53
54 /** 54 /**
55 * Sum of squares of all datastore delays ever observed (in ms). Note that 55 * Sum of squares of all datastore delays ever observed (in ms). Note that
56 * delays above 64k ms are excluded (to avoid overflow within 56 * delays above 64k ms are excluded (to avoid overflow within
57 * first 4 billion requests). 57 * first 4 billion requests).
58 */ 58 */
59 uint64_t cummulative_squared_delay; 59 uint64_t cummulative_squared_delay;
60 60
61 /** 61 /**
62 * Total number of requests included in the cummulative datastore delay values. 62 * Total number of requests included in the cummulative datastore delay values.
63 */ 63 */
64 uint64_t cummulative_request_count; 64 uint64_t cummulative_request_count;
65 65
66 /** 66 /**
67 * Current running average datastore delay. Its relation to the 67 * Current running average datastore delay. Its relation to the
68 * average datastore delay and it std. dev. (as calcualted from the 68 * average datastore delay and it std. dev. (as calcualted from the
@@ -92,23 +92,23 @@ internal_update (struct GNUNET_LOAD_Value *load)
92 if (delta.rel_value < load->autodecline.rel_value) 92 if (delta.rel_value < load->autodecline.rel_value)
93 return; 93 return;
94 if (load->autodecline.rel_value == 0) 94 if (load->autodecline.rel_value == 0)
95 { 95 {
96 load->runavg_delay = 0.0; 96 load->runavg_delay = 0.0;
97 load->load = 0; 97 load->load = 0;
98 return; 98 return;
99 } 99 }
100 n = delta.rel_value / load->autodecline.rel_value; 100 n = delta.rel_value / load->autodecline.rel_value;
101 if (n > 16) 101 if (n > 16)
102 { 102 {
103 load->runavg_delay = 0.0; 103 load->runavg_delay = 0.0;
104 load->load = 0; 104 load->load = 0;
105 return; 105 return;
106 } 106 }
107 while (n > 0) 107 while (n > 0)
108 { 108 {
109 n--; 109 n--;
110 load->runavg_delay = (load->runavg_delay * 7.0) / 8.0; 110 load->runavg_delay = (load->runavg_delay * 7.0) / 8.0;
111 } 111 }
112} 112}
113 113
114 114
@@ -140,10 +140,10 @@ GNUNET_LOAD_value_init (struct GNUNET_TIME_Relative autodecline)
140 */ 140 */
141void 141void
142GNUNET_LOAD_value_set_decline (struct GNUNET_LOAD_Value *load, 142GNUNET_LOAD_value_set_decline (struct GNUNET_LOAD_Value *load,
143 struct GNUNET_TIME_Relative autodecline) 143 struct GNUNET_TIME_Relative autodecline)
144{ 144{
145 internal_update (load); 145 internal_update (load);
146 load->autodecline = autodecline; 146 load->autodecline = autodecline;
147} 147}
148 148
149 149
@@ -164,25 +164,27 @@ calculate_load (struct GNUNET_LOAD_Value *load)
164 if (load->cummulative_request_count <= 1) 164 if (load->cummulative_request_count <= 1)
165 return; 165 return;
166 /* calcuate std dev of latency; we have for n values of "i" that: 166 /* calcuate std dev of latency; we have for n values of "i" that:
167 167 *
168 avg = (sum val_i) / n 168 * avg = (sum val_i) / n
169 stddev = (sum (val_i - avg)^2) / (n-1) 169 * stddev = (sum (val_i - avg)^2) / (n-1)
170 = (sum (val_i^2 - 2 avg val_i + avg^2) / (n-1) 170 * = (sum (val_i^2 - 2 avg val_i + avg^2) / (n-1)
171 = (sum (val_i^2) - 2 avg sum (val_i) + n * avg^2) / (n-1) 171 * = (sum (val_i^2) - 2 avg sum (val_i) + n * avg^2) / (n-1)
172 */ 172 */
173 sum_val_i = (double) load->cummulative_delay; 173 sum_val_i = (double) load->cummulative_delay;
174 n = ((double) load->cummulative_request_count); 174 n = ((double) load->cummulative_request_count);
175 nm1 = n - 1.0; 175 nm1 = n - 1.0;
176 avgdel = sum_val_i / n; 176 avgdel = sum_val_i / n;
177 stddev = (((double) load->cummulative_squared_delay) - 2.0 * avgdel * sum_val_i + n * avgdel * avgdel) / nm1; 177 stddev =
178 (((double) load->cummulative_squared_delay) - 2.0 * avgdel * sum_val_i +
179 n * avgdel * avgdel) / nm1;
178 if (stddev <= 0) 180 if (stddev <= 0)
179 stddev = 0.01; /* must have been rounding error or zero; prevent division by zero */ 181 stddev = 0.01; /* must have been rounding error or zero; prevent division by zero */
180 /* now calculate load based on how far out we are from 182 /* now calculate load based on how far out we are from
181 std dev; or if we are below average, simply assume load zero */ 183 * std dev; or if we are below average, simply assume load zero */
182 if (load->runavg_delay < avgdel) 184 if (load->runavg_delay < avgdel)
183 load->load = 0.0; 185 load->load = 0.0;
184 else 186 else
185 load->load = (load->runavg_delay - avgdel) / stddev; 187 load->load = (load->runavg_delay - avgdel) / stddev;
186} 188}
187 189
188 190
@@ -232,22 +234,21 @@ GNUNET_LOAD_get_average (struct GNUNET_LOAD_Value *load)
232 * @param data latest measurement value (for example, delay) 234 * @param data latest measurement value (for example, delay)
233 */ 235 */
234void 236void
235GNUNET_LOAD_update (struct GNUNET_LOAD_Value *load, 237GNUNET_LOAD_update (struct GNUNET_LOAD_Value *load, uint64_t data)
236 uint64_t data)
237{ 238{
238 uint32_t dv; 239 uint32_t dv;
239 240
240 internal_update (load); 241 internal_update (load);
241 load->last_update = GNUNET_TIME_absolute_get (); 242 load->last_update = GNUNET_TIME_absolute_get ();
242 if (data > 64 * 1024) 243 if (data > 64 * 1024)
243 { 244 {
244 /* very large */ 245 /* very large */
245 load->load = 100.0; 246 load->load = 100.0;
246 return; 247 return;
247 } 248 }
248 dv = (uint32_t) data; 249 dv = (uint32_t) data;
249 load->cummulative_delay += dv; 250 load->cummulative_delay += dv;
250 load->cummulative_squared_delay += dv * dv; 251 load->cummulative_squared_delay += dv * dv;
251 load->cummulative_request_count++; 252 load->cummulative_request_count++;
252 load->runavg_delay = ((load->runavg_delay * 7.0) + dv) / 8.0; 253 load->runavg_delay = ((load->runavg_delay * 7.0) + dv) / 8.0;
253} 254}