问题描述
我将以下行添加到/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=1,3"
然后运行sudo grub-update
(并重新启动),但根据top
,进程仍在CPU 1和3上进行调度。我该怎么办?
我被要求添加的内容:
nabeel@nabeel-Inspiron-3542:~$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.4.0-22-generic.efi.signed root=UUID=1e46ca65-843f-439a-8e2a-f5e666a03ffe ro quiet splash isolcpus=1,3 vt.handoff=7
top
的输出:
PID USER PR S P
182 root 20 S 0
183 root 0 S 0
220 root 20 S 0
223 root 20 S 0
253 root 20 S 2
261 root 0 S 0
312 root -51 S 0
343 root 0 S 3 <-------- Processes being scheduled on CPU 1 and 3
347 root 0 S 1 <--------
373 root 0 S 2
398 root 0 S 0
474 root 0 S 2
478 root 20 S 0
548 systemd+ 20 S 0
632 avahi 20 S 2
633 root 20 S 2
642 root 20 S 0
最佳思路
我猜这两个进程是kworker
或另一个内核任务。
目前看来,isolcpus=
仅影响用户空间线程,因此内核线程将显示在隔离的CPU上。
从RHEL documentation(重点是我)
3.3.6.2. Isolating CPUs
You can isolate one or more CPUs from the scheduler with the isolcpus boot parameter. This prevents the scheduler from scheduling any user-space threads on this CPU. Once a CPU is isolated, you must manually assign processes to the isolated CPU, either with the CPU affinity system calls or the numactl command.
有人尝试过patch this behaviour,但据我所知,它没有被确认。
总而言之,Ubuntu并没有忽略该选项,它可以按预期运行。它是否按预期工作是一个不同的查询。