diff --git a/server/core/poll.c b/server/core/poll.c index 9f39ee50b..9bd11c3fb 100644 --- a/server/core/poll.c +++ b/server/core/poll.c @@ -96,6 +96,7 @@ static int load_samples = 0; static int load_nfds = 0; static double current_avg = 0.0; static double *avg_samples = NULL; +static int *evqp_samples = NULL; static int next_sample = 0; static int n_avg_samples; @@ -196,9 +197,12 @@ int i; hktask_add("Load Average", poll_loadav, NULL, 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++) 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 plog = memlog_create("EventQueueWaitTime", ML_LONG, 10000); @@ -1055,6 +1059,7 @@ dShowThreads(DCB *dcb) int i, j, n; char *state; 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"); @@ -1063,8 +1068,12 @@ double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0; /* Average all the samples to get the 15 minute average */ for (i = 0; i < n_avg_samples; i++) + { avg15 += avg_samples[i]; + qavg15 += evqp_samples[i]; + } avg15 = avg15 / n_avg_samples; + qavg15 = qavg15 / n_avg_samples; /* Average the last third of the samples to get the 5 minute average */ n = 5 * 60 / POLL_LOAD_FREQ; @@ -1072,8 +1081,12 @@ double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0; if (i < 0) i += n_avg_samples; for (j = i; j < i + n; j++) + { avg5 += avg_samples[j % n_avg_samples]; + qavg5 += evqp_samples[j % 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 */ n = 60 / POLL_LOAD_FREQ; @@ -1081,11 +1094,18 @@ double avg1 = 0.0, avg5 = 0.0, avg15 = 0.0; if (i < 0) i += n_avg_samples; for (j = i; j < i + n; j++) + { avg1 += avg_samples[j % n_avg_samples]; + qavg1 += evqp_samples[j % 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, " "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) return; @@ -1157,6 +1177,7 @@ int new_samples, new_nfds; else current_avg = 0.0; avg_samples[next_sample] = current_avg; + evqp_samples[next_sample] = pollStats.evq_pending; next_sample++; if (next_sample >= n_avg_samples) next_sample = 0;