怎样才能找出哪个 CPU 内核正在运行该进程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样才能找出哪个 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 内核,你应该使用如下所述的方法。


以上是关于怎样才能找出哪个 CPU 内核正在运行该进程?的主要内容,如果未能解决你的问题,请参考以下文章

Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?

性能工具:特定进程CPU

性能工具:特定进程CPU

linux 怎样查看内存被哪个进程占用

windows 怎样在调度线程到多核

哪个进程进入 MPI 中的哪个 cpu 套接字?