2. 控制系统 CPU 使用
2.1. 设置内核参数 isolcpus
这个参数可以禁止内核向指定的 CPU 调度进程(包括内核本身),除非进程显式绑定在某些 CPU 上。例如 isolcpus=0-3 可以使 CPU 0,1,2,3 完全空闲出来给那些指定了 CPU 的进程使用。用以下命令查看生效的设置:
$ cat /sys/devices/system/cpu/isolated
2.2. 用 taskset 命令设置 CPU 亲和性
例如:
$ taskset -c 1,3 sleep infinity
此命令还可以用来查看进程的 CPU 亲和性设置,例如:
$ taskset -p 423201
pid 423201's current affinity mask: a
输出亲和性掩码为 a 对应的二进制第 1 位和第 3 位为 1, 表示使用了 CPU 1, 3.
也可以直接查看 proc 文件系统:
$ cat /proc/423201/status | grep Cpus_allowed
Cpus_allowed: 0000000,0000000a
Cpus_allowed_list: 1,3
2.3. 设置服务的 CPU 亲和性
$ sudo systemctl edit --full kubelet
添加以下内容:
[Service]
CPUAffinity=0-3
将使服务只在 CPU 0-3 上运行。
2.4. 设置 IRQ 的 CPU 亲和性
通过写 proc 文件系统,例如:
$ echo 00000040,00000000 > /proc/irq/123/smp_affinity
设置了 123 号中断的 CPU 亲和性掩码。注意需要 root 权限并且不是任意一个中断都可以修改。
查询:
$ cat /proc/irq/123/effective_affinity
00000040,00000000