Improving TCP performance over a gigabit network lots of connections and high traffic for storage and streaming services

Posted by Linux Guy on Server Fault See other posts from Server Fault or by Linux Guy
Published on 2014-06-08T18:42:10Z Indexed on 2014/06/08 21:27 UTC
Read the original article Hit count: 308

Filed under:
|
|
|
|

I have two servers, Both servers hardware Specification are

Processor : Dual Processor
RAM : over 128 G.B
Hard disk : SSD Hard disk
Outging Traffic bandwidth : 3 Gbps
network cards speed : 10 Gbps

Server A : for Encoding videos

Server B : for storage videos andstream videos over web interface like youtube

The inbound bandwidth between two servers is 10Gbps , the outbound bandwidth internet bandwidth is 500Mpbs

Both servers using public ip addresses in public and private network

Both servers transfer and connection on nginx port , and the server B used for streaming media , like youtube stream videos

Both servers in same network , when i do ping from Server A to Server B i got high time latency above 1.0ms , the time range time=52.7 ms to time=215.7 ms -

This is the output of iftop utility

                            353Mb                       707Mb                       1.04Gb                      1.38Gb                1.73Gb
mqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqq
server.example.com                                        => ip.address                                              6.36Mb  4.31Mb  1.66Mb
                                                         <=                                                           158Kb  94.8Kb  35.1Kb
server.example.com                                        => ip.address                                             1.23Mb  4.28Mb  1.12Mb
                                                         <=                                                          17.1Kb  83.5Kb  21.9Kb
server.example.com                                        => ip.address                                            395Kb  3.89Mb  1.07Mb
                                                         <=                                                          6.09Kb   109Kb  28.6Kb
server.example.com                                        => ip.address                                           4.55Mb  3.83Mb  1.04Mb
                                                         <=                                                          55.6Kb  45.4Kb  13.0Kb
server.example.com                                        => ip.address                                             649Kb  3.38Mb  1.47Mb
                                                         <=                                                          9.00Kb  38.7Kb  16.7Kb
server.example.com                                        => ip.address                                             5.00Mb  3.32Mb  1.80Mb
                                                         <=                                                          65.7Kb  55.1Kb  29.4Kb
server.example.com                                        => ip.address                                              387Kb  3.13Mb  1.06Mb
                                                         <=                                                          18.4Kb  39.9Kb  15.0Kb
server.example.com                                        => ip.address                                              3.27Mb  3.11Mb  1.01Mb
                                                         <=                                                          81.2Kb  64.5Kb  20.9Kb
server.example.com                                        => ip.address                                             1.75Mb  3.08Mb  2.72Mb
                                                         <=                                                          16.6Kb  35.6Kb  32.5Kb
server.example.com                                        => ip.address                                               1.75Mb  2.90Mb  2.79Mb
                                                         <=                                                          22.4Kb  32.6Kb  35.6Kb
server.example.com                                        => ip.address                                             3.03Mb  2.78Mb  1.82Mb
                                                         <=                                                          26.6Kb  27.4Kb  20.2Kb
server.example.com                                        => ip.address                                              2.26Mb  2.66Mb  1.36Mb
                                                         <=                                                          51.7Kb  49.1Kb  24.4Kb
server.example.com                                        => ip.address                                              586Kb  2.50Mb  1.03Mb
                                                         <=                                                          4.17Kb  26.1Kb  10.7Kb
server.example.com                                        => ip.address                                               2.42Mb  2.49Mb  2.44Mb
                                                         <=                                                          31.6Kb  29.7Kb  29.9Kb
server.example.com                                        => ip.address                                            2.41Mb  2.46Mb  2.41Mb
                                                         <=                                                          26.4Kb  24.5Kb  23.8Kb
server.example.com                                        => ip.address                                             2.37Mb  2.39Mb  2.40Mb
                                                         <=                                                          28.9Kb  27.0Kb  28.5Kb
server.example.com                                        => ip.address                                             525Kb  2.20Mb  1.05Mb
                                                         <=                                                          7.03Kb  26.0Kb  12.8Kb
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
TX:             cum:    102GB   peak:   1.65Gb                                                              rates:   1.46Gb  1.44Gb  1.48Gb
RX:                    1.31GB           24.3Mb                                                                       19.5Mb  18.9Mb  20.0Mb
TOTAL:                  103GB           1.67Gb                                                                       1.48Gb  1.46Gb  1.50Gb

I check the transfer speed using iperf utility From Server A to Server B

# iperf -c 0.0.0.2 -p 8777
------------------------------------------------------------
Client connecting to 0.0.0.2, TCP port 8777
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  3] local 0.0.0.1 port 38895 connected with 0.0.0.2 port 8777
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.8 sec    528 KBytes    399 Kbits/sec

My Current Connections in Server B

# netstat -an|grep ":8777"|awk '/tcp/ {print $6}'|sort -nr| uniq -c
   2072 TIME_WAIT
     28 SYN_RECV
      1 LISTEN
    189 LAST_ACK
    139 FIN_WAIT2
    373 FIN_WAIT1
   3381 ESTABLISHED
     34 CLOSING

Server A Network Card Information

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   100baseT/Full
                                1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 10000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: on
        MDI-X: Unknown
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

Server B Network Card Information

Settings for eth2:
        Supported ports: [ FIBRE ]
        Supported link modes:   10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: No
        Advertised link modes:  10000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Speed: 10000Mb/s
        Duplex: Full
        Port: Direct Attach Copper
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: off
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

ifconfig server A

eth0      Link encap:Ethernet  HWaddr 00:25:90:ED:9E:AA
          inet addr:0.0.0.1  Bcast:0.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1202795665 errors:0 dropped:64334 overruns:0 frame:0
          TX packets:2313161968 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:893413096188 (832.0 GiB)  TX bytes:3360949570454 (3.0 TiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2207544 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2207544 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:247769175 (236.2 MiB)  TX bytes:247769175 (236.2 MiB)

ifconfig Server B

eth2      Link encap:Ethernet  HWaddr 00:25:90:82:C4:FE
          inet addr:0.0.0.2  Bcast:0.0.0.2  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:39973046980 errors:0 dropped:1828387600 overruns:0 frame:0
          TX packets:69618752480 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3013976063688 (2.7 TiB)  TX bytes:102250230803933 (92.9 TiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1049495 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1049495 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:129012422 (123.0 MiB)  TX bytes:129012422 (123.0 MiB)

Netstat -i on Server B

# netstat -i
Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth2       9000   0 42098629968      0 2131223717      0 73698797854      0      0      0 BMRU
lo        65536   0  1077908      0      0      0  1077908      0      0      0 LRU

I Turn up send/receive buffers on the network card to 2048 and problem still persist

I increase the MTU for server A and problem still persist and i increase the MTU for server B for better connectivity and transfer speed but it couldn't transfer at all

The problem is : as you can see from iperf utility, the transfer speed from server A to server B slow when i restart network service in server B the transfer in server A at full speed, after 2 minutes , it's getting slow

How could i troubleshoot slow speed issue and fix it in server B ?

Notice : if there any other commands i should execute in servers for more information, so it might help resolve the problem , let me know in comments

© Server Fault or respective owner

Related posts about linux

Related posts about networking