From nobody Sat Oct 4 08:06:49 2025 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 994F8248F70; Tue, 19 Aug 2025 03:40:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755574814; cv=none; b=Y3V1V9o0kURSiQOPutuAhry/bjrhGArCXbtaGXZbG0M2Unhz2EFN+VzRQ9TEZVHkFhcGef0wMJ7+9s/FCKhJhZdv2r3d/LQMz+3F4qPOzj+lkuSFOptV166vceJ8NlpDPKNsVUvSrr3RUV7iOKKqUrRvYdAcUUW2/wQcRiLp60w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755574814; c=relaxed/simple; bh=zudiWkkAlg6yySZkWMGW/IXw6hzgirR0YopZ0oI3JAs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EZ9tXyARaBAUGjAEOeX6cVdQx9RAER6vbyNWB6A7McW5eocqKE2wLYr4hbE/BVHo5FNY2Cq2JYAhdgcxaJCz99U6cXHgxaDQ+sJCg4gHeUveJsvYLK3DC4UEOpzwMgFMneUp18VHjK+0xX1z2PfLFYgW4bZNhWmE/CH2m6DwP+Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=N0IMwc4e; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="N0IMwc4e" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-76e2eb9ae80so3692168b3a.3; Mon, 18 Aug 2025 20:40:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755574812; x=1756179612; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y8iwRQl4S0Ri7auKWOImDztrR8W3w7sQvsgC0R12G/0=; b=N0IMwc4ecQekVK3QvjtFI98W/KL2VH3ntqa5BSXgx0iI8wdTXt7cYTr/mKZiGv1OAG HHmiO2iqxiadn7BMYBtBfvInZAxAW2M5NgezgMsDB1qmd7fuT5RXJrgrSURQDhBjHgKK wldbG0xqA1XUVgHn52R4rDT2b1dYQZdPZexYtcdRjN2DS/ers2exXuWh2hZZKWCfT6HN fk+rOMeHnyRBi44qDZpLfFC/kVWmYI8BYUXV6e9I+qVI0AwniV5oSsEyG+sDUadcCAsm V8nkOwLzQWfn8aQUhqx/8mofe1Xwzdo+I3mfeEkAb/Zxdgoq9TTJt/b8FAqPsOfsFv+F tJoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755574812; x=1756179612; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y8iwRQl4S0Ri7auKWOImDztrR8W3w7sQvsgC0R12G/0=; b=nL1x9g+laXO7+6ZI4q2IJ/MrCozclkQWLob8ipU39uFVN6/ekAYhF2YFNzorVBVs2/ PqN8g5md9n5vVImUOc/gGOkJL+qCI6alqw173lo2XXEQgSY9V9xfeZFQSf5wwBurbnk3 X2RcZABBc4DRZx3oR4KL5bG8xJnAntinqhEwZlanizOWoiEXs4I6PMWO8uglUzpAL3no M8WzOtWQZqLSTFppIdo4IkzwNJsX9DZuOqjU7w9H1VaZ5AMJi1e21Ekr7YNFh6OKnIiE 8xRlgo12MurW7/28lYYmyDW+Bb5oF4Tp3Sy1NJowKmYRJ2+yhEab7g8qSVbsFnjNPDef Cung== X-Forwarded-Encrypted: i=1; AJvYcCUMJ95PbKtjMmfOijSC+w6rR39emxw86/oqudQcd3tvBm6G+EkDOamoZy0FgZKTtbiaXWIMNH41EyDX1Tdx@vger.kernel.org, AJvYcCUb5sitqfNdrYyYS2hIXs9gN2vZFscr8/ZckXxUWFYdh44YhpWHoq9j0GyDhxmrPSAVAbPrtuQarxpAhzBEXtoB@vger.kernel.org, AJvYcCW+jeA54ntWf6vop624NkedOE9y21NPbpLGpCDab3D+x+9D5D3NAJclSi8qupbaHcKjbGV0I3SH@vger.kernel.org, AJvYcCW91EySEhcqlP2Oew5ivEDSdHhCKZ7h13exq+4maK9EA2AOFFGrBOQX5bbcMOrkcKZbtsE=@vger.kernel.org X-Gm-Message-State: AOJu0YyfM/AD7iEgnQDBJKu0IXHd20ZX05uAyQfTAkb3Z9SCwxeOPEPO oD6V3VDcRzNRPhzXECaBj8xeE2Nhk0rf1eR1FQuu3IF+SXeolRebWP+V X-Gm-Gg: ASbGncsIigEFNfpUsESV+gI2CoFcSvLr+LCZaZr97hZWg0kJjarK9b6vhldSdxbA89w HkpIkavA9FCmf5b9vQ2IgWPQdQSWdiZpW4Fq/uyuaZXmqmnVDCCbZY0UEUWnUkMpcyvLpjSZvLI ewheKAt9QB2wTAFwOZbUq8pWSpmZ5+n3wao7gguOH7dTZHe62/Jjjw5tWap7JWraIexa/USYx7H ajM7E5O4/100yGt30f+Z8PwpJuYE/eHawEy05ozo5TB5TaJcE9N+OOfPPVnrNxkl18EnFaGSIXc gtjvE9Q6yQ0uTSs4paWOxzUm42wzeLLw6Y9GZMrdfSmP9zkVZI2GqOToy4h+IuwQZyTwCp4gTtf LHS/pHc2VQlexp9ehc2U= X-Google-Smtp-Source: AGHT+IGq2Y/VghNIhMCi5X42fZulfoST68TvPpu5G7rbyJI9DWryp4zreApopuTKNw6X9MvsnCjEjQ== X-Received: by 2002:a05:6a20:3d86:b0:240:763:797e with SMTP id adf61e73a8af0-2430d3b2e66mr1311094637.25.1755574811569; Mon, 18 Aug 2025 20:40:11 -0700 (PDT) Received: from 7940hx ([43.129.244.20]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e7d0d22b8sm1109804b3a.4.2025.08.18.20.40.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 20:40:11 -0700 (PDT) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, mykolal@fb.com, shuah@kernel.org, davem@davemloft.net, kuba@kernel.org, hawk@kernel.org, nathan@kernel.org, nick.desaulniers+lkml@gmail.com, morbo@google.com, justinstitt@google.com, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, llvm@lists.linux.dev Subject: [PATCH bpf-next 1/3] selftests/bpf: move get_ksyms and get_addrs to trace_helpers.c Date: Tue, 19 Aug 2025 11:39:54 +0800 Message-ID: <20250819033956.59164-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250819033956.59164-1-dongml2@chinatelecom.cn> References: <20250819033956.59164-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We need to get all the kernel function that can be traced sometimes, so we move the get_syms() and get_addrs() in kprobe_multi_test.c to trace_helpers.c and rename it to bpf_get_ksyms() and bpf_get_addrs(). Signed-off-by: Menglong Dong --- .../bpf/prog_tests/kprobe_multi_test.c | 220 +----------------- tools/testing/selftests/bpf/trace_helpers.c | 214 +++++++++++++++++ tools/testing/selftests/bpf/trace_helpers.h | 3 + 3 files changed, 220 insertions(+), 217 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c b/t= ools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c index e19ef509ebf8..171706e78da8 100644 --- a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c @@ -422,220 +422,6 @@ static void test_unique_match(void) kprobe_multi__destroy(skel); } =20 -static size_t symbol_hash(long key, void *ctx __maybe_unused) -{ - return str_hash((const char *) key); -} - -static bool symbol_equal(long key1, long key2, void *ctx __maybe_unused) -{ - return strcmp((const char *) key1, (const char *) key2) =3D=3D 0; -} - -static bool is_invalid_entry(char *buf, bool kernel) -{ - if (kernel && strchr(buf, '[')) - return true; - if (!kernel && !strchr(buf, '[')) - return true; - return false; -} - -static bool skip_entry(char *name) -{ - /* - * We attach to almost all kernel functions and some of them - * will cause 'suspicious RCU usage' when fprobe is attached - * to them. Filter out the current culprits - arch_cpu_idle - * default_idle and rcu_* functions. - */ - if (!strcmp(name, "arch_cpu_idle")) - return true; - if (!strcmp(name, "default_idle")) - return true; - if (!strncmp(name, "rcu_", 4)) - return true; - if (!strcmp(name, "bpf_dispatcher_xdp_func")) - return true; - if (!strncmp(name, "__ftrace_invalid_address__", - sizeof("__ftrace_invalid_address__") - 1)) - return true; - return false; -} - -/* Do comparision by ignoring '.llvm.' suffixes. */ -static int compare_name(const char *name1, const char *name2) -{ - const char *res1, *res2; - int len1, len2; - - res1 =3D strstr(name1, ".llvm."); - res2 =3D strstr(name2, ".llvm."); - len1 =3D res1 ? res1 - name1 : strlen(name1); - len2 =3D res2 ? res2 - name2 : strlen(name2); - - if (len1 =3D=3D len2) - return strncmp(name1, name2, len1); - if (len1 < len2) - return strncmp(name1, name2, len1) <=3D 0 ? -1 : 1; - return strncmp(name1, name2, len2) >=3D 0 ? 1 : -1; -} - -static int load_kallsyms_compare(const void *p1, const void *p2) -{ - return compare_name(((const struct ksym *)p1)->name, ((const struct ksym = *)p2)->name); -} - -static int search_kallsyms_compare(const void *p1, const struct ksym *p2) -{ - return compare_name(p1, p2->name); -} - -static int get_syms(char ***symsp, size_t *cntp, bool kernel) -{ - size_t cap =3D 0, cnt =3D 0; - char *name =3D NULL, *ksym_name, **syms =3D NULL; - struct hashmap *map; - struct ksyms *ksyms; - struct ksym *ks; - char buf[256]; - FILE *f; - int err =3D 0; - - ksyms =3D load_kallsyms_custom_local(load_kallsyms_compare); - if (!ASSERT_OK_PTR(ksyms, "load_kallsyms_custom_local")) - return -EINVAL; - - /* - * The available_filter_functions contains many duplicates, - * but other than that all symbols are usable in kprobe multi - * interface. - * Filtering out duplicates by using hashmap__add, which won't - * add existing entry. - */ - - if (access("/sys/kernel/tracing/trace", F_OK) =3D=3D 0) - f =3D fopen("/sys/kernel/tracing/available_filter_functions", "r"); - else - f =3D fopen("/sys/kernel/debug/tracing/available_filter_functions", "r"); - - if (!f) - return -EINVAL; - - map =3D hashmap__new(symbol_hash, symbol_equal, NULL); - if (IS_ERR(map)) { - err =3D libbpf_get_error(map); - goto error; - } - - while (fgets(buf, sizeof(buf), f)) { - if (is_invalid_entry(buf, kernel)) - continue; - - free(name); - if (sscanf(buf, "%ms$*[^\n]\n", &name) !=3D 1) - continue; - if (skip_entry(name)) - continue; - - ks =3D search_kallsyms_custom_local(ksyms, name, search_kallsyms_compare= ); - if (!ks) { - err =3D -EINVAL; - goto error; - } - - ksym_name =3D ks->name; - err =3D hashmap__add(map, ksym_name, 0); - if (err =3D=3D -EEXIST) { - err =3D 0; - continue; - } - if (err) - goto error; - - err =3D libbpf_ensure_mem((void **) &syms, &cap, - sizeof(*syms), cnt + 1); - if (err) - goto error; - - syms[cnt++] =3D ksym_name; - } - - *symsp =3D syms; - *cntp =3D cnt; - -error: - free(name); - fclose(f); - hashmap__free(map); - if (err) - free(syms); - return err; -} - -static int get_addrs(unsigned long **addrsp, size_t *cntp, bool kernel) -{ - unsigned long *addr, *addrs, *tmp_addrs; - int err =3D 0, max_cnt, inc_cnt; - char *name =3D NULL; - size_t cnt =3D 0; - char buf[256]; - FILE *f; - - if (access("/sys/kernel/tracing/trace", F_OK) =3D=3D 0) - f =3D fopen("/sys/kernel/tracing/available_filter_functions_addrs", "r"); - else - f =3D fopen("/sys/kernel/debug/tracing/available_filter_functions_addrs"= , "r"); - - if (!f) - return -ENOENT; - - /* In my local setup, the number of entries is 50k+ so Let us initially - * allocate space to hold 64k entries. If 64k is not enough, incrementally - * increase 1k each time. - */ - max_cnt =3D 65536; - inc_cnt =3D 1024; - addrs =3D malloc(max_cnt * sizeof(long)); - if (addrs =3D=3D NULL) { - err =3D -ENOMEM; - goto error; - } - - while (fgets(buf, sizeof(buf), f)) { - if (is_invalid_entry(buf, kernel)) - continue; - - free(name); - if (sscanf(buf, "%p %ms$*[^\n]\n", &addr, &name) !=3D 2) - continue; - if (skip_entry(name)) - continue; - - if (cnt =3D=3D max_cnt) { - max_cnt +=3D inc_cnt; - tmp_addrs =3D realloc(addrs, max_cnt); - if (!tmp_addrs) { - err =3D -ENOMEM; - goto error; - } - addrs =3D tmp_addrs; - } - - addrs[cnt++] =3D (unsigned long)addr; - } - - *addrsp =3D addrs; - *cntp =3D cnt; - -error: - free(name); - fclose(f); - if (err) - free(addrs); - return err; -} - static void do_bench_test(struct kprobe_multi_empty *skel, struct bpf_kpro= be_multi_opts *opts) { long attach_start_ns, attach_end_ns; @@ -670,7 +456,7 @@ static void test_kprobe_multi_bench_attach(bool kernel) char **syms =3D NULL; size_t cnt =3D 0; =20 - if (!ASSERT_OK(get_syms(&syms, &cnt, kernel), "get_syms")) + if (!ASSERT_OK(bpf_get_ksyms(&syms, &cnt, kernel), "bpf_get_ksyms")) return; =20 skel =3D kprobe_multi_empty__open_and_load(); @@ -696,13 +482,13 @@ static void test_kprobe_multi_bench_attach_addr(bool = kernel) size_t cnt =3D 0; int err; =20 - err =3D get_addrs(&addrs, &cnt, kernel); + err =3D bpf_get_addrs(&addrs, &cnt, kernel); if (err =3D=3D -ENOENT) { test__skip(); return; } =20 - if (!ASSERT_OK(err, "get_addrs")) + if (!ASSERT_OK(err, "bpf_get_addrs")) return; =20 skel =3D kprobe_multi_empty__open_and_load(); diff --git a/tools/testing/selftests/bpf/trace_helpers.c b/tools/testing/se= lftests/bpf/trace_helpers.c index 81943c6254e6..d24baf244d1f 100644 --- a/tools/testing/selftests/bpf/trace_helpers.c +++ b/tools/testing/selftests/bpf/trace_helpers.c @@ -17,6 +17,7 @@ #include #include #include +#include "bpf/hashmap.h" #include "bpf/libbpf_internal.h" =20 #define TRACEFS_PIPE "/sys/kernel/tracing/trace_pipe" @@ -519,3 +520,216 @@ void read_trace_pipe(void) { read_trace_pipe_iter(trace_pipe_cb, NULL, 0); } + +static size_t symbol_hash(long key, void *ctx __maybe_unused) +{ + return str_hash((const char *) key); +} + +static bool symbol_equal(long key1, long key2, void *ctx __maybe_unused) +{ + return strcmp((const char *) key1, (const char *) key2) =3D=3D 0; +} + +static bool is_invalid_entry(char *buf, bool kernel) +{ + if (kernel && strchr(buf, '[')) + return true; + if (!kernel && !strchr(buf, '[')) + return true; + return false; +} + +static bool skip_entry(char *name) +{ + /* + * We attach to almost all kernel functions and some of them + * will cause 'suspicious RCU usage' when fprobe is attached + * to them. Filter out the current culprits - arch_cpu_idle + * default_idle and rcu_* functions. + */ + if (!strcmp(name, "arch_cpu_idle")) + return true; + if (!strcmp(name, "default_idle")) + return true; + if (!strncmp(name, "rcu_", 4)) + return true; + if (!strcmp(name, "bpf_dispatcher_xdp_func")) + return true; + if (!strncmp(name, "__ftrace_invalid_address__", + sizeof("__ftrace_invalid_address__") - 1)) + return true; + return false; +} + +/* Do comparison by ignoring '.llvm.' suffixes. */ +static int compare_name(const char *name1, const char *name2) +{ + const char *res1, *res2; + int len1, len2; + + res1 =3D strstr(name1, ".llvm."); + res2 =3D strstr(name2, ".llvm."); + len1 =3D res1 ? res1 - name1 : strlen(name1); + len2 =3D res2 ? res2 - name2 : strlen(name2); + + if (len1 =3D=3D len2) + return strncmp(name1, name2, len1); + if (len1 < len2) + return strncmp(name1, name2, len1) <=3D 0 ? -1 : 1; + return strncmp(name1, name2, len2) >=3D 0 ? 1 : -1; +} + +static int load_kallsyms_compare(const void *p1, const void *p2) +{ + return compare_name(((const struct ksym *)p1)->name, ((const struct ksym = *)p2)->name); +} + +static int search_kallsyms_compare(const void *p1, const struct ksym *p2) +{ + return compare_name(p1, p2->name); +} + +int bpf_get_ksyms(char ***symsp, size_t *cntp, bool kernel) +{ + size_t cap =3D 0, cnt =3D 0; + char *name =3D NULL, *ksym_name, **syms =3D NULL; + struct hashmap *map; + struct ksyms *ksyms; + struct ksym *ks; + char buf[256]; + FILE *f; + int err =3D 0; + + ksyms =3D load_kallsyms_custom_local(load_kallsyms_compare); + if (!ksyms) + return -EINVAL; + + /* + * The available_filter_functions contains many duplicates, + * but other than that all symbols are usable to trace. + * Filtering out duplicates by using hashmap__add, which won't + * add existing entry. + */ + + if (access("/sys/kernel/tracing/trace", F_OK) =3D=3D 0) + f =3D fopen("/sys/kernel/tracing/available_filter_functions", "r"); + else + f =3D fopen("/sys/kernel/debug/tracing/available_filter_functions", "r"); + + if (!f) + return -EINVAL; + + map =3D hashmap__new(symbol_hash, symbol_equal, NULL); + if (IS_ERR(map)) { + err =3D libbpf_get_error(map); + goto error; + } + + while (fgets(buf, sizeof(buf), f)) { + if (is_invalid_entry(buf, kernel)) + continue; + + free(name); + if (sscanf(buf, "%ms$*[^\n]\n", &name) !=3D 1) + continue; + if (skip_entry(name)) + continue; + + ks =3D search_kallsyms_custom_local(ksyms, name, search_kallsyms_compare= ); + if (!ks) { + err =3D -EINVAL; + goto error; + } + + ksym_name =3D ks->name; + err =3D hashmap__add(map, ksym_name, 0); + if (err =3D=3D -EEXIST) { + err =3D 0; + continue; + } + if (err) + goto error; + + err =3D libbpf_ensure_mem((void **) &syms, &cap, + sizeof(*syms), cnt + 1); + if (err) + goto error; + + syms[cnt++] =3D ksym_name; + } + + *symsp =3D syms; + *cntp =3D cnt; + +error: + free(name); + fclose(f); + hashmap__free(map); + if (err) + free(syms); + return err; +} + +int bpf_get_addrs(unsigned long **addrsp, size_t *cntp, bool kernel) +{ + unsigned long *addr, *addrs, *tmp_addrs; + int err =3D 0, max_cnt, inc_cnt; + char *name =3D NULL; + size_t cnt =3D 0; + char buf[256]; + FILE *f; + + if (access("/sys/kernel/tracing/trace", F_OK) =3D=3D 0) + f =3D fopen("/sys/kernel/tracing/available_filter_functions_addrs", "r"); + else + f =3D fopen("/sys/kernel/debug/tracing/available_filter_functions_addrs"= , "r"); + + if (!f) + return -ENOENT; + + /* In my local setup, the number of entries is 50k+ so Let us initially + * allocate space to hold 64k entries. If 64k is not enough, incrementally + * increase 1k each time. + */ + max_cnt =3D 65536; + inc_cnt =3D 1024; + addrs =3D malloc(max_cnt * sizeof(long)); + if (addrs =3D=3D NULL) { + err =3D -ENOMEM; + goto error; + } + + while (fgets(buf, sizeof(buf), f)) { + if (is_invalid_entry(buf, kernel)) + continue; + + free(name); + if (sscanf(buf, "%p %ms$*[^\n]\n", &addr, &name) !=3D 2) + continue; + if (skip_entry(name)) + continue; + + if (cnt =3D=3D max_cnt) { + max_cnt +=3D inc_cnt; + tmp_addrs =3D realloc(addrs, max_cnt); + if (!tmp_addrs) { + err =3D -ENOMEM; + goto error; + } + addrs =3D tmp_addrs; + } + + addrs[cnt++] =3D (unsigned long)addr; + } + + *addrsp =3D addrs; + *cntp =3D cnt; + +error: + free(name); + fclose(f); + if (err) + free(addrs); + return err; +} diff --git a/tools/testing/selftests/bpf/trace_helpers.h b/tools/testing/se= lftests/bpf/trace_helpers.h index 2ce873c9f9aa..9437bdd4afa5 100644 --- a/tools/testing/selftests/bpf/trace_helpers.h +++ b/tools/testing/selftests/bpf/trace_helpers.h @@ -41,4 +41,7 @@ ssize_t get_rel_offset(uintptr_t addr); =20 int read_build_id(const char *path, char *build_id, size_t size); =20 +int bpf_get_ksyms(char ***symsp, size_t *cntp, bool kernel); +int bpf_get_addrs(unsigned long **addrsp, size_t *cntp, bool kernel); + #endif --=20 2.50.1 From nobody Sat Oct 4 08:06:49 2025 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D4292E337E; Tue, 19 Aug 2025 03:40:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755574819; cv=none; b=EM+c69mNUvRlRVgnLE4iU2H5dYlRYF3ikMmVSJyic3tIS4xXGKciuMGULmNMMgBhOXPxBBDVDcn1qml7GOILgc1H6qKWomnC91bT7uS3JO/X9A5p4kvoNXAi/Fx12vXnfCIrImaR8L/yJF7eJnYWz/b8lVf9apKIPm2fNRHvLD4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755574819; c=relaxed/simple; bh=TGw2ul2ZAldEcVHaU0fnT+T9Zm5AaMY7QcEq1fLdVSA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oOWOKc4sO9s/R9RpL+k5dKNzYjK85c/n5bDo8OI24A8Sj0vXVjxCFG7s60cnq9DKTb9/iMlhCfr9d2ypMeyFrAowVOZ1m826lsZ2iFdjrp8WvfLNfqz1WCrq4MfVtSSk4ITOuY0RiE9XxCSwNaL1TpZh7hgl5opntP3Qo0cpbeY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EHNjwAI5; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EHNjwAI5" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-76e2ea887f6so3598020b3a.2; Mon, 18 Aug 2025 20:40:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755574818; x=1756179618; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DGBbLIiLGqrmFvSwaYDbAojdCre78exL+6ZjHnBuXvE=; b=EHNjwAI5wRmQh+oylJOYmvTeyiMfTJVu5xW1ETHE8EohMrntKJjCe9MF1w2UI1DTDJ yv0C8h1UOyiauronFQh1n9zuQrBUTpVIyb44B7vRMkP2hSynQBC7uoxtni5xy6B8GUFk TDgTo/9O8c8WsYd53Qvo+GHcq+gd6eQsI++gbuJeKEA9/o6QulERoszh0uZ3O3SfAuEh W0a9tl0itsei1zfBxhLNnbGMVVVUHBs/2x+b4VqP5roLFC7rtsbDN1OD6TuwnJO134Ex qTcB3V/zVAFl2VTTcoXoi5ApAbQ+KJF94nj7/ps1doKhkm76jkaV8jEAZNRk3GEqhvZ6 vrXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755574818; x=1756179618; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DGBbLIiLGqrmFvSwaYDbAojdCre78exL+6ZjHnBuXvE=; b=UwgGhRjLdWFnKd3+BO2UFY0wyOM5tIudP+ZudmaxQNAUx3GQeAbBWogVLnovybr5Wd DPAQAdAg8RQ/2rZ3O34IweWSy8qQMYZf14bYPQsLwNSbDhGxjirXoOc/4PkFLUQwop27 k4wjAHx9QB5SGJ8FP9XAXRoO5hoRAlJwcY5hdf1zZDKVgyGORssF4MaAo4s0hYphHtJy IgaPUHr74USwZ386W7wAHfiTRz1y0VSZg1GUj5vmoyABrkxq9CEhtAcgPgKl6oibVwrE vWCYgAw0oIaCugfxBtU/nyiyqWwley+ziT8fTV1rd2lKgr6gJs36gig+pZYHijsdRY87 ePkQ== X-Forwarded-Encrypted: i=1; AJvYcCVaDb21aWn/VYLXwjd400kwoBTFEn/uPdlTT53N0NuVqHw4HwFomTZgc7wd4o39h+AaG/g=@vger.kernel.org, AJvYcCVeig5ZKbNUp9+6alz+pyLf5XQYlkJfYGjrVuM0BVwVJAy5yGw2tau5qmHisYZo9MzqOlxCBH3g@vger.kernel.org, AJvYcCWSHG4apsLvqSkQTA+edIodlUvP0guFqOj0GnLbt+a7lQPJbALvF0RPUCQdWhr5UurJsi6tL3AtRRkc1put@vger.kernel.org, AJvYcCX6KhVlv37akCDK8Y+MtQ5IsI1gmy4DopiQjZj2CJ7ry/iHGrbHQZsjHd+wssecNtG7NleTLEz3txiFQz+y0gzh@vger.kernel.org X-Gm-Message-State: AOJu0YywkvLjdk5Q+gonbq6QwEhCC8AChLXPvGca5/nV6CSRq0Cm10mV gh1cMKz5Gg/51xWzo1HDyfWx42iVne9tUHkj2ifG7WTyfm1ZampX9hkY X-Gm-Gg: ASbGncv1F77R8NRztEycxPoJMhhE0MdhAujYGn5nGNypzLdaWwDlM3JIudCUlxCWKol rgEMwlYjo9LhuxO38I3MuKKYFE4GBTjxkgaWbO8A4XoAdgyq9xC9teyGo8hM9bnoLHcOm2XyBTK bBwD0ie1vX5eggAqM3uN8Z43ufIlVGOMr8QdvXIvMdmhsaJfAvSa/3Rv1g3mJ/UTrzJ0A35rimu CEGPk852Io6a6x8s5D3nXy0QmJLrmcHbealm3akyzi0DGvMtLtK/HcmMdWKmlLeCq13cDR98ezt 5YTcFM9i7pxUKvxIYO03c5mAWEjXG0gHyNE5NwUdmb51UaLuyym3g5KrG8UiLWzGmRkXTTDS9XA W3uhO2Urrni5Ysp6sIv4= X-Google-Smtp-Source: AGHT+IF4R9bdzNb3/9hrsjsrr0p8U2Js2+EVLDDxYI98NMhZmCYvt0+xwcxGQlfFKVcOuwBibBiaiA== X-Received: by 2002:a05:6a20:1596:b0:218:96ad:720d with SMTP id adf61e73a8af0-2430d2c353dmr1422612637.1.1755574817578; Mon, 18 Aug 2025 20:40:17 -0700 (PDT) Received: from 7940hx ([43.129.244.20]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e7d0d22b8sm1109804b3a.4.2025.08.18.20.40.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 20:40:16 -0700 (PDT) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, mykolal@fb.com, shuah@kernel.org, davem@davemloft.net, kuba@kernel.org, hawk@kernel.org, nathan@kernel.org, nick.desaulniers+lkml@gmail.com, morbo@google.com, justinstitt@google.com, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, llvm@lists.linux.dev Subject: [PATCH bpf-next 2/3] selftests/bpf: skip recursive functions for kprobe_multi Date: Tue, 19 Aug 2025 11:39:55 +0800 Message-ID: <20250819033956.59164-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250819033956.59164-1-dongml2@chinatelecom.cn> References: <20250819033956.59164-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some functions is recursive for the kprobe_multi and impact the benchmark results. So just skip them. Signed-off-by: Menglong Dong --- tools/testing/selftests/bpf/trace_helpers.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/testing/selftests/bpf/trace_helpers.c b/tools/testing/se= lftests/bpf/trace_helpers.c index d24baf244d1f..9da9da51b132 100644 --- a/tools/testing/selftests/bpf/trace_helpers.c +++ b/tools/testing/selftests/bpf/trace_helpers.c @@ -559,6 +559,22 @@ static bool skip_entry(char *name) if (!strncmp(name, "__ftrace_invalid_address__", sizeof("__ftrace_invalid_address__") - 1)) return true; + + if (!strcmp(name, "migrate_disable")) + return true; + if (!strcmp(name, "migrate_enable")) + return true; + if (!strcmp(name, "rcu_read_unlock_strict")) + return true; + if (!strcmp(name, "preempt_count_add")) + return true; + if (!strcmp(name, "preempt_count_sub")) + return true; + if (!strcmp(name, "__rcu_read_lock")) + return true; + if (!strcmp(name, "__rcu_read_unlock")) + return true; + return false; } =20 --=20 2.50.1 From nobody Sat Oct 4 08:06:49 2025 Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D9412D2494; Tue, 19 Aug 2025 03:40:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755574825; cv=none; b=Dnm30I0SjszOsQ+R7PrHl1jGmlUSaG8sRv5WrpWpHzqFsujQUq7g5ffs00muZ9P05TOUECZQK2ILd5CVy/Qmi47lyILbuub3i8otAOkOJ4kfjSFvlzTN6oRnNRLcDPGN94kvUl9xXA/lgd+bP36l9JTSawdiAA01878olrBv8Ks= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755574825; c=relaxed/simple; bh=Yju8yrfKAYNHODJEA8h/x80ZTVJoAlrlqoDz+HFiBUk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kjTHTa5LMo/+20C04Khg3kSsB8rujhJ34LBCcpHGdG+xS2FSzXopXMTWX9ELxLVazV5bxSdv6oeetVnx7SZnc1ZpjqhEDJ/SS9pGgqMZnitOAmPUJo3oRW6TU+9fewmH5HtNLOMaUUgNO41Vuu75gvmMoFM0c1qasTS+cw33ytQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=N7Ym0pmI; arc=none smtp.client-ip=209.85.215.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="N7Ym0pmI" Received: by mail-pg1-f194.google.com with SMTP id 41be03b00d2f7-b471aaa085aso2764270a12.0; Mon, 18 Aug 2025 20:40:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755574823; x=1756179623; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=up9OuXnclQEyapPLpqQTS4r+NCar6InDzt6ZL5WdOUY=; b=N7Ym0pmI0ujXu/mLkT+8MlqfF733Nrdb7CfddbEc6rGgD4dOw0cCrl/a3SL6ZKl1Pf gq2Nl5nBpiXLMSEeOw6ManMF/wb6qwM5dptywRs2OJI9iyrOOo+38GWbjMcPtxAnwi+P 2+zRu0E2k+5iIhE1T/trztRNDQP1l1J9GMSOcY0TvDffmC209wPTmXrIpU9TXD6cUOve N9ON2Dt/AZPK2NZuZ5QX2n/CLIbLR4+rDJaSPI7HEGQoFOFkdNoWj1eZsqZThmMO+JNg s8uhiinhke4KhHEpp79EL0sXJnoq/HXbhU0ONH0hAK4SmIFedYhO1c8KVJnyNhbHgFfH XwjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755574823; x=1756179623; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=up9OuXnclQEyapPLpqQTS4r+NCar6InDzt6ZL5WdOUY=; b=vkO0aATlMv3NkIBQyh6EOOAP18G4gkgNUNKfoSPvdYWCORGjuo2slgn/1wEkggqRrT ahdVQMQlptrgqA4b/D64eYggLo8UNtXGQ0OpJxG7t+lDAuYqnj3lbSWYOxuYI2kN8t8q zP6KogEK/26NJk8qhJx+CGE3QZXLZ7GJlbSjbI0t6hE1Pj+Q2rz6AX0zzitqH+n5oXP7 Poy2Jb42CnLAw4pByXbinDvQ2rfLQjy2bXj8xEFjZN2E84hYXjtVcysxhAeTCN4Nfiqd 7xcHalAtHVTZsiYldbwr0dW1maYqbxqKmVkZD50R3eQhEzpZ+wzUzUAPD9Dfgy4BdTZT gD/A== X-Forwarded-Encrypted: i=1; AJvYcCU/fQsv/YYxjdVBHqXUzUlUVLDWsMNzQ0PNiy7Zu6LV9fRYp6IGiK5nwdFn6h8yIGF9zeQ=@vger.kernel.org, AJvYcCU0tRVl9zI53hg79dEw/3IVxmubJ/fyKa/0gRGZ8vxURMRJZgFc4Nhvt/5ceKgB73JIXZxFeCxYR1Sq+wa/@vger.kernel.org, AJvYcCUY+dg+dJCVh2Eg8t2dWNlkYYs7LRe2Ttz2oopm8WTZ46kE6sc7N5BJlyjhxwBAqzzR5eaAqSEl@vger.kernel.org, AJvYcCV6moY+Gn6AXa/NXuA2si8yebVMLEJF01TFxIxVBCZIdZCHZdwABv4aIsPH670fvkLhNHdu23y3wLbEMFa1Iv70@vger.kernel.org X-Gm-Message-State: AOJu0YwqFt4jVFOKJuzKlai/9XRwO1NyeHTi3qKwo7owmj1HPceDdboR hSNME1GbUkikGL7E9pk2NqSJNHX24UumT0oayITC3NtScIzCQwVhgWpV X-Gm-Gg: ASbGncvRNv6y72PGhUagcQaM0KaxoHQe9xeHFFOkRgsg0nlexqqH86w/LrlVzG710jM SyyY8VLtozz1koDpdG+N5B6LswjUkfWiMt36+lEJuVHU6hAd7lzgCh7Ff/hVR7IIKr8R3Qs7aB6 VCqW0QriPPzqtHzlVqiuQ6q/hNlOh+clMHD1jr1AAeYZOeDVqmkd2j3yAd/g0TjT0RbezvwnBsC ZD27csiJSpWWx7O/rL8LHt6n0bOBxQL45dl8T8CMaF82DtfnykGH9qBaLEZb4Aw3mp/acmPtJhV 28xu5NhhZrmNveoceJRQHytlDhTMnzf/IQzULTnw/4Rmo2Z5DUcArIAziyV8BAkTalIOL9EGTSO WkLVCF0yv/vlDXMJc+J0= X-Google-Smtp-Source: AGHT+IEC3G8q3IJdu+w6frUU7ChD8y/Lec4gtNmIDyApvzgod1kIF0UO4U1ayRLvDnDouBsTCoY4Yw== X-Received: by 2002:a17:902:e5cb:b0:240:3f43:260 with SMTP id d9443c01a7336-245e09cfaefmr12686785ad.17.1755574823362; Mon, 18 Aug 2025 20:40:23 -0700 (PDT) Received: from 7940hx ([43.129.244.20]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-76e7d0d22b8sm1109804b3a.4.2025.08.18.20.40.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 20:40:22 -0700 (PDT) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org Cc: daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, mykolal@fb.com, shuah@kernel.org, davem@davemloft.net, kuba@kernel.org, hawk@kernel.org, nathan@kernel.org, nick.desaulniers+lkml@gmail.com, morbo@google.com, justinstitt@google.com, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, llvm@lists.linux.dev Subject: [PATCH bpf-next 3/3] selftests/bpf: add benchmark testing for kprobe-multi-all Date: Tue, 19 Aug 2025 11:39:56 +0800 Message-ID: <20250819033956.59164-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250819033956.59164-1-dongml2@chinatelecom.cn> References: <20250819033956.59164-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For now, the benchmark for kprobe-multi is single, which means there is only 1 function is hooked during testing. Add the testing "kprobe-multi-all", which will hook all the kernel functions during the benchmark. And the "kretprobe-multi-all" is added too. Signed-off-by: Menglong Dong --- tools/testing/selftests/bpf/bench.c | 4 ++ .../selftests/bpf/benchs/bench_trigger.c | 54 +++++++++++++++++++ .../selftests/bpf/benchs/run_bench_trigger.sh | 4 +- .../selftests/bpf/progs/trigger_bench.c | 12 +++++ tools/testing/selftests/bpf/trace_helpers.c | 3 ++ 5 files changed, 75 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/bench.c b/tools/testing/selftests/= bpf/bench.c index ddd73d06a1eb..29dbf937818a 100644 --- a/tools/testing/selftests/bpf/bench.c +++ b/tools/testing/selftests/bpf/bench.c @@ -510,6 +510,8 @@ extern const struct bench bench_trig_kretprobe; extern const struct bench bench_trig_kprobe_multi; extern const struct bench bench_trig_kretprobe_multi; extern const struct bench bench_trig_fentry; +extern const struct bench bench_trig_kprobe_multi_all; +extern const struct bench bench_trig_kretprobe_multi_all; extern const struct bench bench_trig_fexit; extern const struct bench bench_trig_fmodret; extern const struct bench bench_trig_tp; @@ -578,6 +580,8 @@ static const struct bench *benchs[] =3D { &bench_trig_kprobe_multi, &bench_trig_kretprobe_multi, &bench_trig_fentry, + &bench_trig_kprobe_multi_all, + &bench_trig_kretprobe_multi_all, &bench_trig_fexit, &bench_trig_fmodret, &bench_trig_tp, diff --git a/tools/testing/selftests/bpf/benchs/bench_trigger.c b/tools/tes= ting/selftests/bpf/benchs/bench_trigger.c index 82327657846e..c6634a64a7c0 100644 --- a/tools/testing/selftests/bpf/benchs/bench_trigger.c +++ b/tools/testing/selftests/bpf/benchs/bench_trigger.c @@ -226,6 +226,58 @@ static void trigger_fentry_setup(void) attach_bpf(ctx.skel->progs.bench_trigger_fentry); } =20 +static void attach_ksyms_all(struct bpf_program *empty, bool kretprobe) +{ + LIBBPF_OPTS(bpf_kprobe_multi_opts, opts); + char **syms =3D NULL; + size_t cnt =3D 0; + + if (bpf_get_ksyms(&syms, &cnt, true)) { + printf("failed to get ksyms\n"); + exit(1); + } + + printf("found %zu ksyms\n", cnt); + opts.syms =3D (const char **) syms; + opts.cnt =3D cnt; + opts.retprobe =3D kretprobe; + /* attach empty to all the kernel functions except bpf_get_numa_node_id. = */ + if (!bpf_program__attach_kprobe_multi_opts(empty, NULL, &opts)) { + printf("failed to attach bpf_program__attach_kprobe_multi_opts to all\n"= ); + exit(1); + } +} + +static void trigger_kprobe_multi_all_setup(void) +{ + struct bpf_program *prog, *empty; + + setup_ctx(); + empty =3D ctx.skel->progs.bench_kprobe_multi_empty; + prog =3D ctx.skel->progs.bench_trigger_kprobe_multi; + bpf_program__set_autoload(empty, true); + bpf_program__set_autoload(prog, true); + load_ctx(); + + attach_ksyms_all(empty, false); + attach_bpf(prog); +} + +static void trigger_kretprobe_multi_all_setup(void) +{ + struct bpf_program *prog, *empty; + + setup_ctx(); + empty =3D ctx.skel->progs.bench_kretprobe_multi_empty; + prog =3D ctx.skel->progs.bench_trigger_kretprobe_multi; + bpf_program__set_autoload(empty, true); + bpf_program__set_autoload(prog, true); + load_ctx(); + + attach_ksyms_all(empty, true); + attach_bpf(prog); +} + static void trigger_fexit_setup(void) { setup_ctx(); @@ -512,6 +564,8 @@ BENCH_TRIG_KERNEL(kretprobe, "kretprobe"); BENCH_TRIG_KERNEL(kprobe_multi, "kprobe-multi"); BENCH_TRIG_KERNEL(kretprobe_multi, "kretprobe-multi"); BENCH_TRIG_KERNEL(fentry, "fentry"); +BENCH_TRIG_KERNEL(kprobe_multi_all, "kprobe-multi-all"); +BENCH_TRIG_KERNEL(kretprobe_multi_all, "kretprobe-multi-all"); BENCH_TRIG_KERNEL(fexit, "fexit"); BENCH_TRIG_KERNEL(fmodret, "fmodret"); BENCH_TRIG_KERNEL(tp, "tp"); diff --git a/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh b/tool= s/testing/selftests/bpf/benchs/run_bench_trigger.sh index a690f5a68b6b..f7573708a0c3 100755 --- a/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh +++ b/tools/testing/selftests/bpf/benchs/run_bench_trigger.sh @@ -6,8 +6,8 @@ def_tests=3D( \ usermode-count kernel-count syscall-count \ fentry fexit fmodret \ rawtp tp \ - kprobe kprobe-multi \ - kretprobe kretprobe-multi \ + kprobe kprobe-multi kprobe-multi-all \ + kretprobe kretprobe-multi kretprobe-multi-all \ ) =20 tests=3D("$@") diff --git a/tools/testing/selftests/bpf/progs/trigger_bench.c b/tools/test= ing/selftests/bpf/progs/trigger_bench.c index 044a6d78923e..3d5f30c29ae3 100644 --- a/tools/testing/selftests/bpf/progs/trigger_bench.c +++ b/tools/testing/selftests/bpf/progs/trigger_bench.c @@ -97,6 +97,12 @@ int bench_trigger_kprobe_multi(void *ctx) return 0; } =20 +SEC("?kprobe.multi/bpf_get_numa_node_id") +int bench_kprobe_multi_empty(void *ctx) +{ + return 0; +} + SEC("?kretprobe.multi/bpf_get_numa_node_id") int bench_trigger_kretprobe_multi(void *ctx) { @@ -104,6 +110,12 @@ int bench_trigger_kretprobe_multi(void *ctx) return 0; } =20 +SEC("?kretprobe.multi/bpf_get_numa_node_id") +int bench_kretprobe_multi_empty(void *ctx) +{ + return 0; +} + SEC("?fentry/bpf_get_numa_node_id") int bench_trigger_fentry(void *ctx) { diff --git a/tools/testing/selftests/bpf/trace_helpers.c b/tools/testing/se= lftests/bpf/trace_helpers.c index 9da9da51b132..78cf1aab09d8 100644 --- a/tools/testing/selftests/bpf/trace_helpers.c +++ b/tools/testing/selftests/bpf/trace_helpers.c @@ -575,6 +575,9 @@ static bool skip_entry(char *name) if (!strcmp(name, "__rcu_read_unlock")) return true; =20 + if (!strcmp(name, "bpf_get_numa_node_id")) + return true; + return false; } =20 --=20 2.50.1