2011-05-02 14:03:34

by Fengguang Wu

[permalink] [raw]
Subject: [PATCH] getdelays: show average CPU/IO/SWAP/RECLAIM delays

I find it very handy to show the average delays in milliseconds.

Example output (on 100 concurrent dd reading sparse files):

CPU count real total virtual total delay total delay average
986 3223509952 3207643301 38863410579 39.415ms
IO count delay total delay average
0 0 0ms
SWAP count delay total delay average
0 0 0ms
RECLAIM count delay total delay average
1059 5131834899 4ms
dd: read=0, write=0, cancelled_write=0

CC: Mel Gorman <[email protected]>
Signed-off-by: Wu Fengguang <[email protected]>
---
Documentation/accounting/getdelays.c | 33 +++++++++++++++----------
1 file changed, 20 insertions(+), 13 deletions(-)

--- linux-next.orig/Documentation/accounting/getdelays.c 2011-05-02 11:33:44.000000000 +0800
+++ linux-next/Documentation/accounting/getdelays.c 2011-05-02 21:36:45.000000000 +0800
@@ -191,30 +191,37 @@ static int get_family_id(int sd)
return id;
}

+#define average_ms(t, c) (t / 1000000ULL / (c ? c : 1))
+
static void print_delayacct(struct taskstats *t)
{
- printf("\n\nCPU %15s%15s%15s%15s\n"
- " %15llu%15llu%15llu%15llu\n"
- "IO %15s%15s\n"
- " %15llu%15llu\n"
- "SWAP %15s%15s\n"
- " %15llu%15llu\n"
- "RECLAIM %12s%15s\n"
- " %15llu%15llu\n",
- "count", "real total", "virtual total", "delay total",
+ printf("\n\nCPU %15s%15s%15s%15s%15s\n"
+ " %15llu%15llu%15llu%15llu%15.3fms\n"
+ "IO %15s%15s%15s\n"
+ " %15llu%15llu%15llums\n"
+ "SWAP %15s%15s%15s\n"
+ " %15llu%15llu%15llums\n"
+ "RECLAIM %12s%15s%15s\n"
+ " %15llu%15llu%15llums\n",
+ "count", "real total", "virtual total",
+ "delay total", "delay average",
(unsigned long long)t->cpu_count,
(unsigned long long)t->cpu_run_real_total,
(unsigned long long)t->cpu_run_virtual_total,
(unsigned long long)t->cpu_delay_total,
- "count", "delay total",
+ average_ms((double)t->cpu_delay_total, t->cpu_count),
+ "count", "delay total", "delay average",
(unsigned long long)t->blkio_count,
(unsigned long long)t->blkio_delay_total,
- "count", "delay total",
+ average_ms(t->blkio_delay_total, t->blkio_count),
+ "count", "delay total", "delay average",
(unsigned long long)t->swapin_count,
(unsigned long long)t->swapin_delay_total,
- "count", "delay total",
+ average_ms(t->swapin_delay_total, t->swapin_count),
+ "count", "delay total", "delay average",
(unsigned long long)t->freepages_count,
- (unsigned long long)t->freepages_delay_total);
+ (unsigned long long)t->freepages_delay_total,
+ average_ms(t->freepages_delay_total, t->freepages_count));
}

static void task_context_switch_counts(struct taskstats *t)


2011-05-05 03:38:30

by Satoru Moriya

[permalink] [raw]
Subject: RE: [PATCH] getdelays: show average CPU/IO/SWAP/RECLAIM delays

On 05/02/2011 10:02 AM, Wu Fengguang wrote:
> I find it very handy to show the average delays in milliseconds.
>
> Example output (on 100 concurrent dd reading sparse files):
>
> CPU count real total virtual total delay total delay average
> 986 3223509952 3207643301 38863410579 39.415ms
> IO count delay total delay average
> 0 0 0ms
> SWAP count delay total delay average
> 0 0 0ms
> RECLAIM count delay total delay average
> 1059 5131834899 4ms
> dd: read=0, write=0, cancelled_write=0
>
> CC: Mel Gorman <[email protected]>
> Signed-off-by: Wu Fengguang <[email protected]>

This is useful for me.

Reviewed-by: Satoru Moriya <[email protected]>

2011-05-09 05:40:32

by KOSAKI Motohiro

[permalink] [raw]
Subject: Re: [PATCH] getdelays: show average CPU/IO/SWAP/RECLAIM delays

> I find it very handy to show the average delays in milliseconds.
>
> Example output (on 100 concurrent dd reading sparse files):
>
> CPU count real total virtual total delay total delay average
> 986 3223509952 3207643301 38863410579 39.415ms
> IO count delay total delay average
> 0 0 0ms
> SWAP count delay total delay average
> 0 0 0ms
> RECLAIM count delay total delay average
> 1059 5131834899 4ms
> dd: read=0, write=0, cancelled_write=0
>
> CC: Mel Gorman <[email protected]>
> Signed-off-by: Wu Fengguang <[email protected]>
> ---
> Documentation/accounting/getdelays.c | 33 +++++++++++++++----------
> 1 file changed, 20 insertions(+), 13 deletions(-)

Cool.
Reviewed-by: KOSAKI Motohiro <[email protected]>