Afinidad de procesos

2008-03-26 Por tema Daniel Serpell
Hola!

El Tue, Mar 25, 2008 at 09:06:15AM -0300, Aldrin Martoq escribio:
 
[...]
 Sigo hablando sin tener idea, pq no tengo acceso a ese tipo de
 maquinas... alguien tiene un NUMA en su casa???
 HINT: al parecer si compilas el kernel con numa y tienes mas de un
 procesador, puedes simularlo agregando numa=fake a tu boot [1].
 No tengo como comprobarlo: mi laptop esta por cumplir 3 años y no
 tengo mas que un core y no soporta x86_64... alguien me regala el
 último macbookpro (MB166LL/A) con 4gb de RAM ??? :)

Puedes simular un sistema SMP con Qemu, la opción -smp permite
fijar el número de CPUs emuladas desde 1 a 255 (en x86).

Probablmente necesites una versión bastante nueva de Qemu para que
funcione, y mucha paciencia :-)

   Daniel.


Afinidad de procesos

2008-03-25 Por tema Aldrin Martoq
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 ?


2008/3/24 Xavier Andrade [EMAIL PROTECTED]:
 On Sun, 23 Mar 2008, Aldrin Martoq wrote:
   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...

Sigo hablando sin tener idea, pq no tengo acceso a ese tipo de
maquinas... alguien tiene un NUMA en su casa???
HINT: al parecer si compilas el kernel con numa y tienes mas de un
procesador, puedes simularlo agregando numa=fake a tu boot [1].
No tengo como comprobarlo: mi laptop esta por cumplir 3 años y no
tengo mas que un core y no soporta x86_64... alguien me regala el
último macbookpro (MB166LL/A) con 4gb de RAM ??? :)

  Si, sabiendo donde uno quiere correr es facil. El problema es que no se
  cual numero de cpu o nodo son los que puedo usar ya que es una maquina
  compartida con otros programas y probablemente correra varias instancias
  de mi programa (la maquina que estoy usando para las pruebas tiene 128
  procesadores).

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.

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, coorrecto?

  Lo unico que puedo asumir es que puedo seguir corriendo en el procesador
  que ya me asignaron. Entonces o necesito algo que le diga quedese
  corriendo el en nodo en que esta o algo que me diga en que nodo esta
  corriendo un proceso.
[...]

Hasta donde entiendo, el default es quedese corriendo en el nodo en
que está en linux. [2]

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


Pero yo veo que la pregunta es más compleja: no es solo que nodo está
con menos carga de CPU, sino que cual nodo tiene mayor RAM libre o lo
suficiente para que corra tu proceso FOO. La idea es que te toque toda
la RAM en tu nodo local, por eso que numa_api habla exclusivamente de
asignación de memoria más que de CPU

Para saber que nodo tiene mas RAM libre no tengo respuesta... quizas
ver todos los /proc/*/num_maps ??? que info puedes sacar de
/sys/devices/system/node ???  Tienes /proc/*/cpuset ??


[1] Documentation/x86_64/fake-numa-for-cpusets
[2] Documentation/cpusets.txt
[3] arch/x86_64/kernel/vsyscall.c:vgetcpu


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 ??? ;)

Slds,
-- 
Aldrin Martoq
NUEVO: Episodio 002 (Lunes 24 Marzo)!
http://aldrinvideopodcast.podshow.com/


Afinidad de procesos

2008-03-24 Por tema Aldrin Martoq
2008/3/23 Xavier Andrade [EMAIL PROTECTED]:
  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/
From [EMAIL PROTECTED]  Mon Mar 24 07:58:15 2008
From: [EMAIL PROTECTED] (Xavier Andrade)
Date: Mon Mar 24 08:16:19 2008
Subject: Afinidad de procesos
In-Reply-To: [EMAIL PROTECTED]
References: [EMAIL PROTECTED]
[EMAIL PROTECTED]
Message-ID: [EMAIL PROTECTED]

On Sun, 23 Mar 2008, Aldrin Martoq wrote:

 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, sabiendo donde uno quiere correr es facil. El problema es que no se 
cual numero de cpu o nodo son los que puedo usar ya que es una maquina 
compartida con otros programas y probablemente correra varias instancias 
de mi programa (la maquina que estoy usando para las pruebas tiene 128 
procesadores).

Lo unico que puedo asumir es que puedo seguir corriendo en el procesador 
que ya me asignaron. Entonces o necesito algo que le diga quedese 
corriendo el en nodo en que esta o algo que me diga en que nodo esta 
corriendo un proceso.

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

Pero como puedo saber donde esta corriendo, por que segun entiendo solo 
devuelve los procesadores en que puede correr.

Saludos,

Xavier
From [EMAIL PROTECTED]  Mon Mar 24 09:22:26 2008
From: [EMAIL PROTECTED] (=?ISO-8859-1?Q?Andr=E9s_Ruz?=)
Date: Mon Mar 24 09:26:02 2008
Subject: Controlar ventanas por consola.
In-Reply-To: [EMAIL PROTECTED]
References: [EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
Message-ID: [EMAIL PROTECTED]

Bueno lo que pasa es que quiero pasar información como una especie de banda
publicitaria de modo que cuando lanze un video y tengo que pasar alguna
noticia o algo por el estilo lo pueda hacer por medio de una franja sobre
los videos. La otra razón de por que quiero manejar las ventanas de forma
independiente es que ademas de videos también cargo películas flash sobre un
browser entonces por eso considero manejar 3 ventanas de tal forma que si
quiero mostrar un flash (película o dinámica) o un video, pueda usar alguna
ventana para esta tarea y si necesito pasar alguna noticia urgente pueda
usar una tercera ventana como una franja para pasar esta noticia.


Ojalá halla sido clara mi explicación.

Muchas gracias por la ayuda.

Andres Ruz S.
From [EMAIL PROTECTED]  Mon Mar 24 09:27:05 2008
From: [EMAIL PROTECTED] (Alvaro Herrera)
Date: Mon Mar 24 09:30:56 2008
Subject: Controlar ventanas por consola.
In-Reply-To: [EMAIL PROTECTED]
References: [EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
Message-ID: [EMAIL PROTECTED]

Andrés Ruz escribió:
 Bueno lo que pasa es que quiero pasar información como una especie de banda
 publicitaria de modo que cuando lanze un video y tengo que pasar alguna
 noticia o algo por el estilo lo pueda hacer por medio de una franja sobre
 los videos. La otra razón de por que quiero manejar las ventanas de forma
 independiente es que ademas de videos también cargo