|
74 | 74 | #include <linux/nsproxy.h>
|
75 | 75 | #include <linux/pid_namespace.h>
|
76 | 76 |
|
77 |
| -BPF_HASH(start, u32); |
| 77 | +BPF_ARRAY(start, u64, MAX_PID); |
78 | 78 |
|
79 | 79 | struct data_t {
|
80 | 80 | u32 pid;
|
|
132 | 132 |
|
133 | 133 | // fetch timestamp and calculate delta
|
134 | 134 | tsp = start.lookup(&pid);
|
135 |
| - if (tsp == 0) { |
| 135 | + if ((tsp == 0) || (*tsp == 0)) { |
136 | 136 | return 0; // missed enqueue
|
137 | 137 | }
|
138 | 138 | delta_us = (bpf_ktime_get_ns() - *tsp) / 1000;
|
|
204 | 204 |
|
205 | 205 | // fetch timestamp and calculate delta
|
206 | 206 | tsp = start.lookup(&pid);
|
207 |
| - if (tsp == 0) { |
| 207 | + if ((tsp == 0) || (*tsp == 0)) { |
208 | 208 | return 0; // missed enqueue
|
209 | 209 | }
|
210 | 210 | delta_us = (bpf_ktime_get_ns() - *tsp) / 1000;
|
|
262 | 262 | def print_event(cpu, data, size):
|
263 | 263 | event = b["events"].event(data)
|
264 | 264 | if args.previous:
|
265 |
| - print("%-8s %-16s %-6s %14s %-16s %-6s" % (strftime("%H:%M:%S"), event.task, event.pid, event.delta_us, event.prev_task, event.prev_pid)) |
| 265 | + print("%-8s %-16s %-6s %14s %-16s %-6s" % (strftime("%H:%M:%S"), event.task.decode('utf-8', 'replace'), event.pid, event.delta_us, event.prev_task.decode('utf-8', 'replace'), event.prev_pid)) |
266 | 266 | else:
|
267 |
| - print("%-8s %-16s %-6s %14s" % (strftime("%H:%M:%S"), event.task, event.pid, event.delta_us)) |
| 267 | + print("%-8s %-16s %-6s %14s" % (strftime("%H:%M:%S"), event.task.decode('utf-8', 'replace'), event.pid, event.delta_us)) |
| 268 | + |
| 269 | +max_pid = int(open("/proc/sys/kernel/pid_max").read()) |
268 | 270 |
|
269 | 271 | # load BPF program
|
270 |
| -b = BPF(text=bpf_text) |
| 272 | +b = BPF(text=bpf_text, cflags=["-DMAX_PID=%d" % max_pid]) |
271 | 273 | if not is_support_raw_tp:
|
272 | 274 | b.attach_kprobe(event="ttwu_do_wakeup", fn_name="trace_ttwu_do_wakeup")
|
273 | 275 | b.attach_kprobe(event="wake_up_new_task", fn_name="trace_wake_up_new_task")
|
|
0 commit comments