Tengo acceso a un nodo de 8 núcleos de un clúster de Linux. Cuando inicie sesión en el nodo, puedo ver una lista de procesadores que utilizan este comando:
more /proc/cpuinfo
En mi nodo de 8 núcleos, los procesadores están numerados del 0 al 7. Cada procesador es una CPU Intel Xeon (E5430 @ 2.66GHz).
Ahora supongamos que llamo al programa foo
con algunos argumentos args
:
foo args
El programa foo
tarda mucho tiempo en ejecutarse (horas o días, por ejemplo). Habiendo llamado foo
, ¿es posible determinar el procesador particular (es decir, 0 a 7) en el que se foo
está ejecutando? El top
programa me muestra la identificación del proceso e información similar, pero no veo el número del procesador . ¿Esta información está disponible?
foo
a dos procesadores diferentes. Cuando llamofoo
una vez, se ejecuta con%CPU
muy cerca del 100% (segúntop
). Pero cuando llamofoo
por segunda vez, ambosfoo
procesos se ejecutan de manera tal que%CPU
para ambos procesos suman menos del 100% (generalmente alrededor del 45% para cadafoo
proceso). Para mí, esto sugiere que las dos llamadas afoo
se ejecutan en el mismo procesador (a pesar de que hay ocho procesadores disponibles); Me gustaría verificar que este sea el caso.Respuestas:
ps
puede darle esa información si solicita lapsr
columna (o usa la-F
bandera que la incluye).Ex:
O:
Mi shell se estaba ejecutando en la CPU 2 cuando ejecuté el primer comando, en la CPU 0 cuando ejecuté el segundo. Tenga en cuenta que los procesos pueden cambiar las CPU muy, muy rápidamente, por lo que la información que realmente ve es, en esencia, obsoleta.
Más información en las respuestas de esta pregunta de Superusuario:
Linux: comando para saber el número de procesador en el que se carga un proceso?
fuente
Con
top
fromprocps
(generalmente el valor predeterminado en las distribuciones de Linux actualmente),top
presione f, navegueP = Last User CPU (SMP)
y presione Spacepara seleccionar (también puede mover el campo, por ejemplo, antes delCOMMAND
campo con la Righttecla y luego subir y bajar). qpara volver a la pantalla principal (donde verá que su proceso se mueve de procesador a procesador a menos que lo haya configurado explícitamente para quedarse con uno). Puede presionar Wpara guardar eso como predeterminado.Presione ?para obtener ayuda.
fuente
El comando
taskset
es lo que estás buscando:conjunto de tareas: recuperar o establecer la afinidad de CPU de un proceso
Ejemplo
Una máscara de
f
medios para todos los procesadores,0x00000001
sería solo el procesador 0.Muestra las CPU en formato de lista. Tengo 4 núcleos en mi computadora portátil en este ejemplo.
Ver la página del manual tiene más detalles .
fuente
También puede obtener esta información directamente de
/proc/[pid]/stat
. Es el campo 39 delimitado por espacios (desde Linux 2.2.8).Por ejemplo, para mostrar en qué procesador de CPU se está ejecutando el shell actual (en este caso):
fuente