与Iperf之间的巨大性能差异 - 有和没有VPN隧道

时间:2017-09-13 21:26:54

标签: performance docker networking vpn iperf

我正在使用 IPerf 在不同的网络设置之间运行一些性能指标。我看到两个基本设置之间存在非常大的差异。

  1. 两个容器(docker)通过主机中默认的 docker0 网桥接口相互连接。
  2. 通过 VPNTunnel接口连接的两个容器,通过上述 docker0 桥内部连接。
  3. 针对 10秒

    的两种情况的

    IPerf 计算

    **Scenario One (1)**  
    
    Client connecting to 172.17.0.4, TCP port 5001
    TCP window size: 1.12 MByte (default)
    ------------------------------------------------------------
    [  3] local 172.17.0.2 port 50728 connected with 172.17.0.4 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0- 1.0 sec  3.26 GBytes  28.0 Gbits/sec
    [  3]  1.0- 2.0 sec  3.67 GBytes  31.5 Gbits/sec
    [  3]  2.0- 3.0 sec  3.70 GBytes  31.8 Gbits/sec
    [  3]  3.0- 4.0 sec  3.93 GBytes  33.7 Gbits/sec
    [  3]  4.0- 5.0 sec  3.34 GBytes  28.7 Gbits/sec
    [  3]  5.0- 6.0 sec  3.44 GBytes  29.6 Gbits/sec
    [  3]  6.0- 7.0 sec  3.55 GBytes  30.5 Gbits/sec
    [  3]  7.0- 8.0 sec  3.50 GBytes  30.0 Gbits/sec  
    [  3]  8.0- 9.0 sec  3.41 GBytes  29.3 Gbits/sec
    [  3]  9.0-10.0 sec  3.20 GBytes  27.5 Gbits/sec
    [  3]  0.0-10.0 sec  35.0 GBytes  30.1 Gbits/sec
    
    
    **Scenario Two (2)**
    
    Client connecting to 10.23.0.2, TCP port 5001
    TCP window size: 85.0 KByte (default)
    ------------------------------------------------------------
    [  3] local 10.12.0.2 port 41886 connected with 10.23.0.2 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0- 1.0 sec  15.1 MBytes   127 Mbits/sec
    [  3]  1.0- 2.0 sec  14.9 MBytes   125 Mbits/sec
    [  3]  2.0- 3.0 sec  14.9 MBytes   125 Mbits/sec
    [  3]  3.0- 4.0 sec  14.2 MBytes   120 Mbits/sec
    [  3]  4.0- 5.0 sec  16.4 MBytes   137 Mbits/sec
    [  3]  5.0- 6.0 sec  18.0 MBytes   151 Mbits/sec
    [  3]  6.0- 7.0 sec  18.6 MBytes   156 Mbits/sec
    [  3]  7.0- 8.0 sec  16.4 MBytes   137 Mbits/sec
    [  3]  8.0- 9.0 sec  13.5 MBytes   113 Mbits/sec
    [  3]  9.0-10.0 sec  15.0 MBytes   126 Mbits/sec
    [  3]  0.0-10.0 sec   157 MBytes   132 Mbits/sec
    

    我对吞吐量的高度差异感到困惑。

    是否由于加密和解密以及涉及的OpenSSL导致这种降级?

    或者是因为在通过VPN隧道路由时需要在应用层下面多次解组和编组数据包头?

    谢谢你 沙比尔

1 个答案:

答案 0 :(得分:0)

两个测试都没有同样运行 - 第一个测试使用1.12 MB的TCP窗口运行,而第二个较慢的测试使用0.085 MByte的窗口运行:

Client connecting to 172.17.0.4, TCP port 5001
TCP window size: 1.12 MByte (default)
                 ^^^^

Client connecting to 10.23.0.2, TCP port 5001
TCP window size: 85.0 KByte (default)
                 ^^^^

因此,您可能会遇到TCP窗口耗尽,这是因为缓冲区较小以及vpn堆栈的延迟略微增加。

为了知道要使用的缓冲区大小(如果不是一个巨大的缓冲区),您需要知道bandwidth-delay product

我不知道您的原始频道RTT是什么,但我们可以尝试一下。您可以通过链接获得~30 gbit / sec的缓冲区大小1.12 MBytes,然后向后进行数学运算(单位转换省略),我们得到:

1.12 megabytes / 30 gigabits/sec --> 0.3 ms

这似乎很合理。现在让我们假设您的vpn比原始链接的RTT加倍,因此我们假设延迟为0.6 ms。然后,我们将使用0.085 MByte的新窗口大小来确定通过计算带宽延迟产品前向应该期望的性能:

0.085 Mbytes / 0.6 ms --> BDP = 141 mbit/sec. 

嗯,你知道什么,那就是你所看到的确切表现。

例如,如果您希望使RTT为0.6 ms的100千兆位/秒管道饱和,那么您需要7.5 MB的缓冲区大小。或者,如果您想要使用单个连接而不是N个连接来使管道饱和,那么您需要N个插槽,每个插槽的发送缓冲区大小为7.5 / N Mbytes。