Afinidad de procesos
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
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/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