CPU绑核并独占
要让一个进程绑定并独占一个 CPU 核(即确保该进程只在指定的核上运行,并且其他进程不会使用该核),可以按照以下步骤操作:
- 绑定进程到指定 CPU 核
使用 taskset 或 cpuset 将进程绑定到某个核(例如 CPU 3):
taskset -cp 3 <PID> # 将进程绑定到 CPU 3
或启动时直接绑定:
taskset -c 3 ./your_program # 启动时绑定到 CPU 3
- 确保该 CPU 核不被其他进程使用
默认情况下,Linux 调度器仍可能将其他进程调度到该核。要独占该核,需通过 isolcpus 内核参数隔离该核:
步骤:
修改 GRUB 配置(以隔离 CPU 3 为例):
sudo vim /etc/default/grub
找到 GRUB_CMDLINE_LINUX,添加 isolcpus=3(多个核用逗号分隔,如 isolcpus=2,3):
GRUB_CMDLINE_LINUX="isolcpus=3 ..."
更新 GRUB 并重启:
sudo update-grub # 对于 Debian/Ubuntu
sudo reboot
验证隔离是否生效:
cat /proc/cmdline # 检查是否包含 isolcpus=3
- 可选:进一步限制内核线程(IRQ 等)
默认情况下,内核线程和中断(IRQ)仍可能使用隔离的核。若要严格独占:
禁止 IRQ 使用隔离核:
sudo vim /etc/default/irqbalance
设置 IRQBALANCE_BANNED_CPUS(十六进制掩码,如隔离 CPU 3 对应 8=1000):
IRQBALANCE_BANNED_CPUS=8
重启服务:
sudo systemctl restart irqbalance
手动设置 IRQ 亲和性(可选):
echo 0 | sudo tee /proc/irq/*/smp_affinity_list # 将所有 IRQ 绑定到 CPU 0
- 验证独占性
检查进程绑定:
taskset -cp <PID> # 应显示 CPU 3
监控该 CPU 的使用:
top -1 -p <PID> # 查看进程是否只在 CPU 3 运行mpstat -P ALL 1 # 观察 CPU 3 是否仅被目标进程使用
注意事项
性能权衡:独占核会减少系统可用资源,可能影响整体吞吐量。实时性需求:若需更低延迟,可配合 chrt 设置实时优先级:
chrt -f 99 taskset -c 3 ./your_program
NUMA 架构:在多插槽服务器上,优先绑定到同一 NUMA 节点的核以减少跨节点延迟。
通过以上步骤,目标进程将完全独占指定的 CPU 核。