2012-06-21 15 views
7

Últimamente, he estado leyendo una gran cantidad de sitios web y libros sobre NIC de 10 gb/s, su DMA y la forma en que el núcleo de Linux maneja los datos (10/100 mb/s NICs) y algunas preguntas vinieron a mi mente.Del kernel al espacio de usuario (DMA)

¿Cuál sería la forma más fácil de enviar un flujo de datos de 10 GB/s desde la NIC al usuario-land (supongo que puedo procesar los datos en el usuario-tierra a la misma velocidad).

Y

¿Cree que sería una buena idea para poner en práctica el búfer DMA dentro del espacio de usuario para leer los datos en bruto directamente desde allí (y procesarlos, obviamente, a la misma velocidad)

o es sus mejores soluciones en las que no pensé:/

Gracias.

Respuesta

6

Lo más fácil es usar los zócalos normales de Linux. Puede que no sea el más eficiente, pero es más fácil.

Existen marcos, que permiten recibir y transmitir datos de manera muy eficiente en el espacio del usuario. Ellos asignan los mismos búferes a la NIC (DMA) y al proceso, por lo que no es necesario copiar los datos.
Estos marcos omiten por completo el kernel; debe interactuar directamente con los NIC. Estos marcos son, por ejemplo, PF-RING y Netmap

+0

necesito algo más eficiente que los enchufes normales de Linux, había leído un poco sobre PF-RING y Netmap, intentaré leer un poco más sobre eso hoy, gracias por la respuesta. Sin embargo, no estoy seguro de qué solución (PF-RING, Netmap de DMA en user-land) es la más rápida, aunque – noktec

+2

Google también para los canales de red de Van Jacobson. – ninjalj

+0

He estado leyendo acerca de PF-RING y Netmap, así como de PACKET_MMAP, y parecen tener casi la misma solución allí, también he buscado las diapositivas de Van Jacobson, ¡y tenían muy buenas ideas adentro! Supongo que intentaré por primera vez con PACKET_MMAP, y luego realizaré una pequeña prueba de banco con PF-RING, para ver qué solución parece ser la más adecuada. Pero me pregunto si sería posible detener los paquetes para ingresar al sk_buff, y ser tratados directamente por un buffer de anillo en el User-land o por PF-RING (y lo difícil que sería implementarlo desde cero) – noktec

2

me gustaría también sugieren que echar un vistazo en el marco PFQ (https://github.com/pfq/PFQ y http://netgroup.iet.unipi.it/software/pfq/), que se basan en la parte superior de los conceptos y NetMap pf_ring y les oculta para permitir múltiples sencilla procesamiento central de paquetes en el espacio del usuario.

+0

Echaré un vistazo a eso también, gracias por la respuesta. en este momento acabo de investigar la solución PF_Ring propuesta anteriormente. – noktec

0

Recuerdo haber escuchado una charla de algunos de Intel en Ottawa Linux Symposium que implementó exactamente lo que usted propuso. Cuando midieron los resultados frente a la interfaz de socket normal, se sorprendieron al descubrir que para muchas cargas de trabajo este enfoque no funcionó mejor y en algún momento peor (!) Que la interfaz de socket.

busqué pero no pude localizar el papel exacto en línea en este momento, pero tal vez esto le da un toque ...

+0

¡Gracias por la respuesta, investigaré eso! – noktec

Cuestiones relacionadas