Sobre lo de tarjetas de red...

Horst von Brand vonbrand en inf.utfsm.cl
Sab Mayo 20 13:12:57 CLT 2006


Rodrigo Fuentealba <darkprox en gmail.com> wrote:
> [Falta un turro de atribuciones...]

> >/> 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?

APIC interrumpe a la CPU de turno, que al recibir la interrupcion
basicamente entra a ejecutar una funcion designada al efecto. Esta funcion
va y negocia lo que debe hacer con los fierros del caso, y luego los
habilita para continuar trabajando. O sea, si recibe datos de la tarjeta de
red, en el handler se sacan los datos de la tarjeta (y se copian a RAM), se
avisa a la tarjeta que se sacaron los datos, y se deja registrado para que
un bottom half (en caso de Linux 2.6, un softirq) se haga cargo, luego
retorna a lo que estaba haciendo.

>                                                         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.

Si, puede ocurrir. En Linux 2.6 no seran atendidos por la misma CPU, eso
si.

>                            He visto semáforos descompuestos en carreteras
> y ha habido muertes por eso, y acá pasaría algo así con los datos que
> circulan.

No entendi la relacion con lo que estamos hablando...

[...]

> >/> 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.

No queria arriesgarme que alguien entendiera mal...

[...]

> NUMA está claro, no existe una cabeza que tenga mucha memoria, cada
> procesador tiene su propia memoria

Yep.

>                                    y su propia asignacion de tareas,

Igual que siempre, cada CPU hace lo suyo. Y es responsabilidad del sistema
operativo asignarles tareas en forma equitativa.

> 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.

No. Esa coordinacion la lleva el sistema operativo. Es perfectamente
posible para la CPU 3 ejecutar codigo/usar datos que residen en la memoria
de la CPU 14, pero el rendimiento sera feo.
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


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