Commit 5815f41a authored by Brendan Gregg's avatar Brendan Gregg

Merge pull request #562 from evverx/change-kernel-user-stacks-order

Change kernel/user stacks order
parents 6274185a 4509f09c
...@@ -61,6 +61,8 @@ stack_group.add_argument("-U", "--user-stacks-only", action="store_true", ...@@ -61,6 +61,8 @@ stack_group.add_argument("-U", "--user-stacks-only", action="store_true",
help="show stacks from user space only (no kernel space stacks)") help="show stacks from user space only (no kernel space stacks)")
stack_group.add_argument("-K", "--kernel-stacks-only", action="store_true", stack_group.add_argument("-K", "--kernel-stacks-only", action="store_true",
help="show stacks from kernel space only (no user space stacks)") help="show stacks from kernel space only (no user space stacks)")
parser.add_argument("-d", "--delimited", action="store_true",
help="insert delimiter between kernel/user stacks")
parser.add_argument("-f", "--folded", action="store_true", parser.add_argument("-f", "--folded", action="store_true",
help="output folded format") help="output folded format")
parser.add_argument("--stack-storage-size", default=1024, parser.add_argument("--stack-storage-size", default=1024,
...@@ -170,6 +172,8 @@ else: ...@@ -170,6 +172,8 @@ else:
bpf_text = bpf_text.replace('USER_STACK_GET', user_stack_get) bpf_text = bpf_text.replace('USER_STACK_GET', user_stack_get)
bpf_text = bpf_text.replace('KERNEL_STACK_GET', kernel_stack_get) bpf_text = bpf_text.replace('KERNEL_STACK_GET', kernel_stack_get)
need_delimiter = args.delimited and not (args.kernel_stacks_only or args.user_stacks_only)
# check for an edge case; the code below will handle this case correctly # check for an edge case; the code below will handle this case correctly
# but ultimately nothing will be displayed # but ultimately nothing will be displayed
if args.kernel_threads_only and args.user_stacks_only: if args.kernel_threads_only and args.user_stacks_only:
...@@ -228,15 +232,18 @@ for k, v in sorted(counts.items(), key=lambda counts: counts[1].value): ...@@ -228,15 +232,18 @@ for k, v in sorted(counts.items(), key=lambda counts: counts[1].value):
user_stack = list(user_stack) user_stack = list(user_stack)
kernel_stack = list(kernel_stack) kernel_stack = list(kernel_stack)
line = [k.name.decode()] + \ line = [k.name.decode()] + \
[b.ksym(addr) for addr in reversed(kernel_stack)] + \ [b.sym(addr, k.pid) for addr in reversed(user_stack)] + \
[b.sym(addr, k.pid) for addr in reversed(user_stack)] (need_delimiter and ["-"] or []) + \
[b.ksym(addr) for addr in reversed(kernel_stack)]
print("%s %d" % (";".join(line), v.value)) print("%s %d" % (";".join(line), v.value))
else: else:
# print default multi-line stack output # print default multi-line stack output
for addr in user_stack:
print(" %016x %s" % (addr, b.sym(addr, k.pid)))
for addr in kernel_stack: for addr in kernel_stack:
print(" %016x %s" % (addr, b.ksym(addr))) print(" %016x %s" % (addr, b.ksym(addr)))
if need_delimiter:
print(" --")
for addr in user_stack:
print(" %016x %s" % (addr, b.sym(addr, k.pid)))
print(" %-16s %s (%d)" % ("-", k.name, k.pid)) print(" %-16s %s (%d)" % ("-", k.name, k.pid))
print(" %d\n" % v.value) print(" %d\n" % v.value)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment