| From: Wang Yong <wang.yong12@zte.com.cn> |
| Subject: delayacct: improve the average delay precision of getdelay tool to microsecond |
| Date: Mon, 13 Feb 2023 14:08:08 +0800 (CST) |
| |
| 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.cn |
| Signed-off-by: Wang Yong <wang.yong12@zte.com.cn> |
| Reviewed-by: Yang Yang <yang.yang29@zte.com.cn> |
| Cc: David Hildenbrand <david@redhat.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| Documentation/accounting/delay-accounting.rst | 14 ++--- |
| Documentation/translations/zh_CN/accounting/delay-accounting.rst | 10 ++-- |
| tools/accounting/getdelays.c | 24 +++++----- |
| 3 files changed, 24 insertions(+), 24 deletions(-) |
| |
| --- a/Documentation/accounting/delay-accounting.rst~delayacct-improve-the-average-delay-precision-of-getdelay-tool-to-microsecond |
| +++ a/Documentation/accounting/delay-accounting.rst |
| @@ -109,17 +109,17 @@ Get sum of delays, since system boot, fo |
| CPU count real total virtual total delay total delay average |
| 8 7000000 6872122 3382277 0.423ms |
| IO count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| SWAP count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| RECLAIM count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| THRASHING count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| COMPACT count delay total delay average |
| - 0 0 0ms |
| - WPCOPY count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| + WPCOPY count delay total delay average |
| + 0 0 0.000ms |
| |
| Get IO accounting for pid 1, it works only with -p:: |
| |
| --- a/Documentation/translations/zh_CN/accounting/delay-accounting.rst~delayacct-improve-the-average-delay-precision-of-getdelay-tool-to-microsecond |
| +++ a/Documentation/translations/zh_CN/accounting/delay-accounting.rst |
| @@ -92,15 +92,15 @@ è·åæætgid为5çä»»å¡ä»ç³»ç»å |
| CPU count real total virtual total delay total delay average |
| 8 7000000 6872122 3382277 0.423ms |
| IO count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| SWAP count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| RECLAIM count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| THRASHING count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| COMPACT count delay total delay average |
| - 0 0 0ms |
| + 0 0 0.000ms |
| WPCOPY count delay total delay average |
| 0 0 0ms |
| |
| --- a/tools/accounting/getdelays.c~delayacct-improve-the-average-delay-precision-of-getdelay-tool-to-microsecond |
| +++ a/tools/accounting/getdelays.c |
| @@ -198,17 +198,17 @@ static void print_delayacct(struct tasks |
| 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" |
| + " %15llu%15llu%15.3fms\n" |
| "SWAP %15s%15s%15s\n" |
| - " %15llu%15llu%15llums\n" |
| + " %15llu%15llu%15.3fms\n" |
| "RECLAIM %12s%15s%15s\n" |
| - " %15llu%15llu%15llums\n" |
| + " %15llu%15llu%15.3fms\n" |
| "THRASHING%12s%15s%15s\n" |
| - " %15llu%15llu%15llums\n" |
| + " %15llu%15llu%15.3fms\n" |
| "COMPACT %12s%15s%15s\n" |
| - " %15llu%15llu%15llums\n" |
| + " %15llu%15llu%15.3fms\n" |
| "WPCOPY %12s%15s%15s\n" |
| - " %15llu%15llu%15llums\n", |
| + " %15llu%15llu%15.3fms\n", |
| "count", "real total", "virtual total", |
| "delay total", "delay average", |
| (unsigned long long)t->cpu_count, |
| @@ -219,27 +219,27 @@ static void print_delayacct(struct tasks |
| "count", "delay total", "delay average", |
| (unsigned long long)t->blkio_count, |
| (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", |
| (unsigned long long)t->swapin_count, |
| (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", |
| (unsigned long long)t->freepages_count, |
| (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", |
| (unsigned long long)t->thrashing_count, |
| (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", |
| (unsigned long long)t->compact_count, |
| (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", |
| (unsigned long long)t->wpcopy_count, |
| (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) |
| _ |