首页 > 其他分享 >每天5分钟复习OpenStack(五)CPU虚拟化

每天5分钟复习OpenStack(五)CPU虚拟化

时间:2023-10-17 14:45:18浏览次数:41  
标签:虚拟化 主机 虚拟机 特性 CPU OpenStack cpu

KVM 虚拟化之CPU

虚拟化存在是为了更高效的利用物理机的资源,而虚拟机技术主要是针对三大组件,分别是CPU虚拟化、存储虚拟化、网络虚拟化。下面我们分别介绍下三大组件的常用知识。

CPU 虚拟化

1.1 CPU虚拟化支持

KVM 的虚拟化是需要 CPU 硬件支持的。还记得我们在前面的章节讲过用命令来查看 CPU
是否支持KVM虚拟化吗?

lscpu |grep -E "(vmx|svm)"

如果有输出,则证明CPU支持了虚拟化?大部分文档上都是这么教的,事实的如此吗?

其实该命令仅仅限于Intel 和AMD 厂商,这里拿鲲鹏920系列的CPU来举例

可以看到这里其实是没有输出的,也就证明了上述命令仅仅是针对Inter 和AMD的厂商。
那鲲鹏是怎么查看是否支持CPU的虚拟化了?
dmesg |grep kvm

简单查看是否支持虚拟化:

此时的VHE就代表支持CPU虚拟化了

注:VHE(Virtualization Host Extension support)是armv8.1的新特性,支持type-2的hypervisors这种扩展让kernel直接跑在el2上。

可见厂商不一样,CPU虚拟化的查看方式是不一样的。

1.2 cpu 模型

前面我们了解到使用virsh dumpxml 可以查看虚拟机的详细的配置信息,

vcpu标签,表示客户机中vCPU的个数,这里为1
<vcpu placement='static'>1</vcpu
  • features标签,表示Hypervisor为客户机打开或关闭CPU或其他硬件的特性,这里打开了ACPI、APIC等特性
  • CPU的基础特性是在cpu标签中定义的,这里是之前创建客户机时,libvirt自动检测了CPU硬件平台,默认使用了Broadwell-IBRS的CPU给客户机,Broadwell-IBRS 就是虚拟机的模型。
    下面就是一些常用的模型

为什么需要模型,模型是干什么用的?

对于CPU模型的配置,有以下3种模式。

  1. custom模式:就是这里示例中表示的,基于某个基础的CPU模型,再做个性化的设置。

  2. host-model模式 :根据物理CPU的特性,选择一个与之最接近的标准CPU型号,如果没有指定CPU模式,默认也是使用这种模式。xml配置文件为:

<cpu mode='host-model'/>
  1. host-passthrough模式 :直接将物理CPU特性暴露给虚拟机使用,在虚拟机上看到的完全就是物理CPU的型号。xml配置文件为:
<cpu mode='host-passthrough'/>

默认上面的例子种使用的就是 custom模式,而且在生产环境中大部分的kvm 虚拟化都是这种模式。
而上面的例子中kvm 使用的模型是Broadwell-IBRS ,该模型在 /usr/share/libvirt/cpu_map.xml 文件中有详细的描述。基于上述模型的特性,我们个性化的开启和关闭了某些特性

  <cpu mode='custom' match='exact' check='full'>
    <model fallback='forbid'>Broadwell-IBRS</model>
    <feature policy='require' name='md-clear'/>
    <feature policy='require' name='ssbd'/>
    <feature policy='disable' name='hle'/>
    <feature policy='disable' name='rtm'/>
    <feature policy='require' name='spec-ctrl'/>
    <feature policy='require' name='hypervisor'/>
    <feature policy='disable' name='erms'/>
    <feature policy='require' name='xsaveopt'/>
  </cpu>

require 则是开启了特性,disable 则是关闭了特性。通过对xml 的编辑可以自定义开启和关闭某些特性。

为什么要这么做?
我们想象一下这个场景,在一个大型的kvm虚拟化环境中,CPU的型号是否完全都是一样的?如果不一样,那么不同型号的CPU上运行的kvm虚拟机,是否有迁移的需求了?

答案是肯定的,如果我们选择host-passthrough模式 ,则虚拟机在不同型号的CPU迁移时肯定是会报错的。有人就要问了,那我使用host-model不就行了,为什么要custom 了?,CPU型号一致,是否其flag就完全一致了? 答案也是否定的,相同的型号不同的BIOS设置,也会造成cpu的 flag 不一样。因此大多数的场景KVM 虚拟机默认都是custom ,通过自定义开启和关闭某些特征,来保证虚拟机在不同类型CPU上能正常迁移。

实战

下面借用我在实际生产过程中踩过坑例子来说明

下面是nova-compute的报错日志显示迁移失败

对比cpu的型号发现其完全一致

下面是flag 对比,发现BIOS开启了monitor、等功能 造成虚拟机的迁移失败。

解决方式:

  1. 关闭物理机,在BIOS页面关闭一些特性开关,使其flag的标记位一致。
  2. 在迁移过程中,关闭flag 检查匹配,只检查基础flag 。

[扩展] 在实际的生产环境为了保证稳定行,在不同型号的CPU上,建议是先查看兼容性,如果是支持向下兼容的情况下,可以将虚拟机,在不同型号CPU上进行迁移

