Messages in this thread | | | Date | Mon, 14 Apr 2014 16:38:05 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH 14/17] perf tools: Fix metrics calculation with event qualifiers |
| |
* Jiri Olsa <jolsa@redhat.com> wrote:
> From: Andi Kleen <ak@linux.intel.com> > > Currently in perf IPC and other metrics cannot be directly shown > separately for both user and kernel in a single run. The problem was > that the metrics matching code did not check event qualifiers. > > With this patch the following case works correctly. > > % perf stat -e cycles:k,cycles:u,instructions:k,instructions:u true > > Performance counter stats for 'true': > > 531,718 cycles:k > 203,895 cycles:u > 338,151 instructions:k # 0.64 insns per cycle > 105,961 instructions:u # 0.52 insns per cycle > > 0.002989739 seconds time elapsed > > Previously it would misreport the ratios because they were matching > the wrong value. > > The patch is fairly big, but quite mechanic as it just > adds context indexes everywhere. > > I didn't support Hypervisor. It's not clear it's worth it.
> +static int evsel_context(struct perf_evsel *evsel) > +{ > + if (evsel->attr.exclude_kernel) > + return CTX_USER; > + if (evsel->attr.exclude_user) > + return CTX_KERNEL; > + /* Handle hypervisor too? */ > + return CTX_ALL;
This fix is incomplete, as there are a whole lot of other cases:
exclude_user : 1, /* don't count user */ exclude_kernel : 1, /* ditto kernel */ exclude_hv : 1, /* ditto hypervisor */ exclude_idle : 1, /* don't count when idle */
exclude_host : 1, /* don't count in host */ exclude_guest : 1, /* don't count in guest */
Many of which can be triggered via current event selectors.
Thanks,
Ingo
| |