* Draft talk proposal for MPTCP @ Linux Plumbers '22
@ 2022-06-30 0:16 Mat Martineau
2022-07-14 22:50 ` Draft talk proposal for MPTCP @ Linux Plumbers '22 (2nd draft) Mat Martineau
0 siblings, 1 reply; 5+ messages in thread
From: Mat Martineau @ 2022-06-30 0:16 UTC (permalink / raw)
To: mptcp, Matthieu Baerts
At our recent weekly MPTCP meetings, I've talked about proposing a Linux
Plumbers talk this year. Matthieu and I have discussed collaborating on
it.
My high-level idea was to focus on our new customization features:
userspace path management and BPF packet schedulers.
Since MPTCP is a community effort, I'd like to share this draft so I
can be sure to focus in the right areas and represent the community well.
Please review and comment!
Side note: I've included the https://mptcp.dev URL even though it's not
working yet. Matthieu, do you think we could get something set up there
before September? The old https://is.gd/mptcp_upstream URL we used for the
2019 talk doesn't work any more.
----
Multipath TCP (MPTCP) was initially supported in v5.6 of the Linux kernel.
In later releases, the MPTCP development community has steadily expanded
from the initial baseline feature set to now support a broad range of
MPTCP features on the wire and through the socket and generic netlink
APIs. The first phase of development focused on solid support of server
use cases. Two current projects are intended to make MPTCP more
customizable for client devices and unique use cases without requiring
custom kernel modules.
The first of these customization features is the userspace path manager
added in v5.19. On the kernel side, MPTCP's generic netlink API was
updated with new commands that allow a userspace process to control
multipath address advertisements and the additional subflows that can add
paths to a MPTCP connection. The Multipath TCP Daemon (mptcpd) is the
first userspace daemon to support these commands. With these components,
systems can now customize MPTCP behavior on a per-connection basis. The
in-kernel path manager, which remains available, has configuration options
that affect all connections in a network namespace. We will show what the
userspace and in-kernel path managers are best suited for and explain the
tradeoffs between them.
A BPF packet scheduler framework is also in active development. When there
are multiple active TCP subflows in a MPTCP connection, the MPTCP stack
must decide which of those subflows to use to transmit each data packet.
The default in-kernel scheduler tries to utilize all the available
subflows to favor throughput, but is not tunable. Customizable schedulers
could optimize for latency, redundancy, cost, carrier policy, or other
factors. We will review the progress that MPTCP Linux developers have made
on this feature to date, along with some of the challenges of integrating
BPF into the MPTCP transmit path.
MPTCP development for the Linux kernel and mptcpd are public and open. You
can find us at mptcp@lists.linux.dev, https://mptcp.dev, and
https://github.com/intel/mptcpd
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Draft talk proposal for MPTCP @ Linux Plumbers '22 (2nd draft)
2022-06-30 0:16 Draft talk proposal for MPTCP @ Linux Plumbers '22 Mat Martineau
@ 2022-07-14 22:50 ` Mat Martineau
2022-07-15 14:47 ` Matthieu Baerts
0 siblings, 1 reply; 5+ messages in thread
From: Mat Martineau @ 2022-07-14 22:50 UTC (permalink / raw)
To: mptcp, Matthieu Baerts
After some discussion at out last couple of weekly meetings, here's an
updated draft.
Changes:
* Moved BPF section up (before userspace PM)
* Emphasized interactive discussion for BPF issues we've been trying to
resolve, like the BPF/kernel API.
* General edits
Suggestions, edits, feedback, etc, all welcome!
---
Multipath TCP (MPTCP) was initially supported in v5.6 of the Linux kernel.
In later releases, the MPTCP development community has steadily expanded
from the initial baseline feature set to now support a broad range of
MPTCP features on the wire and through the socket and generic netlink
APIs. Two current projects are intended to make MPTCP more customizable
for client devices and unique use cases without requiring custom kernel
modules.
One of these projects is the BPF MPTCP packet scheduler framework. When
there are multiple active TCP subflows in a MPTCP connection, the MPTCP
stack must decide which of those subflows to use to transmit each data
packet. The default in-kernel scheduler tries to utilize all the available
subflows to favor throughput, but it is not tunable. Customizable
schedulers can optimize for latency, redundancy, cost, carrier policy, or
other factors. We have patches implementing a proof-of-concept BPF packet
scheduler, and hope to discuss with the netdev/BPF maintainers and
audience how we might best structure the BPF/kernel API to balance
long-term API stability, future evolution of MPTCP scheduler features, and
usability for scheduler authors.
The next customization feature is the userspace path manager added in
v5.19. On the kernel side, MPTCP's generic netlink API has new commands
that allow a userspace process to control multipath address advertisements
and the additional subflows that add paths to a MPTCP connection. The
Multipath TCP Daemon (mptcpd) is the first userspace daemon to support
these commands. With these components, systems can now customize MPTCP
behavior on a per-connection basis. The in-kernel path manager, which is
enabled by default, only has per-namespace configuration. We will show
what the userspace and in-kernel path managers are best suited for and
explain the tradeoffs between them.
MPTCP development for the Linux kernel and mptcpd are public and open. You
can find us at mptcp@lists.linux.dev, https://mptcp.dev, and
https://github.com/intel/mptcpd
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Draft talk proposal for MPTCP @ Linux Plumbers '22 (2nd draft)
2022-07-14 22:50 ` Draft talk proposal for MPTCP @ Linux Plumbers '22 (2nd draft) Mat Martineau
@ 2022-07-15 14:47 ` Matthieu Baerts
2022-07-17 22:01 ` Mat Martineau
2022-07-19 1:17 ` Draft talk proposal for MPTCP @ Linux Plumbers '22 (3rd draft) Mat Martineau
0 siblings, 2 replies; 5+ messages in thread
From: Matthieu Baerts @ 2022-07-15 14:47 UTC (permalink / raw)
To: Mat Martineau, mptcp
Hi Mat,
On 15/07/2022 00:50, Mat Martineau wrote:
>
> After some discussion at out last couple of weekly meetings, here's an
> updated draft.
>
> Changes:
>
> * Moved BPF section up (before userspace PM)
> * Emphasized interactive discussion for BPF issues we've been trying to
> resolve, like the BPF/kernel API.
> * General edits
Thank you for this v2!
This looks really good. I have one general comment below:
> Suggestions, edits, feedback, etc, all welcome!
>
>
> ---
>
> Multipath TCP (MPTCP) was initially supported in v5.6 of the Linux
> kernel. In later releases, the MPTCP development community has steadily
> expanded from the initial baseline feature set to now support a broad
> range of MPTCP features on the wire and through the socket and generic
> netlink APIs. Two current projects are intended to make MPTCP more
> customizable for client devices and unique use cases without requiring
> custom kernel modules.
>
> One of these projects is the BPF MPTCP packet scheduler framework. When
> there are multiple active TCP subflows in a MPTCP connection, the MPTCP
> stack must decide which of those subflows to use to transmit each data
> packet. The default in-kernel scheduler tries to utilize all the
> available subflows to favor throughput, but it is not tunable.
> Customizable schedulers can optimize for latency, redundancy, cost,
> carrier policy, or other factors. We have patches implementing a
> proof-of-concept BPF packet scheduler, and hope to discuss with the
> netdev/BPF maintainers and audience how we might best structure the
> BPF/kernel API to balance long-term API stability, future evolution of
> MPTCP scheduler features, and usability for scheduler authors.
Should we insist on the fact that these discussions are not specific to
MPTCP but this is more general and MPTCP is used as one typical use-case?
I would suggest to explain that before this 2nd paragraph. Maybe saying
that we are trying to get answers to questions like: what's the
recommended way to extend a subsystem(?)? The recommended ways seems to
be with BPF and Netlink and they both have limitations. allowing
customisations with BPF bring more questions for us, e.g.: what about
long-term API stability and other questions you raised here at the end.
Then we can introduce the two use cases. The first one with the Packet
Scheduler where we need something on the kernel side as it is a decision
to take per packet. There are some uncertainties when using BPF but a
proof-of-concept implementation exists.
Then for the Path Manager, the decision can be done from the userspace
because the communications are per connections and not per packet. So
this is a another use-case where exposing a Netlink API seems to be a
good fit (even if there are some limitations if there is a very high
number of connections to deal with).
We can then compare BPF and Netlink and trying to get answers to our
questions.
What do you think?
Cheers,
Matt
>
> The next customization feature is the userspace path manager added in
> v5.19. On the kernel side, MPTCP's generic netlink API has new commands
> that allow a userspace process to control multipath address
> advertisements and the additional subflows that add paths to a MPTCP
> connection. The Multipath TCP Daemon (mptcpd) is the first userspace
> daemon to support these commands. With these components, systems can now
> customize MPTCP behavior on a per-connection basis. The in-kernel path
> manager, which is enabled by default, only has per-namespace
> configuration. We will show what the userspace and in-kernel path
> managers are best suited for and explain the tradeoffs between them.
>
> MPTCP development for the Linux kernel and mptcpd are public and open.
> You can find us at mptcp@lists.linux.dev, https://mptcp.dev, and
> https://github.com/intel/mptcpd
>
>
> --
> Mat Martineau
> Intel
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Draft talk proposal for MPTCP @ Linux Plumbers '22 (2nd draft)
2022-07-15 14:47 ` Matthieu Baerts
@ 2022-07-17 22:01 ` Mat Martineau
2022-07-19 1:17 ` Draft talk proposal for MPTCP @ Linux Plumbers '22 (3rd draft) Mat Martineau
1 sibling, 0 replies; 5+ messages in thread
From: Mat Martineau @ 2022-07-17 22:01 UTC (permalink / raw)
To: Matthieu Baerts; +Cc: mptcp
[-- Attachment #1: Type: text/plain, Size: 3391 bytes --]
On Fri, 15 Jul 2022, Matthieu Baerts wrote:
> Hi Mat,
>
> On 15/07/2022 00:50, Mat Martineau wrote:
>>
>> After some discussion at out last couple of weekly meetings, here's an
>> updated draft.
>>
>> Changes:
>>
>> * Moved BPF section up (before userspace PM)
>> * Emphasized interactive discussion for BPF issues we've been trying to
>> resolve, like the BPF/kernel API.
>> * General edits
>
> Thank you for this v2!
>
> This looks really good. I have one general comment below:
>
>> Suggestions, edits, feedback, etc, all welcome!
>>
>>
>> ---
>>
>> Multipath TCP (MPTCP) was initially supported in v5.6 of the Linux
>> kernel. In later releases, the MPTCP development community has steadily
>> expanded from the initial baseline feature set to now support a broad
>> range of MPTCP features on the wire and through the socket and generic
>> netlink APIs. Two current projects are intended to make MPTCP more
>> customizable for client devices and unique use cases without requiring
>> custom kernel modules.
>>
>> One of these projects is the BPF MPTCP packet scheduler framework. When
>> there are multiple active TCP subflows in a MPTCP connection, the MPTCP
>> stack must decide which of those subflows to use to transmit each data
>> packet. The default in-kernel scheduler tries to utilize all the
>> available subflows to favor throughput, but it is not tunable.
>> Customizable schedulers can optimize for latency, redundancy, cost,
>> carrier policy, or other factors. We have patches implementing a
>> proof-of-concept BPF packet scheduler, and hope to discuss with the
>> netdev/BPF maintainers and audience how we might best structure the
>> BPF/kernel API to balance long-term API stability, future evolution of
>> MPTCP scheduler features, and usability for scheduler authors.
>
> Should we insist on the fact that these discussions are not specific to
> MPTCP but this is more general and MPTCP is used as one typical use-case?
>
> I would suggest to explain that before this 2nd paragraph. Maybe saying
> that we are trying to get answers to questions like: what's the
> recommended way to extend a subsystem(?)? The recommended ways seems to
> be with BPF and Netlink and they both have limitations. allowing
> customisations with BPF bring more questions for us, e.g.: what about
> long-term API stability and other questions you raised here at the end.
>
> Then we can introduce the two use cases. The first one with the Packet
> Scheduler where we need something on the kernel side as it is a decision
> to take per packet. There are some uncertainties when using BPF but a
> proof-of-concept implementation exists.
>
> Then for the Path Manager, the decision can be done from the userspace
> because the communications are per connections and not per packet. So
> this is a another use-case where exposing a Netlink API seems to be a
> good fit (even if there are some limitations if there is a very high
> number of connections to deal with).
>
> We can then compare BPF and Netlink and trying to get answers to our
> questions.
>
> What do you think?
>
I think that's a good way to frame the talk: emphasizes that the content
can be useful for understanding general ideas about extending/customizing
kernel functionality, and also cover what we've done in MPTCP for these
two cases. I'll update the draft and post a v3 on Monday.
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Draft talk proposal for MPTCP @ Linux Plumbers '22 (3rd draft)
2022-07-15 14:47 ` Matthieu Baerts
2022-07-17 22:01 ` Mat Martineau
@ 2022-07-19 1:17 ` Mat Martineau
1 sibling, 0 replies; 5+ messages in thread
From: Mat Martineau @ 2022-07-19 1:17 UTC (permalink / raw)
To: Matthieu Baerts; +Cc: mptcp
Here's a new draft based on Matthieu's feedback for v2
(https://lore.kernel.org/mptcp/7cd436ad-6c05-d788-7af3-2ff08d647dfd@tessares.net/).
The main goal was to frame the proposal as an illustration of tradeoffs
between different kernel extensibility options (BPF & genl).
---
Multipath TCP (MPTCP) was initially supported in v5.6 of the Linux kernel.
In subsequent releases, the MPTCP development community has steadily
expanded from the initial baseline feature set to now support a broad
range of MPTCP features on the wire and through the socket and generic
netlink APIs.
With core MPTCP functionality established, our next goal is to make MPTCP
more extensible and customizable at runtime. The two most common tools in
the kernel's networking subsystem for these purposes are generic netlink
and BPF. Each has tradeoffs that make them better suited for different
scenarios. Our choices for extending MPTCP show some of those tradeoffs,
and also leave our community with some open questions about how to best
use these interfaces and frameworks.
As one example, we are extending the MPTCP packet scheduler using BPF.
When there are multiple active TCP subflows in a MPTCP connection, the
MPTCP stack must decide which of those subflows to use to transmit each
data packet. This requires low latency and low overhead, and direct access
to low-level TCP connection information. Customizable schedulers can
optimize for latency, redundancy, cost, carrier policy, or other factors.
We have patches implementing a proof-of-concept BPF packet scheduler, and
hope to discuss with the netdev/BPF maintainers and audience how we might
best structure the BPF/kernel API to balance long-term API stability,
future evolution of MPTCP scheduler features, and usability for scheduler
authors.
The next customization feature is the userspace path manager added in
v5.19. MPTCP path managers advertise addresses available for multipath
connections, and establish or close additional TCP subflows using the
available interfaces. There are a limited number of interactions with a
path manager during the life of a MPTCP connection. Operations are not
very sensitive to latency, and may need access to data from userspace.
This led us to expand the MPTCP generic netlink API and update the
Multipath TCP Daemon (mptcpd) to support the new commands. Generic netlink
has been a good fit for path manager commands and events, the concepts are
familiar and the message format makes it possible to maintain forward and
backward compatibility between different kernel versions and userspace
binaries.
MPTCP development for the Linux kernel and mptcpd are public and open. You
can find us at mptcp@lists.linux.dev, https://mptcp.dev, and
https://github.com/intel/mptcpd
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-07-19 1:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-30 0:16 Draft talk proposal for MPTCP @ Linux Plumbers '22 Mat Martineau
2022-07-14 22:50 ` Draft talk proposal for MPTCP @ Linux Plumbers '22 (2nd draft) Mat Martineau
2022-07-15 14:47 ` Matthieu Baerts
2022-07-17 22:01 ` Mat Martineau
2022-07-19 1:17 ` Draft talk proposal for MPTCP @ Linux Plumbers '22 (3rd draft) Mat Martineau
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.