-
-
Notifications
You must be signed in to change notification settings - Fork 52
Open
Labels
Description
Pre-requisites
- A similar issue has not been reported before.
- mptcp.dev website does not cover my case.
- An up-to-date kernel is being used.
- This case is not fixed with the latest stable (or LTS) version listed on kernel.org
What did you do?
TL;DR Performance test of MPTCP on machine with 2 physical NICs (100Gb/s) shows noticeably worse throughput than single TCP connection (10.2 Gb/s vs. 43.2 Gb/s).
Servers setup
Both client and server machines are equal and connected to each other through Rack switch.
Kernel: v6.13.2
NICs: 2 Mellanox devices eth0 and eth1 with 100Gb/s speed
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 <server-eth0-prefix>::1 prefixlen 64 scopeid 0x0<global>
...
RX errors 0 dropped 0 overruns 0 frame 0
...
TX errors 0 dropped 4 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 <server-eth1-prefix>::1 prefixlen 64 scopeid 0x0<global>
...
MPTCP setup
Server side
# ip mptcp endpoint
<server-eth1-prefix>::1 id 1 signal dev eth1
# ip mptcp limit
add_addr_accepted 2 subflows 2
Client side
ip mptcp endpoint
<client-eth1-prefix>::1 id 1 subflow dev eth1
# ip mptcp limit
add_addr_accepted 2 subflows 2
Test setup
Using iperf3 compiled with mptcp support (esnet/iperf#1661).
MPTCP Test
[server] # iperf3 -m -s &
[server] # ip mptcp monitor
[LISTENER_CREATED] saddr6=:: sport=5201
[ CREATED] token=52bca52b remid=0 locid=0 saddr6=<server-eth0-prefix>::1 daddr6=<client-eth0-prefix>::1 sport=5201 dport=48573
[ ESTABLISHED] token=52bca52b remid=0 locid=0 saddr6=<server-eth0-prefix>::1 daddr6=<client-eth0-prefix>::1 sport=5201 dport=48573
[ SF_ESTABLISHED] token=52bca52b remid=1 locid=0 saddr6=<server-eth0-prefix>::1 daddr6=<client-eth1-prefix>::1 sport=5201 dport=58893 backup=0
[ SF_ESTABLISHED] token=52bca52b remid=2 locid=1 saddr6=<server-eth1-prefix>::1 daddr6=<client-eth1-prefix>::1 sport=5201 dport=63299 backup=0
[ CLOSED] token=52bca52b
# snapshot of NIC % util during test with `sar` tool
11:54:57 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
...
11:54:58 AM eth0 780104.95 15143.56 1143814.04 1598.74 0.00 0.00 0.99 9.37
11:54:58 AM eth1 344995.05 118.81 505897.96 160.35 0.00 0.00 0.99 4.14
[client] # iperf3 -c <server-eth0-prefix>::1 -t 30 -B <client-eth0-prefix>::1 -m
...
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-30.00 sec 36.2 GBytes 10.4 Gbits/sec 1162 sender
[ 5] 0.00-30.00 sec 36.2 GBytes 10.4 Gbits/sec receiver
TCP Test
[server]# iperf3 -s &
# sar tool snapshot during test run
11:54:27 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
...
11:54:28 AM eth0 3767797.00 29652.00 5569314.57 2644.75 0.00 0.00 0.00 45.62
11:54:28 AM eth1 120.00 120.00 146.75 161.95 0.00 0.00 1.00 0.00
[client]# iperf3 -c <server-eth0-prefix>::1 -t 30 -B <client-eth0-prefix>::1
...
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-30.00 sec 152 GBytes 43.6 Gbits/sec 3431 sender
[ 5] 0.00-30.00 sec 152 GBytes 43.6 Gbits/sec receiver
Notes
There is another issue reported in #562 for MPTCP overhead, but might make sense to keep them separate.
What happened?
MPTCP Throughput is 10.4 Gb/s with 2 subflows and 2 NICs vs. 43.6 Gb/s TCP connection on single NIC
What did you expect to have?
Smaller overhead of MPTCP on throughput
System info: Client/Server
Stripped some info, let me know if it's necessary to add
v6.13.2
...
NAME="CentOS Stream"
VERSION="9"
...
net.mptcp.add_addr_timeout = 120
net.mptcp.allow_join_initial_addr_port = 1
net.mptcp.available_schedulers = default
net.mptcp.blackhole_timeout = 3600
net.mptcp.checksum_enabled = 0
net.mptcp.close_timeout = 60
net.mptcp.enabled = 1
net.mptcp.pm_type = 0
net.mptcp.scheduler = default
net.mptcp.stale_loss_cnt = 4Additional context
No response