当前位置: 移动技术网 > 科技>操作系统>Linux > 获知Linux的进程运行在哪个CPU内核上的方法

获知Linux的进程运行在哪个CPU内核上的方法

2018年07月03日  | 移动技术网科技  | 我要评论
这篇文章主要介绍了获知Linux的进程运行在哪个CPU内核上的方法,在服务器维护方面有时候会用得到,需要的朋友可以参考下... 15-10-07

当你在 多核 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。按 键,进入"columns",在"available columns"下会添加 processor。

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

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网