ver uso todos tiene servidor saber procesadores procesador para nucleos memoria los cuantos como comando activar linux linux-kernel scheduled-tasks scheduling scheduler

uso - ver procesadores en linux



¿Cómo puedo ver en qué núcleo de CPU se está ejecutando un subproceso? (6)

La respuesta a continuación ya no es precisa a partir de 2014

Las tareas no duermen en ningún núcleo en particular. Y el planificador no sabrá con anticipación qué núcleo ejecutará un hilo porque eso dependerá del uso futuro de esos núcleos.

Para obtener la información que desea, busque en / proc / <pid> / task / <tid> / status. El tercer campo será una ''R'' si el hilo se está ejecutando. El sexto del último campo será el núcleo en el que se está ejecutando actualmente el subproceso, o el núcleo en el que se ejecutó por última vez (o se migró) si no se está ejecutando actualmente.

31466 (bc) S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 217976807456 0 0 0 137912326 18446744071581662243 0 0 17 3 0 0 0 0 0

No se está ejecutando actualmente. Última ejecución en el núcleo 3.

31466 (bc) R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264231824 4235516 0 0 0 2 0 0 0 17 2 0 0 0 0 0

Actualmente se ejecuta en el núcleo 2.

Para ver lo que significa el resto de los campos, eche un vistazo al origen del kernel de Linux, específicamente la función do_task_stat en fs/proc/array.c o Documentation/filesystems/stat.txt .

Tenga en cuenta que toda esta información puede estar obsoleta en el momento en que la obtiene. Fue cierto en algún momento entre cuando realizaste la llamada open en el archivo en proc y cuando esa llamada regresó.

En Linux, suponiendo que el pid de un hilo es [pid], desde el directorio / proc / [pid] podemos obtener mucha información útil. Por ejemplo, estos archivos de proceso, / proc / [pid] / status, / proc / [pid] / stat y / proc / [pid] / schedstat son útiles. Pero, ¿cómo puedo obtener el número de núcleo de la CPU en el que se está ejecutando un hilo? Si un hilo está en estado de suspensión, ¿cómo puedo saber qué núcleo se ejecutará después de que se programe de nuevo?

Por cierto, ¿hay alguna manera de volcar la lista de procesos (subprocesos) de las tareas de ejecución y de reposo para cada núcleo de CPU?


El comando "superior" puede ayudar a esto, no tiene lista de subprocesos agrupados por CPU, sino que puede ver la lista de subprocesos (probablemente para un único proceso) y los núcleos de CPU donde se ejecutan los subprocesos.

top -H -p {PROC_ID}

luego presione f para ir a la selección de campo, j para habilitar la columna del núcleo de la CPU y Enter para mostrar.


Esto se puede hacer con el comando top . El resultado del comando top predeterminado no muestra estos detalles. Para ver este detalle, deberá presionar la tecla f mientras se encuentra en la interfaz de comando superior y luego presionar j (presionar la tecla Entrar después de presionar j ). Ahora la salida le mostrará detalles sobre un proceso y qué procesador se está ejecutando. Una muestra de salida se muestra a continuación.

top - 04:24:03 up 96 days, 13:41, 1 user, load average: 0.11, 0.14, 0.15 Tasks: 173 total, 1 running, 172 sleeping, 0 stopped, 0 zombie Cpu(s): 7.1%us, 0.2%sy, 0.0%ni, 88.4%id, 0.1%wa, 0.0%hi, 0.0%si, 4.2%st Mem: 1011048k total, 950984k used, 60064k free, 9320k buffers Swap: 524284k total, 113160k used, 411124k free, 96420k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ P COMMAND 12426 nginx 20 0 345m 47m 29m S 77.6 4.8 40:24.92 7 php-fpm 6685 mysql 20 0 3633m 34m 2932 S 4.3 3.5 63:12.91 4 mysqld 19014 root 20 0 15084 1188 856 R 1.3 0.1 0:01.20 4 top 9 root 20 0 0 0 0 S 1.0 0.0 129:42.53 1 rcu_sched 6349 memcache 20 0 355m 12m 224 S 0.3 1.2 9:34.82 6 memcached 1 root 20 0 19404 212 36 S 0.0 0.0 0:20.64 3 init 2 root 20 0 0 0 0 S 0.0 0.0 0:30.02 4 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:12.45 0 ksoftirqd/0

La columna P en el resultado muestra el número de núcleo del procesador donde se está ejecutando actualmente el proceso. Monitorear esto durante unos minutos le hará comprender que un pid está cambiando núcleos de procesador en el medio. También puede verificar si su pid para el que ha establecido afinidad se está ejecutando solo en ese núcleo particular

top pantalla de navegación f top (un ejemplo de sistema en vivo) :

Fields Management for window 1:Def, whose current sort field is forest view Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, ''d'' or <Space> toggles display, ''s'' sets sort. Use ''q'' or <Esc> to end! * PID = Process Id * USER = Effective User Name * PR = Priority * NI = Nice Value * VIRT = Virtual Image (KiB) * RES = Resident Size (KiB) * SHR = Shared Memory (KiB) * S = Process Status * %CPU = CPU Usage * %MEM = Memory Usage (RES) * TIME+ = CPU Time, hundredths * COMMAND = Command Name/Line PPID = Parent Process pid UID = Effective User Id RUID = Real User Id RUSER = Real User Name SUID = Saved User Id SUSER = Saved User Name GID = Group Id GROUP = Group Name PGRP = Process Group Id TTY = Controlling Tty TPGID = Tty Process Grp Id SID = Session Id nTH = Number of Threads * P = Last Used Cpu (SMP) TIME = CPU Time SWAP = Swapped Size (KiB) CODE = Code Size (KiB) DATA = Data+Stack (KiB) nMaj = Major Page Faults nMin = Minor Page Faults nDRT = Dirty Pages Count WCHAN = Sleeping in Function Flags = Task Flags <sched.h> CGROUPS = Control Groups SUPGIDS = Supp Groups IDs SUPGRPS = Supp Groups Names TGID = Thread Group Id ENVIRON = Environment vars vMj = Major Faults delta vMn = Minor Faults delta USED = Res+Swap Size (KiB) nsIPC = IPC namespace Inode nsMNT = MNT namespace Inode nsNET = NET namespace Inode nsPID = PID namespace Inode nsUSER = USER namespace Inode nsUTS = UTS namespace Inode


La respuesta aceptada no es precisa. Estas son las formas de averiguar qué CPU ejecuta el hilo (o fue la última en ejecutarse) en el momento de la consulta:

  1. Lea directamente /proc/<pid>/task/<tid>/stat . Antes de hacerlo, asegúrese de que el formato no haya cambiado con el núcleo más reciente. La documentación no siempre está actualizada, pero al menos puede intentar https://www.kernel.org/doc/Documentation/filesystems/proc.txt . A partir de este escrito, será el 14to valor desde el final.
  2. Use ps . O bien, dale el modificador -F , o usa modificadores de salida y agrega el código PSR .
  3. Use la parte superior con la columna Última Cpu utilizada (al tocar f se accede a la selección de columna)
  4. Use htop con la columna PROCESADOR (al presionar F2 se accede a la pantalla de configuración)

Los hilos no son necesarios para unir un núcleo en particular (si no lo pinchó). Por lo tanto, para ver la conmutación continua del núcleo puede usar (una respuesta modificada de Dmitry):

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p /`pgrep BINARY-NAME/`

Por ejemplo:

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p /`pgrep firefox/`


También puedes usar ps , algo como esto:

ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`