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
888 stars 336 forks source link

fairness issue between mptcp congestion control (LIA, OLIA, wvegas) vs. single path TCP (Reno, Cubic) #287

Closed dejeneboru closed 5 years ago

dejeneboru commented 5 years ago

Hi all,

I setup an experiment as in attached figure (https://github.com/multipath-tcp/mptcp/files/2453931/netsetup.pdf) to test fairness of MPTCP cc vs. single path TCP. The client and server machines run MPTCP kernel (version 4.14.73 ) compiled from source (https://github.com/multipath-tcp/). All ethernet cards have 1Gbps capacity. I started to test the fairness of MPTCP congestion control algorithms when sharing the bottleneck link with single path TCP. I configured TCP Reno on TCP client and server machines and disabled MPTCP by sysctl command (sysctl -w net.mptcp.mptcp_enabled=0) and enabled MPTCP on MPTCP client and server. The cc is set to LIA. The traffic generator used is iperf. I have repeated the test with OLIA and wvegas and obtained similar result. I don't understand the problem and gladly welcome your inputs. I have also applied traffic shaping to reduce bottleneck capacity but got the same result. I have tried to run the test long enough about 5 minutes and the base RTT is very small (less than 0.5 ms).

1) MPTCP (3 sub flows vs TCP Reno)

1.1. MPTCP client throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 36.8 MBytes 308 Mbits/sec [ 3] 1.0- 2.0 sec 34.5 MBytes 289 Mbits/sec [ 3] 2.0- 3.0 sec 34.2 MBytes 287 Mbits/sec [ 3] 3.0- 4.0 sec 33.0 MBytes 277 Mbits/sec [ 3] 4.0- 5.0 sec 32.8 MBytes 275 Mbits/sec [ 3] 5.0- 6.0 sec 31.5 MBytes 264 Mbits/sec [ 3] 6.0- 7.0 sec 31.2 MBytes 262 Mbits/sec [ 3] 7.0- 8.0 sec 30.8 MBytes 258 Mbits/sec [ 3] 8.0- 9.0 sec 30.4 MBytes 255 Mbits/sec [ 3] 9.0-10.0 sec 29.2 MBytes 245 Mbits/sec ..... [ 3] 18.0-19.0 sec 26.4 MBytes 221 Mbits/sec [ 3] 19.0-20.0 sec 38.0 MBytes 319 Mbits/sec [ 3] 0.0-20.0 sec 612 MBytes 257 Mbits/sec

1.2. TCP throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 84.6 MBytes 710 Mbits/sec [ 3] 1.0- 2.0 sec 75.4 MBytes 632 Mbits/sec [ 3] 2.0- 3.0 sec 75.5 MBytes 633 Mbits/sec [ 3] 3.0- 4.0 sec 77.1 MBytes 647 Mbits/sec [ 3] 4.0- 5.0 sec 78.0 MBytes 654 Mbits/sec [ 3] 5.0- 6.0 sec 78.5 MBytes 659 Mbits/sec [ 3] 6.0- 7.0 sec 79.5 MBytes 667 Mbits/sec [ 3] 7.0- 8.0 sec 79.5 MBytes 667 Mbits/sec [ 3] 8.0- 9.0 sec 79.6 MBytes 668 Mbits/sec [ 3] 9.0-10.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 10.0-11.0 sec 81.2 MBytes 682 Mbits/sec ... [ 3] 18.0-19.0 sec 83.6 MBytes 701 Mbits/sec [ 3] 19.0-20.0 sec 84.4 MBytes 708 Mbits/sec [ 3] 0.0-20.0 sec 1.58 GBytes 677 Mbits/sec

