Estoy viendo un comportamiento confuso con respecto a las interfaces unidas en Linux y me gustaría presentar la situación con la esperanza de que alguien pueda aclararme la situación.
Tengo dos servidores: el servidor 1 (S1) tiene 4 conexiones de Ethernet de 1 Gbit; El servidor 2 (S2) tiene 2x conexiones de Ethernet de 1 Gbit. Ambos servidores ejecutan Ubuntu 12.04, aunque con el kernel 3.11.0-15 (del paquete lts-saucy linux-generic).
Ambos servidores tienen todas sus interfaces de red respectivas agrupadas en una única interfaz bond0 con la siguiente configuración (en /etc/network/interfaces
):
bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]
Entre los servidores hay un par de conmutadores HP que (creo) están configurados correctamente para LACP en los puertos en cuestión.
Ahora, el enlace funciona: el tráfico de red fluye alegremente hacia y desde ambas máquinas. Y se están utilizando todas las interfaces respectivas, por lo que no es que la agregación esté fallando por completo. Sin embargo, necesito tanto ancho de banda como sea posible entre estos dos servidores, y no obtengo los ~ 2 Gbit / s que esperaría.
En mis pruebas, puedo observar que cada servidor parece asignar cada conexión TCP (por ejemplo, iperf, scp, nfs, lo que sea) a una única interfaz esclava. Esencialmente, todo parece limitado a un máximo de 1 gigabit.
Al configurar bond-xmit-hash-policy layer3+4
, puedo usar iperf -c S1 -P2
para enviar en dos interfaces esclavas, pero en el lado del servidor, la recepción todavía solo se produce en una interfaz esclava y, por lo tanto, el rendimiento total se limita a 1 Gbit / s, es decir, el cliente muestra ~ 40-50MB / s en dos interfaces esclavas, el servidor muestra ~ 100MB / s en una interfaz esclava. Sin configurar bond-xmit-hash-policy
el envío también se limita a una interfaz esclava.
Tenía la impresión de que LACP debería permitir este tipo de agrupación de conexiones, permitiendo, por ejemplo, una sola transferencia scp para utilizar todas las interfaces disponibles entre los dos hosts.
¿Está mal mi comprensión de LACP? ¿O me he perdido algunas opciones de configuración en alguna parte? ¡Cualquier sugerencia o pista para la investigación sería muy apreciada!
bond-xmit-hash-policy layer3+4
establece el equilibrio de carga de su servidor de origen al conmutador. No establece el algoritmo de equilibrio de carga de su conmutador al segundo servidor. Es casi seguro que todavía está equilibrado en la capa 2 o la capa 3, es decir, en absoluto.fuente
Bueno, en primer lugar, cuando está usando un controlador de equipo, eso creará algunos gastos generales y reducirá el rendimiento máximo esperado, que es de ~ 940 MB / s en un adaptador de 1 GB, en ~ 10%.
No estoy seguro de qué tipo de adaptador tiene, pero si está utilizando controladores integrados, la configuración probablemente no sea ideal para un rendimiento máximo. podría considerar agregar colas, hasta 4, ya que una sola cola en el adaptador probablemente no puede alcanzar la velocidad de cable.
Otra consideración es que un subproceso de iperf probablemente no obtendrá las velocidades máximas. Para 1GB, 2-6 hilos probablemente sea más ideal, puede usar un script bash simple para lanzar múltiples hilos al mismo tiempo.
Para una NIC Intel, pero RSS y RSC de hardware pueden afectar el rendimiento, en Broadcom asegúrese de que TOE esté funcionando.
Sin embargo, el primer paso sería eliminar los LAG e intentar probar 1 puerto de tráfico en cada sistema para ver cuánto rendimiento obtiene, hacer esto con todos los puertos, luego probar 2. LACP es una bestia voluble para configurar bien, y nunca he intentado configurarlo en un conmutador HP, solo Force10 (anterior a Dell).
Además, ¿por qué hay un par de interruptores?
fuente
--parallel
parámetro que controla la cantidad de flujos de clientes paralelos a ejecutar