Может ли соединение двух интерфейсов удвоить скорость?

У меня есть 2 Linux-бокса с процессором Centos 6.5 каждый с двумя интерфейсами, соединенными вместе, подключенными к коммутатору Cisco 2960-S с портами, настроенными по протоколу lacp.

Конфигурация на коммутаторе

port-channel load-balance src-dst-mac
!
interface Port-channel1
 switchport access vlan 100
 switchport mode access
!
interface Port-channel2
 switchport access vlan 100
 switchport mode access
!
interface FastEthernet0
 no ip address
!
interface GigabitEthernet0/1
 switchport access vlan 100
 switchport mode access
 speed 1000
 duplex full
 spanning-tree portfast
 channel-protocol lacp
 channel-group 1 mode active
!
interface GigabitEthernet0/2
 switchport access vlan 100
 switchport mode access
 speed 1000
 duplex full
 spanning-tree portfast
 channel-protocol lacp
 channel-group 1 mode active
!
interface GigabitEthernet0/3
 switchport access vlan 100
 switchport mode access
 speed 1000
 duplex full
 spanning-tree portfast
 channel-protocol lacp
 channel-group 2 mode active
!
interface GigabitEthernet0/4
 switchport access vlan 100
 switchport mode access
 speed 1000
 duplex full
 spanning-tree portfast
 channel-protocol lacp
 channel-group 2 mode active
!

и на обеих сторонах Linux я загрузил модуль соединения ядра с конфигурацией

alias bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1

Теперь проблема в том, что я передаю множество файлов с одного сервера на другой, отслеживая графики трафика, показывающие, что скорость не превышает скорость 1 Гбит / с для интерфейса соединения bond0,

есть ли проблемы с конфигурацией? не следует ли удвоить скорость до 2 Гбит / с?

4 ответа

LACP не будет разбивать пакеты по нескольким интерфейсам для одного потока / потока. Например, один поток TCP всегда будет отправлять / получать пакеты на одной и той же сетевой карте.

Смотрите следующий пост для справки:

Максимальная пропускная способность агрегации каналов (LACP/802.3ad)

Надеюсь это поможет.

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

Пакеты с одного и того же исходного MAC-адреса на один и тот же MAC-адрес назначения всегда будут отправляться на один и тот же порт.

Некоторые реализации объединения каналов поддерживают использование уровня 3 (IP-адреса) и даже уровня 4 (номер порта TCP/UDP) в качестве части хэша, но это не так часто.

Вот почему вы получаете только 1 Гбит / с при передаче файлов с одного сервера на другой.

Если ОС и коммутатор будут поддерживать уровень 3, вы можете получить большую скорость, используя несколько IP-адресов. Однако из-за того, как работает алгоритм хеширования, существует вероятность 50/50, что оба потока в конечном итоге будут выходить по одной и той же ссылке.

Насколько я понимаю, сетевое соединение заключается в том, что вы не можете превысить скорость соединения интерфейсов участников в одном соединении. Соединение будет привязано к одному интерфейсу в соединении после его установления.

Однако соединения теперь разделены между двумя интерфейсами. Если бы у вас было два соединения, запущенных от сервера A к серверу B, то эти соединения не должны начинать сужать друг друга, поскольку пропускная способность идет, поскольку они будут проходить через разные интерфейсы. Общая пропускная способность при использовании нескольких соединений должна составлять 2 Гбит / с, но каждое соединение будет ограничено максимум 1 Гбит / с.

Также стоит рассмотреть алгоритм хеширования, используемый Linux. В некоторых версиях драйвера связи используются очень упрощенные алгоритмы хеширования, например, хэш l2 в linux 3.6.5 - это просто xor последнего байта MAC-адреса источника и получателя, что во многих случаях приводит к несбалансированному трафику. Изменение алгоритма хеширования на l2+l3 очень поможет.

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