2) MPTCP (2 subflow) vs TCP Reno 2.1. MPTCP throughput
[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 34.9 MBytes 293 Mbits/sec [ 3] 1.0- 2.0 sec 33.2 MBytes 279 Mbits/sec [ 3] 2.0- 3.0 sec 32.0 MBytes 268 Mbits/sec [ 3] 3.0- 4.0 sec 32.0 MBytes 268 Mbits/sec [ 3] 4.0- 5.0 sec 31.1 MBytes 261 Mbits/sec [ 3] 5.0- 6.0 sec 30.6 MBytes 257 Mbits/sec [ 3] 6.0- 7.0 sec 29.8 MBytes 250 Mbits/sec [ 3] 7.0- 8.0 sec 29.9 MBytes 251 Mbits/sec [ 3] 8.0- 9.0 sec 29.1 MBytes 244 Mbits/sec [ 3] 9.0-10.0 sec 28.9 MBytes 242 Mbits/sec [ 3] 10.0-11.0 sec 28.9 MBytes 242 Mbits/sec .... [ 3] 18.0-19.0 sec 26.6 MBytes 223 Mbits/sec [ 3] 19.0-20.0 sec 41.5 MBytes 348 Mbits/sec [ 3] 0.0-20.0 sec 602 MBytes 252 Mbits/sec

2.2. TCP throughput

[ 3] 0.0- 1.0 sec 86.2 MBytes 724 Mbits/sec [ 3] 1.0- 2.0 sec 78.0 MBytes 654 Mbits/sec [ 3] 2.0- 3.0 sec 76.5 MBytes 642 Mbits/sec [ 3] 3.0- 4.0 sec 79.5 MBytes 667 Mbits/sec [ 3] 4.0- 5.0 sec 78.2 MBytes 656 Mbits/sec [ 3] 5.0- 6.0 sec 79.6 MBytes 668 Mbits/sec [ 3] 6.0- 7.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 7.0- 8.0 sec 81.0 MBytes 679 Mbits/sec [ 3] 8.0- 9.0 sec 80.9 MBytes 678 Mbits/sec [ 3] 9.0-10.0 sec 80.2 MBytes 673 Mbits/sec .... [ 3] 19.0-20.0 sec 84.0 MBytes 705 Mbits/sec [ 3] 0.0-20.0 sec 1.59 GBytes 683 Mbits/sec

3) MPTCP ( 1 subflow ) vs TCP Reno

3.1 . MPTCP throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 31.1 MBytes 261 Mbits/sec [ 3] 1.0- 2.0 sec 30.1 MBytes 253 Mbits/sec [ 3] 2.0- 3.0 sec 29.9 MBytes 251 Mbits/sec [ 3] 3.0- 4.0 sec 29.9 MBytes 251 Mbits/sec [ 3] 4.0- 5.0 sec 29.2 MBytes 245 Mbits/sec [ 3] 5.0- 6.0 sec 29.2 MBytes 245 Mbits/sec [ 3] 6.0- 7.0 sec 29.0 MBytes 243 Mbits/sec [ 3] 7.0- 8.0 sec 28.9 MBytes 242 Mbits/sec [ 3] 8.0- 9.0 sec 28.8 MBytes 241 Mbits/sec [ 3] 9.0-10.0 sec 28.5 MBytes 239 Mbits/sec ..... [ 3] 19.0-20.0 sec 45.2 MBytes 380 Mbits/sec [ 3] 0.0-20.0 sec 593 MBytes 249 Mbits/sec

3.2. TCP Reno throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 90.5 MBytes 759 Mbits/sec [ 3] 1.0- 2.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 2.0- 3.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 3.0- 4.0 sec 80.9 MBytes 678 Mbits/sec [ 3] 4.0- 5.0 sec 79.6 MBytes 668 Mbits/sec [ 3] 5.0- 6.0 sec 81.2 MBytes 682 Mbits/sec [ 3] 6.0- 7.0 sec 82.2 MBytes 690 Mbits/sec [ 3] 7.0- 8.0 sec 81.4 MBytes 683 Mbits/sec [ 3] 8.0- 9.0 sec 81.8 MBytes 686 Mbits/sec [ 3] 9.0-10.0 sec 81.1 MBytes 681 Mbits/sec .... [ 3] 0.0-20.0 sec 1.60 GBytes 689 Mbits/sec

However when I enable MPTCP on the TCP client and sever and configure LIA/OLIA/wvegas as a congestion control I get the following throughput for MPTCP (3 subflow ) vs MPTCP (1 subflow). Here there is not fairness problem.

