Почему я достигаю только 2,5 Гбит / с при прямом соединении 10 Гбит между двумя компьютерами?

У меня есть 2 машины, напрямую соединенные друг с другом с помощью 7-футового кабеля Ethernet Cat6a (входит в комплект карт NIC). PCIe x4 NIC, который я купил, и на обеих машинах это: https://www.amazon.com/gp/product/B07CW2C2J1

Я пытаюсь отладить, почему я получаю почти ровно 2500 Мбит / с между этими двумя машинами. Любые советы или очевидные ошибки, которые я пропускаю, чтобы приблизиться к 10Gbps?

Вот что я проверял:


Конфигурация (Машина А)

Машина А ifconfig:

enp7s0    Link encap:Ethernet  HWaddr 24:5e:be:2c:c1:53  
      inet addr:2.0.0.20  Bcast:2.0.0.255  Mask:255.255.255.0
      inet6 addr: fe80::265e:beff:fe2c:c153/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:17225416 errors:0 dropped:0 overruns:0 frame:0
      TX packets:7021731 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:25712055299 (25.7 GB)  TX bytes:9701557546 (9.7 GB)

Машина А ip link:

3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 24:5e:be:2c:c1:53 brd ff:ff:ff:ff:ff:ff

Машина А ethtool enp7so:

Settings for enp7s0:
    Supported ports: [ TP ]
    Supported link modes:   100baseT/Full 
                            1000baseT/Full 
                            10000baseT/Full 
    Supported pause frame use: Symmetric
    Supports auto-negotiation: Yes
    Advertised link modes:  100baseT/Full 
                            1000baseT/Full 
                            10000baseT/Full 
    Advertised pause frame use: Symmetric
    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: g
    Wake-on: g
    Link detected: yes

Конфигурация (Машина B)

Машина Б ifconfig:

enp101s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 2.0.0.10  netmask 255.255.255.0  broadcast 2.0.0.255
    inet6 fe80::265e:beff:fe2c:c0dc  prefixlen 64  scopeid 0x20<link>
    ether 24:5e:be:2c:c0:dc  txqueuelen 1000  (Ethernet)
    RX packets 2332894765  bytes 3532248694886 (3.5 TB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 107128853  bytes 32005739542 (32.0 GB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Машина Б ip link:

3: enp101s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 24:5e:be:2c:c0:dc brd ff:ff:ff:ff:ff:ff

Машина Б ethtool enp101s0:

Settings for enp101s0:
Supported ports: [ TP ]
Supported link modes:   100baseT/Full 
                        1000baseT/Full 
                        10000baseT/Full 
                        2500baseT/Full 
                        5000baseT/Full 
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes:  100baseT/Full 
                        1000baseT/Full 
                        10000baseT/Full 
                        2500baseT/Full 
                        5000baseT/Full 
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Link detected: yes

Пока шаги отладки

Я сделал Netcat на /dev/zero на одной машине /dev/null с другой (B -> A):

3.15GiB 0:00:09 [ 353MiB/s]

Я также запустил ifperf с двумя размерами окон (по умолчанию 64 КБ и ниже 256 КБ) и увидел идентичные результаты:

iperf -s -w 256k
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  416 KByte (WARNING: requested  250 KByte)
------------------------------------------------------------
[  4] local 2.0.0.10 port 5001 connected with 2.0.0.20 port 55364
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  2.85 GBytes  2.45 Gbits/sec

Просто для проверки, чтобы убедиться и удалить сетевую переменную в передаче:

cat /dev/zero | pv > /dev/null
21.0GiB 0:00:04 [5.18GiB/s]

3 ответа

Я помню, что однажды столкнулся с той же проблемой. Все это было связано с LRO и GRO. Возможно, вы захотите отключить Large-receive-offload и generic-receive-offload на обоих концах и посмотреть, вносит ли он изменения.

Выполните следующее, чтобы временно отключить их:

большой приемно-выгрузка

ethtool -K enp101s0 lro off

ethtool -K enp7s0 lro off

родовая-приемо-выгрузка

ethtool -K enp101s0 gro off

ethtool -K enp7s0 gro off

Запустив следующее, вы фактически изучите изменения:

ethtool -k enp7s0 

обратите внимание, что -k -K, прописные буквы вносят изменения, а строчные просто выводят значения

Я всегда отключаю GRO и LRO на 10 сетевых картах.


Вы можете прочитать больше здесь: https://lwn.net/Articles/358910/

Но попробуйте отключить его и посмотреть, изменит ли он скорость, если это произойдет, тогда я дам вам шаги, чтобы сделать постоянные изменения в вашем / etc / network /interfaces.

Также может быть другой фактор, вызывающий медленную передачу. Я наткнулся на тематическое исследование, где ssh был указан как причина медленной передачи. см. https://www.intel.com/content/dam/support/us/en/documents/network/sb/fedexcasestudyfinal.pdf .

При использовании iperf окна 256 КБ просто недостаточно для насыщения канала 10G.

Посчитаем: 256 КБ * 8 бит/байт / 2,56 Гбит/с = 0,8 мс.

Таким образом, если RTT составляет 0,8 мс — вполне разумно для 10GBASE-T с прямым подключением — пропускная способность не может быть больше этих 2,56 Гбит/с, независимо от пропускной способности . Попробуйте увеличить окно в четыре раза.

Кроме того, убедитесь, что слоты PCIe, в которые вы устанавливаете эти сетевые карты, имеют достаточную пропускную способность. Механический размер иногда вводит в заблуждение, необходимо проверить электрический размер . Сетевые адаптеры поддерживают PCIe 3.0 x4, поэтому для бескомпромиссной скорости вам потребуется как минимум PCIe 2.0 x4 или PCIe 3.0 x2.

Функции разгрузки на самом деле должны ускорить соединение (за счет снижения нагрузки на процессор), но они могут работать неправильно, в зависимости от аппаратной реализации и драйвера.

Другие вопросы по тегам