Hola! El Thu, May 18, 2006 at 01:30:23PM -0400, Horst von Brand escribio: > Miguel Oyarzo <[EMAIL PROTECTED]> wrote: > > > Si... puede ser... > > quizas en rendimiento nomal no haria diferencia alguna... > > Y en rendimiento "no normal" (red saturada) estan pensando en usar polling, > no interrupciones (no se si esta ya implementado, y para que tarjetas; es > importante a 1Gbps, y a 10Gbps sera indispensable...).
Las tarjetas e1000 (serie Intel PRO/1000) limitan el número de interrupciones utilizando contadores de eventos y timers. Si quieres ancho de banda y no te importa la latencia, le indicas que mande una interrupción sólo después de muchos paquetes o si han transcurrido varios milisegundos desde el último paquete recibido. Si quieres mejor latencia, le indicas que mande una interrupción despues de sólo unos pocos paquetes y que no espere antes de enviarla. Existe la posibilidad de adaptar estos contadores en función de la carga de la red. Como estas tarjetas soportan múltiples transacciones con dma scatter/gatter, pueden procesar muchos paquetes TCP diréctamente, reconstruyendo el stream en memoria sin intervención de la CPU. Esto es posible además porque se puede programar al hardware para que mire ciertos bytes en el encabezado de los paquetes y utilice esa información para indexar una tabla de acciones a realizar. Esta tabla podría tener información de pares destino/puerto que indiquen como reensamblar los stream TCP. Pese a todo esto, en mi experiencia la saturación de la CPU en gigabit ethernet sucede siempre debido al uso de paquetes muy pequeños, en Linux es complicado programar aplicaciones que puedan procesar UDP a la tasa requerida con un MTU de 1.5kb. Jumbo-Frames ayuda mucho. Utilizando TCP no es dificil llegar a unos 260MBps punto a punto con hardware "pc". Más que eso requiere buena infraestructura (red/disco), además de jumbo-frames. Moraleja: si te interesa el rendimiento, usa TCP... Daniel.