From: Frank Rowand <frank.rowand@am.sony.com>
To: Bhavesh Davda <bhavesh@vmware.com>, <williams@redhat.com>,
<jkacur@redhat.com>
Cc: "Rowand, Frank" <Frank_Rowand@sonyusa.com>,
"linux-rt-users@vger.kernel.org" <linux-rt-users@vger.kernel.org>,
Garrett Smith <garrett@vmware.com>,
Lenin Singaravelu <lsingara@vmware.com>
Subject: Re: [PATCH] cyclictest histogram overflow instance tracking
Date: Mon, 15 Oct 2012 11:11:01 -0700 [thread overview]
Message-ID: <507C51B5.2060505@am.sony.com> (raw)
In-Reply-To: <6B64752A-B20A-4C14-A402-5859EF84D02B@vmware.com>
On 10/15/12 09:38, Bhavesh Davda wrote:
> Hello Frank,
>
> Friendly ping, to make sure this doesn't fall through the cracks.
You need to ping Clark Williams or John Kacur (not sure which...).
>
> Thanks
>
> - Bhavesh
>
> On Oct 11, 2012, at 1:59 PM, Bhavesh Davda wrote:
>
>> Thanks for the review, Frank.
>>
>> On Oct 11, 2012, at 12:57 PM, Frank Rowand wrote:
>>> Nice idea…
>> Thanks
>>
>>> Suggest:
>>> printf("# Histogram Overflows at cycle number:");
>>>
>> Done
>>
>>>> - printf(" %05lu", par[j]->stats->hist_overflow);
>>>> + printf(" %05lu", par[j]->stats->hist_overflow);
>>>
>>> Am I blind, or is that a whitespace change? (The latest version I have does not seem
>>> to have any white space issues in that line.)
>>>
>> Turns out I had removed extraneous whitespace. My vim settings allow me to see extraneous whitespaces in red, so I get annoyed by them and can fix them up. So I've removed a few more in the revised diffs (sorry!)
>>
>>> Suggest:
>>>
>>> + printf("# thread %d:", j);
>>>
>> Done
>>
>>> Nit: You don't need stats->outliers_overflow. You can calculate it from
>>> stats->hist_overflow - stats->num_outliers:
>>>
>> Nice catch! I've removed outliers_overflow now.
>>
>>
>> From: Bhavesh Davda <bhavesh@vmware.com>
>>
>> Add feature to cyclictest histogram mode to track cycle counts every time a
>> sample overflows the histogram limit. This should help identify if there is a
>> timing pattern to jitters in cyclictest runs.
>>
>> Example output (with -h 10):
>> ...
>> Histogram Overflows: 00000 00253 00000 00005 00000 00024 00003 00005
>> Histogram Overflow at cycle number:
>> Thread 0:
>> Thread 1: 00023 00028 00337 00338 00339 00340 00341 00342 00343 00344 # 00243 others
>> Thread 2:
>> Thread 3: 10486 10487 10488 10489 10490
>> Thread 4:
>> Thread 5: 00002 00004 00008 00012 00178 10458 10459 10460 10461 10462 # 00014 others
>> Thread 6: 05954 08954 29955
>> Thread 7: 20536 20537 20538 20539 20540
>> ...
>>
>> Signed-off-by: Bhavesh Davda <bhavesh@vmware.com>
>> ---
>> src/cyclictest/cyclictest.c | 38 +++++++++++++++++++++++++++++---------
>> 1 files changed, 29 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
>> index 731b4bd..dc985de 100644
>> --- a/src/cyclictest/cyclictest.c
>> +++ b/src/cyclictest/cyclictest.c
>> @@ -147,6 +147,7 @@ struct thread_stat {
>> double avg;
>> long *values;
>> long *hist_array;
>> + unsigned long *outliers;
>> pthread_t thread;
>> int threadstarted;
>> int tid;
>> @@ -154,6 +155,7 @@ struct thread_stat {
>> long redmax;
>> long cycleofmax;
>> long hist_overflow;
>> + long num_outliers;
>> };
>>
>> static int shutdown;
>> @@ -756,8 +758,11 @@ void *timerthread(void *param)
>>
>> /* Update the histogram */
>> if (histogram) {
>> - if (diff >= histogram)
>> + if (diff >= histogram) {
>> stat->hist_overflow++;
>> + if (stat->num_outliers < histogram)
>> + stat->outliers[stat->num_outliers++] = stat->cycles - 1;
>> + }
>> else
>> stat->hist_array[diff]++;
>> }
>> @@ -811,7 +816,7 @@ static void display_help(int error)
>> if (kernvar(O_RDONLY, "available_tracers", tracers, sizeof(tracers)))
>> strcpy(tracers, "none");
>> }
>> -
>> +
>> printf("cyclictest V %1.2f\n", VERSION_STRING);
>> printf("Usage:\n"
>> "cyclictest <options>\n\n"
>> @@ -1188,7 +1193,7 @@ static int check_kernel(void)
>> kv = KV_30;
>> strcpy(functiontracer, "function");
>> strcpy(traceroptions, "trace_options");
>> -
>> +
>> } else
>> kv = KV_NOT_SUPPORTED;
>>
>> @@ -1226,7 +1231,7 @@ static void print_tids(struct thread_param *par[], int nthreads)
>>
>> static void print_hist(struct thread_param *par[], int nthreads)
>> {
>> - int i, j;
>> + int i, j, k;
>> unsigned long long int log_entries[nthreads+1];
>> unsigned long maxmax, alloverflows;
>>
>> @@ -1270,7 +1275,7 @@ static void print_hist(struct thread_param *par[], int nthreads)
>> printf("# Max Latencies:");
>> maxmax = 0;
>> for (j = 0; j < nthreads; j++) {
>> - printf(" %05lu", par[j]->stats->max);
>> + printf(" %05lu", par[j]->stats->max);
>> if (par[j]->stats->max > maxmax)
>> maxmax = par[j]->stats->max;
>> }
>> @@ -1280,9 +1285,20 @@ static void print_hist(struct thread_param *par[], int nthreads)
>> printf("# Histogram Overflows:");
>> alloverflows = 0;
>> for (j = 0; j < nthreads; j++) {
>> - printf(" %05lu", par[j]->stats->hist_overflow);
>> + printf(" %05lu", par[j]->stats->hist_overflow);
>> alloverflows += par[j]->stats->hist_overflow;
>> }
>> + printf("\n");
>> + printf("# Histogram Overflow at cycle number:\n");
>> + for (j = 0; j < nthreads; j++) {
>> + printf("# Thread %d:", j);
>> + for (k = 0; k < par[j]->stats->num_outliers; k++)
>> + printf(" %05lu", par[j]->stats->outliers[k]);
>> + if (par[j]->stats->num_outliers < par[j]->stats->hist_overflow)
>> + printf(" # %05lu others", par[j]->stats->hist_overflow - par[j]->stats->num_outliers);
>> + printf("\n");
>> + }
>> +
>> if (histofall && nthreads > 1)
>> printf(" %05lu", alloverflows);
>> printf("\n");
>> @@ -1434,10 +1450,12 @@ int main(int argc, char **argv)
>> int bufsize = histogram * sizeof(long);
>>
>> stat->hist_array = threadalloc(bufsize, node);
>> - if (stat->hist_array == NULL)
>> + stat->outliers = threadalloc(bufsize, node);
>> + if (stat->hist_array == NULL || stat->outliers == NULL)
>> fatal("failed to allocate histogram of size %d on node %d\n",
>> histogram, i);
>> memset(stat->hist_array, 0, bufsize);
>> + memset(stat->outliers, 0, bufsize);
>> }
>>
>> if (verbose) {
>> @@ -1553,8 +1571,10 @@ int main(int argc, char **argv)
>>
>> if (histogram) {
>> print_hist(parameters, num_threads);
>> - for (i = 0; i < num_threads; i++)
>> + for (i = 0; i < num_threads; i++) {
>> threadfree(statistics[i]->hist_array, histogram*sizeof(long), parameters[i]->node);
>> + threadfree(statistics[i]->outliers, histogram*sizeof(long), parameters[i]->node);
>> + }
>> }
>>
>> if (tracelimit) {
>> @@ -1564,7 +1584,7 @@ int main(int argc, char **argv)
>> printf("# Break value: %lu\n", break_thread_value);
>> }
>> }
>> -
>> +
>>
>> for (i=0; i < num_threads; i++) {
>> if (!statistics[i])
>> --
>> 1.7.1
>>
>
> --
> Bhavesh Davda
> bhavesh@vmware.com
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-10-15 18:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-11 18:42 [PATCH] cyclictest histogram overflow instance tracking Bhavesh Davda
2012-10-11 19:57 ` Frank Rowand
2012-10-11 20:59 ` Bhavesh Davda
2012-10-15 16:38 ` Bhavesh Davda
2012-10-15 18:11 ` Frank Rowand [this message]
2012-10-15 18:13 ` John Kacur
2012-10-16 0:33 ` John Kacur
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=507C51B5.2060505@am.sony.com \
--to=frank.rowand@am.sony.com \
--cc=Frank_Rowand@sonyusa.com \
--cc=bhavesh@vmware.com \
--cc=garrett@vmware.com \
--cc=jkacur@redhat.com \
--cc=linux-rt-users@vger.kernel.org \
--cc=lsingara@vmware.com \
--cc=williams@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.