Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02d54f09 authored by Wu Fengguang's avatar Wu Fengguang Committed by Linus Torvalds
Browse files

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

Signed-off-by: default avatarWu Fengguang <fengguang.wu@intel.com>
Cc: Mel Gorman <mel@linux.vnet.ibm.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Reviewed-by: default avatarSatoru Moriya <satoru.moriya@hds.com>
Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4ed960b1
Loading
Loading
Loading
Loading
+20 −13
Original line number Original line Diff line number Diff line
@@ -193,30 +193,37 @@ static int get_family_id(int sd)
	return id;
	return id;
}
}


#define average_ms(t, c) (t / 1000000ULL / (c ? c : 1))

static void print_delayacct(struct taskstats *t)
static void print_delayacct(struct taskstats *t)
{
{
	printf("\n\nCPU   %15s%15s%15s%15s\n"
	printf("\n\nCPU   %15s%15s%15s%15s%15s\n"
	       "      %15llu%15llu%15llu%15llu\n"
	       "      %15llu%15llu%15llu%15llu%15.3fms\n"
	       "IO    %15s%15s\n"
	       "IO    %15s%15s%15s\n"
	       "      %15llu%15llu\n"
	       "      %15llu%15llu%15llums\n"
	       "SWAP  %15s%15s\n"
	       "SWAP  %15s%15s%15s\n"
	       "      %15llu%15llu\n"
	       "      %15llu%15llu%15llums\n"
	       "RECLAIM  %12s%15s\n"
	       "RECLAIM  %12s%15s%15s\n"
	       "      %15llu%15llu\n",
	       "      %15llu%15llu%15llums\n",
	       "count", "real total", "virtual total", "delay total",
	       "count", "real total", "virtual total",
	       "delay total", "delay average",
	       (unsigned long long)t->cpu_count,
	       (unsigned long long)t->cpu_count,
	       (unsigned long long)t->cpu_run_real_total,
	       (unsigned long long)t->cpu_run_real_total,
	       (unsigned long long)t->cpu_run_virtual_total,
	       (unsigned long long)t->cpu_run_virtual_total,
	       (unsigned long long)t->cpu_delay_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_count,
	       (unsigned long long)t->blkio_delay_total,
	       (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_count,
	       (unsigned long long)t->swapin_delay_total,
	       (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_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)
static void task_context_switch_counts(struct taskstats *t)