-
Notifications
You must be signed in to change notification settings - Fork 5.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
configs: Enable MPTCP support #5487
Conversation
Note: the error with checkpatch is because the GitHub action doesn't fetch all the Git history and it doesn't have info about the mentioned commit:
|
The official description says: Multipath TCP (MPTCP) connections send and receive data over multiple subflows in order to utilize multiple network paths. Each subflow uses the TCP protocol, and TCP options carry header information for MPTCP. In other words, we can easily use multiple Internet links at the same time and for the same connection. For example, we can plug a 4G/5G USB dongle in a RPi and use both the WiFi and the cellular networks to get more speed, more redundancy, etc. An example of use with a RPi4 and Ubuntu 22.04: https://www.tessares.net/mptcp-proxy-setup-at-home-easier-now/ MPTCP support is light and enabled in most Linux distributions today: RHEL, Debian, Ubuntu, Fedora, ArchLinux, etc. Note that to use MPTCP with IPv6 addresses, it is required to have IPV6 not built as a module, see commit ("mptcp: depends on IPV6 but not as a module") for more details. When talking with netdev maintainers before the introduction of MPTCP in the upstream kernel in v5.6, it looks like there is not so much reasons to still have IPv6 as a module as IPv6 is (supposed to be) "today's Internet". This module will likely quickly be loaded on devices with network devices anyway. If having IPV6 built-in is really an issue, MPTCP can still be enabled but without IPv6 support which is not recommended today. CONFIG_INET_MPTCP_DIAG is also enabled as a module, similar to CONFIG_INET_DIAG. Closes: raspberrypi#4254 Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
I just removed the mention of 0ed37ac commit in the commit message just to please the CI, the code is still the same. |
MPTCP itself is moderately large, but it's building in IPV6 that really makes the difference. These builds are for a Pi 1, which is going to be most memory-constrained:
|
You mention that Ubuntu includes MPTCP support, but from what I've seen it doesn't include MPTCP over IPV6 (I'm looking at 6.2.0 kernel from Apr 3 2023). As we have done for a few advanced features recently I will consider adding MPTCP (without IPV6) to the aarch64 kernel. Looking at the aarch64 build instead:
That's a 160kB tax for MPTCP and 760kB (that's a 3.3% increase) for MPTCP and IPV6. If @popcornmix is in agreement I'll just add the |
OK |
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
See 216be50. |
@pelwell thank you for having checked this! What is the size we need to minimise here? Is it the size of what is loaded in RAM or the size of the .img? I suspect IPv6 will be loaded in most setup by default, no? So maybe there is no need to have it in a separated module and it could be inline to save a bit of space and CPU cycles?
I understand MPTCP might not be enabled in this environment.
Oh, I missed that. Thank you for having reported this. I will ask Ubuntu devs if it is normal.
Thank you :) Is this architecture that limited in memory too? (especially if IPv6 is enabled and used by default for local addresses, etc.?) |
See: raspberrypi/linux#4683 kernel: configs: Add MPTCP for 64-bit platforms See: raspberrypi/linux#5487
See: raspberrypi/linux#4683 kernel: configs: Add MPTCP for 64-bit platforms See: raspberrypi/linux#5487
RAM size is the most important metric, because it isn't something that can be expanded. The early Pis had as little as 128MB, which would make a loss of >500kB painful. Every optional feature has some kind of overhead, either in RAM size or execution speed (or both), otherwise it wouldn't be optional. When evaluating the inclusion of features we think of those overheads as being a tax on users who don't use the feature. With MPTCP I feel the non-users will vastly outweigh the users, and the same goes for IPV6. The fact that both features are quite large makes the combination unattractive. |
@pelwell thank you for the explanation!
I do understand for MPTCP. For IPv6, I don't have a good view on how the RPi are mostly used but I guess that if the devices are connected to a network via WiFi or Ethernet, IPv6 will be loaded, no? Very likely at least a link-local IPv6 address will be created, IPv6 packets will be broadcasted, etc. I looked a bit at what they were doing on Ubuntu side:
In other words, I would say that if one day you switch to |
(FYI, here is the bug report regarding |
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
FYI, the modification has been done on Ubuntu to have
So thanks to that, we can have |
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable MPTCP for 64-bit kernels, but not IPV6 support because that requires IPV6=y and bloats the kernel by 500kB. See: #5487 Signed-off-by: Phil Elwell <phil@raspberrypi.com>
First, thank you for all the work around the RPi, it is really a useful project, especially from an educational point of view!
About this PR and MPTCP, here is the official description says:
In other words, we can easily use multiple Internet links at the same time and for the same connection. For example, we can plug a 4G/5G USB dongle in a RPi and use both the WiFi and the cellular networks to get more speed, more redundancy, etc.
An example of use with a RPi4 and Ubuntu 22.04: https://www.tessares.net/mptcp-proxy-setup-at-home-easier-now/
MPTCP support is light and enabled in most Linux distributions today: RHEL, Debian, Ubuntu, Fedora, ArchLinux, etc.
Note that to use MPTCP with IPv6 addresses, it is required to have
IPV6
not built as a module, see commit 0ed37ac ("mptcp: depends on IPV6 but not as a module
") for more details. When talking with netdev maintainers before the introduction of MPTCP in the upstream kernel in v5.6, it looks like there is not so much reasons to still have IPv6 as a module as IPv6 is (supposed to be) "today's Internet". This module will likely be quickly loaded on devices with network devices anyway.If having IPV6 built-in is really an issue, MPTCP can still be enabled but without IPv6 support which is not recommended today.
CONFIG_INET_MPTCP_DIAG
is also enabled as a module, similar toCONFIG_INET_DIAG
.Closes #4254