当前位置: 首页 > 科技观察

确定Linux进程在哪个CPU核心上运行的4种方法

时间:2023-03-19 20:25:43 科技观察

问题:我有一个Linux进程在多核处理器系统上运行。如何找出哪个CPU内核正在运行该进程?当你在多核NUMA处理器上运行对性能要求更高的HPC(HighPerformanceComputing)程序或消耗网络资源的程序时,CPU/内存的亲和性是限制其最大性能的重要因素之一。在同一个NUMA节点上安排最相关的进程可以减少缓慢的远程内存访问。与具有集成PCIe控制器的IntelSandyBridge处理器一样,您可以在同一NUMA节点上调度网络I/O负载(例如网卡)以打破PCI到CPU亲和力限制。作为性能调整和故障排除的一部分,您可能想知道特定进程计划在哪个CPU内核(或NUMA节点)上运行。这里有几种方法可以找出哪个CPU核心被调度来运行给定的Linux进程或线程。方法1如果使用taskset命令将进程显式固定到特定CPU核心,则可以使用taskset命令找出固定了哪个CPU核心:$taskset-c-p例如,如果固定了PID5357Thisprocessisinterestedin:$taskset-c-p5357pid5357'scurrentaffinitylist:5输出显示此进程固定到CPU核心5。但是,如果您没有明确地将进程固定到任何CPU核心,您将获得如下所示的亲和力列表。pid5357'scurrentaffinitylist:0-11输出表明该进程可能被调度到0到11之间的任何一个CPU核心上。在这种情况下,taskset无法识别该进程当前分配给哪个CPU核心,您应该使用下面描述的方法。方法2ps命令可以告诉您当前分配给每个进程/线程的CPUID(在“PSR”列中)。$ps-opid,psr,comm-pPIDPSRCOMMAND535710prog输出表明PID为5357的进程(名为“prog”)当前正在CPU核心10上运行。如果进程未固定,则PSR列将更改显示,具体取决于哪些内核可能将进程调度到不同的内核。方法三top命令还可以显示CPU分配给了哪个进程。首先,在top命令中使用“P”选项。然后按“f”键,“LastusedCPU”列将出现在显示屏中。当前使用的CPU核心将出现在“P”(或“PSR”)栏下。$top-p5357与ps命令相比,使用top命令的优点是可以连续监控CPU的分配情况。方法4另一种检查进程/线程当前使用哪个CPU核心的方法是使用htop命令。从命令行启动htop。按键进入“Columns”,PROCESSOR将添加到“AvailableColumns”下。每个进程当前使用的CPUID将出现在“CPU”列中。请注意,之前使用的所有命令taskset、ps和top都为CPU内核分配了ID0、1、2、...、N-1。然而,htop分配CPU核心ID从1开始(直到N)。