net/mptcp/protocol.c | 187 +++++++++++------- net/mptcp/protocol.h | 4 + net/mptcp/sched.c | 69 +++++++ .../testing/selftests/bpf/prog_tests/mptcp.c | 34 ++++ .../selftests/bpf/progs/mptcp_bpf_red.c | 45 +++++ 5 files changed, 264 insertions(+), 75 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
v25: - update calls to mptcp_subflow_set_scheduled(subflow, false) in __mptcp_subflow_push_pending(). - rebased on "tag: export/20221215T054923" v24: - rename push to keep_pushing - check the scheduled bit on ssk first - drop delegate flag - depends on "mptcp: use msk_owned_by_me helper" v23: - patch 2 and 3: clear subflow->scheduled flag on the error paths. v22: - update patch 2 as Mat suggested. - patch 4 and 5 in v21 will send later. v21: - address Mat's comments in v20. - redundant sends on retransmit code path. v20: - rebased on "Squash to "mptcp: refactor push_pending logic" v19" v19: - patch 1, use 'continue' instead of 'goto again'. v18: - some cleanups - update commit logs. v17: - address to Mat's comments in v16 - rebase to export/20221108T055508. v16: - keep last_snd and snd_burst in struct mptcp_sock. - drop "mptcp: register default scheduler". - drop "mptcp: add scheduler wrappers", move it into "mptcp: use get_send wrapper" and "mptcp: use get_retrans wrapper". - depends on 'v2, Revert "mptcp: add get_subflow wrappers" - fix divide error in mptcp_subflow_get_send' v15: 1: "refactor push pending" v10 2-11: "register default scheduler" v3 - move last_snd and snd_burst into struct mptcp_sched_ops 12-19: "BPF redundant scheduler" v15 - split "use get_send wrapper" into two patches - rebase to export/20221021T061837. v14: - add "mptcp: refactor push_pending logic" v10 as patch 1 - drop update_first_pending in patch 4 - drop update_already_sent in patch 5 v13: - deponds on "refactor push pending" v9. - Simply 'goto out' after invoking mptcp_subflow_delegate in patch 1. - All selftests (mptcp_connect.sh, mptcp_join.sh and simult_flows.sh) passed. v12: - fix WARN_ON_ONCE(reuse_skb) and WARN_ON_ONCE(!msk->recovery) errors in kernel logs. v11: - address to Mat's comments in v10. - rebase to export/20220908T063452 v10: - send multiple dfrags in __mptcp_push_pending(). v9: - drop the extra *err paramenter of mptcp_sched_get_send() as Florian suggested. v8: - update __mptcp_push_pending(), send the same data on each subflow. - update __mptcp_retrans, track the max sent data. = add a new patch. v7: - drop redundant flag in v6 - drop __mptcp_subflows_push_pending in v6 - update redundant subflows support in __mptcp_push_pending - update redundant subflows support in __mptcp_retrans v6: - Add redundant flag for struct mptcp_sched_ops. - add a dedicated function __mptcp_subflows_push_pending() to deal with redundat subflows push pending. v5: - address to Paolo's comment, keep the optimization to mptcp_subflow_get_send() for the non eBPF case. - merge mptcp_sched_get_send() and __mptcp_sched_get_send() in v4 into one. - depends on "cleanups for bpf sched selftests". v4: - small cleanups in patch 1, 2. - add TODO in patch 3. - rebase patch 5 on 'cleanups for bpf sched selftests'. v3: - use new API. - fix the link failure tests issue mentioned in ("https://patchwork.kernel.org/project/mptcp/cover/cover.1653033459.git.geliang.tang@suse.com/"). v2: - add MPTCP_SUBFLOWS_MAX limit to avoid infinite loops when the scheduler always sets call_again to true. - track the largest copied amount. - deal with __mptcp_subflow_push_pending() and the retransmit loop. - depends on "BPF round-robin scheduler" v14. v1: Implements the redundant BPF MPTCP scheduler, which sends all packets redundantly on all available subflows. Geliang Tang (5): mptcp: add scheduler wrappers mptcp: use get_send wrapper mptcp: use get_retrans wrapper selftests/bpf: Add bpf_red scheduler selftests/bpf: Add bpf_red test net/mptcp/protocol.c | 187 +++++++++++------- net/mptcp/protocol.h | 4 + net/mptcp/sched.c | 69 +++++++ .../testing/selftests/bpf/prog_tests/mptcp.c | 34 ++++ .../selftests/bpf/progs/mptcp_bpf_red.c | 45 +++++ 5 files changed, 264 insertions(+), 75 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c -- 2.35.3
Hi Geliang, Mat, On 15/12/2022 13:32, Geliang Tang wrote: > Implements the redundant BPF MPTCP scheduler, which sends all packets > redundantly on all available subflows. Thank you for the hard work with the patches and the reviews! I just applied them in our tree in 2 different places as requested by Geliang. I also integrated the Squash-to patch sent by Geliang and added Mat's RvB tag. New patches for t/upstream: - 324b3cbe75ae: mptcp: add scheduler wrappers - 2e6f3e6c3604: mptcp: use get_send wrapper - 52f8f6af934c: mptcp: use get_retrans wrapper - Results: 6c58a377c113..4254b6598308 (export) - 61c95bbb18c7: selftests/bpf: Add bpf_red scheduler - 46cf70243ce8: selftests/bpf: Add bpf_red test - Results: 4254b6598308..224f92634d88 (export) Tests are now in progress: https://cirrus-ci.com/github/multipath-tcp/mptcp_net-next/export/20221221T140648 Cheers, Matt -- Tessares | Belgium | Hybrid Access Solutions www.tessares.net
On Thu, 15 Dec 2022, Geliang Tang wrote: > v25: > - update calls to mptcp_subflow_set_scheduled(subflow, false) in > __mptcp_subflow_push_pending(). > - rebased on "tag: export/20221215T054923" > Thanks for all the work on this Geliang. I think it's ok to add this to the export branch for further testing, and any fixes/updates can be squashed if needed. I do have feedback on one line to delete in patch 2 (see that reply). Not sure if Matthieu needs a squash-to patch for that or can update when applying. Should this be applied after the bpf_rr patches, or earlier in the "features other trees" section of the export branch? Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> - Mat > v24: > - rename push to keep_pushing > - check the scheduled bit on ssk first > - drop delegate flag > - depends on "mptcp: use msk_owned_by_me helper" > > v23: > - patch 2 and 3: clear subflow->scheduled flag on the error paths. > > v22: > - update patch 2 as Mat suggested. > - patch 4 and 5 in v21 will send later. > > v21: > - address Mat's comments in v20. > - redundant sends on retransmit code path. > > v20: > - rebased on "Squash to "mptcp: refactor push_pending logic" v19" > > v19: > - patch 1, use 'continue' instead of 'goto again'. > > v18: > - some cleanups > - update commit logs. > > v17: > - address to Mat's comments in v16 > - rebase to export/20221108T055508. > > v16: > - keep last_snd and snd_burst in struct mptcp_sock. > - drop "mptcp: register default scheduler". > - drop "mptcp: add scheduler wrappers", move it into "mptcp: use > get_send wrapper" and "mptcp: use get_retrans wrapper". > - depends on 'v2, Revert "mptcp: add get_subflow wrappers" - fix > divide error in mptcp_subflow_get_send' > > v15: > 1: "refactor push pending" v10 > 2-11: "register default scheduler" v3 > - move last_snd and snd_burst into struct mptcp_sched_ops > 12-19: "BPF redundant scheduler" v15 > - split "use get_send wrapper" into two patches > - rebase to export/20221021T061837. > > v14: > - add "mptcp: refactor push_pending logic" v10 as patch 1 > - drop update_first_pending in patch 4 > - drop update_already_sent in patch 5 > > v13: > - deponds on "refactor push pending" v9. > - Simply 'goto out' after invoking mptcp_subflow_delegate in patch 1. > - All selftests (mptcp_connect.sh, mptcp_join.sh and simult_flows.sh) passed. > > v12: > - fix WARN_ON_ONCE(reuse_skb) and WARN_ON_ONCE(!msk->recovery) errors > in kernel logs. > > v11: > - address to Mat's comments in v10. > - rebase to export/20220908T063452 > > v10: > - send multiple dfrags in __mptcp_push_pending(). > > v9: > - drop the extra *err paramenter of mptcp_sched_get_send() as Florian > suggested. > > v8: > - update __mptcp_push_pending(), send the same data on each subflow. > - update __mptcp_retrans, track the max sent data. > = add a new patch. > > v7: > - drop redundant flag in v6 > - drop __mptcp_subflows_push_pending in v6 > - update redundant subflows support in __mptcp_push_pending > - update redundant subflows support in __mptcp_retrans > > v6: > - Add redundant flag for struct mptcp_sched_ops. > - add a dedicated function __mptcp_subflows_push_pending() to deal with > redundat subflows push pending. > > v5: > - address to Paolo's comment, keep the optimization to > mptcp_subflow_get_send() for the non eBPF case. > - merge mptcp_sched_get_send() and __mptcp_sched_get_send() in v4 into one. > - depends on "cleanups for bpf sched selftests". > > v4: > - small cleanups in patch 1, 2. > - add TODO in patch 3. > - rebase patch 5 on 'cleanups for bpf sched selftests'. > > v3: > - use new API. > - fix the link failure tests issue mentioned in ("https://patchwork.kernel.org/project/mptcp/cover/cover.1653033459.git.geliang.tang@suse.com/"). > > v2: > - add MPTCP_SUBFLOWS_MAX limit to avoid infinite loops when the > scheduler always sets call_again to true. > - track the largest copied amount. > - deal with __mptcp_subflow_push_pending() and the retransmit loop. > - depends on "BPF round-robin scheduler" v14. > > v1: > > Implements the redundant BPF MPTCP scheduler, which sends all packets > redundantly on all available subflows. > > Geliang Tang (5): > mptcp: add scheduler wrappers > mptcp: use get_send wrapper > mptcp: use get_retrans wrapper > selftests/bpf: Add bpf_red scheduler > selftests/bpf: Add bpf_red test > > net/mptcp/protocol.c | 187 +++++++++++------- > net/mptcp/protocol.h | 4 + > net/mptcp/sched.c | 69 +++++++ > .../testing/selftests/bpf/prog_tests/mptcp.c | 34 ++++ > .../selftests/bpf/progs/mptcp_bpf_red.c | 45 +++++ > 5 files changed, 264 insertions(+), 75 deletions(-) > create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c > > -- > 2.35.3 > > > -- Mat Martineau Intel
Hi Mat, Matt, On Mon, Dec 19, 2022 at 05:39:59PM -0800, Mat Martineau wrote: > On Thu, 15 Dec 2022, Geliang Tang wrote: > > > v25: > > - update calls to mptcp_subflow_set_scheduled(subflow, false) in > > __mptcp_subflow_push_pending(). > > - rebased on "tag: export/20221215T054923" > > > > Thanks for all the work on this Geliang. I think it's ok to add this to the > export branch for further testing, and any fixes/updates can be squashed if > needed. > > I do have feedback on one line to delete in patch 2 (see that reply). Not > sure if Matthieu needs a squash-to patch for that or can update when > applying. I just sent a squash-to patch to delete this line in ML. > > Should this be applied after the bpf_rr patches, or earlier in the "features > other trees" section of the export branch? The first three patches should be inserted between the commits "mptcp: add sched_data_set_contexts helper" and "bpf: Add bpf_mptcp_sched_ops". The last two should be applied after the commit "selftests/bpf: Add bpf_rr test". > > Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> > > > - Mat > > > Geliang Tang (5): > > mptcp: add scheduler wrappers > > mptcp: use get_send wrapper > > mptcp: use get_retrans wrapper In addition, the commit logs of these two patches need to be updated too since sock_owned_by_me() are now replaced by msk_owned_by_me(). The first one: Move sock_owned_by_me() check and fallback check into get_send() wrapper from mptcp_subflow_get_send(). -> Move owned_by_me() and fallback checks into get_send() wrapper from mptcp_subflow_get_send(). The second: Move sock_owned_by_me() check and fallback check into get_retrans() wrapper from mptcp_subflow_get_retrans(). -> Move owned_by_me() and fallback checks into get_retrans() wrapper from mptcp_subflow_get_retrans(). Thanks, -Geliang > > selftests/bpf: Add bpf_red scheduler > > selftests/bpf: Add bpf_red test > > > > net/mptcp/protocol.c | 187 +++++++++++------- > > net/mptcp/protocol.h | 4 + > > net/mptcp/sched.c | 69 +++++++ > > .../testing/selftests/bpf/prog_tests/mptcp.c | 34 ++++ > > .../selftests/bpf/progs/mptcp_bpf_red.c | 45 +++++ > > 5 files changed, 264 insertions(+), 75 deletions(-) > > create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c > > > > -- > > 2.35.3 > > > > > > > > -- > Mat Martineau > Intel
© 2016 - 2025 Red Hat, Inc.