8.3. Visión general de recepción de paquetes
Para analizar mejor los cuellos de botella y los problemas de rendimiento, es necesario entender cómo funciona la recepción de paquetes. La recepción de paquetes es esencial en el ajuste de rendimiento de redes. Los marcos que se pierden en la ruta de recepción pueden impactar de forma significativa el rendimiento de red.
![Diagrama de rutas de recepción de redes](https://access.redhat.com/webassets/avalon/d/Red_Hat_Enterprise_Linux-6-Performance_Tuning_Guide-es-ES/images/99794752f8e1ae820b246ae92227b430/packet-reception.png)
Figura 8.1. Diagrama de rutas de recepción de redes
El kernel de Linux recibe cada marco y lo sujeta a un proceso de cuatro etapas:
- Recepción de hardware: la tarjeta de interfaz de red (NIC) recibe el marco en el alambre. Según su configuración de controlador, el NIC transfiere el marco ya sea a una memoria de hardware interna o a un búfer de anillo determinado.
- IRQ dura: el NIC impone la presencia de un marco de red al interrumpir la CPU. Así, el controlador reconoce la interrupción y programa la operación de IRQ blanda.
- La IRQ blanda: esta etapa implementa el proceso de recepción de marcos y se ejecuta en contexto
softirq
. Es decir que la etapa prevacía todas las aplicaciones que se ejecutan en la CPU especificada, pero aún permite que los IRQ duros sean impuestos.En este contexto (ejecutándose en la misma CPU como IRQ dura, minimizando así la sobrecarga de cerramiento), el kernel retira el marco de los búferes de hardware de NIC y lo procesa mediante la pila de red. Desde ese punto, el marco puede ser reenviado, descartado o trasladado a un destino de socket de escucha.Cuando pasa a un socket, el marco se añade a la aplicación que posee el socket. Este proceso se realiza de forma repetitiva hasta que se agoten los marcos del búfer de hardware de NIC o hasta que el peso de dispositivo (dev_weight
). Para obtener mayor información sobre peso de dispositivos, consulte la Sección 8.4.1, “Búfer de hardware de NIC” - Recibos de aplicación : la aplicación recibe el marco y saca de la cola los sockets que posea vía las llamadas POSIX (
read
,recv
,recvfrom
). En este punto, los datos recibidos en la red ya no existen en la pila de red.
Afinidad CPU/cache
Para mantener alto rendimiento en la ruta de recibo, se recomienda mantener la cache de L2 caliente. Como se describió anteriormente, los búferes de red se reciben en la misma CPU como la IRQ que señaló su presencia. Es decir, que los datos de búferes no estará en la cache L2 de esa CPU de recepción.
Para sacar provecho de esto, sitúe la afinidad del proceso en aplicaciones que esperan recibir la mayoría de los datos en el NIC que comparte el mismo núcleo de la cache L2. Este procedimiento maximizará las oportunidades de tocar la cache y así, mejorar el rendimiento.