如何查看线程正在运行的CPU内核?
在Linux中,假设线程的pid是[pid],从目录/ proc / [pid]中,我们可以获得许多有用的信息。 例如,这些proc文件/ proc / [pid] / status,/ proc / [pid] / stat和/ proc / [pid] / schedstat都是有用的。 但是我怎么能得到一个线程运行的CPU核心号? 如果一个线程处于睡眠状态,我怎么能知道它再次被调度后将运行哪个核心?
顺便说一下,有没有办法为每个CPU内核转储运行和休眠任务的进程(线程)列表?
以下答案截至2014年不再准确
任务不会睡在任何特定的核心。 调度程序不会提前知道它将运行哪个内核,因为这将取决于这些内核的未来使用情况。
要获取所需的信息,请查看/ proc / <pid> / task / <tid> / status。 如果线程正在运行,第三个字段将是'R'。 来自最后一个字段的第六个字段将是当前正在运行的线程的核心,或者是它最近运行的核心(或已迁移到的核心),如果它当前未运行。
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
目前没有运行。 最后在核心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
目前在核心2上运行。
要查看该字段的其余部分的意思是,看看Linux内核源代码-特别是do_task_stat
在功能fs/proc/array.c
或Documentation/filesystems/stat.txt
。
请注意,所有这些信息可能会在您获得该信息时过时。 在你对proc文件进行open
调用和返回该调用时之间的某个时间点是对的。
“top”命令可能对此有所帮助,它没有CPU分组的线程列表,而是可以看到线程列表(可能是单个进程)以及线程运行在哪个CPU内核上
top -H -p {PROC_ID}
然后按f进入字段选择,j启用CPU核心列,然后按Enter键显示。
你也可以使用ps
,像这样:
ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`
链接地址: http://www.djcxy.com/p/56101.html