Commit eca7de7c authored by Wang Yong's avatar Wang Yong Committed by Andrew Morton

delayacct: improve the average delay precision of getdelay tool to microsecond

Improve the average delay precision of getdelay tool to microsecond.  When
using the getdelay tool, it is sometimes found that the average delay
except CPU is not 0, but display is 0, because the precison is too low. 
For example, see delay average of SWAP below when using ZRAM.

print delayacct stats ON
PID	32915
CPU             count     real total  virtual total    delay total  delay average
               339202     2793871936     9233585504        7951112          0.000ms
IO              count    delay total  delay average
                   41      419296904             10ms
SWAP            count    delay total  delay average
               242589     1045792384              0ms

This wrong display is misleading, so improve the millisecond precision of
the average delay to microsecond just like CPU.  Then user would get more
accurate information of delay time.

Link: https://lkml.kernel.org/r/202302131408087983857@zte.com.cnSigned-off-by: default avatarWang Yong <wang.yong12@zte.com.cn>
Reviewed-by: default avatarYang Yang <yang.yang29@zte.com.cn>
Cc: David Hildenbrand <david@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent aa318c48
...@@ -109,17 +109,17 @@ Get sum of delays, since system boot, for all pids with tgid 5:: ...@@ -109,17 +109,17 @@ Get sum of delays, since system boot, for all pids with tgid 5::
CPU count real total virtual total delay total delay average CPU count real total virtual total delay total delay average
8 7000000 6872122 3382277 0.423ms 8 7000000 6872122 3382277 0.423ms
IO count delay total delay average IO count delay total delay average
0 0 0ms 0 0 0.000ms
SWAP count delay total delay average SWAP count delay total delay average
0 0 0ms 0 0 0.000ms
RECLAIM count delay total delay average RECLAIM count delay total delay average
0 0 0ms 0 0 0.000ms
THRASHING count delay total delay average THRASHING count delay total delay average
0 0 0ms 0 0 0.000ms
COMPACT count delay total delay average COMPACT count delay total delay average
0 0 0ms 0 0 0.000ms
WPCOPY count delay total delay average WPCOPY count delay total delay average
0 0 0ms 0 0 0.000ms
Get IO accounting for pid 1, it works only with -p:: Get IO accounting for pid 1, it works only with -p::
......
...@@ -92,15 +92,15 @@ getdelays命令的一般格式:: ...@@ -92,15 +92,15 @@ getdelays命令的一般格式::
CPU count real total virtual total delay total delay average CPU count real total virtual total delay total delay average
8 7000000 6872122 3382277 0.423ms 8 7000000 6872122 3382277 0.423ms
IO count delay total delay average IO count delay total delay average
0 0 0ms 0 0 0.000ms
SWAP count delay total delay average SWAP count delay total delay average
0 0 0ms 0 0 0.000ms
RECLAIM count delay total delay average RECLAIM count delay total delay average
0 0 0ms 0 0 0.000ms
THRASHING count delay total delay average THRASHING count delay total delay average
0 0 0ms 0 0 0.000ms
COMPACT count delay total delay average COMPACT count delay total delay average
0 0 0ms 0 0 0.000ms
WPCOPY count delay total delay average WPCOPY count delay total delay average
0 0 0ms 0 0 0ms
......
...@@ -198,17 +198,17 @@ static void print_delayacct(struct taskstats *t) ...@@ -198,17 +198,17 @@ static void print_delayacct(struct taskstats *t)
printf("\n\nCPU %15s%15s%15s%15s%15s\n" printf("\n\nCPU %15s%15s%15s%15s%15s\n"
" %15llu%15llu%15llu%15llu%15.3fms\n" " %15llu%15llu%15llu%15llu%15.3fms\n"
"IO %15s%15s%15s\n" "IO %15s%15s%15s\n"
" %15llu%15llu%15llums\n" " %15llu%15llu%15.3fms\n"
"SWAP %15s%15s%15s\n" "SWAP %15s%15s%15s\n"
" %15llu%15llu%15llums\n" " %15llu%15llu%15.3fms\n"
"RECLAIM %12s%15s%15s\n" "RECLAIM %12s%15s%15s\n"
" %15llu%15llu%15llums\n" " %15llu%15llu%15.3fms\n"
"THRASHING%12s%15s%15s\n" "THRASHING%12s%15s%15s\n"
" %15llu%15llu%15llums\n" " %15llu%15llu%15.3fms\n"
"COMPACT %12s%15s%15s\n" "COMPACT %12s%15s%15s\n"
" %15llu%15llu%15llums\n" " %15llu%15llu%15.3fms\n"
"WPCOPY %12s%15s%15s\n" "WPCOPY %12s%15s%15s\n"
" %15llu%15llu%15llums\n", " %15llu%15llu%15.3fms\n",
"count", "real total", "virtual total", "count", "real total", "virtual total",
"delay total", "delay average", "delay total", "delay average",
(unsigned long long)t->cpu_count, (unsigned long long)t->cpu_count,
...@@ -219,27 +219,27 @@ static void print_delayacct(struct taskstats *t) ...@@ -219,27 +219,27 @@ static void print_delayacct(struct taskstats *t)
"count", "delay total", "delay average", "count", "delay total", "delay average",
(unsigned long long)t->blkio_count, (unsigned long long)t->blkio_count,
(unsigned long long)t->blkio_delay_total, (unsigned long long)t->blkio_delay_total,
average_ms(t->blkio_delay_total, t->blkio_count), average_ms((double)t->blkio_delay_total, t->blkio_count),
"count", "delay total", "delay average", "count", "delay total", "delay average",
(unsigned long long)t->swapin_count, (unsigned long long)t->swapin_count,
(unsigned long long)t->swapin_delay_total, (unsigned long long)t->swapin_delay_total,
average_ms(t->swapin_delay_total, t->swapin_count), average_ms((double)t->swapin_delay_total, t->swapin_count),
"count", "delay total", "delay average", "count", "delay total", "delay average",
(unsigned long long)t->freepages_count, (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), average_ms((double)t->freepages_delay_total, t->freepages_count),
"count", "delay total", "delay average", "count", "delay total", "delay average",
(unsigned long long)t->thrashing_count, (unsigned long long)t->thrashing_count,
(unsigned long long)t->thrashing_delay_total, (unsigned long long)t->thrashing_delay_total,
average_ms(t->thrashing_delay_total, t->thrashing_count), average_ms((double)t->thrashing_delay_total, t->thrashing_count),
"count", "delay total", "delay average", "count", "delay total", "delay average",
(unsigned long long)t->compact_count, (unsigned long long)t->compact_count,
(unsigned long long)t->compact_delay_total, (unsigned long long)t->compact_delay_total,
average_ms(t->compact_delay_total, t->compact_count), average_ms((double)t->compact_delay_total, t->compact_count),
"count", "delay total", "delay average", "count", "delay total", "delay average",
(unsigned long long)t->wpcopy_count, (unsigned long long)t->wpcopy_count,
(unsigned long long)t->wpcopy_delay_total, (unsigned long long)t->wpcopy_delay_total,
average_ms(t->wpcopy_delay_total, t->wpcopy_count)); average_ms((double)t->wpcopy_delay_total, t->wpcopy_count));
} }
static void task_context_switch_counts(struct taskstats *t) static void task_context_switch_counts(struct taskstats *t)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment