8.4. Solución de problemas comunes de colas y pérdida de marcos
Hasta el momento, la razón más común por pérdida de marcos es el exceso de cola. El kernel establece un límite a una longitud de una cola y en algunos casos la cola se llena más rápido que lo que drena. Cuando esto se presenta por demasiado tiempo, los marcos comienzan a perderse.
Como se ilustra en la Figura 8.1, “Diagrama de rutas de recepción de redes”, hay dos colas principales en la ruta de recibo: el búfer de hardware de NIC y la cola de socket. Ambas colas necesitan configurarse como corresponde para protegerse de los excesos de cola.
8.4.1. Búfer de hardware de NIC
El NIC llena su búfer de hardware con marcos; luego el búfer es drenado por
softirq
, el cual NIC afirma a través de una interrupción. Para interrogar el estatus de esta cola, use el siguiente comando:
ethtool -S ethX
Remplace
ethX
por el nombre de dispositivo del NIC correspondiente. Así desplegará el número de marcos que han sido eliminados dentro de ethX
. Una pérdida suele ocurrir debido a que a la cola se le acaba el espacio de búfer para almacenar marcos.
Hay dos formas de solucionar este problema:
- Tráfico de entrada
- Puede evitar excesos de cola si disminuye el paso del tráfico de entrada. Esto se logra por filtraje, reduciendo el número de grupos de multidifusión y disminuyendo el tráfico de difusión, entre otros.
- Longitud de cola
- También, puede aumentar la longitud de cola. Esto implica el aumento del número de búferes en una cola especificada para cualquier máximo que permita el controlador. Para hacerlo, modifique los parámetros de anillo
rx
/tx
deethX
mediante:ethtool --set-ring ethX
Añada los valoresrx
ortx
apropiados al comando antes mencionado. Para obtener mayor información, consulteman ethtool
. - Peso de dispositivo
- También puede aumentar la tasa a la que se drena una cola. Para hacerlo, ajuste el peso del dispositivo como corresponde. Este atributo se refiere al número máximo de marcos que el NIC puede recibir antes que el contexto
softirq
tenga que entregar la CPU y reprogramarse. Se controla mediante la variable/proc/sys/net/core/dev_weight
.
La mayoría de administradores tienden a escoger la tercera opción. Sin embargo, tenga presente que habrá consecuencias al hacerlo. El aumento del número de marcos que pueden recibirse desde el NIC en una repetición, implica ciclos de CPU adicionales durante los cuales no se pueden programar aplicaciones en esa CPU.