[PATCH mptcp-next v20 0/7] BPF redundant scheduler, part 2

Geliang Tang posted 7 patches 2 weeks, 4 days ago
Failed in applying to current master (apply log)
There is a newer version of this series
net/mptcp/protocol.c                          | 242 ++++++++++++------
net/mptcp/protocol.h                          |  18 +-
net/mptcp/sched.c                             |  67 +++++
.../testing/selftests/bpf/prog_tests/mptcp.c  |  34 +++
.../selftests/bpf/progs/mptcp_bpf_red.c       |  45 ++++
5 files changed, 320 insertions(+), 86 deletions(-)
create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
[PATCH mptcp-next v20 0/7] BPF redundant scheduler, part 2
Posted by Geliang Tang 2 weeks, 4 days ago
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 (7):
  mptcp: add scheduler wrappers
  mptcp: use get_send wrapper
  mptcp: use get_retrans wrapper
  mptcp: delay updating first_pending
  mptcp: delay updating already_sent
  selftests/bpf: Add bpf_red scheduler
  selftests/bpf: Add bpf_red test

 net/mptcp/protocol.c                          | 242 ++++++++++++------
 net/mptcp/protocol.h                          |  18 +-
 net/mptcp/sched.c                             |  67 +++++
 .../testing/selftests/bpf/prog_tests/mptcp.c  |  34 +++
 .../selftests/bpf/progs/mptcp_bpf_red.c       |  45 ++++
 5 files changed, 320 insertions(+), 86 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c

-- 
2.35.3
Re: [PATCH mptcp-next v20 0/7] BPF redundant scheduler, part 2
Posted by Mat Martineau 2 weeks, 1 day ago
On Wed, 16 Nov 2022, Geliang Tang wrote:

> 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.

I didn't notice this back in v16 - why has last_snd returned? At the end 
of the series, it still doesn't appear to do anything. Is it useful for 
some future feature?

- Mat

> - 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 (7):
>  mptcp: add scheduler wrappers
>  mptcp: use get_send wrapper
>  mptcp: use get_retrans wrapper
>  mptcp: delay updating first_pending
>  mptcp: delay updating already_sent
>  selftests/bpf: Add bpf_red scheduler
>  selftests/bpf: Add bpf_red test
>
> net/mptcp/protocol.c                          | 242 ++++++++++++------
> net/mptcp/protocol.h                          |  18 +-
> net/mptcp/sched.c                             |  67 +++++
> .../testing/selftests/bpf/prog_tests/mptcp.c  |  34 +++
> .../selftests/bpf/progs/mptcp_bpf_red.c       |  45 ++++
> 5 files changed, 320 insertions(+), 86 deletions(-)
> create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
>
> -- 
> 2.35.3
>
>
>

--
Mat Martineau
Intel
Re: [PATCH mptcp-next v20 0/7] BPF redundant scheduler, part 2
Posted by Geliang Tang 2 weeks, 1 day ago
On Fri, Nov 18, 2022 at 01:42:48PM -0800, Mat Martineau wrote:
> On Wed, 16 Nov 2022, Geliang Tang wrote:
> 
> > 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.
> 
> I didn't notice this back in v16 - why has last_snd returned? At the end of
> the series, it still doesn't appear to do anything. Is it useful for some
> future feature?

last_snd is now used for BPF round-robin packet scheduler in
"selftests/bpf: Add bpf_rr scheduler".

Thanks,
-Geliang

> 
> - Mat
> 
> > - 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 (7):
> >  mptcp: add scheduler wrappers
> >  mptcp: use get_send wrapper
> >  mptcp: use get_retrans wrapper
> >  mptcp: delay updating first_pending
> >  mptcp: delay updating already_sent
> >  selftests/bpf: Add bpf_red scheduler
> >  selftests/bpf: Add bpf_red test
> > 
> > net/mptcp/protocol.c                          | 242 ++++++++++++------
> > net/mptcp/protocol.h                          |  18 +-
> > net/mptcp/sched.c                             |  67 +++++
> > .../testing/selftests/bpf/prog_tests/mptcp.c  |  34 +++
> > .../selftests/bpf/progs/mptcp_bpf_red.c       |  45 ++++
> > 5 files changed, 320 insertions(+), 86 deletions(-)
> > create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
> > 
> > -- 
> > 2.35.3
> > 
> > 
> > 
> 
> --
> Mat Martineau
> Intel