-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux…
…/kernel/git/jolsa/perf into perf/core Pull perf/core improvements and fixes from Jiri Olsa: * Add a test case for hists filtering (Namhyung Kim) * Share map_groups among threads of the same group (Arnaldo Carvalho de Melo, Jiri Olsa) Signed-off-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Ingo Molnar <mingo@kernel.org>
- Loading branch information
Showing
18 changed files
with
948 additions
and
155 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
#include "perf.h" | ||
#include "util/debug.h" | ||
#include "util/symbol.h" | ||
#include "util/sort.h" | ||
#include "util/evsel.h" | ||
#include "util/evlist.h" | ||
#include "util/machine.h" | ||
#include "util/thread.h" | ||
#include "tests/hists_common.h" | ||
|
||
static struct { | ||
u32 pid; | ||
const char *comm; | ||
} fake_threads[] = { | ||
{ 100, "perf" }, | ||
{ 200, "perf" }, | ||
{ 300, "bash" }, | ||
}; | ||
|
||
static struct { | ||
u32 pid; | ||
u64 start; | ||
const char *filename; | ||
} fake_mmap_info[] = { | ||
{ 100, 0x40000, "perf" }, | ||
{ 100, 0x50000, "libc" }, | ||
{ 100, 0xf0000, "[kernel]" }, | ||
{ 200, 0x40000, "perf" }, | ||
{ 200, 0x50000, "libc" }, | ||
{ 200, 0xf0000, "[kernel]" }, | ||
{ 300, 0x40000, "bash" }, | ||
{ 300, 0x50000, "libc" }, | ||
{ 300, 0xf0000, "[kernel]" }, | ||
}; | ||
|
||
struct fake_sym { | ||
u64 start; | ||
u64 length; | ||
const char *name; | ||
}; | ||
|
||
static struct fake_sym perf_syms[] = { | ||
{ 700, 100, "main" }, | ||
{ 800, 100, "run_command" }, | ||
{ 900, 100, "cmd_record" }, | ||
}; | ||
|
||
static struct fake_sym bash_syms[] = { | ||
{ 700, 100, "main" }, | ||
{ 800, 100, "xmalloc" }, | ||
{ 900, 100, "xfree" }, | ||
}; | ||
|
||
static struct fake_sym libc_syms[] = { | ||
{ 700, 100, "malloc" }, | ||
{ 800, 100, "free" }, | ||
{ 900, 100, "realloc" }, | ||
}; | ||
|
||
static struct fake_sym kernel_syms[] = { | ||
{ 700, 100, "schedule" }, | ||
{ 800, 100, "page_fault" }, | ||
{ 900, 100, "sys_perf_event_open" }, | ||
}; | ||
|
||
static struct { | ||
const char *dso_name; | ||
struct fake_sym *syms; | ||
size_t nr_syms; | ||
} fake_symbols[] = { | ||
{ "perf", perf_syms, ARRAY_SIZE(perf_syms) }, | ||
{ "bash", bash_syms, ARRAY_SIZE(bash_syms) }, | ||
{ "libc", libc_syms, ARRAY_SIZE(libc_syms) }, | ||
{ "[kernel]", kernel_syms, ARRAY_SIZE(kernel_syms) }, | ||
}; | ||
|
||
struct machine *setup_fake_machine(struct machines *machines) | ||
{ | ||
struct machine *machine = machines__find(machines, HOST_KERNEL_ID); | ||
size_t i; | ||
|
||
if (machine == NULL) { | ||
pr_debug("Not enough memory for machine setup\n"); | ||
return NULL; | ||
} | ||
|
||
for (i = 0; i < ARRAY_SIZE(fake_threads); i++) { | ||
struct thread *thread; | ||
|
||
thread = machine__findnew_thread(machine, fake_threads[i].pid, | ||
fake_threads[i].pid); | ||
if (thread == NULL) | ||
goto out; | ||
|
||
thread__set_comm(thread, fake_threads[i].comm, 0); | ||
} | ||
|
||
for (i = 0; i < ARRAY_SIZE(fake_mmap_info); i++) { | ||
union perf_event fake_mmap_event = { | ||
.mmap = { | ||
.header = { .misc = PERF_RECORD_MISC_USER, }, | ||
.pid = fake_mmap_info[i].pid, | ||
.tid = fake_mmap_info[i].pid, | ||
.start = fake_mmap_info[i].start, | ||
.len = 0x1000ULL, | ||
.pgoff = 0ULL, | ||
}, | ||
}; | ||
|
||
strcpy(fake_mmap_event.mmap.filename, | ||
fake_mmap_info[i].filename); | ||
|
||
machine__process_mmap_event(machine, &fake_mmap_event, NULL); | ||
} | ||
|
||
for (i = 0; i < ARRAY_SIZE(fake_symbols); i++) { | ||
size_t k; | ||
struct dso *dso; | ||
|
||
dso = __dsos__findnew(&machine->user_dsos, | ||
fake_symbols[i].dso_name); | ||
if (dso == NULL) | ||
goto out; | ||
|
||
/* emulate dso__load() */ | ||
dso__set_loaded(dso, MAP__FUNCTION); | ||
|
||
for (k = 0; k < fake_symbols[i].nr_syms; k++) { | ||
struct symbol *sym; | ||
struct fake_sym *fsym = &fake_symbols[i].syms[k]; | ||
|
||
sym = symbol__new(fsym->start, fsym->length, | ||
STB_GLOBAL, fsym->name); | ||
if (sym == NULL) | ||
goto out; | ||
|
||
symbols__insert(&dso->symbols[MAP__FUNCTION], sym); | ||
} | ||
} | ||
|
||
return machine; | ||
|
||
out: | ||
pr_debug("Not enough memory for machine setup\n"); | ||
machine__delete_threads(machine); | ||
machine__delete(machine); | ||
return NULL; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#ifndef __PERF_TESTS__HISTS_COMMON_H__ | ||
#define __PERF_TESTS__HISTS_COMMON_H__ | ||
|
||
struct machine; | ||
struct machines; | ||
|
||
/* | ||
* The setup_fake_machine() provides a test environment which consists | ||
* of 3 processes that have 3 mappings and in turn, have 3 symbols | ||
* respectively. See below table: | ||
* | ||
* Command: Pid Shared Object Symbol | ||
* ............. ............. ................... | ||
* perf: 100 perf main | ||
* perf: 100 perf run_command | ||
* perf: 100 perf comd_record | ||
* perf: 100 libc malloc | ||
* perf: 100 libc free | ||
* perf: 100 libc realloc | ||
* perf: 100 [kernel] schedule | ||
* perf: 100 [kernel] page_fault | ||
* perf: 100 [kernel] sys_perf_event_open | ||
* perf: 200 perf main | ||
* perf: 200 perf run_command | ||
* perf: 200 perf comd_record | ||
* perf: 200 libc malloc | ||
* perf: 200 libc free | ||
* perf: 200 libc realloc | ||
* perf: 200 [kernel] schedule | ||
* perf: 200 [kernel] page_fault | ||
* perf: 200 [kernel] sys_perf_event_open | ||
* bash: 300 bash main | ||
* bash: 300 bash xmalloc | ||
* bash: 300 bash xfree | ||
* bash: 300 libc malloc | ||
* bash: 300 libc free | ||
* bash: 300 libc realloc | ||
* bash: 300 [kernel] schedule | ||
* bash: 300 [kernel] page_fault | ||
* bash: 300 [kernel] sys_perf_event_open | ||
*/ | ||
struct machine *setup_fake_machine(struct machines *machines); | ||
|
||
#endif /* __PERF_TESTS__HISTS_COMMON_H__ */ |
Oops, something went wrong.