Estou no processo de atualizar minha Ethernet para 10 Gbps para acelerar a conectividade da minha rede local. Infelizmente, uma máquina na minha rede ficou sem slots PCIe, então um adaptador PCIe nativo de 10 GbE não é uma opção. Um adaptador USB é a única alternativa viável - como switches Ethernet de 5 Gbps e adaptadores USB são difíceis de encontrar e caros, a decisão foi tomada para executar o servidor com dois adaptadores Ethernet de 2,5 Gbps para USB 3 baseados no chipset Realtek RTL8156, que está prontamente disponível. Então, eles estão juntos no nível Ethernet usando agregação de link em um LAG/LACP e conectados a um switch de 2,5/10 Gbps.
Esses adaptadores USB podem ser reconhecidos pelo Linux como os seguintes. Eu também determinei de antemão que ambos os adaptadores podem operar independentemente a 2,5 Gbps atribuindo um endereço IP a cada NIC e executando um teste iperf3.
$ dmesg
[ 5.118103] usb 4-4: new SuperSpeed USB device number 2 using xhci_hcd
[ 5.138434] usb 4-4: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.04
[ 5.138436] usb 4-4: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 5.138438] usb 4-4: Product: USB 10/100/1G/2.5G LAN
[ 5.138439] usb 4-4: Manufacturer: Realtek
[ 5.138440] usb 4-4: SerialNumber: 401300ÿÿÿÿ
[ 6.970319] cdc_ncm 4-4:2.0: MAC-Address: 00:e0:4c:68:10:e6
[ 6.970325] cdc_ncm 4-4:2.0: setting rx_max = 16384
[ 6.970356] cdc_ncm 4-4:2.0: setting tx_max = 16384
[ 6.984099] cdc_ncm 4-4:2.0 eth0: register 'cdc_ncm' at usb-0000:0a:00.3-4, CDC NCM (NO ZLP), 00:e0:4c:68:10:e6
# lsusb
Bus 004 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
Bus 002 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
A máquina em questão está executando um hipervisor Linux (Proxmox), e duas interfaces de rede são reconhecidas como enx00e04c680152 e enx00e04c6810e6 (acredito que udev/systemd gerou os nomes com base em seus endereços MAC). Para unir duas interfaces, no Proxmox usei as seguintes configurações:
Linux Bond
* Name: bond0
* Autostart: Yes
* Slaves: enx00e04c680152 enx00e04c6810e6
* Mode: LACP (802.3ad)
* Hash policy: layer3+4
No switch, criei um Port Channel Group com LACP habilitado no modo Ativo e selecionei duas portas de 2,5 Gbps que estavam conectadas ao servidor. O Linux também relata que ambas as placas são detectadas e vinculadas de sua própria perspectiva:
# ip link | grep enx
3: enx00e04c6810e6: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
4: enx00e04c680152: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
Infelizmente, por algum motivo, o Linux não consegue estabelecer um link LACP com o switch, não importa o que aconteça. O kernel do Linux continua me dizendo que "Nenhuma resposta 802.3ad do parceiro de link para nenhum adaptador no vínculo".
# dmesg
[ 1004.491253] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ 1034.527234] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ 1064.547217] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
O arquivo de status /proc/net/bonding/bond0
mostra que o IEEE 802.3ad está ativo, mas um link não foi estabelecido com sucesso. Isso pode ser visto pelo fato de que o "ID do agregador" para ambas as NICs são diferentes, e que ambas entraram no estado "churned", o que significa essencialmente que o link falhou,
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v6.1.15-1-pve
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
802.3ad info
LACP active: on
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 8a:f5:1c:f4:8b:70
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 10
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00
Slave Interface: enx00e04c680152
MII Status: up
Speed: 2500 Mbps
Duplex: half
Link Failure Count: 0
Permanent HW addr: 00:e0:4c:68:01:52
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: churned
Actor Churned Count: 0
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 8a:f5:1c:f4:8b:70
port key: 10
port priority: 255
port number: 1
port state: 77
details partner lacp pdu:
system priority: 65535
system mac address: 00:00:00:00:00:00
oper key: 1
port priority: 255
port number: 1
port state: 1
Slave Interface: enx00e04c6810e6
MII Status: up
Speed: 2500 Mbps
Duplex: half
Link Failure Count: 0
Permanent HW addr: 00:e0:4c:68:10:e6
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: churned
Partner Churn State: churned
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 8a:f5:1c:f4:8b:70
port key: 10
port priority: 255
port number: 2
port state: 69
details partner lacp pdu:
system priority: 65535
system mac address: 00:00:00:00:00:00
oper key: 1
port priority: 255
port number: 1
port state: 1