山里的稻草人 2018-12-05 09:15 采纳率: 0%
浏览 520

2.6.32-754.3.5.el6内核版本不能开启超线程

qemu-kvm平台创建虚拟机
设置topo结构,当cores为1时,虚拟机不能开启超线程
例:sockets:1 cores:1 threads:4
以此配置创建虚拟机,虚拟机启动后实际现象为
sockets:1 cores:1 threads:1
而vcpu总数为配置的topo结构计算结果,vcpu=4
但上线vcpu数量为实际topo结构计算结果:vcpu=1
另外未上线vcpu也无法手动上线

求教:
1.有大神知道是什么原因吗
2.定位这个问题,应该怎么入手,我没接触过内核代码,有点无从下手

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 09:37
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于Linux内核在创建和管理虚拟化资源(如CPU核心、内存等)时遵循了一种称为"分层架构"的设计原则。这种设计允许内核根据不同的需求和上下文来选择最佳的方式来分配这些资源。

    在您提供的例子中,您的虚拟机只包含一个内核线程,这意味着它只能使用一个CPU核心进行运行。但是,因为内核线程只有一个CPU核心,所以实际上最多只能同时执行四个任务。因此,在您设置的虚拟机中,虽然虚拟机上配置了四个vCPU,但实际上最多只能执行四个vCPU的任务。

    要解决这个问题,您可以尝试以下几种方法:

    1. 更改内核参数:您可以通过修改内核参数来改变内核的行为。例如,您可以尝试将NUMA_NODE_NUM这个内核参数设置为0,以取消内核对节点的选择性访问控制,从而允许更多的虚拟机线程共享同一个CPU核心。

    2. 使用VMM工具:一些虚拟化解决方案提供了VMM工具,可以用于调整虚拟机的资源配额。例如,QEMU-VMM提供了一个--cpu-numa-skip选项,可以在创建虚拟机时忽略CPU的NUMA布局,从而使多个虚拟机线程能够共享同一块CPU核心。

    请注意,以上两种方法都可能影响到其他虚拟机或物理服务器上的性能,并且可能会带来额外的风险和复杂性。因此,请确保在实施任何更改之前进行了充分的研究和测试。

    评论

报告相同问题?