`isolcpus` 内核参数对 Ubuntu 16.04 桌面没有影响

nom*_*nom 8 grub ubuntu

我添加了以下行 /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=1,3"
Run Code Online (Sandbox Code Playgroud)

然后运行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
Run Code Online (Sandbox Code Playgroud)

的输出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 
Run Code Online (Sandbox Code Playgroud)

Eig*_*ony 7

我猜这两个进程是kworker或另一个内核任务。

目前看来,isolcpus=只影响用户空间线程,因此,内核线程将出现在隔离的 CPU 上。

RHEL 文档(重点是我的),

3.3.6.2. 隔离 CPU

您可以使用 isolcpus 引导参数将一个或多个 CPU 与调度程序隔离。这可以防止调度程序在此 CPU 上调度任何用户空间线程。一旦 CPU 被隔离,您必须使用 CPU 关联系统调用或 numactl 命令手动将进程分配给隔离的 CPU。

有人试图修补这种行为,但据我所知,它没有被确认。

总之,Ubuntu 没有忽略该选项,它按预期工作。它是否按预期工作是一个不同的查询。