Addition of averages for event queue pending events

This commit is contained in:
Mark Riddoch
2014-10-03 14:35:19 +01:00
parent d5947a0922
commit 8986a8042e

View File

@ -96,6 +96,7 @@ static int load_samples = 0;
static int load_nfds = 0; static int load_nfds = 0;
static double current_avg = 0.0; static double current_avg = 0.0;
static double *avg_samples = NULL; static double *avg_samples = NULL;
static int *evqp_samples = NULL;
static int next_sample = 0; static int next_sample = 0;
static int n_avg_samples; static int n_avg_samples;
@ -196,9 +197,12 @@ int i;
hktask_add("Load Average", poll_loadav, NULL, POLL_LOAD_FREQ); hktask_add("Load Average", poll_loadav, NULL, POLL_LOAD_FREQ);
n_avg_samples = 15 * 60 / POLL_LOAD_FREQ; n_avg_samples = 15 * 60 / POLL_LOAD_FREQ;
avg_samples = (double *)malloc(sizeof(double *) * n_avg_samples); avg_samples = (double *)malloc(sizeof(double) * n_avg_samples);
for (i = 0; i < n_avg_samples; i++) for (i = 0; i < n_avg_samples; i++)
avg_samples[i] = 0.0; avg_samples[i] = 0.0;
evqp_samples = (int *)malloc(sizeof(int) * n_avg_samples);
for (i = 0; i < n_avg_samples; i++)
evqp_samples[i] = 0.0;
#if PROFILE_POLL #if PROFILE_POLL
plog = memlog_create("EventQueueWaitTime", ML_LONG, 10000); plog = memlog_create("EventQueueWaitTime", ML_LONG, 10000);
@ -1055,6 +1059,7 @@ dShowThreads(DCB *dcb)
int i, j, n; int i, j, n;
char *state; char *state;
double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0; double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0;
double qavg1 = 0.0, qavg5 = 0.0, qavg15 = 0.0;
dcb_printf(dcb, "Polling Threads.\n\n"); dcb_printf(dcb, "Polling Threads.\n\n");
@ -1063,8 +1068,12 @@ double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0;
/* Average all the samples to get the 15 minute average */ /* Average all the samples to get the 15 minute average */
for (i = 0; i < n_avg_samples; i++) for (i = 0; i < n_avg_samples; i++)
{
avg15 += avg_samples[i]; avg15 += avg_samples[i];
qavg15 += evqp_samples[i];
}
avg15 = avg15 / n_avg_samples; avg15 = avg15 / n_avg_samples;
qavg15 = qavg15 / n_avg_samples;
/* Average the last third of the samples to get the 5 minute average */ /* Average the last third of the samples to get the 5 minute average */
n = 5 * 60 / POLL_LOAD_FREQ; n = 5 * 60 / POLL_LOAD_FREQ;
@ -1072,8 +1081,12 @@ double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0;
if (i < 0) if (i < 0)
i += n_avg_samples; i += n_avg_samples;
for (j = i; j < i + n; j++) for (j = i; j < i + n; j++)
{
avg5 += avg_samples[j % n_avg_samples]; avg5 += avg_samples[j % n_avg_samples];
qavg5 += evqp_samples[j % n_avg_samples];
}
avg5 = (3 * avg5) / (n_avg_samples); avg5 = (3 * avg5) / (n_avg_samples);
qavg5 = (3 * qavg5) / (n_avg_samples);
/* Average the last 15th of the samples to get the 1 minute average */ /* Average the last 15th of the samples to get the 1 minute average */
n = 60 / POLL_LOAD_FREQ; n = 60 / POLL_LOAD_FREQ;
@ -1081,11 +1094,18 @@ double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0;
if (i < 0) if (i < 0)
i += n_avg_samples; i += n_avg_samples;
for (j = i; j < i + n; j++) for (j = i; j < i + n; j++)
{
avg1 += avg_samples[j % n_avg_samples]; avg1 += avg_samples[j % n_avg_samples];
qavg1 += evqp_samples[j % n_avg_samples];
}
avg1 = (15 * avg1) / (n_avg_samples); avg1 = (15 * avg1) / (n_avg_samples);
qavg1 = (15 * qavg1) / (n_avg_samples);
dcb_printf(dcb, "15 Minute Average: %.2f, 5 Minute Average: %.2f, " dcb_printf(dcb, "15 Minute Average: %.2f, 5 Minute Average: %.2f, "
"1 Minute Average: %.2f\n\n", avg15, avg5, avg1); "1 Minute Average: %.2f\n\n", avg15, avg5, avg1);
dcb_printf(dcb, "Pending event queue length averages:\n");
dcb_printf(dcb, "15 Minute Average: %.2f, 5 Minute Average: %.2f, "
"1 Minute Average: %.2f\n\n", qavg15, qavg5, qavg1);
if (thread_data == NULL) if (thread_data == NULL)
return; return;
@ -1157,6 +1177,7 @@ int new_samples, new_nfds;
else else
current_avg = 0.0; current_avg = 0.0;
avg_samples[next_sample] = current_avg; avg_samples[next_sample] = current_avg;
evqp_samples[next_sample] = pollStats.evq_pending;
next_sample++; next_sample++;
if (next_sample >= n_avg_samples) if (next_sample >= n_avg_samples)
next_sample = 0; next_sample = 0;