专栏首页皮振伟的专栏[x86][QEMU]虚拟化场景下的CPU拓扑

[x86][QEMU]虚拟化场景下的CPU拓扑

前言 目前的主流服务器一般是二路,即有2个NUMA node。每个NUMA上有一个CPU。比较主流的CPU一般是10Core/12Core,打开了Hyper-thread的场景下,就是2 Sockets × 10/12 Cores/socket × 2 Hyper-threads/Core,也就是40核或者48核。 对于大规格的虚拟机,尤其是32 vCPU或者40vCPU的场景下,对于计算密集型的业务,需要把物理机的CPU拓扑信息正确的透传到虚拟机中,否则跨Socket的内存访问,同一个Core下的两个Hyper-thread的资源的争抢,都是影响性能的关键因素。 分析 Host上拓扑关系 我们一般会用lscpu命令看到基本的CPU拓扑信息,也可以通过cat /proc/cpuinfo的方式看到“physical id”,“core id” cpuid 再进一步探讨,Host kernle是怎么获取到的CPU的拓扑关系的呢? Linux有命令cpuid,代码在https://github.com/tycho/cpuid cpuid命令的结果截取如下:

可见,通过cpuid命令可以获取到cpu的确切的socket/core/thread信息。 进一步分析源代码可以发现,上图的打印信息是通过CPUID leaf 0x0b获取到的。 QEMU 既然是通过CPUID指令可以获取cpu的硬件拓扑,而且Guest在运行CPUID指令的时候,会从none-root模式退出来,hypervisor可以构造出来特定的reg参数告诉给Guest,这样,就可以让Guest正确获取到vCPU之间的拓扑关系了。 qemu支持了启动参数“sockets”,“cores”,“threads”。只能支持配置到sockets、cores和threads的数量。拓扑关系是不支持配置的,例如指定cpu0核cpu10是同一个core上的两个hyper-thread。 在qemu-2.12/include/hw/i386/topology.h的实现中:

可见,根据qemu的计算结果来看,cpu0和cpu1会在socket0的core0上。 物理机的拓扑有时候会是0,2,4,6。。。所以需要管控从Host上正确获取到cpu的拓扑,配置到读应的vcpu上。 Cache passthrough 同理,cache的拓扑关系也是通过CPUID leaf 0x02和leaf 0x04指令获取的,通过配置qemu的启动参数“host-cache-info=on”达到cpu cache的透传效果。

本文分享自微信公众号 - AlwaysGeek(gh_d0972b1eeb60),作者:AlwaysGeek

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [virt][concept]虚拟化技术概论--KVM,QEMU,Libvirt

    前言: 以作者的经验来看,虚拟化的跨度比较大,很多概念比较难以理解,本来以为“硬件行为,就是这样的”好多概念,都变成虚拟的了。 作者对kernel略懂一二,结合...

    皮振伟
  • KVM之CPU虚拟化

    虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Ope...

    惨绿少年
  • Qemu 简述

    Qemu 架构 Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打...

    猿大白
  • 底层技术大对比!分分钟带你看透区块链和云计算

    区块链大本营
  • 底层技术大PK!分分钟带你看透区块链和云计算

    作者 | 谢文杰、金钰 责编 | 贾维娣 本文转载自 智链ChainNova,已经授权CSDN转载 我们在研究区块链的过程中发现,区块链的发展和云计算有非常多的...

    CSDN技术头条
  • Hypervisor, KVM, QEMU总结

    Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine ...

    战神伽罗
  • 一文读懂 Qemu 模拟器

    Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是...

    战神伽罗
  • KVM详解,学习kvm系列文章

    其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Lin...

    菲宇
  • x86 kvm和qemu虚拟化介绍

    简单说一下自己对x86平台虚拟化的理解,intel有SDM手册,代码都是公开的,难度比较大,理解起来困难,网上有大量优秀博客讲解虚拟化,引用了大量手册和代码,还...

    惠伟

扫码关注云+社区

领取腾讯云代金券