ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

详解KVM虚拟化原理

2021-08-02 20:00:34  阅读:360  来源: 互联网

标签:虚拟化 ## 虚拟机 KVM 网卡 详解 磁盘 CPU


详解KVM虚拟化原理

KVM架构

KVM(Kernel-based Virtual Machine)包含一个为处理器提供底层虚拟化、可加载的核心 模块kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作为虚拟机上层 控制工具。KVM无需改变Linux或Windows系统就能运行。
KVM就是内核的一个模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就 是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理

qemu

QEMU本身并不是KVM的一部分,其本身是一个著名的开源虚拟机软件,与KVM不同, QEMU是一个纯软件的实现,所以性能低下。但是,其优点是可以模拟很多硬件。
以盖房子为例,KVM可以理解为开发商,房子盖的很好,但是不会装修;QEMU可以理解为 装修公司,房子盖的不好,但是装修做的很好;所以我们采用KVM盖房子(硬件虚拟化,实 现CPU和内存计算资源的模拟),使用QEMU装修(软件模拟,实现网卡、显卡、存储控制器 和硬盘等)。
KVM只是一个内核的模块,没有用户控件的管理工具,KVM虚拟机可以借助QEMU的管理工 具来管理,QEMU也可以借助KVM来加速,提升虚拟机的性能

Libvirt

Libvirt是一套开源的虚拟化的管理工具,Libvirt的设计目标是通过相同的方式管理不同的虚拟 化引擎,比如KVM、Xen、Hyper-V、VMware ESXi等。目前大多数场景使用Libvirt管理 KVM
Libvirt主要由3部分组成:
①一套API的lib库,支持主流的编程语言,包括C、Python等。
②Libvirtd服务。
③命令行工具virsh

虚拟机的概念

虚拟机是运行在物理服务器上的一个完整的系统,它包含 有自己的虚拟CPU、内存、磁盘和网卡等虚拟硬件资源。
虚拟硬件信息在虚拟机的配置文件中定义。
操作系统和应用程序在虚拟机中的运行方式与它们在普通 物理机上的运行方式没有任何区别。
虚拟机的xml描述文件存储在物理机**/etc/libvirt/qemu**中, xml文件描述了此虚拟机中的硬件配置信息。 MyVM.xm

虚拟CPU的实现原理

基于X86处理器的虚拟化

X86架构存在17条敏感的非特权指令,运行时不会产生异常,这些指令在客户操作系统上的执行 会破坏整个系统

在这里插入图片描述

基于VMX处理器的虚拟化

硬件辅助虚拟化解决敏感非特 权指令无法陷入问题的解决思 路:引入VMX模式(Virtual Machine eXtension)

在这里插入图片描述

基于VMCS处理器的虚拟化

客户机状态域:保存非根模式下VCPU运行状 态;
宿主机状态域:保存根操作模式下CPU的运行 状态;
VM执行控制域:控制VM-Exit操作发生时的行 为,比如某些敏感指令、异常和中断是否产生 VM-Exit操作;
VM-Entry控制域和VM-Exit控制域:对VM- Entry和VM-Exit操作的具体行为进行控制规定;
VM-Exit信息域:存放VM-Exit产生的原因

在这里插入图片描述

虚拟CPU

每个VM分配一个时间片,轮流执行,在虚拟化应用环境中,高效利用CPU资源
每个虚拟机(VM)都是虚拟机操作系统内核 的一个进程,每个进程被分配一个时间段(时 间片),即允许VM运行的时间
每个虚拟机(VM)都是虚拟机操作系统内核 的一个进程,每个进程被分配一个时间段(时 间片),即允许VM运行的时间
如果VM在时间片结束前阻塞或结束,CPU立 即切换,最大程度利用CPU资源
默认情况下,所有VM被视为同等重要,时间 片长度相同

CPU的工作模式

custom (推荐) :
QEMU模拟 的CPU,类型为qemu64兼容 性好,但不能为虚拟机提供最 优性能,如aes加密等
host-mode:
QEMU模拟的 与主机CPU接近的CPU ,性 能尽可能的与主机CPU接近, 但迁移兼容性较差。
host-passthrough:
透传主 机CPU型号和大部分功能给虚 拟机,性能最优,但迁移兼容 性很差,同一厂家的不同
代 CPU也有可能不能迁移。

虚拟内存的实现原理

内存虚拟化-虚拟机物理地址

在这里插入图片描述

内存虚拟化-EPT(Extend Page Table扩展页表)

在这里插入图片描述

虚拟硬盘的实现原理

虚拟机的磁盘类型

KVM使用的虚拟机磁盘主要有如下类型:
IDE硬盘
高速硬盘(Virtio硬盘,默认)

虚拟磁盘类型

虚拟机磁盘支持块设备和文件 两种类型。
对虚拟机磁盘有较高要求时可 以使用块设备,比如Oracle数 据库。
虚拟机磁盘选择文件类型时, 对应的存储卷格式支持智能 (QCOW2)和高速(RAW) 两种格
式,建议使用智能格式 (支持动态分配磁盘空间、快 照等优点)。

在这里插入图片描述

智能存储卷

虚拟机的虚拟磁盘使用智能格式时,需要 以文件的方式为虚拟机提供虚拟磁盘。
虚拟磁盘文件使用qcow2文件格式。
Qcow2文件的开始2M为qcow2文件头, 记录了文件大小、L1表实际地址和快照信 息等重要数据
L1表记录了L2表的实际地址信息
L1表记录了L2表的实际地址信息
数据块用于存放虚拟机的数据,默认大小 为2M

