-
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.
perf tools: Compile scriptlets to BPF objects when passing '.c' to --…
…event This patch provides infrastructure for passing source files to --event directly using: # perf record --event bpf-file.c command This patch does following works: 1) Allow passing '.c' file to '--event'. parse_events_load_bpf() is expanded to allow caller tell it whether the passed file is source file or object. 2) llvm__compile_bpf() is called to compile the '.c' file, the result is saved into memory. Use bpf_object__open_buffer() to load the in-memory object. Introduces a bpf-script-example.c so we can manually test it: # perf record --clang-opt "-DLINUX_VERSION_CODE=0x40200" --event ./bpf-script-example.c sleep 1 Note that '--clang-opt' must put before '--event'. Futher patches will merge it into a testcase so can be tested automatically. Signed-off-by: Wang Nan <[email protected]> Acked-by: Alexei Starovoitov <[email protected]> Cc: Brendan Gregg <[email protected]> Cc: Daniel Borkmann <[email protected]> Cc: David Ahern <[email protected]> Cc: He Kuang <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Kaixu Xia <[email protected]> Cc: Masami Hiramatsu <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Zefan Li <[email protected]> Cc: [email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: He Kuang <[email protected]> Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
- Loading branch information
Showing
7 changed files
with
83 additions
and
9 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#ifndef LINUX_VERSION_CODE | ||
# error Need LINUX_VERSION_CODE | ||
# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig' | ||
#endif | ||
#define BPF_ANY 0 | ||
#define BPF_MAP_TYPE_ARRAY 2 | ||
#define BPF_FUNC_map_lookup_elem 1 | ||
#define BPF_FUNC_map_update_elem 2 | ||
|
||
static void *(*bpf_map_lookup_elem)(void *map, void *key) = | ||
(void *) BPF_FUNC_map_lookup_elem; | ||
static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) = | ||
(void *) BPF_FUNC_map_update_elem; | ||
|
||
struct bpf_map_def { | ||
unsigned int type; | ||
unsigned int key_size; | ||
unsigned int value_size; | ||
unsigned int max_entries; | ||
}; | ||
|
||
#define SEC(NAME) __attribute__((section(NAME), used)) | ||
struct bpf_map_def SEC("maps") flip_table = { | ||
.type = BPF_MAP_TYPE_ARRAY, | ||
.key_size = sizeof(int), | ||
.value_size = sizeof(int), | ||
.max_entries = 1, | ||
}; | ||
|
||
SEC("func=sys_epoll_pwait") | ||
int bpf_func__sys_epoll_pwait(void *ctx) | ||
{ | ||
int ind =0; | ||
int *flag = bpf_map_lookup_elem(&flip_table, &ind); | ||
int new_flag; | ||
if (!flag) | ||
return 0; | ||
/* flip flag and store back */ | ||
new_flag = !*flag; | ||
bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY); | ||
return new_flag; | ||
} | ||
char _license[] SEC("license") = "GPL"; | ||
int _version SEC("version") = LINUX_VERSION_CODE; |
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
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