Tengo un CentOS 6.3 mínimo de 64 bits que actúa como puerta de enlace con 4 NIC (1 Gbps), cada uno unido para tráfico público y otro para privado, que realiza NATing. Tiene 6 GB de RAM y 4 núcleos lógicos. Hemos estado usando esto durante los últimos dos años sin ningún problema.
No tengo ninguna experiencia con enrutadores de hardware, pero he oído que tienen menos RAM y CPU y usan discos flash. ¿Cómo puede una caja con una configuración de hardware baja funcionar mejor (como en, manejar más conexiones concurrentes) que una máquina con más RAM y CPU?
¿Cuáles son los factores limitantes, aparte de IOS que utiliza diferentes métodos para manejar esto?
linux
router
packetloss
Gene azul
fuente
fuente
Respuestas:
ASICs .
En lugar de utilizar una CPU de propósito general y un software específico de la tarea, puede omitir el software y simplemente hacer que el silicio maneje la tarea directamente.
El hardware de red de alto rendimiento utiliza ASIC en lugar de software para las tareas computacionalmente pesadas (pero relativamente lógicamente simples) de algo como comparar una dirección IP con una enorme tabla de enrutamiento de Internet, verificar una tabla CAM para una decisión de conmutación o un paquete contra una ACL . Esto hace una enorme diferencia en la velocidad de esas operaciones sensibles al tiempo, proporcionando una ventaja significativa sobre una CPU de uso general.
fuente
most routers that do NAT use general purpose CPUs
Sí, esa es una declaración verdadera, pero ignora el hecho de que muchos de esos dispositivos descargan operaciones específicas en chips dedicados (como lo deja en claro la respuesta completa anterior). No piense en NAT y el seguimiento de la conexión (lo cual, estoy de acuerdo, no sucede en los ASIC en dispositivos modernos), piense en la tabla de enrutamiento y la descarga de conmutación.Un enrutador dedicado de alta gama puede superar a una PC con una CPU más rápida y más RAM porque puede hacer más enrutamiento en hardware.
Es la misma razón por la que un conmutador Gigabit Ethernet de $ 60 puede superar a una PC de $ 2,000 con 4 tarjetas GigE de dos puertos que actúan como un conmutador Ethernet. El interruptor se construye desde cero para ser un interruptor.
fuente
¿"Otro que IOS"?
IOS hace casi toda la diferencia. CentOS es un sistema operativo de uso general. Está diseñado para funcionar lo suficientemente bien en una amplia gama de escenarios, utilizando una amplia gama de diferentes configuraciones de hardware. IOS, por otro lado, está extremadamente afinado para manejar solo el tipo de cargas de trabajo que esperaría de un equipo de red, utilizando los tipos de hardware muy específicos que encontraría en el equipo de Cisco.
Saber exactamente qué piezas de hardware está programando lo llevará muy lejos en términos de rendimiento frente a compatibilidad.
fuente
Tanto el software como el hardware tienen algo que decir. Tengo la comparación de Intel y TP-Link NIC (que utiliza un chip Realtek en su corazón) en el hardware del servidor genérico, así como el software especialmente diseñado y genérico en el enrutamiento.
En el lado del hardware, si el ASIC a bordo puede manejar el tráfico IP, la carga del procesador puede ser menor y, por lo tanto, más rápida. He notado que los dos chips Ntel INtel integrados se comunican directamente por DMA, sin pasar por la CPU principal en el manejo del reenvío de paquetes; mientras tanto, el chip Realtek se interrumpe cada vez que llega un paquete.
En el lado del software, si el software está diseñado para usarse en el enrutamiento, se puede hacer más eficiente. He usado pfSense + PF (un FreeBSD modificado destinado a ser utilizado como enrutador) y Ubuntu 12.04 + iptables genéricos como software de enrutamiento y el primero claramente cambia el tráfico mucho más rápido. (Ubuntu 14.04 ahora es casi tan rápido, gracias a los nuevos nftables en el kernel de Linux 3.13).
Sin embargo, el enrutador dedicado tiene un inconveniente importante: no puede realizar mucho más que cambiar el tráfico y no se puede virtualizar. Mi enrutador perimetral actual es una máquina virtual dentro de mi clúster ESXi que ejecuta Ubuntu 14.04, y también actúa como un sistema de detección de intrusos y equilibrador de carga.
fuente
AFAIK, es la sobrecarga de un sistema operativo de uso general; independientemente de la velocidad de sus conexiones, los paquetes se tratan paquete por paquete dentro del contexto del núcleo, lo que aumenta la latencia y la tensión en el sistema. Creo que ya se ha explicado en las otras respuestas mejor de lo que podría hacerlo.
Dicho esto, hay nuevas y prometedoras tecnologías "ish" que aumentan en popularidad y factibilidad que podrían crear un competidor más formidable de los sistemas Linux en este y en otros aspectos; es decir, InfiniBand
Eche un vistazo a las siguientes preguntas y respuestas sobre StackOverflow: ¿Cómo se implementa el bypass de kernel TCP?
Otras lecturas:
fuente
Por lo general, se debe a la falta de configuración de dispositivos / pila de red lista para usar en Linux. En casi el 90% de los casos, su tráfico de red es procesado por CPU0 mientras que otros están inactivos. Si resuelve este problema, la diferencia con los enrutadores de hardware no será tan drástica como podría pensar. Debe configurar al menos RSS o RPS (distribución de procesamiento de paquetes basada en controladores / pila entre las CPU).
Si realmente le importa el rendimiento de su enrutador Linux y tiene suficiente tiempo, le recomiendo que lea este artículo en el blog packagecloud (también hay un artículo sobre la transmisión de paquetes).
Si necesita echar un vistazo a la distribución y cree que observar
while sleep 1; do cat $some_file_in_procfs; done
, la evaluación de la máscara de la CPU y lasmp_affinity
escritura manual es aburrida, probablemente haya encontrado que mi proyecto para mascotas netutils-linux es extremadamente útil.fuente