Linux 系统若要对指定的 CPU 进行绑定,首先需要对 CPU 进行隔离,可以在 grub
中配置 isolcpu
参数达到隔离 CPU 的目的。
说明
隔离 CPU 是对用户空间的进程有效,对与内核空间的进程并不是决对生效的。
配置
修改 grub
假设要隔离序号为 0,1
的CPU,需要修改 /etc/default/grub
,在 GRUB_CMDLINE_LINUX
中添加 isolcpus=0,1
,示例:
修改前:
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
修改后:
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet isolcpus=0,1"
使 grub 生效
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统
reboot
检查是否生效
查看 /proc/cmdline
中是否有 isolcpu
参数
- 方法二:查看 root 进程占用情况,示例显示
2-3
表示 0-1
已经被隔离
$ taskset -cp 1
pid 1's current affinity mask: c
c
是16进制,对应二进制为 1100
,表示占用 2,3
号 CPU。
$ taskset -cp $$
pid 1763's current affinity list: 2,3
参考:Linux taskset 命令查看或设置进程的CPU关联
扩展
- docker 启动时可以通过指定
--cpuset-cpus="0-2"
配合 isolcpu
实现隔离 CPU,否则将会占用所有的 CPU