Sobre lo de tarjetas de red...

Rodrigo Fuentealba darkprox en gmail.com
Vie Mayo 19 15:49:58 CLT 2006


Recibo los mensajes en modo digest, y a veces mi respuesta se une al thread,
a veces no... es medio extraño el comportamiento de mi thunderbird, pero bueno,
no voy a eso.

[...]

>/> 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.
/
> Claro que no. Hay 5 tarjetas de red, /aquella/ que recibio datos genera una
> interrupcion que se atiende lanzando los datos al stack TCP/IP. Las demas
> no participan en nada mientras no haya trafico por ellas.

ok, Doc, si entiendo y lo sé, pero como hace el procesador para atender las 
interrupciones que manda la tarjeta de red? No era que las pone en un buffer 
para sincronizar el trabajo interno? Me imagino qué pasaría si todos declararan 
interrupciones al mismo tiempo y fueran atendidas al mismo tiempo. He visto semáforos
descompuestos en carreteras y ha habido muertes por eso, y acá pasaría algo así
con los datos que circulan.

>/ > >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:
/
> No. Es modulos de memoria separados por CPU, que pueden accederse desde las
> demas (pero a costo mucho mayor que la RAM local).

¿Me puede explicar cuál es la diferencia entre "independientes por procesador"
y "separados por CPU"? 

>/> 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.
/
> Tambien en NUMA, solo que si accedes a "tu" memoria es mas rapido que si
> accedes a memoria "remota".

Me faltó especificar que "una sola memoria" es "un sólo módulo" de memoria... 
pensé que era entendible.

Menos mal que no fue pregunta, Creo que bastan dos dedos de frente para 
saber que es así, no me tome por un completo tonto.

UMA se da tanto en sistemas con una sola placa física como en sistemas con
una "placa lógica", por no decir que UMA se da en casi todos (si no todos)
los computadores de casa. Al existir un solo módulo de memoria, todos deben
acceder a él.

NUMA está claro, no existe una cabeza que tenga mucha memoria, cada procesador
tiene su propia memoria y su propia asignacion de tareas, todos se comparten con 
todos y si hay una tarea que tengo que hacer pero estoy muy ocupado, la suelto y
le digo al nodo más próximo que la realice (o me preste memoria para realizarla)
 y me devuelva el resultado. Pero luego hay que chequear que el resultado sea
consistente y mantener un control en cada uno de los nodos sobre la cantidad de
carga que existe en los demás.

[...]

>>/ 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.
/
> Esas cosas lo que hacen es manejar "calidad de servicio" (==
> postergar/dejar caer unos para dejar pasar otros). O te refieres a bonding,
> su suma varias tarjetas en una "supertarjeta"

Si quien tiene el problema se preocupa tanto de la sobrecarga de información,
y puede implementar bonding (que yo lo conocía como ecualización de carga),
quizás sea una buena solución. En mi caso personal, lo implementé en una solucion
que di, y el resultado fue bastante bueno, pero no lo hice con Linux sino con una
solución comercial. De hecho, especifiqué que el que manejaba era un concepto vago.

> PS: Si no sabes de un tema, para que lo mencionas? O documentate para poder
    dar respuestas utiles...

Si sé que existe un tema y lo he visto funcionando y creo que por ahí podría
haber una solución distinta, no pierdo nada con mencionarlo. A mi juicio, habría
sido cero aporte decir "haz un driver en VB.NET" o "espera a la alineación de 
júpiter con la constelación alfa-centauro para encender tu sistema". Pero,
efectivamente el balanceo o ecualización de carga es para que no se saturen todas
las tarjetas de red y exista una performance aceptable. Lotería, por ejemplo,
tiene un balanceador de carga y lo usan para eso.

Saludos,

Rodrigo Fuentealba.



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