[dm-devel] [PATCH 3/4] dm stats: report histogram of latencies
Coly Li
colyli at gmail.com
Mon Jun 15 14:41:05 UTC 2015
在 15/6/15 下午9:06, Mikulas Patocka 写道:
> These micro optimizations would save one or two instructions, so they are
> not really needed. Also, these micro optimizations are at a code path that
> prints the statistics, not the code path that processes i/o requests.
It is not one or two instructions, it depends on how big
s->n_histogram_entries is.
Yes I agree, it is not on critical I/O path :-)
Coly
> On Sun, 14 Jun 2015, Coly Li wrote:
>
>> ? 15/6/10 ??5:22, Mikulas Patocka ??:
>>> This patch adds an option to dm statistics to collect and report the
>>> histogram of latencies.
>>>
>>> Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
>>>
>>> ---
>>> Documentation/device-mapper/statistics.txt | 21 ++-
>>> drivers/md/dm-stats.c | 201 +++++++++++++++++++++++++----
>>> 2 files changed, 196 insertions(+), 26 deletions(-)
>>>
>>> Index: linux-4.1-rc7/drivers/md/dm-stats.c
>>> ===================================================================
>>> --- linux-4.1-rc7.orig/drivers/md/dm-stats.c 2015-06-08 16:38:43.000000000 +0200
>>> +++ linux-4.1-rc7/drivers/md/dm-stats.c 2015-06-08 17:02:01.000000000 +0200
>>> @@ -29,6 +29,7 @@ struct dm_stat_percpu {
>>> unsigned long long io_ticks[2];
>>> unsigned long long io_ticks_total;
>>> unsigned long long time_in_queue;
>>> + unsigned long long *histogram;
>>> };
>>>
>>> struct dm_stat_shared {
>> [snip]
>>> @@ -619,6 +700,11 @@ static void __dm_stat_init_temporary_per
>>> shared->tmp.io_ticks[WRITE] += ACCESS_ONCE(p->io_ticks[WRITE]);
>>> shared->tmp.io_ticks_total += ACCESS_ONCE(p->io_ticks_total);
>>> shared->tmp.time_in_queue += ACCESS_ONCE(p->time_in_queue);
>>> + if (s->n_histogram_entries) {
>>> + unsigned i;
>>> + for (i = 0; i < s->n_histogram_entries + 1; i++)
>>> + shared->tmp.histogram[i] += ACCESS_ONCE(p->histogram[i]);
>> s->n_histogram_entries + 1 in for() looping will be calculated many times, maybe this way could be better,
>>
>> + if (s->n_histogram_entries) {
>> + unsigned i, j;
>> + j = s->n_histogram_entries + 1;
>> + for (i = 0; i < j; i++)
>> + shared->tmp.histogram[i] += ACCESS_ONCE(p->histogram[i]);
>>
>>
[snip]
More information about the dm-devel
mailing list