delayacct: improve the average delay precision of getdelay tool to microsecond
authorWang Yong <wang.yong12@zte.com.cn>
Mon, 13 Feb 2023 06:08:08 +0000 (14:08 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 8 Apr 2023 20:45:36 +0000 (13:45 -0700)
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
Documentation/translations/zh_CN/accounting/delay-accounting.rst
tools/accounting/getdelays.c

index 7103b62..79f537c 100644 (file)
@@ -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
                            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::
 
index a01dc3d..7b8693c 100644 (file)
@@ -92,15 +92,15 @@ getdelays命令的一般格式::
        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
 
index 938dec0..23a15d8 100644 (file)
@@ -198,17 +198,17 @@ static void print_delayacct(struct taskstats *t)
        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 taskstats *t)
               "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)