All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiayuan Chen <jiayuan.chen@linux.dev>
To: bpf@vger.kernel.org
Cc: mrpre@163.com, Jiayuan Chen <jiayuan.chen@linux.dev>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>,
	Martin KaFai Lau <martin.lau@linux.dev>,
	Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
	Yonghong Song <yonghong.song@linux.dev>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@kernel.org>,
	Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
	Jiri Olsa <jolsa@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
	Jakub Sitnicki <jakub@cloudflare.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Simon Horman <horms@kernel.org>,
	Kuniyuki Iwashima <kuniyu@amazon.com>,
	Willem de Bruijn <willemb@google.com>,
	Mykola Lysenko <mykolal@fb.com>, Shuah Khan <shuah@kernel.org>,
	Jiapeng Chong <jiapeng.chong@linux.alibaba.com>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: [PATCH bpf-next v1 3/3] selftest/bpf/benchs: Add cpu-affinity for sockmap bench
Date: Mon, 28 Apr 2025 16:16:54 +0800	[thread overview]
Message-ID: <20250428081744.52375-4-jiayuan.chen@linux.dev> (raw)
In-Reply-To: <20250428081744.52375-1-jiayuan.chen@linux.dev>

Add cpu-affinity for sockmap bench. Also add no-verify args to avoid
validating data for performance enhancements.

Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
---
 .../selftests/bpf/benchs/bench_sockmap.c      | 35 +++++++++++++++++--
 tools/testing/selftests/bpf/bpf_kfuncs.h      |  6 ++++
 .../selftests/bpf/progs/bench_sockmap_prog.c  |  7 ++++
 3 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/bpf/benchs/bench_sockmap.c b/tools/testing/selftests/bpf/benchs/bench_sockmap.c
index 8ebf563a67a2..e004a618822a 100644
--- a/tools/testing/selftests/bpf/benchs/bench_sockmap.c
+++ b/tools/testing/selftests/bpf/benchs/bench_sockmap.c
@@ -43,6 +43,8 @@ enum SOCKMAP_ARG_FLAG {
 	ARG_FW_TX_VERDICT_INGRESS,
 	ARG_FW_TX_VERDICT_EGRESS,
 	ARG_CTL_RX_STRP,
+	ARG_CTL_CPU_AFFINITY,
+	ARG_CTL_NO_VERIFY,
 	ARG_CONSUMER_DELAY_TIME,
 	ARG_PRODUCER_DURATION,
 };
@@ -109,6 +111,8 @@ static struct socmap_ctx {
 	int		delay_consumer;
 	int		prod_run_time;
 	int		strp_size;
+	int		cpu_affinity;
+	int		skip_verify;
 } ctx = {
 	.prod_send	= 0,
 	.user_read	= 0,
@@ -118,6 +122,8 @@ static struct socmap_ctx {
 	.delay_consumer = 0,
 	.prod_run_time	= 0,
 	.strp_size	= 0,
+	.cpu_affinity	= 0,
+	.skip_verify	= 0,
 };
 
 static void bench_sockmap_prog_destroy(void)
@@ -235,11 +241,18 @@ static int create_sockets(void)
 static void validate(void)
 {
 	if (env.consumer_cnt != 2 || env.producer_cnt != 1 ||
-	    !env.affinity)
+	    !env.affinity) {
+		fprintf(stderr, "argument '-c 2 -p 1 -a' is necessary\n");
 		goto err;
+	}
+
+	if (!ctx.cpu_affinity && env.nr_cpus < 4) {
+		fprintf(stderr, "4 CPU are needed to test cpu-affinity\n");
+		goto err;
+	}
+
 	return;
 err:
-	fprintf(stderr, "argument '-c 2 -p 1 -a' is necessary");
 	exit(1);
 }
 
@@ -327,6 +340,9 @@ static void setup(void)
 		exit(1);
 	}
 
