From f4470dc24675a238d284657d01dd3c79362bafe6 Mon Sep 17 00:00:00 2001 From: Yonghong Song Date: Wed, 13 Dec 2017 14:12:13 -0800 Subject: [PATCH] add examples for including additional header files Fix issue #1478 Two tools, trace.py and argdist.py, and their corresponding example files were changed. Fixed a minor typo in one of trace.py error messages. Signed-off-by: Yonghong Song --- tools/argdist.py | 11 ++++++++++- tools/argdist_example.txt | 10 +++++++++- tools/trace.py | 16 ++++++++++++++-- tools/trace_example.txt | 13 ++++++++++++- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/tools/argdist.py b/tools/argdist.py index 61f8e0060f9e..9724073b0bc7 100755 --- a/tools/argdist.py +++ b/tools/argdist.py @@ -590,6 +590,13 @@ class Tool(object): -C 'p:c:write(int fd, char* buf, size_t len):char*:buf:fd==1' Spy on writes to STDOUT performed by process 2780, up to a string size of 120 characters + +argdist -I 'kernel/sched/sched.h' \\ + -C 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq):s64:cfs_rq->runtime_remaining' + Trace on the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined + in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel + package. So this command needs to run at the kernel source tree root directory + so that the added header file can be found by the compiler. """ def __init__(self): @@ -625,7 +632,9 @@ def __init__(self): parser.add_argument("-I", "--include", action="append", metavar="header", help="additional header files to include in the BPF program " - "as either full path, or relative to '/usr/include'") + "as either full path, " + "or relative to relative to current working directory, " + "or relative to default kernel header search path") self.args = parser.parse_args() self.usdt_ctx = None diff --git a/tools/argdist_example.txt b/tools/argdist_example.txt index 963554fce414..dec9e6fafc98 100644 --- a/tools/argdist_example.txt +++ b/tools/argdist_example.txt @@ -363,7 +363,8 @@ optional arguments: below) -I header, --include header additional header files to include in the BPF program - as either full path, or relative to '/usr/include' + as either full path, or relative to current working directory, + or relative to default kernel header search path Probe specifier syntax: {p,r,t,u}:{[library],category}:function(signature)[:type[,type...]:expr[,expr...][:filter]][#label] @@ -439,3 +440,10 @@ argdist -p 2780 -z 120 \ -C 'p:c:write(int fd, char* buf, size_t len):char*:buf:fd==1' Spy on writes to STDOUT performed by process 2780, up to a string size of 120 characters + +argdist -I 'kernel/sched/sched.h' \ + -C 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq):s64:cfs_rq->runtime_remaining' + Trace on the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined + in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel + package. So this command needs to run at the kernel source tree root directory + so that the added header file can be found by the compiler. diff --git a/tools/trace.py b/tools/trace.py index 439032899f70..a91a5168d30d 100755 --- a/tools/trace.py +++ b/tools/trace.py @@ -576,6 +576,16 @@ class Tool(object): Trace the USDT probe pthread_create when its 4th argument is non-zero trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec' Trace the nanosleep syscall and print the sleep duration in ns +trace -I 'linux/fs.h' \\ + 'p::uprobe_register(struct inode *inode) "a_ops = %llx", inode->i_mapping->a_ops' + Trace the uprobe_register inode mapping ops, and the symbol can be found + in /proc/kallsyms +trace -I 'kernel/sched/sched.h' \\ + 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq) "%d", cfs_rq->runtime_remaining' + Trace the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined + in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel + package. So this command needs to run at the kernel source tree root directory + so that the added header file can be found by the compiler. """ def __init__(self): @@ -615,10 +625,12 @@ def __init__(self): parser.add_argument("-I", "--include", action="append", metavar="header", help="additional header files to include in the BPF program " - "as either full path, or relative to '/usr/include'") + "as either full path, " + "or relative to current working directory, " + "or relative to default kernel header search path") self.args = parser.parse_args() if self.args.tgid and self.args.pid: - parser.error("only one of -p and -t may be specified") + parser.error("only one of -p and -L may be specified") def _create_probes(self): Probe.configure(self.args) diff --git a/tools/trace_example.txt b/tools/trace_example.txt index eb72e5e57900..2d3ffad31a22 100644 --- a/tools/trace_example.txt +++ b/tools/trace_example.txt @@ -249,7 +249,8 @@ optional arguments: -U, --user-stack output user stack trace -I header, --include header additional header files to include in the BPF program - as either full path, or relative to '/usr/include' + as either full path, or relative to current working directory, + or relative to default kernel header search path EXAMPLES: @@ -277,3 +278,13 @@ trace 'u:pthread:pthread_create (arg4 != 0)' Trace the USDT probe pthread_create when its 4th argument is non-zero trace 'p::SyS_nanosleep(struct timespec *ts) "sleep for %lld ns", ts->tv_nsec' Trace the nanosleep syscall and print the sleep duration in ns +trace -I 'linux/fs.h' \ + 'p::uprobe_register(struct inode *inode) "a_ops = %llx", inode->i_mapping->a_ops' + Trace the uprobe_register inode mapping ops, and the symbol can be found + in /proc/kallsyms +trace -I 'kernel/sched/sched.h' \ + 'p::__account_cfs_rq_runtime(struct cfs_rq *cfs_rq) "%d", cfs_rq->runtime_remaining' + Trace the cfs scheduling runqueue remaining runtime. The struct cfs_rq is defined + in kernel/sched/sched.h which is in kernel source tree and not in kernel-devel + package. So this command needs to run at the kernel source tree root directory + so that the added header file can be found by the compiler.