如何通过进程获取到程序运行在哪个cpu核心

如何查询进程属于哪个cpu核心?

1、taskset2、ps3、top

1、taskset

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

# taskset -c 3 top

查看进程所属核心:

# taskset -c -p 748320

pid 748320 的当前亲和力列表:3

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

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

# taskset -c -p 748277

pid 748277 的当前亲和力列表:0-7

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

2、ps

# ps -o pid,psr,comm -p 631968

PID PSR COMMAND

631968 0 dockerd

# ps -o pid,psr,comm -p 631980

PID PSR COMMAND

631980 1 containerd

ps 命令可以告诉你每个进程/线程目前分配到的 (在“PSR”列)CPU ID。 输出表示进程的 PID 为 631968(名为”dockerd”)目前在CPU 内核 0 上运行着。 如果该过程没有被固定,PSR 列会根据内核可能调度该进程到不同内核而改变显示。

3、top

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

top - 17:10:10 up 57 days, 6:00, 3 users, load average: 0.06, 0.03, 0.00

Tasks: 160 total, 1 running, 159 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

MiB Mem : 16277.2 total, 1644.8 free, 642.4 used, 13990.1 buff/cache

MiB Swap: 0.0 total, 0.0 free, 0.0 used. 12545.7 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND P

1 root 20 0 175552 17920 8832 S 0.0 0.1 3:02.32 systemd 5

2 root 20 0 0 0 0 S 0.0 0.0 0:00.64 kthreadd 5

3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 0

4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 0

6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd 0

8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 0

9 root 20 0 0 0 0 S 0.0 0.0 0:00.91 ksoftirqd/0 0

10 root 20 0 0 0 0 I 0.0 0.0 9:44.30 rcu_sched 3

11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 0

12 root rt 0 0 0 0 S 0.0 0.0 0:02.48 migration/0 0

13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 0

14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 1

15 root rt 0 0 0 0 S 0.0 0.0 0:02.03 migration/1 1

16 root 20 0 0 0 0 S 0.0 0.0 0:00.59 ksoftirqd/1 1

18 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-kblockd 1

19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2 2

20 root rt 0 0 0 0 S 0.0 0.0 0:02.31 migration/2 2

21 root 20 0 0 0 0 S 0.0 0.0 0:00.49 ksoftirqd/2 2

23 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H-kblockd