MPTCP (3 subflow ) throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 54.9 MBytes 460 Mbits/sec [ 3] 1.0- 2.0 sec 54.4 MBytes 456 Mbits/sec [ 3] 2.0- 3.0 sec 54.0 MBytes 453 Mbits/sec [ 3] 3.0- 4.0 sec 53.4 MBytes 448 Mbits/sec [ 3] 4.0- 5.0 sec 53.1 MBytes 446 Mbits/sec [ 3] 5.0- 6.0 sec 52.6 MBytes 441 Mbits/sec [ 3] 6.0- 7.0 sec 52.4 MBytes 439 Mbits/sec [ 3] 7.0- 8.0 sec 52.0 MBytes 436 Mbits/sec [ 3] 8.0- 9.0 sec 51.6 MBytes 433 Mbits/sec [ 3] 9.0-10.0 sec 51.4 MBytes 431 Mbits/sec [ 3] 10.0-11.0 sec 51.5 MBytes 432 Mbits/sec .... [ 3] 15.0-16.0 sec 50.6 MBytes 425 Mbits/sec

MPTCP ( 1 subflow ) throughput

[ 3] 0.0- 1.0 sec 109 MBytes 918 Mbits/sec [ 3] 1.0- 2.0 sec 109 MBytes 911 Mbits/sec [ 3] 2.0- 3.0 sec 109 MBytes 912 Mbits/sec [ 3] 3.0- 4.0 sec 75.5 MBytes 633 Mbits/sec [ 3] 4.0- 5.0 sec 54.6 MBytes 458 Mbits/sec [ 3] 5.0- 6.0 sec 55.0 MBytes 461 Mbits/sec [ 3] 6.0- 7.0 sec 55.4 MBytes 465 Mbits/sec [ 3] 7.0- 8.0 sec 56.4 MBytes 473 Mbits/sec [ 3] 8.0- 9.0 sec 56.2 MBytes 472 Mbits/sec [ 3] 9.0-10.0 sec 56.8 MBytes 476 Mbits/sec [ 3] 10.0-11.0 sec 57.1 MBytes 479 Mbits/sec ... [ 3] 16.0-17.0 sec 58.1 MBytes 488 Mbits/sec

netsetup.pdf

dejeneboru commented 5 years ago

Hi all,

