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 foocon algunos argumentos args:
foo args
El programa footarda 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 fooestá ejecutando? El topprograma me muestra la identificación del proceso e información similar, pero no veo el número del procesador . ¿Esta información está disponible?

fooa dos procesadores diferentes. Cuando llamofoouna vez, se ejecuta con%CPUmuy cerca del 100% (segúntop). Pero cuando llamofoopor segunda vez, ambosfooprocesos se ejecutan de manera tal que%CPUpara ambos procesos suman menos del 100% (generalmente alrededor del 45% para cadafooproceso). Para mí, esto sugiere que las dos llamadas afoose ejecutan en el mismo procesador (a pesar de que hay ocho procesadores disponibles); Me gustaría verificar que este sea el caso.Respuestas:
pspuede darle esa información si solicita lapsrcolumna (o usa la-Fbandera 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
topfromprocps(generalmente el valor predeterminado en las distribuciones de Linux actualmente),toppresione f, navegueP = Last User CPU (SMP)y presione Spacepara seleccionar (también puede mover el campo, por ejemplo, antes delCOMMANDcampo 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
tasksetes lo que estás buscando:conjunto de tareas: recuperar o establecer la afinidad de CPU de un proceso
Ejemplo
Una máscara de
fmedios para todos los procesadores,0x00000001serí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