+	if (ctx.cpu_affinity)
+		ctx.skel->data->redir_cpu = 3;
+
 	if (create_sockets()) {
 		fprintf(stderr, "create_net_mode error\n");
 		goto err;
@@ -367,9 +383,12 @@ static void measure(struct bench_res *res)
 
 static void verify_data(int *check_pos, char *buf, int rcv)
 {
+	if (ctx.skip_verify)
+		return;
+
 	for (int i = 0 ; i < rcv; i++) {
 		if (buf[i] != snd_data[(*check_pos) % DATA_REPEAT_SIZE]) {
-			fprintf(stderr, "verify data fail");
+			fprintf(stderr, "verify data fail\n");
 			exit(1);
 		}
 		(*check_pos)++;
@@ -553,6 +572,10 @@ static const struct argp_option opts[] = {
 		"delay consumer start"},
 	{ "producer-duration", ARG_PRODUCER_DURATION, "SEC", 0,
 		"producer duration"},
+	{ "cpu-affinity", ARG_CTL_CPU_AFFINITY, NULL, 0,
+		"set cpu-affinity for sockmap backlog thread"},
+	{ "no-verify", ARG_CTL_NO_VERIFY, NULL, 0,
+		"skip data validation for performance enhancements"},
 	{},
 };
 
@@ -571,6 +594,12 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
 	case ARG_CTL_RX_STRP:
 		ctx.strp_size = strtol(arg, NULL, 10);
 		break;
+	case ARG_CTL_CPU_AFFINITY:
+		ctx.cpu_affinity = 1;
+		break;
+	case ARG_CTL_NO_VERIFY:
+		ctx.skip_verify = 1;
+		break;
 	default:
 		return ARGP_ERR_UNKNOWN;
 	}
diff --git a/tools/testing/selftests/bpf/bpf_kfuncs.h b/tools/testing/selftests/bpf/bpf_kfuncs.h
index 8215c9b3115e..173329c5d034 100644
--- a/tools/testing/selftests/bpf/bpf_kfuncs.h
+++ b/tools/testing/selftests/bpf/bpf_kfuncs.h
@@ -92,4 +92,10 @@ extern int bpf_set_dentry_xattr(struct dentry *dentry, const char *name__str,
 				const struct bpf_dynptr *value_p, int flags) __ksym __weak;
 extern int bpf_remove_dentry_xattr(struct dentry *dentry, const char *name__str) __ksym __weak;
 
+/* Description
+ *  Set sockmap redir cpu
+ * Returns
+ *  Error code
+ */
+extern int bpf_sk_skb_set_redirect_cpu(struct __sk_buff *skb, int redir_cpu) __ksym;
 #endif
diff --git a/tools/testing/selftests/bpf/progs/bench_sockmap_prog.c b/tools/testing/selftests/bpf/progs/bench_sockmap_prog.c
index 079bf3794b3a..dd1a11cb4f48 100644
--- a/tools/testing/selftests/bpf/progs/bench_sockmap_prog.c
+++ b/tools/testing/selftests/bpf/progs/bench_sockmap_prog.c
@@ -2,11 +2,15 @@
 #include <linux/bpf.h>
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_endian.h>
+#include <stdbool.h>
+#include "bpf_kfuncs.h"
 
 long process_byte = 0;
 int  verdict_dir = 0;
 int  dropped = 0;
 int  pkt_size = 0;
+int  redir_cpu = -1;
+
 struct {
 	__uint(type, BPF_MAP_TYPE_SOCKMAP);
 	__uint(max_entries, 20);
@@ -33,6 +37,9 @@ int prog_skb_verdict(struct __sk_buff *skb)
 	int one = 1;
 	int ret =  bpf_sk_redirect_map(skb, &sock_map_rx, one, verdict_dir);
 
+	if (redir_cpu != -1)
+		bpf_sk_skb_set_redirect_cpu(skb, redir_cpu);
+
 	if (ret == SK_DROP)
 		dropped++;
 	__sync_fetch_and_add(&process_byte, skb->len);
-- 
2.47.1


  parent reply	other threads:[~2025-04-28  8:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-28  8:16 [PATCH bpf-next v1 0/3] bpf, sockmap: Improve performance with CPU affinity Jiayuan Chen
2025-04-28  8:16 ` [PATCH bpf-next v1 1/3] bpf, sockmap: Introduce a new kfunc for sockmap Jiayuan Chen
2025-04-29  0:56   ` Cong Wang
2025-04-29  5:23     ` Jiayuan Chen
2025-04-28  8:16 ` [PATCH bpf-next v1 2/3] bpf, sockmap: Affinitize workqueue to a specific CPU Jiayuan Chen
2025-04-28  8:16 ` Jiayuan Chen [this message]
2025-04-29 23:26 ` [PATCH bpf-next v1 0/3] bpf, sockmap: Improve performance with CPU affinity Alexei Starovoitov
2025-04-29 23:47   ` Jiayuan Chen
2025-04-29 23:53     ` Alexei Starovoitov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250428081744.52375-4-jiayuan.chen@linux.dev \
    --to=jiayuan.chen@linux.dev \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=corbet@lwn.net \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=eddyz87@gmail.com \
    --cc=edumazet@google.com \
    --cc=haoluo@google.com \
    --cc=horms@kernel.org \
    --cc=jakub@cloudflare.com \
    --cc=jiapeng.chong@linux.alibaba.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=kuniyu@amazon.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=mrpre@163.com \
    --cc=mykolal@fb.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sdf@fomichev.me \
    --cc=shuah@kernel.org \
    --cc=song@kernel.org \
    --cc=willemb@google.com \
    --cc=yonghong.song@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.