I setup an experiment as in attached figure (https://github.com/multipath-tcp/mptcp/files/2453931/netsetup.pdf) to test fairness of MPTCP cc vs. single path TCP. The client and server machines run MPTCP kernel (version 4.14.73 ) compiled from source (https://github.com/multipath-tcp/). All ethernet cards have 1Gbps capacity. I started to test the fairness of MPTCP congestion control algorithms when sharing the bottleneck link with single path TCP. I configured TCP Reno on TCP client and server machines and disabled MPTCP by sysctl command (sysctl -w net.mptcp.mptcp_enabled=0) and enabled MPTCP on MPTCP client and server. The cc is set to LIA. The traffic generator used is iperf. I have repeated the test with OLIA and wvegas and obtained similar result. I don't understand the problem and gladly welcome your inputs. I have also applied traffic shaping to reduce bottleneck capacity but got the same result. I have tried to run the test long enough about 5 minutes and the base RTT is very small (less than 0.5 ms).

  1. MPTCP (3 sub flows vs TCP Reno)

1.1. MPTCP client throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 36.8 MBytes 308 Mbits/sec [ 3] 1.0- 2.0 sec 34.5 MBytes 289 Mbits/sec [ 3] 2.0- 3.0 sec 34.2 MBytes 287 Mbits/sec [ 3] 3.0- 4.0 sec 33.0 MBytes 277 Mbits/sec [ 3] 4.0- 5.0 sec 32.8 MBytes 275 Mbits/sec [ 3] 5.0- 6.0 sec 31.5 MBytes 264 Mbits/sec [ 3] 6.0- 7.0 sec 31.2 MBytes 262 Mbits/sec [ 3] 7.0- 8.0 sec 30.8 MBytes 258 Mbits/sec [ 3] 8.0- 9.0 sec 30.4 MBytes 255 Mbits/sec [ 3] 9.0-10.0 sec 29.2 MBytes 245 Mbits/sec ..... [ 3] 18.0-19.0 sec 26.4 MBytes 221 Mbits/sec [ 3] 19.0-20.0 sec 38.0 MBytes 319 Mbits/sec [ 3] 0.0-20.0 sec 612 MBytes 257 Mbits/sec

1.2. TCP throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 84.6 MBytes 710 Mbits/sec [ 3] 1.0- 2.0 sec 75.4 MBytes 632 Mbits/sec [ 3] 2.0- 3.0 sec 75.5 MBytes 633 Mbits/sec [ 3] 3.0- 4.0 sec 77.1 MBytes 647 Mbits/sec [ 3] 4.0- 5.0 sec 78.0 MBytes 654 Mbits/sec [ 3] 5.0- 6.0 sec 78.5 MBytes 659 Mbits/sec [ 3] 6.0- 7.0 sec 79.5 MBytes 667 Mbits/sec [ 3] 7.0- 8.0 sec 79.5 MBytes 667 Mbits/sec [ 3] 8.0- 9.0 sec 79.6 MBytes 668 Mbits/sec [ 3] 9.0-10.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 10.0-11.0 sec 81.2 MBytes 682 Mbits/sec ... [ 3] 18.0-19.0 sec 83.6 MBytes 701 Mbits/sec [ 3] 19.0-20.0 sec 84.4 MBytes 708 Mbits/sec [ 3] 0.0-20.0 sec 1.58 GBytes 677 Mbits/sec

  1. MPTCP (2 subflow) vs TCP Reno 2.1. MPTCP throughput [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 34.9 MBytes 293 Mbits/sec [ 3] 1.0- 2.0 sec 33.2 MBytes 279 Mbits/sec [ 3] 2.0- 3.0 sec 32.0 MBytes 268 Mbits/sec [ 3] 3.0- 4.0 sec 32.0 MBytes 268 Mbits/sec [ 3] 4.0- 5.0 sec 31.1 MBytes 261 Mbits/sec [ 3] 5.0- 6.0 sec 30.6 MBytes 257 Mbits/sec [ 3] 6.0- 7.0 sec 29.8 MBytes 250 Mbits/sec [ 3] 7.0- 8.0 sec 29.9 MBytes 251 Mbits/sec [ 3] 8.0- 9.0 sec 29.1 MBytes 244 Mbits/sec [ 3] 9.0-10.0 sec 28.9 MBytes 242 Mbits/sec [ 3] 10.0-11.0 sec 28.9 MBytes 242 Mbits/sec .... [ 3] 18.0-19.0 sec 26.6 MBytes 223 Mbits/sec [ 3] 19.0-20.0 sec 41.5 MBytes 348 Mbits/sec [ 3] 0.0-20.0 sec 602 MBytes 252 Mbits/sec

2.2. TCP throughput

[ 3] 0.0- 1.0 sec 86.2 MBytes 724 Mbits/sec [ 3] 1.0- 2.0 sec 78.0 MBytes 654 Mbits/sec [ 3] 2.0- 3.0 sec 76.5 MBytes 642 Mbits/sec [ 3] 3.0- 4.0 sec 79.5 MBytes 667 Mbits/sec [ 3] 4.0- 5.0 sec 78.2 MBytes 656 Mbits/sec [ 3] 5.0- 6.0 sec 79.6 MBytes 668 Mbits/sec [ 3] 6.0- 7.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 7.0- 8.0 sec 81.0 MBytes 679 Mbits/sec [ 3] 8.0- 9.0 sec 80.9 MBytes 678 Mbits/sec [ 3] 9.0-10.0 sec 80.2 MBytes 673 Mbits/sec .... [ 3] 19.0-20.0 sec 84.0 MBytes 705 Mbits/sec [ 3] 0.0-20.0 sec 1.59 GBytes 683 Mbits/sec

  1. MPTCP ( 1 subflow ) vs TCP Reno

3.1 . MPTCP throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 31.1 MBytes 261 Mbits/sec [ 3] 1.0- 2.0 sec 30.1 MBytes 253 Mbits/sec [ 3] 2.0- 3.0 sec 29.9 MBytes 251 Mbits/sec [ 3] 3.0- 4.0 sec 29.9 MBytes 251 Mbits/sec [ 3] 4.0- 5.0 sec 29.2 MBytes 245 Mbits/sec [ 3] 5.0- 6.0 sec 29.2 MBytes 245 Mbits/sec [ 3] 6.0- 7.0 sec 29.0 MBytes 243 Mbits/sec [ 3] 7.0- 8.0 sec 28.9 MBytes 242 Mbits/sec [ 3] 8.0- 9.0 sec 28.8 MBytes 241 Mbits/sec [ 3] 9.0-10.0 sec 28.5 MBytes 239 Mbits/sec ..... [ 3] 19.0-20.0 sec 45.2 MBytes 380 Mbits/sec [ 3] 0.0-20.0 sec 593 MBytes 249 Mbits/sec

3.2. TCP Reno throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 90.5 MBytes 759 Mbits/sec [ 3] 1.0- 2.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 2.0- 3.0 sec 80.8 MBytes 677 Mbits/sec [ 3] 3.0- 4.0 sec 80.9 MBytes 678 Mbits/sec [ 3] 4.0- 5.0 sec 79.6 MBytes 668 Mbits/sec [ 3] 5.0- 6.0 sec 81.2 MBytes 682 Mbits/sec [ 3] 6.0- 7.0 sec 82.2 MBytes 690 Mbits/sec [ 3] 7.0- 8.0 sec 81.4 MBytes 683 Mbits/sec [ 3] 8.0- 9.0 sec 81.8 MBytes 686 Mbits/sec [ 3] 9.0-10.0 sec 81.1 MBytes 681 Mbits/sec .... [ 3] 0.0-20.0 sec 1.60 GBytes 689 Mbits/sec

However when I enable MPTCP on the TCP client and sever and configure LIA/OLIA/wvegas as a congestion control I get the following throughput for MPTCP (3 subflow ) vs MPTCP (1 subflow). Here there is not fairness problem.

MPTCP (3 subflow ) throughput

[ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 54.9 MBytes 460 Mbits/sec [ 3] 1.0- 2.0 sec 54.4 MBytes 456 Mbits/sec [ 3] 2.0- 3.0 sec 54.0 MBytes 453 Mbits/sec [ 3] 3.0- 4.0 sec 53.4 MBytes 448 Mbits/sec [ 3] 4.0- 5.0 sec 53.1 MBytes 446 Mbits/sec [ 3] 5.0- 6.0 sec 52.6 MBytes 441 Mbits/sec [ 3] 6.0- 7.0 sec 52.4 MBytes 439 Mbits/sec [ 3] 7.0- 8.0 sec 52.0 MBytes 436 Mbits/sec [ 3] 8.0- 9.0 sec 51.6 MBytes 433 Mbits/sec [ 3] 9.0-10.0 sec 51.4 MBytes 431 Mbits/sec [ 3] 10.0-11.0 sec 51.5 MBytes 432 Mbits/sec .... [ 3] 15.0-16.0 sec 50.6 MBytes 425 Mbits/sec

MPTCP ( 1 subflow ) throughput

[ 3] 0.0- 1.0 sec 109 MBytes 918 Mbits/sec [ 3] 1.0- 2.0 sec 109 MBytes 911 Mbits/sec [ 3] 2.0- 3.0 sec 109 MBytes 912 Mbits/sec [ 3] 3.0- 4.0 sec 75.5 MBytes 633 Mbits/sec [ 3] 4.0- 5.0 sec 54.6 MBytes 458 Mbits/sec [ 3] 5.0- 6.0 sec 55.0 MBytes 461 Mbits/sec [ 3] 6.0- 7.0 sec 55.4 MBytes 465 Mbits/sec [ 3] 7.0- 8.0 sec 56.4 MBytes 473 Mbits/sec [ 3] 8.0- 9.0 sec 56.2 MBytes 472 Mbits/sec [ 3] 9.0-10.0 sec 56.8 MBytes 476 Mbits/sec [ 3] 10.0-11.0 sec 57.1 MBytes 479 Mbits/sec ... [ 3] 16.0-17.0 sec 58.1 MBytes 488 Mbits/sec

netsetup.pdf

This issue is resolved! It turned out to be a problem of network interface connected to the switch in my setup diagram.