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