如何知道进程运行在哪个 CPU 内核上?

作者: Linux技术 | 来源:发表于2015-09-28 20:53 被阅读2488次

问题:我有个 Linux 进程运行在多核处理器系统上。怎样才能找出哪个 CPU 内核正在运行该进程?

当你在 多核 NUMA 处理器上运行需要较高性能的 HPC(高性能计算)程序或非常消耗网络资源的程序时,CPU/memory 的亲和力是限度其发挥最大性能的重要因素之一。在同一 NUMA 节点上调度最相关的进程可以减少缓慢的远程内存访问。像英特尔 Sandy Bridge 处理器,该处理器有一个集成的 PCIe 控制器,你可以在同一 NUMA 节点上调度网络 I/O 负载(如网卡)来突破 PCI 到 CPU 亲和力限制。

作为性能优化和故障排除的一部分,你可能想知道特定的进程被调度到哪个 CPU 内核(或 NUMA 节点)上运行。

这里有几种方法可以 找出哪个 CPU 内核被调度来运行给定的 Linux 进程或线程

方法一

如果一个进程使用 taskset 命令明确的被固定(pinned)到 CPU 的特定内核上,你可以使用 taskset 命令找出被固定的 CPU 内核:

$ taskset -c -p <pid>

例如, 如果你对 PID 5357 这个进程有兴趣:

$ taskset -c -p 5357

pid 5357's current affinity list: 5

输出显示这个过程被固定在 CPU 内核 5上。

但是,如果你没有明确固定进程到任何 CPU 内核,你会得到类似下面的亲和力列表。

pid 5357's current affinity list: 0-11

输出表明该进程可能会被安排在从0到11中的任何一个 CPU 内核。在这种情况下,taskset 不能识别该进程当前被分配给哪个 CPU 内核,你应该使用如下所述的方法。

方法二

ps 命令可以告诉你每个进程/线程目前分配到的 (在“PSR”列)CPU ID。

$ ps -o pid,psr,comm -p <pid>

  PID PSR COMMAND
 5357  10 prog

输出表示进程的 PID 为 5357(名为"prog")目前在CPU 内核 10 上运行着。如果该过程没有被固定,PSR 列会根据内核可能调度该进程到不同内核而改变显示。

方法三

top 命令也可以显示 CPU 被分配给哪个进程。首先,在top 命令中使用“P”选项。然后按“f”键,显示中会出现 "Last used CPU" 列。目前使用的 CPU 内核将出现在 “P”(或“PSR”)列下。

$ top -p 5357

相比于 ps 命令,使用 top 命令的好处是,你可以连续监视随着时间的改变, CPU 是如何分配的。

方法四

另一种来检查一个进程/线程当前使用的是哪个 CPU 内核的方法是使用 htop 命令

从命令行启动 htop。按 <F2> 键,进入"Columns",在"Available Columns"下会添加 PROCESSOR。

每个进程当前使用的 CPU ID 将出现在“CPU”列中。

请注意,所有以前使用的命令 taskset,ps 和 top 分配CPU 内核的 IDs 为 0,1,2,...,N-1。然而,htop 分配 CPU 内核 IDs 从 1开始(直到 N)。


via: http://ask.xmodulo.com/cpu-core-process-is-running.html

作者:Dan Nanni
译者:strugglingyouth
校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章

  • 如何知道进程运行在哪个 CPU 内核上?

    问题:我有个 Linux 进程运行在多核处理器系统上。怎样才能找出哪个 CPU 内核正在运行该进程? 当你在 多核...

  • [校招面试]CPU调度系列一

    进程调度:在可运行态进程之间分配有限处理器时间资源的内核子系统。通俗来说就是,各个进程之间如何有规律的使用CPU。...

  • top常规使用

    一、如何通过top查看某个进程运行于哪个物理cpu核上 使用top命令后,键入j。进入选择显示信息栏,选中P(la...

  • windows vs linux

    内核管理进程、线程,决定哪个进程、线程使用 CPU,也就是进程调度的能力;管理内存,决定内存的分配和回收,也就是内...

  • UNTITLED

    JVM 1、CPU占用过多如何定位 top 定位哪个进程对CPU占用最高(获取进程ID) ps 定位哪个线程引起C...

  • 查看进程运行在cpu哪个核上

    1、top命令查看进程pid2、执行ps命令

  • Linux如何将进程绑定CPU核心以提高性能

    在Linux系统中,进程的调度切换是由内核自动完成的,在多核CPU上,进程有可能在不同的CPU核上来回切换执行,这...

  • Linux进程上下文切换概念

    在操作系统中空间分为内核空间和用户空间所以进程的运行状态分为:1.内核态:进程运行于内核空间2.用户态:进程运行于...

  • Linux系统调用原理

    操作系统通过系统调用为运行于其上的进程提供服务。 当用户态进程发起一个系统调用, CPU 将切换到 内核态 并开始...

  • 如何定位消耗CPU最多的线程

    如何定位消耗CPU最多的线程查看哪个进程占用CPU最高top进程里所有线程的cpu消耗情况top -Hp 转换线...

网友评论

  • 美味小鱼:哈哈,简书上还有这种文章。
    Linux技术:@waitfish 对哦,喜欢我就多发点。
  • e9a44a336dfe:尽管知道了,但具体应用场景是啥?进程调度依赖于内核,是无法确定的,如果强制把一个进程在某个特定核运行,又无法发挥应有的效果。
  • 8fca49906fc8:虽然我看不懂,但是看上去好高大上啊

本文标题:如何知道进程运行在哪个 CPU 内核上?

本文链接:https://www.haomeiwen.com/subject/rrbwcttx.html