Cap�tulo 4. Operaci�n del Controlador

4.1. buffers de Anillo

El Tulip puede usar buffers de anillo o lista de descriptores Tx y Rx. Este controlador usa anillos est�ticamente asignados de descriptores Rx y Tx, establecidos en tiempo de compilaci�n por RX/TX_RING_SIZE. Esta versi�n del controlador asigna skbuffs para los buffers de anillo Rx en tiempo de open() y pasa el campo skb-data al Tulip cuando recibe los buffers de datos. Cuando un frame que llega es menor que RX_COPYBREAK bytes de grande, un nuevo skbuff es asignado y el frame es copiado en el nuevo skbuff. Cuando el frame que llega es m�s grande, el skbuff es pasado directamente a la pila de protocolos y reemplazado por un skbuff nuevamente asignado.

El valor RX_COPYBREAK es escogido para equilibrar la memoria gastada usando un skbuff lleno para los frames peque�os vs. los costes de copiado para los frames grandes. Para los frames peque�os los costes de copiado son insignificantes (considerando que estamos precargando la cach� con inmediatamente con informaci�n �til de la cabecera). Para frames grandes los costes de copiado no son triviales, y la copia m�s grande quiz�s borre datos �tiles de la cach�. Un aspecto sutil de esta elecci�n es que el Tulip s�lo recibe en buffers de palabras grandes (64 bits) alineadas, esto es, la cabecera IP con un desplazamiento de 14 no es una palabra grande alineada para un procesamiento m�s amplio. Los frames copiados son puestos en el nuevo skbuff con un desplazamiento de "+2", entonces copiando tiene el efecto beneficioso de alinear la cabecera IP y precargar la cach�.