From 12a4c06fa23dd0317b9d78e853088ebe8b5005d0 Mon Sep 17 00:00:00 2001 From: Stephen Curry Date: Sat, 5 Jul 2025 09:06:54 +0000 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=80=80=20'Pull=20Request=20!27=20:?= =?UTF-8?q?=20osprobe=20strcase=20match=20acl=5Fthread'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../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, 40 insertions(+), 26 deletions(-) diff --git a/systrace/convert/conver_osprobe_to_timeline.py b/systrace/convert/conver_osprobe_to_timeline.py index 508a7c4..57e1ae5 100644 --- a/systrace/convert/conver_osprobe_to_timeline.py +++ b/systrace/convert/conver_osprobe_to_timeline.py @@ -110,10 +110,3 @@ 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 3b96012..82c77bb 100644 --- a/systrace/src/os/bpf_comm.h +++ b/systrace/src/os/bpf_comm.h @@ -201,23 +201,10 @@ static __always_inline void create_cur_event(trace_event_data_t *cur_event, int cur_event->rank = rank; } -static int strcase_match(const char *s1, const char *s2) +static __always_inline char is_filter_task(struct task_struct *task) { - 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'); + unsigned int flags = BPF_CORE_READ(task, flags); + return (char)((flags & PF_IDLE) || (flags & PF_KTHREAD)); } static __always_inline int get_npu_id(struct task_struct *task) @@ -242,8 +229,15 @@ static __always_inline int get_npu_id(struct task_struct *task) } // 匹配ACL线程 - const char target[] = "acl_thread"; - if (strcase_match(comm, target)) { + 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) { 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 c900808..d6f2490 100644 --- a/systrace/src/os/os_cpu.bpf.c +++ b/systrace/src/os/os_cpu.bpf.c @@ -110,7 +110,10 @@ 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 69140cc..71aa9e2 100644 --- a/systrace/src/os/os_mem.bpf.c +++ b/systrace/src/os/os_mem.bpf.c @@ -138,6 +138,9 @@ 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; @@ -146,6 +149,9 @@ 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; @@ -154,6 +160,9 @@ 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; } @@ -161,6 +170,9 @@ 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; } @@ -168,6 +180,9 @@ 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; } @@ -175,6 +190,9 @@ 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; } @@ -182,6 +200,9 @@ 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; } @@ -189,6 +210,9 @@ 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