From: Adrian Szyndela Date: Wed, 18 Oct 2017 11:12:48 +0000 (+0200) Subject: fixed typo: tok -> top X-Git-Tag: submit/tizen/20171129.110101~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a7e071b8743b6212b28f68746915ec3cdd1a25c;p=platform%2Fupstream%2Fbcc.git fixed typo: tok -> top Change-Id: I4a4bf197476dc50f60418b4143780b3088ee2251 --- diff --git a/tools/dbus-glib-tok.py b/tools/dbus-glib-tok.py deleted file mode 100755 index 3be925be..00000000 --- a/tools/dbus-glib-tok.py +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/python - -from bcc import BPF -from time import sleep -from ctypes import c_ushort, c_int, c_ulonglong -from sys import argv - - -print("Hit Ctrl-C to end.") -count = 100 -interval = 5 -loop = 0 -# load BPF program -bpf_text="""#include -#include - -typedef struct pdata_T { - u32 pid; - char buf[TASK_COMM_LEN]; - u64 drun; - u64 dwait; - u64 grun; - u64 gwait; - u64 usage; -}pdata_t; - -BPF_HASH(timestamp_b, u64); -BPF_HASH(timestamp_e, u64); -BPF_HASH(stats, u32, pdata_t, sizeof(pdata_t)); -BPF_HASH(run_start, u32); -BPF_HASH(wait_start, u32); - -BPF_HISTOGRAM(dist); - -int do_entry_dbus(struct pt_regs *ctx) { - u64 time = 0; - pdata_t pdata; - pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; - u64 ts, *tsp, delta; - u32 pid; - - ts = bpf_ktime_get_ns() / 1000; - if(timestamp_b.lookup(&time) == 0){ - timestamp_b.update(&time, &ts); - } - timestamp_e.update(&time, &ts); - - pid = bpf_get_current_pid_tgid(); - tsp = run_start.lookup(&pid); - run_start.delete(&pid); - wait_start.update(&pid, &ts); - if(tsp != 0) { - delta = ts -*tsp; - } - else { - return 0; - } - new_pdata.pid = pid; - pdata = *(stats.lookup_or_init(&pid, &new_pdata)); - pdata.drun += delta; - pdata.usage += delta; - bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); - stats.update(&pid, &pdata); - return 0; -} - -int do_return_dbus(struct pt_regs *ctx) { - u64 time = 0; - pdata_t pdata; - pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; - u64 ts, *tsp, delta; - u32 pid; - - ts = bpf_ktime_get_ns() / 1000; - if(timestamp_b.lookup(&time) == 0){ - timestamp_b.update(&time, &ts); - } - timestamp_e.update(&time, &ts); - - pid = bpf_get_current_pid_tgid(); - tsp = wait_start.lookup(&pid); - wait_start.delete(&pid); - run_start.update(&pid, &ts); - if(tsp != 0) { - delta = ts - *tsp; - } - else { - return 0; - } - new_pdata.pid = pid; - pdata = *(stats.lookup_or_init(&pid, &new_pdata)); - pdata.dwait += delta; - bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); - stats.update(&pid, &pdata); - return 0; -} - -int do_entry_glib(struct pt_regs *ctx) { - u64 time = 0; - pdata_t pdata; - pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; - u64 ts, *tsp, delta; - u32 pid; - - ts = bpf_ktime_get_ns() / 1000; - if(timestamp_b.lookup(&time) == 0){ - timestamp_b.update(&time, &ts); - } - timestamp_e.update(&time, &ts); - - pid = bpf_get_current_pid_tgid(); - tsp = run_start.lookup(&pid); - run_start.delete(&pid); - wait_start.update(&pid, &ts); - if(tsp != 0) { - delta = ts -*tsp; - } - else { - return 0; - } - new_pdata.pid = pid; - pdata = *(stats.lookup_or_init(&pid, &new_pdata)); - pdata.grun += delta; - pdata.usage += delta; - bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); - stats.update(&pid, &pdata); - return 0; -} - -int do_return_glib(struct pt_regs *ctx) { - u64 time = 0; - pdata_t pdata; - pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; - u64 ts, *tsp, delta; - u32 pid; - - ts = bpf_ktime_get_ns() / 1000; - if(timestamp_b.lookup(&time) == 0){ - timestamp_b.update(&time, &ts); - } - timestamp_e.update(&time, &ts); - - pid = bpf_get_current_pid_tgid(); - tsp = wait_start.lookup(&pid); - wait_start.delete(&pid); - run_start.update(&pid, &ts); - if(tsp != 0) { - delta = ts - *tsp; - } - else { - return 0; - } - new_pdata.pid = pid; - pdata = *(stats.lookup_or_init(&pid, &new_pdata)); - pdata.gwait += delta; - bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); - stats.update(&pid, &pdata); - return 0; -} -""" - -b = BPF(text=bpf_text) - -b.attach_uprobe(name="glib-2.0", sym="g_poll", fn_name="do_entry_glib") -b.attach_uprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_entry_dbus") - -b.attach_uretprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_return_dbus") -b.attach_uretprobe(name="glib-2.0", sym="g_poll", fn_name="do_return_glib") - -while (1): - if count > 0: - - loop += 1 - if loop > count: - exit() - sleep(interval) - print ("%d : \n" % loop) - b["dist"].print_log2_hist("usecs") - b["dist"].clear() - stats_t = b["stats"] - timestamp = b["timestamp_e"] - timeframe = 0 - for v in timestamp.values(): - timeframe = v.value - timestamp = b["timestamp_b"] - for v in timestamp.values(): - timeframe -= v.value - #print("%d\n" % stats_t[0].pid) - print ("%10s %20s %10s %10s" % ("PID", "NAME", "DBUS", "GLIB")) - for v in sorted(stats_t.values(), key=lambda stats_t: stats_t.usage, reverse=True): - print("%10d %20s %10.6f %10.6f" % (v.pid, v.buf.encode('string-escape'), float(v.drun) / float(timeframe), float(v.grun) / float(timeframe))) diff --git a/tools/dbus-glib-top.py b/tools/dbus-glib-top.py new file mode 100755 index 00000000..3be925be --- /dev/null +++ b/tools/dbus-glib-top.py @@ -0,0 +1,191 @@ +#!/usr/bin/python + +from bcc import BPF +from time import sleep +from ctypes import c_ushort, c_int, c_ulonglong +from sys import argv + + +print("Hit Ctrl-C to end.") +count = 100 +interval = 5 +loop = 0 +# load BPF program +bpf_text="""#include +#include + +typedef struct pdata_T { + u32 pid; + char buf[TASK_COMM_LEN]; + u64 drun; + u64 dwait; + u64 grun; + u64 gwait; + u64 usage; +}pdata_t; + +BPF_HASH(timestamp_b, u64); +BPF_HASH(timestamp_e, u64); +BPF_HASH(stats, u32, pdata_t, sizeof(pdata_t)); +BPF_HASH(run_start, u32); +BPF_HASH(wait_start, u32); + +BPF_HISTOGRAM(dist); + +int do_entry_dbus(struct pt_regs *ctx) { + u64 time = 0; + pdata_t pdata; + pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; + u64 ts, *tsp, delta; + u32 pid; + + ts = bpf_ktime_get_ns() / 1000; + if(timestamp_b.lookup(&time) == 0){ + timestamp_b.update(&time, &ts); + } + timestamp_e.update(&time, &ts); + + pid = bpf_get_current_pid_tgid(); + tsp = run_start.lookup(&pid); + run_start.delete(&pid); + wait_start.update(&pid, &ts); + if(tsp != 0) { + delta = ts -*tsp; + } + else { + return 0; + } + new_pdata.pid = pid; + pdata = *(stats.lookup_or_init(&pid, &new_pdata)); + pdata.drun += delta; + pdata.usage += delta; + bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); + stats.update(&pid, &pdata); + return 0; +} + +int do_return_dbus(struct pt_regs *ctx) { + u64 time = 0; + pdata_t pdata; + pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; + u64 ts, *tsp, delta; + u32 pid; + + ts = bpf_ktime_get_ns() / 1000; + if(timestamp_b.lookup(&time) == 0){ + timestamp_b.update(&time, &ts); + } + timestamp_e.update(&time, &ts); + + pid = bpf_get_current_pid_tgid(); + tsp = wait_start.lookup(&pid); + wait_start.delete(&pid); + run_start.update(&pid, &ts); + if(tsp != 0) { + delta = ts - *tsp; + } + else { + return 0; + } + new_pdata.pid = pid; + pdata = *(stats.lookup_or_init(&pid, &new_pdata)); + pdata.dwait += delta; + bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); + stats.update(&pid, &pdata); + return 0; +} + +int do_entry_glib(struct pt_regs *ctx) { + u64 time = 0; + pdata_t pdata; + pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; + u64 ts, *tsp, delta; + u32 pid; + + ts = bpf_ktime_get_ns() / 1000; + if(timestamp_b.lookup(&time) == 0){ + timestamp_b.update(&time, &ts); + } + timestamp_e.update(&time, &ts); + + pid = bpf_get_current_pid_tgid(); + tsp = run_start.lookup(&pid); + run_start.delete(&pid); + wait_start.update(&pid, &ts); + if(tsp != 0) { + delta = ts -*tsp; + } + else { + return 0; + } + new_pdata.pid = pid; + pdata = *(stats.lookup_or_init(&pid, &new_pdata)); + pdata.grun += delta; + pdata.usage += delta; + bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); + stats.update(&pid, &pdata); + return 0; +} + +int do_return_glib(struct pt_regs *ctx) { + u64 time = 0; + pdata_t pdata; + pdata_t new_pdata = {0, ' ', 0, 0, 0, 0, 0}; + u64 ts, *tsp, delta; + u32 pid; + + ts = bpf_ktime_get_ns() / 1000; + if(timestamp_b.lookup(&time) == 0){ + timestamp_b.update(&time, &ts); + } + timestamp_e.update(&time, &ts); + + pid = bpf_get_current_pid_tgid(); + tsp = wait_start.lookup(&pid); + wait_start.delete(&pid); + run_start.update(&pid, &ts); + if(tsp != 0) { + delta = ts - *tsp; + } + else { + return 0; + } + new_pdata.pid = pid; + pdata = *(stats.lookup_or_init(&pid, &new_pdata)); + pdata.gwait += delta; + bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); + stats.update(&pid, &pdata); + return 0; +} +""" + +b = BPF(text=bpf_text) + +b.attach_uprobe(name="glib-2.0", sym="g_poll", fn_name="do_entry_glib") +b.attach_uprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_entry_dbus") + +b.attach_uretprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_return_dbus") +b.attach_uretprobe(name="glib-2.0", sym="g_poll", fn_name="do_return_glib") + +while (1): + if count > 0: + + loop += 1 + if loop > count: + exit() + sleep(interval) + print ("%d : \n" % loop) + b["dist"].print_log2_hist("usecs") + b["dist"].clear() + stats_t = b["stats"] + timestamp = b["timestamp_e"] + timeframe = 0 + for v in timestamp.values(): + timeframe = v.value + timestamp = b["timestamp_b"] + for v in timestamp.values(): + timeframe -= v.value + #print("%d\n" % stats_t[0].pid) + print ("%10s %20s %10s %10s" % ("PID", "NAME", "DBUS", "GLIB")) + for v in sorted(stats_t.values(), key=lambda stats_t: stats_t.usage, reverse=True): + print("%10d %20s %10.6f %10.6f" % (v.pid, v.buf.encode('string-escape'), float(v.drun) / float(timeframe), float(v.grun) / float(timeframe))) diff --git a/tools/dbus-tok.c b/tools/dbus-tok.c deleted file mode 100644 index 76fe5dab..00000000 --- a/tools/dbus-tok.c +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include - -typedef struct pdata_T { - u32 pid; - char buf[TASK_COMM_LEN]; - u64 run; - u64 wait; - u64 usage; -}pdata_t; - -BPF_HASH(timestamp_b, u64); -BPF_HASH(timestamp_e, u64); -BPF_HASH(stats, u32, pdata_t, sizeof(pdata_t)); -BPF_HASH(run_start, u32); -BPF_HASH(wait_start, u32); - - -#define TAKE_PROCESS_DATA u64 time = 0; pdata_t pdata;\ - pdata_t new_pdata = {0, ' ', 0, 0, 0};\ - u64 ts, *tsp, delta;\ - u32 pid = bpf_get_current_pid_tgid();\ - ts = bpf_ktime_get_ns() / 1000;\ - new_pdata.pid = pid;\ - -int do_entry(struct pt_regs *ctx) { - TAKE_PROCESS_DATA - timestamp_b.insert(&time, &ts); - timestamp_e.update(&time, &ts); - tsp = run_start.lookup(&pid); - run_start.delete(&pid); - wait_start.update(&pid, &ts); - if(tsp == 0) { - return 0; - } - delta = ts - *tsp; - pdata = *(stats.lookup_or_init(&pid, &new_pdata)); - pdata.run += delta; - bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); - stats.update(&pid, &pdata); - return 0; -} - -int do_return(struct pt_regs *ctx) { - TAKE_PROCESS_DATA - timestamp_b.insert(&time, &ts); - timestamp_e.update(&time, &ts); - tsp = wait_start.lookup(&pid); - wait_start.delete(&pid); - run_start.update(&pid, &ts); - if(tsp == 0) { - return 0; - } - delta = ts - *tsp; - pdata = *(stats.lookup_or_init(&pid, &new_pdata)); - pdata.wait += delta; - bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); - stats.update(&pid, &pdata); - return 0; -} - diff --git a/tools/dbus-tok.py b/tools/dbus-tok.py deleted file mode 100755 index 28384ab9..00000000 --- a/tools/dbus-tok.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/python - -from bcc import BPF -from time import sleep -from ctypes import c_ushort, c_int, c_ulonglong -from sys import argv - -def usage(): - print("[interval] [count]") - exit(0) - -print("Hit Ctrl-C to end.") -count = 100 -interval = 5 -loop = 0 -# load BPF program -b = BPF(src_file="dbus-tok.c") - -b.attach_uprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_entry") - -b.attach_uretprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_return") - -while (1): - if count > 0: - - loop += 1 - if loop > count: - exit() - sleep(interval) - print ("%d : \n" % loop) - stats_t = b["stats"] - timestamp = b["timestamp_e"] - timeframe = 0 - for v in timestamp.values(): - timeframe = v.value - timestamp = b["timestamp_b"] - for v in timestamp.values(): - timeframe -= v.value - for v in stats_t.values(): - v.usage = (v.run * 100 / timeframe) - for v in sorted(stats_t.values(), key=lambda stats_t: stats_t.run, reverse=True): - print("%10d %20s %10.6f" % (v.pid, v.buf.encode('string-escape'), float(v.run) / float(timeframe))) diff --git a/tools/dbus-top.c b/tools/dbus-top.c new file mode 100644 index 00000000..76fe5dab --- /dev/null +++ b/tools/dbus-top.c @@ -0,0 +1,61 @@ +#include +#include + +typedef struct pdata_T { + u32 pid; + char buf[TASK_COMM_LEN]; + u64 run; + u64 wait; + u64 usage; +}pdata_t; + +BPF_HASH(timestamp_b, u64); +BPF_HASH(timestamp_e, u64); +BPF_HASH(stats, u32, pdata_t, sizeof(pdata_t)); +BPF_HASH(run_start, u32); +BPF_HASH(wait_start, u32); + + +#define TAKE_PROCESS_DATA u64 time = 0; pdata_t pdata;\ + pdata_t new_pdata = {0, ' ', 0, 0, 0};\ + u64 ts, *tsp, delta;\ + u32 pid = bpf_get_current_pid_tgid();\ + ts = bpf_ktime_get_ns() / 1000;\ + new_pdata.pid = pid;\ + +int do_entry(struct pt_regs *ctx) { + TAKE_PROCESS_DATA + timestamp_b.insert(&time, &ts); + timestamp_e.update(&time, &ts); + tsp = run_start.lookup(&pid); + run_start.delete(&pid); + wait_start.update(&pid, &ts); + if(tsp == 0) { + return 0; + } + delta = ts - *tsp; + pdata = *(stats.lookup_or_init(&pid, &new_pdata)); + pdata.run += delta; + bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); + stats.update(&pid, &pdata); + return 0; +} + +int do_return(struct pt_regs *ctx) { + TAKE_PROCESS_DATA + timestamp_b.insert(&time, &ts); + timestamp_e.update(&time, &ts); + tsp = wait_start.lookup(&pid); + wait_start.delete(&pid); + run_start.update(&pid, &ts); + if(tsp == 0) { + return 0; + } + delta = ts - *tsp; + pdata = *(stats.lookup_or_init(&pid, &new_pdata)); + pdata.wait += delta; + bpf_get_current_comm(&(pdata.buf), sizeof(pdata.buf)); + stats.update(&pid, &pdata); + return 0; +} + diff --git a/tools/dbus-top.py b/tools/dbus-top.py new file mode 100755 index 00000000..2485c777 --- /dev/null +++ b/tools/dbus-top.py @@ -0,0 +1,42 @@ +#!/usr/bin/python + +from bcc import BPF +from time import sleep +from ctypes import c_ushort, c_int, c_ulonglong +from sys import argv + +def usage(): + print("[interval] [count]") + exit(0) + +print("Hit Ctrl-C to end.") +count = 100 +interval = 5 +loop = 0 +# load BPF program +b = BPF(src_file="dbus-top.c") + +b.attach_uprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_entry") + +b.attach_uretprobe(name="dbus-1", sym="_dbus_poll", fn_name="do_return") + +while (1): + if count > 0: + + loop += 1 + if loop > count: + exit() + sleep(interval) + print ("%d : \n" % loop) + stats_t = b["stats"] + timestamp = b["timestamp_e"] + timeframe = 0 + for v in timestamp.values(): + timeframe = v.value + timestamp = b["timestamp_b"] + for v in timestamp.values(): + timeframe -= v.value + for v in stats_t.values(): + v.usage = (v.run * 100 / timeframe) + for v in sorted(stats_t.values(), key=lambda stats_t: stats_t.run, reverse=True): + print("%10d %20s %10.6f" % (v.pid, v.buf.encode('string-escape'), float(v.run) / float(timeframe)))