Afinidad de procesos

Xavier Andrade andrade en theory.polytechnique.fr
Mar Mar 25 12:21:53 CLST 2008


On Tue, 25 Mar 2008, Aldrin Martoq wrote:

> Esto es interesante, justo quiero desparramar el render de mi video
> entre 2 o mas tarros... estaba pensando en algo similar a Xgrid, pero
> desconozco si hay algo parecido en linux. Algun hint ?
>

Hay varios sistemas para Linux, de hecho Xgrid es la copia. Entre los 
libres tienes Torque, Slurm o Sun Grid Engine. Hay otros pagados como LSF, 
PBSPro o IBM Loadleveler.

Slurm probablemente sea lo mejor para un sistema simple (al menos en 
Debian viene en la distribucion), SGE es el mas profesional de los libres 
y si quieres soporte (que no es tu caso) se lo puedes comprar a Sun.

> Hasta donde entiendo, una vez que tu proceso FOO esta corriendo en un
> nodo NN, el proceso FOO no va a moverse del nodo NN automáticamente...
> sólo se puede hacer manualmente con alguna herramienta user-space (que
> aún no encuentro [2]) y que parece requerir "root" o algo asi.
>

No, el kernel intenta mantener un proceso fijo en una CPU, pero puede 
migrarlo si estima que es necesario para balancear la carga o por otra 
razon.

> Voy a suponer que no tienes el acceso "root" para mover manualmente tu
> proceso a otro nodo; si tienes ese acceso, bastaría con que monitorees
> /proc/$(pidof FOO)/numa_maps para ver si el proceso FOO esta
> consumiendo RAM de otro nodo... esto por lo que dice el kernel en
> mm/mempolicy.c:
>        for_each_online_node(n)
>                if (md->node[n])
>                        seq_printf(m, " N%d=%lu", n, md->node[n]);
>
> Si determinas que la RAM esta muy lejos (otros nodos) de tu proceso,
> deberias moverlo, coooooorrecto?
>

En realidad lo que quiero hacer es determinar la topologia de la red para 
asignar tareas a cada procesador, hay algunos que necesitan comunicarse 
mas y por lo tanto es razonable que queden en el mismo nodo. La asignacion 
de memoria el kernel la hace bastante bien en mi caso por que no uso 
memoria compartida (es parallelizacion usando MPI), asi que nada CPU solo 
ve su memoria local.


> La segunda pregunta, en que nodo está corriendo un proceso cualquiera,
> aún no la encuentro. Sólo encontré una llamada al sistema: vgetcpu()
> [3], la cual debe entregarte el nodo si estás en x86_64 para el
> proceso que la pide... No veo equivalente en la libc, parece que
> tienes que llamarla "a mano"...
>

Esto esta interesante, me parece que es lo que necesito. El detalle es que 
estoy en ia64, pero quizas tambien esta disponible.

[...]
>
> BTW, se puede saber características de la máquina? es un opteron, ibm,
> sgi; cuanta cpu/ram por nodo ??? por qué mencionaste que vas a correr
> varios FOO al mismo tiempo?? Tienes una cuenta para entrar ??? ;)

Es una SGI Altix con 128 Itanium 2 y 256 Gb de RAM. La maquina es 
compartida entre varios usuarios y tiene un sistema de colas, que 
administra los procesos que corren.

Saludos,

Xavier


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