From cf174bcc07c02a71041560a8b58962f0635b7f28 Mon Sep 17 00:00:00 2001 From: Stephen Curry Date: Sat, 5 Jul 2025 16:37:14 +0800 Subject: [PATCH] osprobe strcase match acl_thread --- .../convert/conver_osprobe_to_timeline.py | 7 +++++ systrace/src/os/bpf_comm.h | 30 +++++++++++-------- systrace/src/os/os_cpu.bpf.c | 5 +--- systrace/src/os/os_mem.bpf.c | 24 --------------- 4 files changed, 26 insertions(+), 40 deletions(-) diff --git a/systrace/convert/conver_osprobe_to_timeline.py b/systrace/convert/conver_osprobe_to_timeline.py index 57e1ae5..508a7c4 100644 --- a/systrace/convert/conver_osprobe_to_timeline.py +++ b/systrace/convert/conver_osprobe_to_timeline.py @@ -110,3 +110,10 @@ def aggregate_timeline_files(output_path): json.dump(cpu_trace_data, f, indent=None, separators=(',', ':')) print(f"Aggregated {len(trace_data['traceEvents'])} events to {output_path}") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Aggregate all *.timeline files into a single JSON') + parser.add_argument('--output', required=True, help='Output JSON file path') + args = parser.parse_args() + aggregate_timeline_files(args.output) \ No newline at end of file diff --git a/systrace/src/os/bpf_comm.h b/systrace/src/os/bpf_comm.h index 82c77bb..3b96012 100644 --- a/systrace/src/os/bpf_comm.h +++ b/systrace/src/os/bpf_comm.h @@ -201,10 +201,23 @@ static __always_inline void create_cur_event(trace_event_data_t *cur_event, int cur_event->rank = rank; } -static __always_inline char is_filter_task(struct task_struct *task) +static int strcase_match(const char *s1, const char *s2) { - unsigned int flags = BPF_CORE_READ(task, flags); - return (char)((flags & PF_IDLE) || (flags & PF_KTHREAD)); + while (*s1 && *s2) { + char c1 = *s1; + char c2 = *s2; + + if (c1 >= 'A' && c1 <= 'Z') + c1 += 'a' - 'A'; + + if (c1 != c2) + return 0; + + s1++; + s2++; + } + + return (*s1 == '\0' && *s2 == '\0'); } static __always_inline int get_npu_id(struct task_struct *task) @@ -229,15 +242,8 @@ static __always_inline int get_npu_id(struct task_struct *task) } // 匹配ACL线程 - int match = 1; - const char target[] = "ACL_thread"; - for (int i = 0; i < sizeof(target); i++) { - if (comm[i] != target[i]) { - match = 0; - break; - } - } - if (match) { + const char target[] = "acl_thread"; + if (strcase_match(comm, target)) { u32 tgid = BPF_CORE_READ(task, tgid); rank = bpf_map_lookup_elem(&proc_filter_map, &tgid); if (rank) { diff --git a/systrace/src/os/os_cpu.bpf.c b/systrace/src/os/os_cpu.bpf.c index d6f2490..c900808 100644 --- a/systrace/src/os/os_cpu.bpf.c +++ b/systrace/src/os/os_cpu.bpf.c @@ -110,10 +110,7 @@ KRAWTRACE(sched_switch, bpf_raw_tracepoint_args) { struct task_struct *prev = (struct task_struct *)ctx->args[1]; struct task_struct *current = (struct task_struct *)ctx->args[2]; - - if (is_filter_task(current)) { - return 0; - } + process_offcpu(prev, current, (void *)ctx); process_oncpu(current, (void *)ctx); diff --git a/systrace/src/os/os_mem.bpf.c b/systrace/src/os/os_mem.bpf.c index 71aa9e2..69140cc 100644 --- a/systrace/src/os/os_mem.bpf.c +++ b/systrace/src/os/os_mem.bpf.c @@ -138,9 +138,6 @@ static __always_inline int common_event_end(struct task_struct *task, void *ctx, KPROBE(handle_mm_fault, pt_regs) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } fault_event_start(task, EVENT_TYPE_MM_FAULT); return 0; @@ -149,9 +146,6 @@ KPROBE(handle_mm_fault, pt_regs) KRETPROBE(handle_mm_fault, pt_regs) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } fault_event_end(task, ctx, EVENT_TYPE_MM_FAULT); return 0; @@ -160,9 +154,6 @@ KRETPROBE(handle_mm_fault, pt_regs) KPROBE(do_swap_page, pt_regs) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } common_event_start(task, EVENT_TYPE_SWAP_PAGE); return 0; } @@ -170,9 +161,6 @@ KPROBE(do_swap_page, pt_regs) KRETPROBE(do_swap_page, pt_regs) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } common_event_end(task, ctx, EVENT_TYPE_SWAP_PAGE); return 0; } @@ -180,9 +168,6 @@ KRETPROBE(do_swap_page, pt_regs) KRAWTRACE(mm_compaction_begin, bpf_raw_tracepoint_args) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } common_event_start(task, EVENT_TYPE_COMPACTION); return 0; } @@ -190,9 +175,6 @@ KRAWTRACE(mm_compaction_begin, bpf_raw_tracepoint_args) KRAWTRACE(mm_compaction_end, bpf_raw_tracepoint_args) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } common_event_end(task, ctx, EVENT_TYPE_COMPACTION); return 0; } @@ -200,9 +182,6 @@ KRAWTRACE(mm_compaction_end, bpf_raw_tracepoint_args) KRAWTRACE(mm_vmscan_direct_reclaim_begin, bpf_raw_tracepoint_args) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } common_event_start(task, EVENT_TYPE_VMSCAN); return 0; } @@ -210,9 +189,6 @@ KRAWTRACE(mm_vmscan_direct_reclaim_begin, bpf_raw_tracepoint_args) KRAWTRACE(mm_vmscan_direct_reclaim_end, bpf_raw_tracepoint_args) { struct task_struct *task = (struct task_struct *)bpf_get_current_task(); - if (is_filter_task(task)) { - return 0; - } common_event_end(task, ctx, EVENT_TYPE_VMSCAN); return 0; } -- Gitee