¿Cómo puede un procesador manejar una velocidad de datos de 10 Gigabits por segundo o más?

11

No sé si es el lugar correcto para preguntar. Puede ser una pregunta muy tonta. Supongo que algunos procesadores tienen que procesar marcos de datos para cambiar / enrutar. Los procesadores modernos tienen una velocidad de pocos GHz. ¿Cómo manejan los datos que llegan a un ritmo más rápido de lo que operan?

Ibraheem Moosa
fuente

Respuestas:

16

Tiene toda la razón, si tenemos que usar un ciclo de instrucción por bit, entonces 10 Gbps sería inalcanzable. Entonces, lo primero a tener en cuenta es que manejamos una palabra por instrucción de CPU: 64 bits.

Aun así, lo peor que podemos hacer para el rendimiento es que la CPU acceda a todas las palabras de un paquete. Por lo tanto, el enfoque en el manejo de "copia cero" de paquetes. Algunos de esos trucos están en las interfaces mismas: tienen DMA ("Acceso directo a la memoria") para que el chip controlador de Ethernet copie los datos en la RAM; calculan las sumas de comprobación para que la CPU no tenga que acceder a todas las palabras del paquete para hacerlo. Parte de esto está en el diseño de la estructura de datos: tenemos cuidado de alinear los búferes de paquetes para que podamos moverlos cambiando la propiedad de una entrada de la tabla de páginas. Parte de esto es solo una programación cuidadosa para garantizar que se acceda a los paquetes de datos la menor cantidad de veces y, preferiblemente, no se acceda a ellos hasta el programa de aplicación receptor.

Una vez que hayamos hecho todo esto, la siguiente limitación es la sobrecarga de manejar paquetes uno a la vez. Por lo tanto, hay un montón de características de "descarga de segmentación" tanto en el controlador de Ethernet como en el kernel para que podamos manejar grupos de paquetes. Incluso retrasamos la recuperación de datos del controlador de Ethernet para que estos grupos sean más grandes.

Finalmente, tenemos accesos directos a casos especiales, como la llamada sendfile () del núcleo, que es una ruta rápida desde el disco a la red utilizando la mínima cantidad de trabajo.

Incluso podemos enrutar casos especiales (el reenvío de paquetes de una interfaz a otra) utilizando las características de hardware de las tarjetas de interfaz de red y tratando el bus PCI como un bus entre las tarjetas en lugar de involucrar a la CPU. Eso no se puede hacer en los sistemas operativos de propósito general, pero los proveedores como Intel proporcionan bibliotecas de software para implementar tales funciones en sus controladores de Ethernet.

Alejándonos por completo de las CPU, incluso podemos construir enrutadores de propósito especial donde todas las tareas de reenvío ocurren en el hardware. Dado que el bus PCI sería una limitación, ejecutan múltiples buses paralelos; o incluso múltiples buses paralelos a múltiples conjuntos de interruptores de barra transversal paralela. En un extremo del mercado, un pequeño conmutador de Ethernet basado en TCAM sería un ejemplo; En el otro extremo del mercado, el Juniper M40 sería un diseño canónico.

Un conmutador típico comenzará a recibir un paquete, buscará la dirección de destino en la TCAM, adjuntará una etiqueta con el puerto de salida al paquete y luego DMA el paquete aún entrante al controlador del puerto de salida. Tenga en cuenta que si el puerto de salida está congestionado, todo lo que se puede hacer en este simple conmutador es tirar el paquete de entrada. Por lo tanto, los conmutadores simples no son una buena opción para cuando los enlaces cambian de velocidad y es deseable hacer algunas colas. Por supuesto, existen interruptores más sofisticados, por los cuales paga más.

Un enrutador típico recibirá un paquete y lo mantendrá en una cola corta. La dirección IP de destino se buscará en la RAM estática, el paquete se explotará en celdas para reducir la latencia y cada celda se enviará a un interruptor de barra cruzada a la tarjeta de salida. Esa tarjeta volverá a ensamblar las celdas en un paquete y colocará el paquete en la interfaz de salida. La cola en la interfaz de salida puede ser sofisticada.

vk5tu
fuente
Gran respuesta. ¿Puedes dar más detalles the packet will then be exploded into cells to reduce latency?
Eddie
En un diseño de enrutador, simplemente puede enviar un paquete de una tarjeta de línea a otra a través de la conmutación de barra cruzada (o algún otro tipo de bus entre tarjetas). Pero entonces la latencia está limitada por la longitud del paquete: tendría otro retraso de transmisión de paquete completo a medida que el paquete se envía a través de la conmutación de barra cruzada. Para evitar eso, podemos tener múltiples enlaces paralelos en la conmutación de barra cruzada y dividir el paquete entre esos enlaces. Entonces la latencia para paquetes grandes se reduce mucho. Una parte de un paquete dividido se llama 'celda'.
vk5tu
Sé que esta respuesta es de hace dos años, pero MUCHAS GRACIAS. Tenía la misma pregunta que el póster original y encontré su respuesta en mi búsqueda. Está MUY bien escrito y completo. ¡Gracias!
bote solitario
0

Hoy en día, casi todo el cambio, y gran parte del enrutamiento, se maneja en hardware, por lo que la velocidad del procesador entra en juego para las excepciones. Para cosas como los servidores, es posible que el procesador no sea lo suficientemente rápido. Este ha sido el caso en el pasado. Cuando salió por primera vez Ethernet de 1 Gbps, el bus utilizado en PC y servidores solo podía manejar 400 Mbps.

Lo que sucede cuando el procesador no es lo suficientemente rápido es que se cae el tráfico. De todos modos, puede caerse mucho tráfico, ya que así es como se maneja la congestión, si se hace correctamente. RED (Detección temprana aleatoria) es un método utilizado para colocar paquetes al azar en las colas para evitar que se llenen y se caigan los paquetes. Esto puede ayudar a prevenir la sincronización TCP. Se producen muchas caídas en los conmutadores, donde es posible que sea necesario enviar múltiples puertos de una velocidad a otro puerto único de la misma velocidad.

Ron Maupin
fuente
1
Esto confunde los descartes de entrada con gotas de salida. Los descartes generalmente ocurren cuando el buffer de anillo de la interfaz ethernet se sobrecarga, como sucede cuando una CPU no puede seguir el ritmo de la velocidad de llegada de datos. Ese anillo de búfer es demasiado pequeño para que RED se implemente.
vk5tu
@ vk5tu, te perdiste mi punto de que el tráfico se cae todo el tiempo, ya sea entrada o salida. Si alguna parte del sistema no puede manejar la cantidad de tráfico, parte se eliminará y otra se eliminará a propósito.
Ron Maupin