lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200507065822.8255-2-yao.jin@linux.intel.com>
Date:   Thu,  7 May 2020 14:58:19 +0800
From:   Jin Yao <yao.jin@...ux.intel.com>
To:     acme@...nel.org, jolsa@...nel.org, peterz@...radead.org,
        mingo@...hat.com, alexander.shishkin@...ux.intel.com
Cc:     Linux-kernel@...r.kernel.org, ak@...ux.intel.com,
        kan.liang@...el.com, yao.jin@...el.com,
        Jin Yao <yao.jin@...ux.intel.com>
Subject: [PATCH v3 1/4] perf stat: Fix wrong per-thread runtime stat for interval mode

root@...-ppc:~# perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2
     1.004171683             perf-3696              8,747,311      cycles
	...
     1.004171683             perf-3696                691,730      instructions              #    0.08  insn per cycle
	...
     2.006490373             perf-3696              1,749,936      cycles
	...
     2.006490373             perf-3696              1,484,582      instructions              #    0.28  insn per cycle
	...

Let's see interval 2.006490373

perf-3696              1,749,936      cycles
perf-3696              1,484,582      instructions              #    0.28  insn per cycle

insn per cycle = 1,484,582 / 1,749,936 = 0.85.
But now it's 0.28, that's not correct.

stat_config.stats[] records the per-thread runtime stat. But for interval
mode, it should be reset for each interval.

So now, with this patch,

root@...-ppc:~# perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2
     1.005818121             perf-8633              9,898,045      cycles
	...
     1.005818121             perf-8633                693,298      instructions              #    0.07  insn per cycle
	...
     2.007863743             perf-8633              1,551,619      cycles
	...
     2.007863743             perf-8633              1,317,514      instructions              #    0.85  insn per cycle
	...

Let's check interval 2.007863743.

insn per cycle = 1,317,514 / 1,551,619 = 0.85. It's correct.

Fixes: commit 14e72a21c783 ("perf stat: Update or print per-thread stats")
Signed-off-by: Jin Yao <yao.jin@...ux.intel.com>
---
 tools/perf/builtin-stat.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index e0c1ad23c768..97ee941649e6 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -351,6 +351,16 @@ static void read_counters(struct timespec *rs)
 	}
 }
 
+static void thread_stats_reset(struct perf_stat_config *config)
+{
+	int i;
+
+	if (config->stats) {
+		for (i = 0; i < config->stats_num; i++)
+			perf_stat__reset_shadow_per_stat(&config->stats[i]);
+	}
+}
+
 static void process_interval(void)
 {
 	struct timespec ts, rs;
@@ -359,6 +369,7 @@ static void process_interval(void)
 	diff_timespec(&rs, &ts, &ref_time);
 
 	perf_stat__reset_shadow_per_stat(&rt_stat);
+	thread_stats_reset(&stat_config);
 	read_counters(&rs);
 
 	if (STAT_RECORD) {
-- 
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