我正在尝试验证我的 Linux 版本是否按预期运行。我使用isolcpus
内核命令行参数来隔离在 RISC-V SPIKE 模拟器上模拟的两核机器的一个核心。我希望在隔离的核心上运行进程而不会中断。
当我启动进入 linux 时,/proc/cmdline
包含了isolcpus=1
预期的内容。但是当我检查正在运行的进程的核心关联性时,我发现有些进程仍在 cpu1 上:
ps -A -o pid,cmd,psr
PID CMD PSR
1 init 0
2 [kthreadd] 0
3 [rcu_gp] 0
4 [rcu_par_gp] 0
5 [slub_flushwq] 0
6 [netns] 0
7 [kworker/0:0-events] 0
8 [kworker/0:0H-events_highpr 0
9 [kworker/u4:0-events_unboun 0
10 [mm_percpu_wq] 0
11 [rcu_tasks_trace_kthread] 0
12 [ksoftirqd/0] 0
13 [rcu_sched] 0
14 [migration/0] 0
15 [kworker/0:1-events] 0
16 [cpuhp/0] 0
17 [cpuhp/1] 1
18 [migration/1] 1
19 [ksoftirqd/1] 1
20 [kworker/1:0-events] 1
21 [kworker/1:0H] 0
22 [kdevtmpfs] 0
23 [inet_frag_wq] 0
24 [kauditd] 0
25 [khungtaskd] 0
26 [oom_reaper] 0
27 [writeback] 0
28 [kcompactd0] 0
29 [kblockd] 0
30 [ata_sff] 0
31 [kworker/1:1-mm_percpu_wq] 1
32 [rpciod] 0
33 [kworker/0:1H] 0
34 [xprtiod] 0
35 [kworker/u4:1-events_unboun 0
36 [kswapd0] 0
37 [nfsiod] 0
38 [khvcd] 0
39 [uas] 0
40 [mld] 0
41 [ipv6_addrconf] 0
49 [kworker/u4:2-events_unboun 0
69 /sbin/syslogd -n 0
73 /sbin/klogd -n 0
90 -/bin/sh 0
110 ps -A -o pid,cmd,psr 0
它们只是内核程序,如果我手动将任务分配给 cpu1,我怀疑它们会坐在核心上侦听。
所以我的问题是:如果我正确隔离了核心,我应该在核心上看到的最小进程集是什么?如果这个集合不为空,那么他们在做什么?作为奖励,这个ps
命令是否足以验证它isolcpus
是否按我的预期工作?
注意:让我认为这可能行不通的是我已经读过它/sys/devices/system/cpu/isolated
并且/sys/devices/system/cpu/present
应该是彼此相反的。但我看到:
# cat /sys/devices/system/cpu/isolated
1
# cat /sys/devices/system/cpu/present
0-1