在这里插入图片描述

虚拟网卡

输入/输出设备的虚拟化

网卡虚拟化(SR-IOV,Single Root I/O Virtualization and Sharing)技术将一块物理网卡 可以虚拟出多个虚拟网卡;
VT-d(Intel® Virtualization Technology for Directed I/O) 技术将网卡分配给虚拟机。

虚拟网卡

KVM中虚拟机的网卡是通过QEMU模拟实 现的,包括了普通网卡、Intel E1000和 Virtio网卡
普通网卡:模拟了RealTek Link 8139百兆 网卡 l Intel e1000网卡:模拟了Intel 82540E千 兆网卡
Virtio网卡:虚拟化内核平台软件驱动的网 卡,速度最快、功能最全,推荐使用 (CSMP中部分虚拟机默认)

虚拟网卡IO处理

在这里插入图片描述

虚拟交换机

虚拟交换机是通过软件模拟的、 具有实体交换机系统功能的网 络平台。
为虚拟机、主机、外部网络提 供网络连接。
每个上行端口对应一个物理适 配器,多对上行端口和物理适 配器时可做聚合,达到链路冗 余。

KVM常用的命令

virsh相关

cat /proc/cpuinfo | grep -E ‘(vmx|svm)’ ##确认CPU是否支持虚拟化
[root@ostack1 home]# cat /proc/cpuinfo | grep -E '(vmx|svm)'
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu 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 3dnowprefetch epb tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt dtherm ida arat pln pts
virsh list ##查看正在运行的虚拟机
[root@ostack1 home]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     csmpha-master                  running
 52    instance-00000037              running
 53    instance-00000038              running
 54    instance-00000039              running
 59    instance-0000003b              running
 60    instance-0000003c              running
 63    instance-0000003f              running
 64    instance-0000003e              running
virsh list --all ##查看所有的虚拟机
[root@ostack1 home]# virsh list --all 
 Id    Name                           State
----------------------------------------------------
 2     csmpha-master                  running
 52    instance-00000037              running
 53    instance-00000038              running
 54    instance-00000039              running
virsh start/shutdown windows ##开启关闭windows的主机
virsh destroy win7 ##关闭名字为win7的虚拟机,类似直接给虚拟机关闭电源
virsh reboot win7 ##重起虚拟机
virsh suspend win7 ##暂停虚拟机
virsh resume win7 ##暂停之后恢复虚拟机
virsh define /etc/libvirt/qemu/win7.xml ##根据文件定义生成一个虚拟机
virsh undefine win7 ##取消定义,即删除win7虚拟机
virsh edit win7 ##编辑虚拟机
systemctl restart libvirtd ##重启libvirt-bin

磁盘相关的命令

df –Th 查看分区以及空间使用情况
qemu-img info win7.qcow2 ##查看名字为win7.qcow2的虚拟机磁盘文件物理信息
qemu-img info win7.qcow2 ##查看名字为win7.qcow2的虚拟机磁盘文件物理信息
qemu-img create win7-2.qcow2 -f qcow2 5G ##创建一个磁盘文件,格式为qcow2,5G大小
qemu-img convert -f raw -O qcow2 123.raw 123.qcow2 ##将raw格式的磁盘修改为qcow2
qemu-img snapshot -c test2 /vms/2T/ucen ##给虚拟机磁盘文件创建快照
qemu-img snapshot –l /vms/2T/ucen ##查看虚拟机磁盘文件的快照信息
qemu-img snapshot -a test2 /vms/2T/ucen ##使用磁盘文件的快照恢复
qemu-img resize win7.qcow2 +1G ##给磁盘文件增加1GB空间(只能增加,不能减小)
qemu-img rebase -u -b /vms/test/VSR_base_1 VSR ## 设置磁盘的base文件,用于三级镜像 文件切换路径,修改base文件等

网络相关的命令

ovs-vsctl list-br ##列出所有网桥信息
ovs-vsctl list-br ##列出所有网桥信息
ovs-vsctl add-port vswitch1 eth1 ##将eth1挂接到vswitch1上
ovs-vsctl list-ports vswitch0 ##列出挂接到vswitch0上的接口
ovs-vsctl port-to-br eht0 ##列出已挂接eth
ovs-vsctl show ##查看网桥信息
ovs-vsctl del-port vswitch1 eth1 ##删除网桥vswitch1上挂接的eth1接口
ovs-vsctl del-br vswitch1 ##删除名为vswitch1的网桥
ifconfig vswitch1 up/down ##将网桥vswitch1 开启、
ovs-ofctl dump-flows br-int ##查看流表信息

r eht0 ##列出已挂接eth

ovs-vsctl show ##查看网桥信息
ovs-vsctl del-port vswitch1 eth1 ##删除网桥vswitch1上挂接的eth1接口
ovs-vsctl del-br vswitch1 ##删除名为vswitch1的网桥
ifconfig vswitch1 up/down ##将网桥vswitch1 开启、
ovs-ofctl dump-flows br-int ##查看流表信息
service openvswitch-switch status/restart/start/stop #查看、重启、启动、关闭虚拟交换机 服

标签:虚拟化,##,虚拟机,KVM,网卡,详解,磁盘,CPU
来源: https://blog.csdn.net/weixin_51134188/article/details/119332593

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有