Afinidad de procesos

Aldrin Martoq amartoq en dcc.uchile.cl
Dom Mar 23 22:49:06 CLST 2008


2008/3/23 Xavier Andrade <andrade en theory.polytechnique.fr>:
>  Estoy intentando hacer algo y quizas aca me puedan ayudar. Lo que quiero
>  hacer es averiguar en un codigo (C y Fortran) cual es la topologia de la
>  red para los procesos que estoy corriendo en una maquina NUMA.
>  Es decir, tengo varios procesos y me gustaria saber en que nodo esta
>  corriendo cada uno e idealmente fijar el proceso a ese nodo. (Nodos en el
>  sentido de procesadores que comparten un banco de memoria.)
>  Estoy usando libnuma, pero no encuentro la manera de preguntar en que nodo
>  esta el proceso actual. En todos los ejemplos que he encontrado dan
>  numeros de nodo estaticos, pero en mi caso solo se que el sistema asigna
>  un procesador por proceso, por lo que no puedo asumir ningun valor y tengo
>  que determinarlo dinamicamente durante la ejecucion.

No tengo idea, pero segun lo que _acabo_ de leer:
- instala numactl lo cual resuelve tu consulta:
$ numactl --cpubind=0 --membind=0,1 process
Run process on node 0 with memory allocated on node 0 and 1.
etc...

- Si necesitas afinar esto (hacer algo mas complejo que numactl),
tienes que usar libnuma en tu programa.  En particular, tu consulta es
la API numa_get_run_node_mask().
- Con sched_getaffinity() puedes saber _dentro de un nodo numa_ en que
CPU esta corriendo y/o cambiarlo.
[..]


En debian mira el source de numactl y schedutils (apt-get source) y/o
usa los paquetes generados a partir de ellos.

HTH,

-- 
Aldrin Martoq
Episodio 002 (pronto!)
http://aldrinvideopodcast.podshow.com/


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