当前位置: 首页 > news >正文

KVM嵌套虚拟化实现

KVM嵌套虚拟化实现

理论

Libvirt主要支持三种 CPU mode
host-passthrough: libvirt 令 KVM 把宿主机的 CPU 指令集全部透传给虚拟机。因此虚拟机能够最大限度的使用宿主机 CPU 指令集,故性能是最好的。但是在热迁移时,它要求目的节点的 CPU 和源节点的一致。
host-model: libvirt 根据当前宿主机 CPU 指令集从配置文件 /usr/share/libvirt/cpu_map.xml 选择一种最相配的 CPU 型号。在这种 mode 下,虚拟机的指令集往往比宿主机少,性能相对 host-passthrough 要差一点,但是热迁移时,它允许目的节点 CPU 和源节点的存在一定的差异。
custom: 这种模式下虚拟机 CPU 指令集数最少,故性能相对最差,但是它在热迁移时跨不同型号 CPU 的能力最强。此外,custom 模式下支持用户添加额外的指令集。
三种mode的性能排序是:host-passthrough > host-model > custom
三种mode的热迁移通用性是: custom > host-model > host-passthrough

1、查看操作系统是否支持嵌套虚拟化

cat /sys/module/kvm_intel/parameters/nested
Y  ##Y表示当前的操作系统已经支持了嵌套虚拟化
N  ##表示当前操作系统未配置嵌套虚拟化

结果为N的话,创建/etc/modprobe.d/kvm-nested.conf配置文件

[root@localhost qemu]# cat /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=1           #打开KVM内核模块的Nested特性
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1

配置好后保存退出,执行以下命令

modprobe -r kvm_intel   #先卸掉内核中的kvm_intel模块,注意要在所有虚拟机都关闭的情况下执行
modprobe -a kvm_intel   #重新加载该模块

2、修改虚拟机配置文件,将cpu模式改为host-passthrough

在这里插入图片描述

3、重新定义虚拟机

virsh define ovn-ubuntu.xml

虚拟机重启后,查看虚拟机CPU,发现直接使用的物理CPU

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              16
On-line CPU(s) list: 0-15
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           16
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               63
Model name:          Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
Stepping:            2
CPU MHz:             2394.454
BogoMIPS:            4788.90
Virtualization:      VT-x
Hypervisor vendor:   KVM
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            4096K
NUMA node0 CPU(s):   0-15
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt md_clear

然后就可以在虚拟机中继续创建kvm虚拟机了。

4、备注

host-model模式下配置文件,如果有热迁移需求选这个模式,Libvir 会根据物理cpu的型号,从规定的CPU中选择一种最接近的CPU型号

<cpu mode='host-model'> <model fallback='allow'/> <topology sockets='1' cores='1' threads='1'/> <feature policy='disable' name='spec-ctrl'/> 
</cpu>
http://www.lryc.cn/news/169281.html

相关文章:

  • 驱动开发,IO模型,信号驱动IO实现过程
  • 左神高级进阶班3(TreeMap顺序表记录线性数据的使用, 滑动窗口的使用,前缀和记录结构, 可能性的舍弃)
  • Linux线程
  • C++ 太卷,转 Java?
  • 《Java并发编程实战》第2章-线程安全性
  • 二蛋赠书三期:《C#入门经典(第9版)》
  • Augmented Large Language Models with Parametric Knowledge Guiding
  • Docker启动Mysql容器并进行目录挂载
  • 力扣刷题(简单篇):两数之和、两数相加、无重复字符的最长子串
  • Spark的基础
  • 如何在idea中新建第一个java小程序
  • AOP全局异常处理
  • 一阶低通滤波器滞后补偿算法
  • JS中Symbol的介绍
  • 封装统一响应结果类和消息枚举类
  • 应广单片机实现红蓝双色爆闪灯
  • 深入了解OSI模型:计算机网络的七大层次
  • games101 作业2
  • 二叉树链式存储结构
  • Claude 使用指南 | 可与GPT-4媲美的语言模型
  • 【汇编】微处理器
  • 按键点亮led灯
  • Java常见面试题
  • 笔记1.5:计算机网络体系结构
  • 【Python】Python 连接字符串应优先使用 join 而不是 +
  • uniapp 小程序 父组件调用子组件方法
  • Vue-01:MVVM数据双向绑定与Vue的生命周期
  • 数据通信网络之OSPFv3基础
  • FPGA-结合协议时序实现UART收发器(五):串口顶层模块UART_TOP、例化PLL、UART_FIFO、uart_drive
  • 我学编程全靠B站了,真香-国外篇(第三期)