* [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4
@ 2023-09-04 9:39 Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 1/9] Squash to "bpf: Export more bpf_burst related functions" Geliang Tang
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v3:
- store burst in msk->snd_burst instead of in sk_storage.
- make mptcp_sched_data_set_contexts static.
- rename mptcp_subflow_ctx_by_pos to bpf_mptcp_subflow_ctx_by_pos, and
add "__bpf_kfunc" before it.
v2:
- keep sched API unchanged.
- use bpf_sk_storage_lookup to get snd_burst from BPF context.
- applied after "add bpf_stale scheduler v3" serise.
v1:
There's a bug in bpf_burst. snd_burst stored in mptcp_burst_storage in
BPF context is not used. msk->snd_burst is still used in kernel space.
To fix this, add two new interfaces in mptcp_sched_ops to get and set
scheduler's paramters from BPF context to kernel space.
Geliang Tang (9):
Squash to "bpf: Export more bpf_burst related functions"
Squash to "mptcp: add sched_data helpers"
Squash to "bpf: Add bpf_mptcp_sched_ops"
Squash to "selftests/bpf: Add mptcp sched structs"
Squash to "selftests/bpf: Add bpf_first scheduler"
Squash to "selftests/bpf: Add bpf_bkup scheduler"
Squash to "selftests/bpf: Add bpf_rr scheduler"
Squash to "selftests/bpf: Add bpf_red scheduler"
Squash to "selftests/bpf: Add bpf_burst scheduler"
net/mptcp/bpf.c | 41 +++++++++++----
net/mptcp/protocol.h | 6 +--
net/mptcp/sched.c | 50 ++++++++-----------
tools/testing/selftests/bpf/bpf_tcp_helpers.h | 5 +-
.../selftests/bpf/progs/mptcp_bpf_bkup.c | 6 +--
.../selftests/bpf/progs/mptcp_bpf_burst.c | 30 ++---------
.../selftests/bpf/progs/mptcp_bpf_first.c | 3 +-
.../selftests/bpf/progs/mptcp_bpf_red.c | 6 +--
.../selftests/bpf/progs/mptcp_bpf_rr.c | 9 ++--
9 files changed, 70 insertions(+), 86 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 1/9] Squash to "bpf: Export more bpf_burst related functions"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 2/9] Squash to "mptcp: add sched_data helpers" Geliang Tang
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Add __bpf_kfunc before bpf_mptcp_subflow_queues_empty(), drop __diag_*,
it will be added in the next patch.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/bpf.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
index 3c29718156df..8109d9dfaf5e 100644
--- a/net/mptcp/bpf.c
+++ b/net/mptcp/bpf.c
@@ -163,17 +163,11 @@ static const struct btf_kfunc_id_set bpf_mptcp_fmodret_set = {
.set = &bpf_mptcp_fmodret_ids,
};
-__diag_push();
-__diag_ignore_all("-Wmissing-prototypes",
- "kfuncs which will be used in BPF programs");
-
-bool bpf_mptcp_subflow_queues_empty(struct sock *sk)
+__bpf_kfunc bool bpf_mptcp_subflow_queues_empty(struct sock *sk)
{
return tcp_rtx_queue_empty(sk);
}
-__diag_pop();
-
BTF_SET8_START(bpf_mptcp_sched_kfunc_ids)
BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled)
BTF_ID_FLAGS(func, mptcp_sched_data_set_contexts)
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 2/9] Squash to "mptcp: add sched_data helpers"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 1/9] Squash to "bpf: Export more bpf_burst related functions" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 3/9] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Change mptcp_sched_data_set_contexts as static function. Rename
mptcp_subflow_ctx_by_pos with bpf_ prefix, move it into bpf.c in
__diag_* section.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/bpf.c | 17 +++++++++++++--
net/mptcp/protocol.h | 6 ++----
net/mptcp/sched.c | 50 +++++++++++++++++++-------------------------
3 files changed, 39 insertions(+), 34 deletions(-)
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
index 8109d9dfaf5e..18ddbd36faf3 100644
--- a/net/mptcp/bpf.c
+++ b/net/mptcp/bpf.c
@@ -163,15 +163,28 @@ static const struct btf_kfunc_id_set bpf_mptcp_fmodret_set = {
.set = &bpf_mptcp_fmodret_ids,
};
+__diag_push();
+__diag_ignore_all("-Wmissing-prototypes",
+ "kfuncs which will be used in BPF programs");
+
+__bpf_kfunc struct mptcp_subflow_context *
+bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos)
+{
+ if (pos >= MPTCP_SUBFLOWS_MAX)
+ return NULL;
+ return data->contexts[pos];
+}
+
__bpf_kfunc bool bpf_mptcp_subflow_queues_empty(struct sock *sk)
{
return tcp_rtx_queue_empty(sk);
}
+__diag_pop();
+
BTF_SET8_START(bpf_mptcp_sched_kfunc_ids)
BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled)
-BTF_ID_FLAGS(func, mptcp_sched_data_set_contexts)
-BTF_ID_FLAGS(func, mptcp_subflow_ctx_by_pos)
+BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx_by_pos)
BTF_ID_FLAGS(func, mptcp_subflow_active)
BTF_ID_FLAGS(func, mptcp_set_timeout)
BTF_ID_FLAGS(func, mptcp_wnd_end)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 12d70ce24843..ebf7566005c6 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -643,6 +643,8 @@ void mptcp_sock_graft(struct sock *sk, struct socket *parent);
u64 mptcp_wnd_end(const struct mptcp_sock *msk);
void mptcp_set_timeout(struct sock *sk);
bool bpf_mptcp_subflow_queues_empty(struct sock *sk);
+struct mptcp_subflow_context *
+bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos);
struct sock *__mptcp_nmpc_sk(struct mptcp_sock *msk);
bool __mptcp_close(struct sock *sk, long timeout);
void mptcp_cancel_work(struct sock *sk);
@@ -674,10 +676,6 @@ struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk);
struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk);
int mptcp_sched_get_send(struct mptcp_sock *msk);
int mptcp_sched_get_retrans(struct mptcp_sock *msk);
-void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk,
- struct mptcp_sched_data *data);
-struct mptcp_subflow_context *
-mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos);
static inline bool __tcp_can_send(const struct sock *ssk)
{
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index 2ae3f33bd244..a7e1c10b1984 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -121,6 +121,26 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
WRITE_ONCE(subflow->scheduled, scheduled);
}
+static void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk,
+ struct mptcp_sched_data *data)
+{
+ struct mptcp_subflow_context *subflow;
+ int i = 0;
+
+ mptcp_for_each_subflow(msk, subflow) {
+ if (i == MPTCP_SUBFLOWS_MAX) {
+ pr_warn_once("too many subflows");
+ break;
+ }
+ mptcp_subflow_set_scheduled(subflow, false);
+ data->contexts[i++] = subflow;
+ }
+ data->subflows = i;
+
+ for (; i < MPTCP_SUBFLOWS_MAX; i++)
+ data->contexts[i] = NULL;
+}
+
int mptcp_sched_get_send(struct mptcp_sock *msk)
{
struct mptcp_subflow_context *subflow;
@@ -147,6 +167,7 @@ int mptcp_sched_get_send(struct mptcp_sock *msk)
data.reinject = false;
if (msk->sched == &mptcp_sched_default || !msk->sched)
return mptcp_sched_default_get_subflow(msk, &data);
+ mptcp_sched_data_set_contexts(msk, &data);
return msk->sched->get_subflow(msk, &data);
}
@@ -169,33 +190,6 @@ int mptcp_sched_get_retrans(struct mptcp_sock *msk)
data.reinject = true;
if (msk->sched == &mptcp_sched_default || !msk->sched)
return mptcp_sched_default_get_subflow(msk, &data);
+ mptcp_sched_data_set_contexts(msk, &data);
return msk->sched->get_subflow(msk, &data);
}
-
-void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk,
- struct mptcp_sched_data *data)
-{
- struct mptcp_subflow_context *subflow;
- int i = 0;
-
- mptcp_for_each_subflow(msk, subflow) {
- if (i == MPTCP_SUBFLOWS_MAX) {
- pr_warn_once("too many subflows");
- break;
- }
- mptcp_subflow_set_scheduled(subflow, false);
- data->contexts[i++] = subflow;
- }
- data->subflows = i;
-
- for (; i < MPTCP_SUBFLOWS_MAX; i++)
- data->contexts[i] = NULL;
-}
-
-struct mptcp_subflow_context *
-mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos)
-{
- if (pos >= MPTCP_SUBFLOWS_MAX)
- return NULL;
- return data->contexts[pos];
-}
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 3/9] Squash to "bpf: Add bpf_mptcp_sched_ops"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 1/9] Squash to "bpf: Export more bpf_burst related functions" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 2/9] Squash to "mptcp: add sched_data helpers" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 4/9] Squash to "selftests/bpf: Add mptcp sched structs" Geliang Tang
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Add write acess to msk->snd_burst.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/bpf.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
index 18ddbd36faf3..b92c9014ac2c 100644
--- a/net/mptcp/bpf.c
+++ b/net/mptcp/bpf.c
@@ -18,8 +18,8 @@
#ifdef CONFIG_BPF_JIT
extern struct bpf_struct_ops bpf_mptcp_sched_ops;
-static const struct btf_type *mptcp_sched_type __read_mostly;
-static u32 mptcp_sched_id;
+static const struct btf_type *mptcp_sock_type, *mptcp_subflow_type __read_mostly;
+static u32 mptcp_sock_id, mptcp_subflow_id;
static const struct bpf_func_proto *
bpf_mptcp_sched_get_func_proto(enum bpf_func_id func_id,
@@ -47,12 +47,15 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
size_t end;
t = btf_type_by_id(reg->btf, reg->btf_id);
- if (t != mptcp_sched_type) {
- bpf_log(log, "only access to mptcp_subflow_context is supported\n");
+ if (t != mptcp_sock_type && t != mptcp_subflow_type) {
+ bpf_log(log, "only access to mptcp sock or subflow is supported\n");
return -EACCES;
}
switch (off) {
+ case offsetof(struct mptcp_sock, snd_burst):
+ end = offsetofend(struct mptcp_sock, snd_burst);
+ break;
case offsetof(struct mptcp_subflow_context, scheduled):
end = offsetofend(struct mptcp_subflow_context, scheduled);
break;
@@ -60,12 +63,14 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
end = offsetofend(struct mptcp_subflow_context, avg_pacing_rate);
break;
default:
- bpf_log(log, "no write support to mptcp_subflow_context at off %d\n", off);
+ bpf_log(log, "no write support to %s at off %d\n",
+ t == mptcp_sock_type ? "mptcp_sock" : "mptcp_subflow_context", off);
return -EACCES;
}
if (off + size > end) {
- bpf_log(log, "access beyond mptcp_subflow_context at off %u size %u ended at %zu",
+ bpf_log(log, "access beyond %s at off %u size %u ended at %zu",
+ t == mptcp_sock_type ? "mptcp_sock" : "mptcp_subflow_context",
off, size, end);
return -EACCES;
}
@@ -125,12 +130,19 @@ static int bpf_mptcp_sched_init(struct btf *btf)
{
s32 type_id;
+ type_id = btf_find_by_name_kind(btf, "mptcp_sock",
+ BTF_KIND_STRUCT);
+ if (type_id < 0)
+ return -EINVAL;
+ mptcp_sock_id = type_id;
+ mptcp_sock_type = btf_type_by_id(btf, mptcp_sock_id);
+
type_id = btf_find_by_name_kind(btf, "mptcp_subflow_context",
BTF_KIND_STRUCT);
if (type_id < 0)
return -EINVAL;
- mptcp_sched_id = type_id;
- mptcp_sched_type = btf_type_by_id(btf, mptcp_sched_id);
+ mptcp_subflow_id = type_id;
+ mptcp_subflow_type = btf_type_by_id(btf, mptcp_subflow_id);
return 0;
}
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 4/9] Squash to "selftests/bpf: Add mptcp sched structs"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (2 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 3/9] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 5/9] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Update mptcp_sched_data_set_contexts and mptcp_subflow_ctx_by_pos.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/bpf/bpf_tcp_helpers.h | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
index b687f91f2da8..36a53381a4c0 100644
--- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
+++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
@@ -269,10 +269,8 @@ struct mptcp_sock {
extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
bool scheduled) __ksym;
-extern void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk,
- struct mptcp_sched_data *data) __ksym;
extern struct mptcp_subflow_context *
-mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos) __ksym;
+bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos) __ksym;
static __always_inline struct sock *
mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
{
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 5/9] Squash to "selftests/bpf: Add bpf_first scheduler"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (3 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 4/9] Squash to "selftests/bpf: Add mptcp sched structs" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 6/9] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Update mptcp_sched_data_set_contexts and mptcp_subflow_ctx_by_pos.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/bpf/progs/mptcp_bpf_first.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
index ae0eced5b91f..23a3e8e69e8f 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
@@ -19,8 +19,7 @@ void BPF_PROG(mptcp_sched_first_release, struct mptcp_sock *msk)
int BPF_STRUCT_OPS(bpf_first_get_subflow, struct mptcp_sock *msk,
struct mptcp_sched_data *data)
{
- mptcp_sched_data_set_contexts(msk, data);
- mptcp_subflow_set_scheduled(mptcp_subflow_ctx_by_pos(data, 0), true);
+ mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, 0), true);
return 0;
}
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 6/9] Squash to "selftests/bpf: Add bpf_bkup scheduler"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (4 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 5/9] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 7/9] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Update mptcp_sched_data_set_contexts and mptcp_subflow_ctx_by_pos.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
index 904186fb6750..bfd4644dd592 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
@@ -21,12 +21,10 @@ int BPF_STRUCT_OPS(bpf_bkup_get_subflow, struct mptcp_sock *msk,
{
int nr = -1;
- mptcp_sched_data_set_contexts(msk, data);
-
for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
struct mptcp_subflow_context *subflow;
- subflow = mptcp_subflow_ctx_by_pos(data, i);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, i);
if (!subflow)
break;
@@ -37,7 +35,7 @@ int BPF_STRUCT_OPS(bpf_bkup_get_subflow, struct mptcp_sock *msk,
}
if (nr != -1) {
- mptcp_subflow_set_scheduled(mptcp_subflow_ctx_by_pos(data, nr), true);
+ mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, nr), true);
return -1;
}
return 0;
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 7/9] Squash to "selftests/bpf: Add bpf_rr scheduler"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (5 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 6/9] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 8/9] Squash to "selftests/bpf: Add bpf_red scheduler" Geliang Tang
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Update mptcp_sched_data_set_contexts and mptcp_subflow_ctx_by_pos.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
index 347ffad90860..39b7e1cfbbd5 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
@@ -45,15 +45,14 @@ int BPF_STRUCT_OPS(bpf_rr_get_subflow, struct mptcp_sock *msk,
last_snd = ptr->last_snd;
- mptcp_sched_data_set_contexts(msk, data);
-
for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
- subflow = mptcp_subflow_ctx_by_pos(data, i);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, i);
if (!last_snd || !subflow)
break;
if (mptcp_subflow_tcp_sock(subflow) == last_snd) {
- if (i + 1 == MPTCP_SUBFLOWS_MAX || !mptcp_subflow_ctx_by_pos(data, i + 1))
+ if (i + 1 == MPTCP_SUBFLOWS_MAX ||
+ !bpf_mptcp_subflow_ctx_by_pos(data, i + 1))
break;
nr = i + 1;
@@ -61,7 +60,7 @@ int BPF_STRUCT_OPS(bpf_rr_get_subflow, struct mptcp_sock *msk,
}
}
- subflow = mptcp_subflow_ctx_by_pos(data, nr);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, nr);
if (!subflow)
return -1;
mptcp_subflow_set_scheduled(subflow, true);
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 8/9] Squash to "selftests/bpf: Add bpf_red scheduler"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (6 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 7/9] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 9/9] Squash to "selftests/bpf: Add bpf_burst scheduler" Geliang Tang
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Update mptcp_sched_data_set_contexts and mptcp_subflow_ctx_by_pos.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/bpf/progs/mptcp_bpf_red.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
index eeeec6250f64..a3f3e5ca5278 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
@@ -19,13 +19,11 @@ void BPF_PROG(mptcp_sched_red_release, struct mptcp_sock *msk)
int BPF_STRUCT_OPS(bpf_red_get_subflow, struct mptcp_sock *msk,
struct mptcp_sched_data *data)
{
- mptcp_sched_data_set_contexts(msk, data);
-
for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
- if (!mptcp_subflow_ctx_by_pos(data, i))
+ if (!bpf_mptcp_subflow_ctx_by_pos(data, i))
break;
- mptcp_subflow_set_scheduled(mptcp_subflow_ctx_by_pos(data, i), true);
+ mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, i), true);
}
return 0;
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH mptcp-next v3 9/9] Squash to "selftests/bpf: Add bpf_burst scheduler"
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (7 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 8/9] Squash to "selftests/bpf: Add bpf_red scheduler" Geliang Tang
@ 2023-09-04 9:39 ` Geliang Tang
2023-09-13 1:37 ` [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Mat Martineau
2023-09-16 11:49 ` Matthieu Baerts
10 siblings, 0 replies; 12+ messages in thread
From: Geliang Tang @ 2023-09-04 9:39 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Update mptcp_sched_data_set_contexts and mptcp_subflow_ctx_by_pos.
Store burst in msk->snd_burst instead of in sk_storage.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/bpf/bpf_tcp_helpers.h | 1 +
.../selftests/bpf/progs/mptcp_bpf_burst.c | 30 ++++---------------
2 files changed, 6 insertions(+), 25 deletions(-)
diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
index 36a53381a4c0..6b43845f1234 100644
--- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
+++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
@@ -262,6 +262,7 @@ struct mptcp_sock {
struct inet_connection_sock sk;
__u64 snd_nxt;
+ int snd_burst;
__u32 token;
struct sock *first;
char ca_name[TCP_CA_NAME_MAX];
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
index b6a8a051741d..b3c811564866 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
@@ -7,17 +7,6 @@
char _license[] SEC("license") = "GPL";
-struct mptcp_burst_storage {
- int snd_burst;
-};
-
-struct {
- __uint(type, BPF_MAP_TYPE_SK_STORAGE);
- __uint(map_flags, BPF_F_NO_PREALLOC);
- __type(key, int);
- __type(value, struct mptcp_burst_storage);
-} mptcp_burst_map SEC(".maps");
-
#define MPTCP_SEND_BURST_SIZE 65428
struct subflow_send_info {
@@ -69,14 +58,11 @@ static __always_inline bool sk_stream_memory_free(const struct sock *sk)
SEC("struct_ops/mptcp_sched_burst_init")
void BPF_PROG(mptcp_sched_burst_init, struct mptcp_sock *msk)
{
- bpf_sk_storage_get(&mptcp_burst_map, msk, 0,
- BPF_LOCAL_STORAGE_GET_F_CREATE);
}
SEC("struct_ops/mptcp_sched_burst_release")
void BPF_PROG(mptcp_sched_burst_release, struct mptcp_sock *msk)
{
- bpf_sk_storage_delete(&mptcp_burst_map, msk);
}
static int bpf_burst_get_send(struct mptcp_sock *msk,
@@ -85,7 +71,6 @@ static int bpf_burst_get_send(struct mptcp_sock *msk,
struct subflow_send_info send_info[SSK_MODE_MAX];
struct mptcp_subflow_context *subflow;
struct sock *sk = (struct sock *)msk;
- struct mptcp_burst_storage *ptr;
__u32 pace, burst, wmem;
__u64 linger_time;
struct sock *ssk;
@@ -98,7 +83,7 @@ static int bpf_burst_get_send(struct mptcp_sock *msk,
}
for (i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
- subflow = mptcp_subflow_ctx_by_pos(data, i);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, i);
if (!subflow)
break;
@@ -127,7 +112,7 @@ static int bpf_burst_get_send(struct mptcp_sock *msk,
if (send_info[SSK_MODE_ACTIVE].subflow_id == MPTCP_SUBFLOWS_MAX)
send_info[SSK_MODE_ACTIVE].subflow_id = send_info[SSK_MODE_BACKUP].subflow_id;
- subflow = mptcp_subflow_ctx_by_pos(data, send_info[SSK_MODE_ACTIVE].subflow_id);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, send_info[SSK_MODE_ACTIVE].subflow_id);
if (!subflow)
return -1;
ssk = mptcp_subflow_tcp_sock(subflow);
@@ -142,10 +127,7 @@ static int bpf_burst_get_send(struct mptcp_sock *msk,
subflow->avg_pacing_rate = div_u64((__u64)subflow->avg_pacing_rate * wmem +
ssk->sk_pacing_rate * burst,
burst + wmem);
- ptr = bpf_sk_storage_get(&mptcp_burst_map, msk, 0,
- BPF_LOCAL_STORAGE_GET_F_CREATE);
- if (ptr)
- ptr->snd_burst = burst;
+ msk->snd_burst = burst;
out:
mptcp_subflow_set_scheduled(subflow, true);
@@ -161,7 +143,7 @@ static int bpf_burst_get_retrans(struct mptcp_sock *msk,
struct sock *ssk;
for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) {
- subflow = mptcp_subflow_ctx_by_pos(data, i);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, i);
if (!subflow)
break;
@@ -193,7 +175,7 @@ static int bpf_burst_get_retrans(struct mptcp_sock *msk,
subflow_id = min_stale_count > 1 ? backup : MPTCP_SUBFLOWS_MAX;
out:
- subflow = mptcp_subflow_ctx_by_pos(data, subflow_id);
+ subflow = bpf_mptcp_subflow_ctx_by_pos(data, subflow_id);
if (!subflow)
return -1;
mptcp_subflow_set_scheduled(subflow, true);
@@ -203,8 +185,6 @@ static int bpf_burst_get_retrans(struct mptcp_sock *msk,
int BPF_STRUCT_OPS(bpf_burst_get_subflow, struct mptcp_sock *msk,
struct mptcp_sched_data *data)
{
- mptcp_sched_data_set_contexts(msk, data);
-
if (data->reinject)
return bpf_burst_get_retrans(msk, data);
return bpf_burst_get_send(msk, data);
--
2.35.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (8 preceding siblings ...)
2023-09-04 9:39 ` [PATCH mptcp-next v3 9/9] Squash to "selftests/bpf: Add bpf_burst scheduler" Geliang Tang
@ 2023-09-13 1:37 ` Mat Martineau
2023-09-16 11:49 ` Matthieu Baerts
10 siblings, 0 replies; 12+ messages in thread
From: Mat Martineau @ 2023-09-13 1:37 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
On Mon, 4 Sep 2023, Geliang Tang wrote:
> v3:
> - store burst in msk->snd_burst instead of in sk_storage.
> - make mptcp_sched_data_set_contexts static.
> - rename mptcp_subflow_ctx_by_pos to bpf_mptcp_subflow_ctx_by_pos, and
> add "__bpf_kfunc" before it.
>
Hi Geliang -
Apologies for the delay on reviewing these. The series looks good to
squash, thanks!
- Mat
> v2:
> - keep sched API unchanged.
> - use bpf_sk_storage_lookup to get snd_burst from BPF context.
> - applied after "add bpf_stale scheduler v3" serise.
>
> v1:
>
> There's a bug in bpf_burst. snd_burst stored in mptcp_burst_storage in
> BPF context is not used. msk->snd_burst is still used in kernel space.
> To fix this, add two new interfaces in mptcp_sched_ops to get and set
> scheduler's paramters from BPF context to kernel space.
>
> Geliang Tang (9):
> Squash to "bpf: Export more bpf_burst related functions"
> Squash to "mptcp: add sched_data helpers"
> Squash to "bpf: Add bpf_mptcp_sched_ops"
> Squash to "selftests/bpf: Add mptcp sched structs"
> Squash to "selftests/bpf: Add bpf_first scheduler"
> Squash to "selftests/bpf: Add bpf_bkup scheduler"
> Squash to "selftests/bpf: Add bpf_rr scheduler"
> Squash to "selftests/bpf: Add bpf_red scheduler"
> Squash to "selftests/bpf: Add bpf_burst scheduler"
>
> net/mptcp/bpf.c | 41 +++++++++++----
> net/mptcp/protocol.h | 6 +--
> net/mptcp/sched.c | 50 ++++++++-----------
> tools/testing/selftests/bpf/bpf_tcp_helpers.h | 5 +-
> .../selftests/bpf/progs/mptcp_bpf_bkup.c | 6 +--
> .../selftests/bpf/progs/mptcp_bpf_burst.c | 30 ++---------
> .../selftests/bpf/progs/mptcp_bpf_first.c | 3 +-
> .../selftests/bpf/progs/mptcp_bpf_red.c | 6 +--
> .../selftests/bpf/progs/mptcp_bpf_rr.c | 9 ++--
> 9 files changed, 70 insertions(+), 86 deletions(-)
>
> --
> 2.35.3
>
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
` (9 preceding siblings ...)
2023-09-13 1:37 ` [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Mat Martineau
@ 2023-09-16 11:49 ` Matthieu Baerts
10 siblings, 0 replies; 12+ messages in thread
From: Matthieu Baerts @ 2023-09-16 11:49 UTC (permalink / raw)
To: Geliang Tang, mptcp
Hi Geliang, Mat,
On 04/09/2023 11:39, Geliang Tang wrote:
> v3:
> - store burst in msk->snd_burst instead of in sk_storage.
> - make mptcp_sched_data_set_contexts static.
> - rename mptcp_subflow_ctx_by_pos to bpf_mptcp_subflow_ctx_by_pos, and
> add "__bpf_kfunc" before it.
>
> v2:
> - keep sched API unchanged.
> - use bpf_sk_storage_lookup to get snd_burst from BPF context.
> - applied after "add bpf_stale scheduler v3" serise.
>
> v1:
>
> There's a bug in bpf_burst. snd_burst stored in mptcp_burst_storage in
> BPF context is not used. msk->snd_burst is still used in kernel space.
> To fix this, add two new interfaces in mptcp_sched_ops to get and set
> scheduler's paramters from BPF context to kernel space.
Thank you for the patches and the review!
I just applied these patches in our tree. Please make sure I correctly
fix the different conflicts and I didn't miss any instructions.
New patches for t/upstream:
- 5eed4d815c41: "squashed" patch 1/9 in "bpf: Export more bpf_burst
related functions"
- 764bf652d4bf: "squashed" patch 2/9 (with conflicts) in "mptcp: add
sched_data helpers"
- 9906c014e61a: "squashed" patch 3/9 in "bpf: Add bpf_mptcp_sched_ops"
- 816a6f2cad25: conflict in t/bpf-Add-bpf_mptcp_sched_kfunc_set
- ff8a0c543074: "squashed" patch 4/9 (with conflicts) in "selftests/bpf:
Add mptcp sched structs"
- a0098f3f355d: "squashed" patch 5/9 in "selftests/bpf: Add bpf_first
scheduler"
- d9c7f7c37051: "squashed" patch 6/9 in "selftests/bpf: Add bpf_bkup
scheduler"
- 2e2e1a1bfb70: conflict in t/selftests-bpf-Add-bpf_rr-scheduler
- 6c22024f0008: "squashed" patch 7/9 in "selftests/bpf: Add bpf_rr
scheduler"
- 684e5a0e4824: "squashed" patch 8/9 in "selftests/bpf: Add bpf_red
scheduler"
- 6b458f5734d3: conflict in t/bpf-Export-more-bpf_burst-related-functions
- 24d78ea20a36: "squashed" patch 9/9 in "selftests/bpf: Add bpf_burst
scheduler"
- Results: 6b6b68bc221b..fe720f4b5da8 (export)
Tests are now in progress:
https://cirrus-ci.com/github/multipath-tcp/mptcp_net-next/export/20230916T114711
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2023-09-16 11:49 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-04 9:39 [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 1/9] Squash to "bpf: Export more bpf_burst related functions" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 2/9] Squash to "mptcp: add sched_data helpers" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 3/9] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 4/9] Squash to "selftests/bpf: Add mptcp sched structs" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 5/9] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 6/9] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 7/9] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 8/9] Squash to "selftests/bpf: Add bpf_red scheduler" Geliang Tang
2023-09-04 9:39 ` [PATCH mptcp-next v3 9/9] Squash to "selftests/bpf: Add bpf_burst scheduler" Geliang Tang
2023-09-13 1:37 ` [PATCH mptcp-next v3 0/9] BPF packet scheduler updates part 4 Mat Martineau
2023-09-16 11:49 ` Matthieu Baerts
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.