兼容性判断

假如要判断主机A上的虚拟机向主机B上迁移是否兼容
判断步骤
1、在主机A上获取 虚拟机使用的cpu features

virsh domcapabilities > domA.caps

2、 将domA.caps拷贝到主机B上,在主机B上执行如下命令,判断是否兼容。如果命令行执行结果如下,则表示主机B兼容主机A,主机A上的虚拟机可以迁移到主机B上。

virsh hypervisor-cpu-compare --error domA.caps
#CPU described in domA.caps is identical to the CPU provided by hypervisor on the host

如果命令行执行结果如下,则表示主机B不兼容主机A,主机A上的虚拟机不可以迁移到主机B上。

virsh hypervisor-cpu-compare --error domA.caps
error: Failed to compare hypervisor CPU with domA.caps
error: the CPU is incompatible with host CPU: 主机 CPU 不提供所需功能: vmx, pdcm, invtsc

标签:虚拟化,主机,虚拟机,特性,CPU,OpenStack,cpu
From: https://www.cnblogs.com/alex0815/p/17769626.html

相关文章

  • Linux中查看服务器内存/CPU/网络占用情况的命令
    目录1、查看物理CPU个数2、查看服务器CPU内核个数3、服务器内存使用情况4、查看服务器的平均负载5、查看系统整体性能情况6、查看系统已载入的相关模块7、查找PCI设置8、网络流量监控9、查看系统内核1、查看物理CPU个数cat cat/proc/cpuinfo|grep"physic......
  • cpu在执行 java时,java指令是保存在数据cache中还是指令cache中
    Java代码在运行时,首先由JVM(JavaVirtualMachine)编译器将Java字节码转换成本地机器代码,然后再由CPU执行。在CPU中,指令缓存(InstructionCache)和数据缓存(DataCache)都是用于提高CPU处理效能的缓存结构,它们是处理器访问内存的缓存。对于生成的代码(或者说指令),它会被放入指令缓......
  • Linux Kernel 之一 完整嵌入式 Linux 环境、构建工具、编译工具链、各 CPU 架构
    版权声明:本文为CSDN博主「ZC·Shou」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/ZCShouCSDN/article/details/122239093   第一步就是需要了解如何搭建一个完整的嵌入式Linux环境。现在将学习心得记录为此文。......
  • bios启用虚拟化
    要开启BIOS虚拟化,首先需要进入BIOS设置。通常可以在电脑启动时按下F2或Del键进入。具体操作可能因电脑品牌和型号而异。在BIOS设置中,需要找到“虚拟化支持”或“硬件虚拟化”选项,并将其设置为“开启”。有些电脑可能需要在“高级选项”中找到此选项。1、惠普BIOS中开......
  • cpu亲和性相关函数和宏 基础讲解[cpu_set_t]
    cpu亲和性相关函数和宏讲解:写在前面:我在查找关于linuxcpu宏函数没看到有对宏函数基础的、详细的讲解,笔者便通过官方文档入手,对次进行的翻译和理解希望能帮到对这方面宏有疑惑的读者explain:/elem/表示为elem变量,这样子便于区分P.S:#include<sched.h>动态范围cpu设置......
  • proxmox ve (一)开源虚拟化搭建
    ProxmoxVEVersion:7.2-XProxmoxVE基于DebianLinux构建。也就是说:ProxmoxVEISOfiles=完整的Debian系统+ProxmoxVE必要的软件包构成。基于此,安装ProxmoxVE有两种方式:直接通过官方提供的ProxmoxVEISO镜像安装(推荐)在已有的DebianLinux上安装额外的ProxmoxVE软件包(......
  • Openstack架构介绍
    一、Openstack介绍OpenStack是一系列开源工具(或开源项目)的组合,主要使用池化虚拟资源来构建和管理私有云及公共云。其中的六个项目主要负责处理核心云计算服务,包括计算、网络、存储、身份和镜像服务。还有另外十多个可选项目,用户可把它们捆绑打包,用来创建独特、可部署的云架构。二......
  • 在上一操作期间遇到问题: “Debug|AnyCPU”配置中 "TargetFrameworkMoniker" 和 "NuGe
    最近在学习avalonia的源代码,突然间visualstudio2022提示很多好多类似的红色错误在上部菜单下方xxx项目在上一操作期间遇到问题:“Debug|AnyCPU”配置中"TargetFrameworkMoniker"和"NuGetTargetMoniker"属性的值均为空。此配置将影响NuGet还原,这可能导致还原和生成错误......
  • 国标GB28181视频平台LiteCVR运行CPU占用与实际使用不符,如何排查?
    在高清化、智能化和网联化的需求下,5G、人工智能、云计算等信息技术快速发展带动用途单一的安防系统功能走向多元化,并开始与电信、交通、建筑、物业等多领域进行融合,进入泛安防时代。LiteCVR平台可支持多协议、多类型设备接入,平台可在复杂的网络环境中,将分散的各类视频资源进行统......
  • 热情贡献!!!史上最全openstack资料大全!!!你值得拥有!!!
    就问你怕不怕???大兄弟,稳住!!! 使用openstack,经常使用一些命令技术|10个重要的Linuxps命令实战ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。 搭建openstack参考:Openstack创建项目和虚拟机详细介绍一步一......