Насколько я понимаю, связывание дает среди других преимуществ возможность увеличения скорости сети между двумя машинами в локальной сети.
Связывание [...] означает объединение нескольких сетевых интерфейсов (NIC) в один канал, обеспечивая либо высокую доступность, либо балансировку нагрузки, либо максимальная пропускная способность, или их комбинацию.
Источник: Документация Ubuntu, акцент мой.
У меня настроено связывание на двух серверах; оба имеют по два сетевых адаптера 1 Гбит / с. При тестировании скорости между этими серверами с помощью iperf
, в отчете указано:
balance-rr
режим склеивания.802.3ad
,802.3ad
.Интересно то, что при использовании 802.3ad
, ifconfig
указывает на то, что практически все RX
на eth0
(2,5 ГБ против нескольких КБ / МБ) и все TX
на eth1
на машине A и обратное на машине B.
Когда спрашиваешь iperf
использовать несколько подключений (iperf -c 192.168.1.2 -P 10
), полученная сумма очень близка к результатам, отображаемым при использовании одного подключения.
Две машины подключены к Netgear GS728TS, у которого LACP настроен правильно (я надеюсь), с двумя LAGами, покрывающими по два порта каждая. Режим IEEE 802.3x включен.
Является iperf
подходит для такого рода тестов? Если да, что мне не хватает?
Связанные интерфейсы не предоставляют дополнительную полосу пропускания отдельным сетевым потокам. Поэтому, если вы используете только одну копию iperf, вы сможете одновременно использовать только один сетевой интерфейс. Если у вас есть два сетевых адаптера в лаге, вам понадобятся как минимум две полностью независимых копии iperf, запущенные на компьютере, чтобы увидеть любое одновременное использование. Это применимо и к фактическим нагрузкам - например, клиент Samba по-прежнему будет видеть пропускную способность только 1 ГБ, но два клиента могут видеть 1 ГБ каждый, если у вашего лага есть две сетевые карты. Все это предполагает, что у вас есть задержка, настроенная для использования обеих сетевых адаптеров (опция 802.3ad сделает это).
После обращения в службу поддержки Netgear выяснилось, что:
Если вы используете 2 станции (1 клиент / 1 сервер), на самом деле он будет использовать только одну ссылку (следовательно, 1 Гбит / с / 940 Мбит / с), используемый канал определяется алгоритмом хеширования LACP.
Чтобы превысить ограничение в 1 Гбит / с, вам нужно будет протестировать более одного клиента.
Источник: ответ службы поддержки Netgear
Тот же ответ на билет ссылки на сообщение на публичном форуме Netgear, где мы можем прочитать это:
Вы можете получить только 2 Гбит / с, когда алгоритм хеширования LACP направляет несколько потоков трафика по разным путям, а это не всегда. При небольшом количестве клиентов (2 в вашем случае) велика вероятность, что они оба могут попасть в одну и ту же ссылку.
Для тех, кто не хочет читать всю дискуссию на форуме, вот ключевые моменты:
Чтобы воспользоваться LACP, к серверу должны подключаться как минимум два клиента. Один клиент будет использовать только одну ссылку, что ограничит его скорость до 1 Гбит / с.
Два клиента должны использовать разные ссылки, чтобы воспользоваться LACP.
При наличии всего двух сетевых адаптеров на сервере вероятность получения одного и того же канала от двух клиентов составляет 50%, что приведет к ограничению общей скорости на уровне 1 Гбит / с. Три сетевых адаптера уменьшают вероятность до 33%, четыре - до 25%.
В заключение отметим, что Netgear GS728TS не может обеспечить скорость от 1,4 до 1,8 Гбит / с между двумя машинами.
Эти вопросы и ответы были очень полезны для понимания связывания с LACP, но нет конкретного примера, как проверить пропускную способность около 1,8 Гбит / с. Для меня было важно проверить это, поэтому я расскажу, как я это тестировал.
Так как @ChrisS отметил в своем ответе, что важно иметь полностью независимые копии iperf. Для этого я подключаюсь к lacp-серверу с двумя клиентами. На lacp-сервере использую экран для запуска независимых экземпляров iperf в двух окнах / сеансах экрана. Я также гарантирую наличие независимых потоков данных, используя разные порты для каждого соединения. Мой коммутатор с привязкой LACP к серверу - TP-LINK T1600G-52TS. Все устройства используют Debian 10 (Buster). Два тестовых клиента подключены к порту коммутатора. Сначала я запускал iperf в режиме сервера на lacp-сервере два раза в течение экран а затем выполняется на клиентах в то же время (используя ssh):
iperf --time 30 --port 5001 --client lacp-server # first test client
iperf --time 30 --port 5002 --client lacp-server # second test client
Вот результаты на lacp-сервере для первого подключения:
lacp-server ~$ iperf -s -p 5001
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.10.11 port 5001 connected with 192.168.10.69 port 44120
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-30.0 sec 2.99 GBytes 855 Mbits/sec
а для второго подключения:
lacp-server ~$ iperf -s -p 5002
------------------------------------------------------------
Server listening on TCP port 5002
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.10.11 port 5002 connected with 192.168.10.80 port 48930
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-30.0 sec 3.17 GBytes 906 Mbits/sec
Вместе это составляет 855 Мбит / с + 906 Мбит / с = 1,761 Мбит / с.
@ArseniMourzenko отметил в своем ответе:
При наличии всего двух сетевых адаптеров на сервере вероятность получения одного и того же канала от двух клиентов составляет 50%, что приведет к ограничению общей скорости на уровне 1 Гбит / с. Три сетевых адаптера уменьшают вероятность до 33%, четыре - до 25%.
Я повторил тест более 10 раз, чтобы проверить это, но всегда получаю пропускную способность около 1,8 Гбит / с, поэтому я не могу это подтвердить.
Статистика интерфейсов показывает, что его использование сбалансировано:
lacp-server ~$ ip -statistics link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
3088 30 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3088 30 0 0 0 0
2: eno1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
39231276928 25845127 0 0 0 916
TX: bytes packets errors dropped carrier collsns
235146272 3359187 0 0 0 0
3: eno2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
36959564721 24351697 0 0 0 60
TX: bytes packets errors dropped carrier collsns
267208437 3816988 0 0 0 0
4: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
69334437898 50196824 0 4253 0 976
TX: bytes packets errors dropped carrier collsns
502354709 7176175 0 0 0 0
С тремя тестовыми клиентами я получил следующие результаты:
Ссылки:
Link Aggregation и основы LACP
Связывание LACP и конфигурация Linux
Драйвер связывания Ethernet для Linux HOWTO
RedHat - Использование связывания каналов