如何在Ubuntu虚拟机上按指定核心数并行运行BPFM等基准测试并拉满CPU?
解决方案:核心绑定+测试参数调优
要实现按2的幂次核心数并行测试,且让指定核心跑满100%,核心是用Open-MPI的进程-核心绑定,再配合每个测试工具的高负载参数。以下是具体操作:
一、Open-MPI核心绑定基础
用mpirun的这两个参数确保进程绑定到指定核心,避免调度漂移:
--bind-to core:强制每个进程绑定到单个物理核心--map-by core:按核心分配进程,每个核心对应一个进程--np <num>:指定并行进程数(等于要使用的核心数)
二、分工具执行命令(单工具满核心测试)
针对每个工具,调整参数生成足够负载,确保CPU跑满:
1. BPFM 测试
BPFM需要生成持续的计算/网络负载才能占满CPU,假设你的BPFM程序有负载生成模块:
# 用8核心测试:8个进程,每个绑定1核 mpirun --np 8 --bind-to core --map-by core bpftool prog run ./your_bpf_prog.o -- load-full
注:--load-full是示例参数,需替换为你BPFM程序中能生成满负载的选项(比如循环哈希计算、高速发包)
2. IOR 存储测试
IOR要跑满CPU,需设置高IO压力(同步IO+大吞吐量):
# 16核心测试:16个IOR进程,每个绑定1核 mpirun --np 16 --bind-to core --map-by core ior -a POSIX -b 2G -t 128M -i 15 -F --sync
参数说明:--sync启用同步IO,让CPU参与调度;-b/-t设置足够大的块大小,确保IO压力拉满。
3. FIO 存储IO测试
用同步IO模式让CPU参与调度,容易跑满核心:
# 4核心测试:4个FIO进程,每个绑定1核 mpirun --np 4 --bind-to core --map-by core fio --name=full_load --ioengine=sync --rw=randread --bs=4k --numjobs=1 --size=20G --runtime=120 --time_based
--numjobs=1确保每个mpirun进程对应一个独立FIO任务,避免进程复用
4. Sysbench CPU测试
Sysbench CPU测试本身就能跑满核心,只需设置足够大的计算量:
# 32核心测试:32个Sysbench进程,每个绑定1核 mpirun --np 32 --bind-to core --map-by core sysbench cpu --cpu-max-prime=200000 run
--cpu-max-prime值越大,计算时间越长,CPU占用越稳定
三、并行运行多个测试(按比例分配核心)
比如总核心数为64,要让四个测试各占25%(16核),给每个测试分配专属核心组:
# BPFM绑定核心0-15,后台运行 mpirun --np 16 --bind-to core:0-15 --map-by core bpftool prog run ./your_bpf_prog.o -- load-full & # IOR绑定核心16-31,后台运行 mpirun --np 16 --bind-to core:16-31 --map-by core ior -a POSIX -b 2G -t 128M -i 15 -F --sync & # FIO绑定核心32-47,后台运行 mpirun --np 16 --bind-to core:32-47 --map-by core fio --name=full_load --ioengine=sync --rw=randread --bs=4k --numjobs=1 --size=20G --runtime=120 --time_based & # Sysbench绑定核心48-63,前台运行 mpirun --np 16 --bind-to core:48-63 --map-by core sysbench cpu --cpu-max-prime=200000 run
如果总核心数是2,每个测试占1核(50%),则给每个测试分配1个核心即可。
四、验证CPU使用率
运行测试时,用以下命令确认核心使用率:
# 实时查看每个核心的负载 htop # 每2秒输出一次核心使用率统计 mpstat -P ALL 2
正常情况下,绑定的核心使用率会稳定在95%-100%。
五、关键注意事项
- 虚拟机必须配置独占核心(宿主机不能超配CPU),否则核心会被宿主机抢占,无法达到100%使用率。
- 每个工具的负载参数需要根据你的硬件调整,比如IOR/FIO的块大小、Sysbench的质数上限,确保进程不会提前结束或负载不足。
- 如果Open-MPI绑定不生效,可搭配
taskset强制绑定:比如taskset -c 0-7 mpirun --np 8 ...,双重保障核心绑定。
内容的提问来源于stack exchange,提问作者JulianW
相关产品推荐
相关产品推荐

