perf test: Add entry for hists socket filter
Add test case for hists socket filter. Signed-off-by: Kan Liang <kan.liang@intel.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1441377946-44429-5-git-send-email-kan.liang@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
84734b06b6
commit
92d424ae89
|
@ -16,30 +16,31 @@ struct sample {
|
||||||
struct thread *thread;
|
struct thread *thread;
|
||||||
struct map *map;
|
struct map *map;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
int socket;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* For the numbers, see hists_common.c */
|
/* For the numbers, see hists_common.c */
|
||||||
static struct sample fake_samples[] = {
|
static struct sample fake_samples[] = {
|
||||||
/* perf [kernel] schedule() */
|
/* perf [kernel] schedule() */
|
||||||
{ .pid = FAKE_PID_PERF1, .ip = FAKE_IP_KERNEL_SCHEDULE, },
|
{ .pid = FAKE_PID_PERF1, .ip = FAKE_IP_KERNEL_SCHEDULE, .socket = 0 },
|
||||||
/* perf [perf] main() */
|
/* perf [perf] main() */
|
||||||
{ .pid = FAKE_PID_PERF1, .ip = FAKE_IP_PERF_MAIN, },
|
{ .pid = FAKE_PID_PERF1, .ip = FAKE_IP_PERF_MAIN, .socket = 0 },
|
||||||
/* perf [libc] malloc() */
|
/* perf [libc] malloc() */
|
||||||
{ .pid = FAKE_PID_PERF1, .ip = FAKE_IP_LIBC_MALLOC, },
|
{ .pid = FAKE_PID_PERF1, .ip = FAKE_IP_LIBC_MALLOC, .socket = 0 },
|
||||||
/* perf [perf] main() */
|
/* perf [perf] main() */
|
||||||
{ .pid = FAKE_PID_PERF2, .ip = FAKE_IP_PERF_MAIN, }, /* will be merged */
|
{ .pid = FAKE_PID_PERF2, .ip = FAKE_IP_PERF_MAIN, .socket = 0 }, /* will be merged */
|
||||||
/* perf [perf] cmd_record() */
|
/* perf [perf] cmd_record() */
|
||||||
{ .pid = FAKE_PID_PERF2, .ip = FAKE_IP_PERF_CMD_RECORD, },
|
{ .pid = FAKE_PID_PERF2, .ip = FAKE_IP_PERF_CMD_RECORD, .socket = 1 },
|
||||||
/* perf [kernel] page_fault() */
|
/* perf [kernel] page_fault() */
|
||||||
{ .pid = FAKE_PID_PERF2, .ip = FAKE_IP_KERNEL_PAGE_FAULT, },
|
{ .pid = FAKE_PID_PERF2, .ip = FAKE_IP_KERNEL_PAGE_FAULT, .socket = 1 },
|
||||||
/* bash [bash] main() */
|
/* bash [bash] main() */
|
||||||
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_BASH_MAIN, },
|
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_BASH_MAIN, .socket = 2 },
|
||||||
/* bash [bash] xmalloc() */
|
/* bash [bash] xmalloc() */
|
||||||
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_BASH_XMALLOC, },
|
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_BASH_XMALLOC, .socket = 2 },
|
||||||
/* bash [libc] malloc() */
|
/* bash [libc] malloc() */
|
||||||
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_LIBC_MALLOC, },
|
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_LIBC_MALLOC, .socket = 3 },
|
||||||
/* bash [kernel] page_fault() */
|
/* bash [kernel] page_fault() */
|
||||||
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_KERNEL_PAGE_FAULT, },
|
{ .pid = FAKE_PID_BASH, .ip = FAKE_IP_KERNEL_PAGE_FAULT, .socket = 3 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int add_hist_entries(struct perf_evlist *evlist,
|
static int add_hist_entries(struct perf_evlist *evlist,
|
||||||
|
@ -83,6 +84,7 @@ static int add_hist_entries(struct perf_evlist *evlist,
|
||||||
&sample) < 0)
|
&sample) < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
al.socket = fake_samples[i].socket;
|
||||||
if (hist_entry_iter__add(&iter, &al,
|
if (hist_entry_iter__add(&iter, &al,
|
||||||
PERF_MAX_STACK_DEPTH, NULL) < 0) {
|
PERF_MAX_STACK_DEPTH, NULL) < 0) {
|
||||||
addr_location__put(&al);
|
addr_location__put(&al);
|
||||||
|
@ -253,6 +255,39 @@ int test__hists_filter(void)
|
||||||
TEST_ASSERT_VAL("Unmatched total period for symbol filter",
|
TEST_ASSERT_VAL("Unmatched total period for symbol filter",
|
||||||
hists->stats.total_non_filtered_period == 300);
|
hists->stats.total_non_filtered_period == 300);
|
||||||
|
|
||||||
|
/* remove symbol filter first */
|
||||||
|
hists->symbol_filter_str = NULL;
|
||||||
|
hists__filter_by_symbol(hists);
|
||||||
|
|
||||||
|
/* now applying socket filters */
|
||||||
|
hists->socket_filter = 2;
|
||||||
|
hists__filter_by_socket(hists);
|
||||||
|
|
||||||
|
if (verbose > 2) {
|
||||||
|
pr_info("Histogram for socket filters\n");
|
||||||
|
print_hists_out(hists);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* normal stats should be invariant */
|
||||||
|
TEST_ASSERT_VAL("Invalid nr samples",
|
||||||
|
hists->stats.nr_events[PERF_RECORD_SAMPLE] == 10);
|
||||||
|
TEST_ASSERT_VAL("Invalid nr hist entries",
|
||||||
|
hists->nr_entries == 9);
|
||||||
|
TEST_ASSERT_VAL("Invalid total period",
|
||||||
|
hists->stats.total_period == 1000);
|
||||||
|
|
||||||
|
/* but filter stats are changed */
|
||||||
|
TEST_ASSERT_VAL("Unmatched nr samples for socket filter",
|
||||||
|
hists->stats.nr_non_filtered_samples == 2);
|
||||||
|
TEST_ASSERT_VAL("Unmatched nr hist entries for socket filter",
|
||||||
|
hists->nr_non_filtered_entries == 2);
|
||||||
|
TEST_ASSERT_VAL("Unmatched total period for socket filter",
|
||||||
|
hists->stats.total_non_filtered_period == 200);
|
||||||
|
|
||||||
|
/* remove socket filter first */
|
||||||
|
hists->socket_filter = -1;
|
||||||
|
hists__filter_by_socket(hists);
|
||||||
|
|
||||||
/* now applying all filters at once. */
|
/* now applying all filters at once. */
|
||||||
hists->thread_filter = fake_samples[1].thread;
|
hists->thread_filter = fake_samples[1].thread;
|
||||||
hists->dso_filter = fake_samples[1].map->dso;
|
hists->dso_filter = fake_samples[1].map->dso;
|
||||||
|
|
Loading…
Reference in a new issue