¿Por qué un enrutador de hardware funciona mejor que un enrutador de Linux con mejores especificaciones (RAM y CPU)?

44

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?

Gene azul
fuente
55
Las implementaciones en hardware son más rápidas que el firmware es más rápido que el software para la misma solución.
mdpc
3
Las "mejores especificaciones" que menciona son irrelevantes para el trabajo en cuestión. Hay otras propiedades que realmente importan.
ndim
Ok, entonces ... por lo que escribiste, ¿debería suponer que tu Centos es una máquina virtual? Aparte de optimizaciones de red especiales para máquinas virtuales, tanto en hipervisor y en los lados de los huéspedes, las máquinas virtuales son generalmente conocidos por no ser bueno en este tipo de papel ... para el uso como un router / firewall, está metal desnudo siempre recomendable!
drogado
¿Realmente está enrutando 1 Gbps de tráfico como lo sugiere su configuración? Puede estar usando un camión de basura para mover una pala llena de arena. Básicamente, nunca se tocarán 6 GB de RAM y 4 núcleos para un enrutador, podría ahorrar electricidad y espacio en el bastidor utilizando una pequeña máquina Intel Atom para hacer este trabajo.
Bert

Respuestas:

64

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.

Shane Madden
fuente
1
Si bien estoy de acuerdo con Shane, elegiría iptables que se ejecuten en un servidor genérico en lugar de un dispositivo cualquier día. en mi empresa, iptables que se ejecuta en fedora es más rápido, más flexible, más sencillo de configurar, menos gravoso para la CPU y la memoria, más rápido para arrancar y mucho más barato que nuestro cisco asa.
rvh
@rvh: para firewall o simplemente enrutamiento?
mveroone
2
y en general, "velocidad" es un término bastante laxo aquí. Estoy seguro de que hay muchas situaciones en las que una PC todavía puede realizar una operación "tan rápido" como una HW, o tal vez tenga una duración constante más larga que HW. Pero realmente se reduce a la estabilidad y a `` ganar dinero '': todavía está comprando menos RAM / CPU con un dispositivo, pero obtiene más de eso, y solo hace lo que necesita para obtener estabilidad
Colin Godsey
Esta respuesta es incorrecta por omisión. Solo gritar "ASIC" también es un poco ingenuo ya que la mayoría de los enrutadores que usan NAT usan CPU de uso general, a menos que tengamos un rendimiento extremo. Además, en realidad los enrutadores NAT de hardware tienen límites más estrictos en la cantidad de conexiones concurrentes. Lo que el OP experimenta es una configuración incorrecta y el uso de un sistema operativo que no se ajusta a la tarea.
Dualed
@dualed most routers that do NAT use general purpose CPUsSí, 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.
Shane Madden
12

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.

David Schwartz
fuente
3
Y dado que el enrutador dedicado se ejecuta en un disco flash, hay menos piezas móviles que fallan en momentos inoportunos.
cpt_fink
3
No estoy realmente seguro de que tengas razón. He creado una protección anti-DDOS muy básica para una empresa en la que trabajé basada en netmap ( info.iet.unipi.it/~luigi/netmap ) y funcionó muy bien incluso en hardware normal (realmente lleno de 1Gb / so 11M paquetes / seg). También hay una versión de openswitch para netmap en ese sitio que puede reenviar paquetes de 3M / seg en hardware "normal", no conozco ningún conmutador barato (500 $) que pueda hacerlo, pero puedo estar equivocado.
XzKto
2
@XzKto Un típico conmutador GigE de 5 puertos barato ($ 60) puede reenviar paquetes entre todas las combinaciones de puertos a velocidad de cable completa. Por lo general, usan una barra transversal completa y sin bloqueo.
David Schwartz
@XzKto Lo que David quiso decir es que, a diferencia de la PC que manejará la velocidad "hasta el rendimiento de sus propias interfaces", el switch lo hace para cada combinación de puerto a puerto. Puede tener host1 hablando con host2, y de 3 a 4, y cada conexión a dúplex completo y rendimiento máximo . No se puede superar eso. (y por más dinero, más puertos, aún más fácil ver por qué es más rápido). Y para el enrutador, es algo similar: el hardware podrá redirigirse más rápido que el software, ya que puede redirigirse tan pronto como tenga suficiente información (su enrutador Linux lo hará en cada capa, pero llegar allí será más lento)
Olivier Dulac
11

¿"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.

Ryan Ries
fuente
3
+1. Agregue a eso el hecho de que Cisco tiene los recursos de ingeniería y el conocimiento para reemplazar el software con hardware cuando sea necesario. Es decir, si una operación en particular es más lenta de lo que les gustaría en el software, pueden esforzarse en diseñar un ASIC, agregar instrucciones a sus unidades de procesamiento existentes o construir un módulo de hardware para ayudar a acelerarlo. Las tablas se inclinan abrumadoramente a favor del rendimiento cuando tiene el lujo de controlar tanto el software como el hardware.
Justin ᚅᚔᚈᚄᚒᚔ
Funciona en ambos sentidos, también. El hardware tampoco necesita tratar casos raros y complejos. Simplemente los arroja al software. Enrutamiento de bucles? No intentes descubrir en hardware cómo lidiar con eso.
MSalters
4

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
3

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:

ILMostro_7
fuente
2

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 la smp_affinityescritura manual es aburrida, probablemente haya encontrado que mi proyecto para mascotas netutils-linux es extremadamente útil.

Strizhechenko
fuente