Consulta para multiples tarjetas de red

Rodrigo Fuentealba darkprox en gmail.com
Jue Mayo 18 06:59:56 CLT 2006


At 16:57 17-05-2006, Victor Hugo dos Santos wrote:

> >El 17/05/06, Miguel Oyarzo<admin en aim.cl> escribió:
>   
>> >>Estimados,
>> >>
>> >>Me asalta la duda respecto del funcionamiento de 4 o 5 placas de red ethernet PCI
>> >>en un mismo servidor Linux.
>>     
4 o 5? Ese servidor es algo así como un router y además un servidor?
>> >>Si cada tarjeta funciona gracias a una interrupcion y estas a su ves estan numeradas,
>> >>significa que algunas de las ethx podria tener menor precedencia que sus hermanas?
>>     
Nope... a ver, cómo te lo explico con una analogía didáctica...
Imagínate un reloj, en el que tienes una tarjeta de red a las 1, otra a
las 2, otra a las 3, otra a las 4 y otra a las 5... la tarjeta de video
a las 6, la de sonido a las 7 y así para todo el hardware. Cada vez que
la aguja del reloj avance una hora, existe un personaje que revisa si a
la hora determinada hay un evento que enviar por esa tarjeta. Si existe
dicho evento, entonces lo envía a la tarjeta antes de que avance a la
próxima hora, y luego repite el proceso nuevamente.

El reloj podría ser un contador interno del chipset, que mira a quién le
toca. Cada una de las horas es una pieza de hardware esperando por
peticiones, y el personaje que revisa es una especie de buffer que mira
el estado de ese hardware en particular.

Más de alguien diría "pero con eso estás diciendo que la computadora
trabaja como monotarea, atendiendo una petición por click". Pues, los
procesadores no tienen únicamente un "reloj", sino varios relojes
sincronizados para que nunca dos relojes revisen el mismo evento para la
misma pieza de hardware.

Ahora, en un PC que tiene 5 tarjetas de red, tienes 5 "horas" (ok,
definido de manera más técnica, son ciclos, y nada que ver con los
ciclos de procesador, eh?). En cambio, si tienes una sola tarjeta de
red, únicamente usas un ciclo para enviar información. Vuelvo a repetir,
no es la manera más real de explicarlo.
> >a no ser que estes utilizes un sistema NUMA y que associes diferentes
> >BUS/CPUs a los dispositivos...
>   
NUMA significa "Non Unified Memory Access", y te permite tener varios 
módulos de memoria independientes para cada procesador que tengas. El 
opuesto de NUMA es UMA, que es Unified Memory Access, y que es un módulo 
de memoria pero que puede ser accesado por cualquier cantidad de 
procesadores. Un ejemplo:

Con UMA: Una placa Dual tiene 2 procesadores y 2 Gb. de memoria RAM 
(ejemplo). Puede que tengas dos procesadores y todo eso, pero sigues 
teniendo "una sola memoria" que gestiona todo tu hardware.

Con NUMA: Cada procesador tiene su propia memoria, por lo que debería 
existir algún método de sincronización para enviarse tareas entre ellos: 
Un procesador ejecuta XMMS, otro ejecuta el Firefox, otro ejecuta una 
instancia de Apache, y así, sin perder la consistencia. Si un procesador 
requiere usar una pieza específica de hardware que esté disponible en 
ese momento, la usa pero sin perjudicar en la cuenta de ciclos a los 
otros procesadores. Ahí entramos a discutir que si es master-slave, que 
si es múltiples maestros y múltiples esclavos, etc.

>> >>o existe algun mastering que encola peticiones irq para placas de red y les da la misma
>> >>prioridad de uso de cpu?
>>     
En resumen y según tengo entendido yo, la prioridad para cada tarjeta no
la da el hardware, sino el sistema operativo y es por demanda... Se le
va a poner más atención a una tarjeta de red que envía un CD por e-mail
(no falta el gracioso que intenta), que a una tarjeta que no hace nada.
> >En el lado SW, tenemos básicamente dos cosas:
> >      - scheduler
> >      - un comando (creo que era tasksel)
> >
> >El scheduler distribuye cargas y con el comando puedes asociar tu
> >mismo los procesos.
>
> correcto, pero a eso se le conoce como "excepciones" yo mas bien hablo de niveles mas 
> bajo que los procesos de sw ..... mas bien me refiero a las IRQ 
>   
Si quieres balancear las cargas de las tarjetas de red, creo que el eql
o eqn, no sé cómo es, deberías averiguar, te nivelan lo que envías entre
dos, tres o más tarjetas de red. Pero lee la documentación, porque es
sólo un concepto que tengo vagamente en mi memoria.
> >"socken des teufel" <utfsm.lista en gmail.com> dijo:
> >Desconosco como funciona exactamente, pero no creo que el sistema operativo tenga alguna priodidad sobre alguna irq mas >que otra (a no ser lo hayan fijado a mano asi)
> >Ademas el chipset de la system board es el encargado de balancear las irq de los dispositivos.
>   
El chipset de la tarjeta madre no hace tareas de balanceo, sino de
entrega de información por ciclos/eventos y procesamiento básico. La
función principal del chipset es alivianarle la carga al procesador en
su gestión de las posiciones de memoria donde cada pieza está.


> No creo que chipset (o el controlador de interrupciones) balancee nada, 
> su unica funcion es  encolar las peticiones y establecer prioridades del HW que hablara a la CPU.

> La pregunta es si la IRQ asignada a cada tarjeta establece o no prioridad ante la CPU.

La respuesta es muy probablemente negativa.

> Si alguien sabe que comente porfavor... por que si es asi, en uno de mis servidores Linux 
> colocare la placa de red mas cargada con IRQ mas alta (osea una prioridad baja para el sistema).

La dirección de red que usa más peticiones debería usar una tarjeta de 
red de mejor calidad (no vas a comparar cisco con chanchosystems)...

> Creo que eso permitiria distruibuir mejor el rendimiento de un conjunto de placas en un mismo servidor,
> (la placa con mayor trafico no mantendria la atencion de la CPU tanto tiempo)

Dejémoslo en que el CPU es flojo e intenta terminar en el menor tiempo 
posible la tarea, para tener tiempo de descanso... nice funciona a nivel 
de procesador, pero no a nivel de bus de datos.

> podra ser efectivo esto?

Como repito, probablemente no.

Saludos,

--
Rodrigo Fuentealba Cartes




Más información sobre la lista de distribución Linux