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

RT-CentOS7虚拟机cgroup绑定多CPU后stress仅单CPU运行求助

问题:RT-CentOS7虚拟机中stress工具无法充分利用绑定的全部CPU

环境与现象

  • 环境:RT-CentOS7虚拟机,内核版本4.19.265-rt117
  • 操作:通过cgroup绑定CPU2-5,将stress相关PID(2216至2222)加入该cgroup
  • 现象:期望stress能利用全部4个指定CPU,但htop显示仅CPU3(编号2)满负载运行,其余3个CPU完全未工作

stress脚本内容

#!/bin/bash

stress --cpu 3 --io 3 --vm 1

执行命令

nohup /home/wxh/scripts/stress_test.sh &

cgroup配置命令(其余为默认)

echo 2-5 > cpuset.cpus
echo 0 >cpuset.mems
echo 2216 >> tasks
echo 2217 >> tasks
echo 2218 >> tasks
echo 2219 >> tasks
echo 2220 >> tasks
echo 2221 >> tasks
echo 2222 >> tasks

已排查项

已检查cpuset.effective_cpus和cpuset.cpu_exclusive,排除此类配置问题。

虚拟机配置XML

<domain type='kvm'>
    <name>centos7</name>
    <memory unit='GiB'>16</memory>
    <vcpu>6</vcpu>
    <os>
    <type arch='aarch64' machine='virt'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/AAVMF/AAVMF_CODE.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/centos7_VARS.fd</nvram>
    </os>
    <features>
    <acpi/>
    <gic version='3'/>
    </features>
    <cpu mode='host-passthrough'>
        <topology sockets='2' cores='3' threads='1'/>
    </cpu>
    <iothreads>1</iothreads>
    <clock offset='utc'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
        <driver name='qemu' type='qcow2' iothread="1"/>
        <source file='/home/xxx/v1_2th.qcow2'/>
        <target dev='vda' bus='virtio'/>
        <boot order='1'/>
    </disk>
    <disk type='file' device='cdrom'>
        <driver name='qemu' type='raw'/>
        <source file='/home/xxx/softwares/Minimal_2th.iso'/>
        <readonly/>
        <target dev='sdb' bus='scsi'/>
        <boot order='2'/>
    </disk>
    <interface type='network'>
        <source network='default'/>
    </interface>
    <console type='pty'/>
        <video>
           <model type='virtio'/>
        </video>
        <controller type='scsi' index='0' model='virtio-scsi'/>
    </devices>
    <seclabel type='dynamic' model='dac' relabel='yes'/>
    <vcpu placement='static' cpuset='64,65,66,67,68,69,70,71'>6</vcpu>
    <cputune>
        <vcpupin vcpu='0' cpuset='64'/>
        <vcpupin vcpu='1' cpuset='65'/>
        <vcpupin vcpu='2' cpuset='66'/>
        <vcpupin vcpu='3' cpuset='67'/>
        <vcpupin vcpu='4' cpuset='68'/>
        <vcpupin vcpu='5' cpuset='69'/>
        <emulatorpin cpuset='70'/>
        <iothreadpin iothread='1' cpuset='71'/>
    </cputune>
</domain>

解决方案

  • 调整stress线程数量与绑定CPU匹配:当前stress仅指定--cpu 3,生成3个CPU压力线程,无法占满4个绑定的CPU。修改脚本为stress --cpu 4 --io 3 --vm 1,确保线程数覆盖全部绑定的CPU。
  • 验证线程CPU亲和性:用taskset -c -p <PID>检查每个stress线程的亲和性范围,确认是否包含CPU2-5。若线程亲和性被限制到单个CPU,需确认cgroup的cpuset.sched_load_balance是否开启(执行cat cpuset.sched_load_balance,若为0则执行echo 1 > cpuset.sched_load_balance开启负载均衡)。
  • 适配RT内核调度特性:RT内核调度器对线程优先级敏感,用chrt命令调整stress进程的实时优先级,例如chrt -f 99 stress --cpu 4 --io 3 --vm 1,帮助调度器更均匀地分配线程到不同CPU。
  • 检查虚拟机CPU拓扑:虚拟机配置的CPU拓扑为2 sockets、3 cores,可能影响内部CPU的调度效率。可尝试调整为sockets=1, cores=4, threads=1(需物理机支持),让虚拟机内部CPU结构更集中,利于线程分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:33