time/time-1.8-Recompute-CPU-usage-at-microsecond-level.patch
Petr Písař 8cdaa02d87 1.8 bump
2017-11-08 17:47:06 +01:00

76 lines
2.0 KiB
Diff

From 0962ebfcb9d30d0898ee4c108e71a1b6bca0785e Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hongjiu.lu@intel.com>
Date: Wed, 8 Nov 2017 16:50:21 +0100
Subject: [PATCH] Recompute CPU usage at microsecond level
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
If job finishes quickly, miliseconds arithmetic rounds to zero. If
that happens, recalculate CPU usage ratio with microsecond accuracy
to raise chance to get non-zero values.
Petr Pisar: Ported to 1.8.
Signed-off-by: Petr Písař <ppisar@redhat.com>
---
src/resuse.h | 1 +
src/time.c | 15 +++++++++++++++
2 files changed, 16 insertions(+)
diff --git a/src/resuse.h b/src/resuse.h
index a5edfaa..b21e2ad 100644
--- a/src/resuse.h
+++ b/src/resuse.h
@@ -23,6 +23,7 @@
/* Convert rusage's microseconds to miliseconds */
#define TV_MSEC tv_usec / 1000
+#define TV_USEC tv_usec
diff --git a/src/time.c b/src/time.c
index a6d99fb..cba2c32 100644
--- a/src/time.c
+++ b/src/time.c
@@ -428,6 +428,8 @@ summarize (fp, fmt, command, resp)
{
unsigned long r; /* Elapsed real milliseconds. */
unsigned long v; /* Elapsed virtual (CPU) milliseconds. */
+ unsigned long ru; /* Elapsed real microseconds. */
+ unsigned long vu; /* Elapsed virtual (CPU) microseconds. */
if (!quiet)
{
@@ -452,6 +454,17 @@ summarize (fp, fmt, command, resp)
v = resp->ru.ru_utime.tv_sec * 1000 + resp->ru.ru_utime.TV_MSEC +
resp->ru.ru_stime.tv_sec * 1000 + resp->ru.ru_stime.TV_MSEC;
+ if (r == 0 && v == 0)
+ {
+ ru = resp->elapsed.tv_usec;
+ vu = resp->ru.ru_utime.TV_USEC + resp->ru.ru_stime.TV_USEC;
+ }
+ else
+ {
+ ru = 0;
+ vu = 0;
+ }
+
while (*fmt)
{
switch (*fmt)
@@ -509,6 +522,8 @@ summarize (fp, fmt, command, resp)
/* % cpu is (total cpu time)/(elapsed time). */
if (r > 0)
fprintf (fp, "%lu%%", (v * 100 / r));
+ else if (ru > 0)
+ fprintf (fp, "%lu%%", (vu * 100 / ru));
else
fprintf (fp, "?%%");
break;
--
2.13.6