multipath-tcp / mptcp

⚠️⚠️⚠️ Deprecated 🚫 Out-of-tree Linux Kernel implementation of MultiPath TCP. 👉 Use https://github.com/multipath-tcp/mptcp_net-next repo instead ⚠️⚠️⚠️
https://github.com/multipath-tcp/mptcp_net-next
Other
890 stars 336 forks source link

Throughput downfall in using MPTCP for TCP VPN #361

Open jeetu28 opened 5 years ago

jeetu28 commented 5 years ago

Scenario1 - Transport TCP stream , we are using the MPTCP kernel + shadowsocks and is working fine. Scenario2 - To transport the UDP traffic on multipath, we choose to go with following design (See Issue for refrence -> https://github.com/multipath-tcp/mptcp/issues/337)

Between Scenario1 to Scenario2 there is sharp decrease in throughput by upto 35% which is too high ,even if we consider the overhead of tcp-openvpn tunnel .

We can see lot of retrasnmission , dup-pkts etc...PFA pcap.

Configuration of End-Points

Client (2 lte links) mptcp-version 0.94.6 & kernel4.14.133+ OS Debian8 Kernel Parameters kernel.osrelease = 4.14.133mptcp+ net.mptcp.mptcp_checksum = 1 net.mptcp.mptcp_debug = 0 net.mptcp.mptcp_enabled = 1 net.mptcp.mptcp_path_manager = fullmesh net.mptcp.mptcp_scheduler = default net.mptcp.mptcp_syn_retries = 3 net.mptcp.mptcp_version = 0 /sys/module/mptcp_fullmesh/parameters/create_on_err 1 /proc/sys/net/ipv4/tcp_congestion_control cubic /sys/module/mptcp_fullmesh/parameters/num_subflows 1

Server (1 link) mptcp-version 0.94 & kernel4.14.79+ OS Debian9 Kernel Parameters net.mptcp.mptcp_checksum = 1 net.mptcp.mptcp_debug = 0 net.mptcp.mptcp_enabled = 1 net.mptcp.mptcp_path_manager = fullmesh net.mptcp.mptcp_scheduler = default net.mptcp.mptcp_syn_retries = 3 net.mptcp.mptcp_version = 0 /sys/module/mptcp_fullmesh/parameters/create_on_err 1 /proc/sys/net/ipv4/tcp_congestion_control cubic /sys/module/mptcp_fullmesh/parameters/num_subflows 1

Please advise.

VikasBansal1510 commented 5 years ago

PFA pcap for above issue. mptcp_low_throughput.zip

cpaasch commented 5 years ago

To understand your Scenario 2 correctly: Are you sending UDP over TCP over MPTCP?

VikasBansal1510 commented 5 years ago

yes right, UDP over TCP over MPTCP . We are converting the UDP stream into TCP stream (now on same level as Scenario1) and then proxying the TCP stream via socks over other end

cpaasch commented 5 years ago

And before that you did TCP over MPTCP, and that was fine?

I really doubt that UDP over TCP over MPTCP can give you a good performance...

jeetu28 commented 5 years ago

Yes... TCP over MPTCP was fine!!

cpaasch commented 5 years ago

Looking at the traces, it does not seem like a MPTCP-problem. Is the network-link the same in both scenarios? There simply seems to be a huge latency between the client and the server (in the order of 300ms). The packet-loss then takes quite some time to recover.

Aren't you seeing this kind of latency and packet-loss in Scenario 1?

jeetu28 commented 5 years ago

well... In scenario 1 we are not seeing such latency. We are using the same link for both the scenario. Do you think this latency could be due to fragmentation. We are using MTU value as 1500 for TCP VPN Tunnel.

cpaasch commented 5 years ago

I don't think that it's due to the MTU. Because, I guess you are using the same config for Scenario 1 and Scenario 2.

Can you share a packet-trace of Scenario 1 as well? That might give some insight.