You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下如何仅在CPU核心0运行基准测试并独占该核心?

在Ubuntu中仅在CPU核心0运行基准测试并确保指令数稳定的方法

1. 内核层面隔离核心0

通过内核启动参数将核心0从系统全局调度池中移除,避免普通进程自动调度到该核心:

  • 编辑GRUB配置文件:sudo nano /etc/default/grub
  • 修改GRUB_CMDLINE_LINUX行,添加isolcpus=0 nohz_full=0 rcu_nocbs=0(保留原有参数):
    GRUB_CMDLINE_LINUX="isolcpus=0 nohz_full=0 rcu_nocbs=0 ...原有的其他参数..."
    
    参数说明:
    • isolcpus=0:将核心0从通用调度队列中隔离
    • nohz_full=0:关闭核心0的周期性时钟中断,减少调度干扰
    • rcu_nocbs=0:禁止RCU回调在核心0上执行,降低后台开销
  • 更新GRUB并重启系统:
    sudo update-grub
    sudo reboot
    

2. 清理核心0上的现有进程

重启后检查核心0上的进程,并将可移动的进程绑定到其他核心:

# 查看核心0上的进程
ps -eLo pid,psr,cmd | grep -E '^ *[0-9]+ +0 '

批量移动所有核心0上的进程到其他核心(需root权限):

sudo bash -c 'for pid in $(ps -eLo pid,psr | awk '\''$2 == 0 {print $1}'\''); do taskset -cp 1-$(nproc --ignore=1) $pid; done'

注:部分系统核心进程(如init)无法移动,但其开销极小,不会影响基准测试的指令数统计。

3. 屏蔽核心0的硬件中断

中断会干扰测试稳定性,需将所有硬件中断移出核心0:

  • 停止并禁用irqbalance服务(它会自动分配中断):
    sudo systemctl stop irqbalance
    sudo systemctl disable irqbalance
    
  • 遍历所有中断,设置亲和性为非0核心:
    sudo bash -c 'for irq in /proc/irq/*; do
      if [ -f "$irq/smp_affinity_list" ]; then
        echo 1-$(nproc --ignore=1) | tee "$irq/smp_affinity_list"
      fi
    done'
    

4. 固定CPU频率为性能模式

CPU调频会导致指令执行时间波动,需将核心0(及所有核心)设置为性能模式:

# 安装cpupower工具(若未安装)
sudo apt install linux-tools-common linux-tools-generic
# 设置所有核心为performance模式
sudo cpupower frequency-set -g performance

5. 绑定基准测试到核心0并执行perf stat

用taskset将基准测试和perf stat绑定到核心0,同时通过重复运行确保指令数稳定:

# 以root权限绑定到核心0,重复运行5次取统计均值
sudo taskset -c 0 perf stat -r 5 -d <你的基准测试命令>

参数说明:

  • -r 5:重复运行5次,自动计算统计值的均值与方差,便于验证稳定性
  • -d:显示更多硬件相关统计指标
  • <你的基准测试命令>:替换为实际的基准测试程序(如./my_benchmark)

验证稳定性

运行后查看instructions指标的方差,若方差小于1%则说明指令数稳定。若仍有波动,可增加重复运行次数(如-r 10)或再次检查核心0上的进程/中断状态。

内容的提问来源于stack exchange,提问作者Zahra Heydari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:18:14