mirror of
https://github.com/torvalds/linux.git
synced 2025-11-09 21:20:04 +02:00
perf parse-events: Set exclude_guest=1 for user-space counting
Currently if we run 'perf record -e cycles:u', exclude_guest=0.
But it doesn't make sense in most cases that we request for
user-space counting but we also get the guest report.
Of course, we also need to consider 'perf kvm' usage case that
authorized perf users on the host may only want to count guest user
space events. For example,
# perf kvm --guest record -e cycles:u
When we have 'exclude_guest=1' for 'perf kvm' usage, we may get nothing
from guest events.
To keep perf semantics consistent and clear, this patch sets
exclude_guest=1 for user-space counting but except for 'perf kvm' usage.
Before:
perf record -e cycles:u ./div
perf evlist -v
cycles:u: ..., exclude_kernel: 1, exclude_hv: 1, ...
After:
perf record -e cycles:u ./div
perf evlist -v
cycles:u: ..., exclude_kernel: 1, exclude_hv: 1, exclude_guest: 1, ...
Before:
perf kvm --guest record -e cycles:u -vvv
perf_event_attr:
size 120
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|ID|CPU|PERIOD
read_format ID
disabled 1
inherit 1
exclude_kernel 1
exclude_hv 1
freq 1
sample_id_all 1
After:
perf kvm --guest record -e cycles:u -vvv
perf_event_attr:
size 120
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|ID|CPU|PERIOD
read_format ID
disabled 1
inherit 1
exclude_kernel 1
exclude_hv 1
freq 1
sample_id_all 1
For Before/After, exclude_guest are both 0 for perf kvm usage.
perf test 6
6: Parse event definition strings : Ok
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Tested-by: Like Xu <like.xu@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20200814012120.16647-1-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
a060c1f12b
commit
943b69ac18
2 changed files with 5 additions and 2 deletions
|
|
@ -719,7 +719,7 @@ static int test__group2(struct evlist *evlist)
|
||||||
TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
|
TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
|
||||||
TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
|
TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
|
||||||
TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
|
TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
|
||||||
TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
|
TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
|
||||||
TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
|
TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
|
||||||
TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
|
TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
|
||||||
TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
|
TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
|
||||||
|
|
@ -842,7 +842,7 @@ static int test__group3(struct evlist *evlist __maybe_unused)
|
||||||
TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
|
TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
|
||||||
TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
|
TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
|
||||||
TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
|
TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
|
||||||
TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
|
TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
|
||||||
TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
|
TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
|
||||||
TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
|
TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
|
||||||
TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
|
TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
#include "util/evsel_config.h"
|
#include "util/evsel_config.h"
|
||||||
#include "util/event.h"
|
#include "util/event.h"
|
||||||
#include "util/pfm.h"
|
#include "util/pfm.h"
|
||||||
|
#include "perf.h"
|
||||||
|
|
||||||
#define MAX_NAME_LEN 100
|
#define MAX_NAME_LEN 100
|
||||||
|
|
||||||
|
|
@ -1794,6 +1795,8 @@ static int get_event_modifier(struct event_modifier *mod, char *str,
|
||||||
if (*str == 'u') {
|
if (*str == 'u') {
|
||||||
if (!exclude)
|
if (!exclude)
|
||||||
exclude = eu = ek = eh = 1;
|
exclude = eu = ek = eh = 1;
|
||||||
|
if (!exclude_GH && !perf_guest)
|
||||||
|
eG = 1;
|
||||||
eu = 0;
|
eu = 0;
|
||||||
} else if (*str == 'k') {
|
} else if (*str == 'k') {
|
||||||
if (!exclude)
|
if (!exclude)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue