判断 linux 进程运行在哪个 cpu 内核上的 4 个方法-亚博电竞手机版

问题:我有个 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 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 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。按 键,进入”columns”,在”available columns”下会添加 processor。

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

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

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

知识分享
说到德系车,我们往往能想到的就是大众,大众汽车的燃油经济性不错,新车的故障率也比较低,而且...…
知识分享
据了解,这辆本田思域是2013款的,具体车型为十周年纪念1.8l自动豪华版。首次上牌是在2...…
知识分享
第一块,车和车的事故,这类事故,只要买了三责险、车损险,根本就不是个事,扯皮的纯属没有买车...…
网站地图