Почему я достигаю только 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.
Функции разгрузки на самом деле должны ускорить соединение (за счет снижения нагрузки на процессор), но они могут работать неправильно, в зависимости от аппаратной реализации и драйвера.