首页 > 其他分享 >KVM 概念,以及跟QEMU的关系

KVM 概念,以及跟QEMU的关系

时间:2024-06-17 22:33:38浏览次数:29  
标签:虚拟化 虚拟主机 KVM 硬件 概念 QEMU 模拟

参考链接:
https://developer.aliyun.com/article/724394

传统软件运行在单个机器设备上的交付形式已经不能满足当下现代应用的交付的需求。现代应用轻量、动态、密集,为了更充分的利用单个机器上的计算、存储和网络,虚拟化技术应运而生。

在虚拟化技术的加持下,平台资源被当成一种服务能力动态的按需分配。这种服务能力根据交付形态不同,被分为

  • IaaS
  • PaaS
  • SaaS

虚拟化的分类

关于VMM

全虚拟化 vs. 半虚拟化 全虚拟化中,不需要对虚拟主机做任何改动。在半虚拟化中需要对虚拟主机做少许调整(比如安装virtio驱动) 半虚拟化:Xen ; 全虚拟化:KVM
硬件虚拟化技术 vs. 软件模拟 采用硬件技术实现虚拟化 硬件虚拟化技术:KVM; 软件模拟:QEMU
Type1型虚拟化 vs. Type2型虚拟化 是否基于操作系统实现虚拟化,type2 是基于OS Type1: Xen ESXi;Type2: KVM QEMU VMWare Station

KVM的基础

Intel VT-x AMD-V 硬件虚拟化技术 + linux内核虚拟化模块(内存管理和CPU资源隔离) + QEMU虚拟化环境

2006年10月,Qumranet对外宣布。
同月被纳入Linux Kernel,以Xen为代表的Type1型虚拟化技术是半虚拟化策略,Linux社区急需一种Type2型的全虚拟化技术。

KVM需要硬件虚拟化技术支持(VT-x / AMD-V)

KVM运行机制

CPU

KVM客户机对应一个Linux进程,每个vCPU是进程中的线程,IO处理由单独一个线程处理。
这样宿主机对虚拟主机的调度就可以按照进程的方式实现调度。

早期在没有硬件虚拟化技术之前,是通过指令的二进制翻译的方式在物理CPU上执行虚拟机的CPU指令。
Intel在处理器级别提供了对虚拟化技术的支持,VMX,个人理解,这里的硬件虚拟化技术是CPU指令层面的丰富,添加了VMEntry和VMExit 及 VMLAUNCH VMRESUME等等相关指令。这里边还需要更多的研究。

关于QEMU

QEMU用来软件模拟KVM虚拟化中的需要的外设。模拟BIOS、PCI/PCIE总线、磁盘、网卡、显卡、声卡、键盘、鼠标等.
QEMU本来和KVM是没有关系的,QEMU是采用传软件的方式模拟虚拟主机的所有行为,通过截获虚拟主机中的调用,然后用软件方式模拟。 在OpenStack实验环境中我们经常用QEMU作为虚拟化后端。
客户机所看到的硬件设备是QEMU模拟出来的,当客户机对模拟设备进行操作时,由QEMU截获并转换为对实际的物理设备(可能设置都不实际物理地存在)的驱动操作来完成。

但这里在KVM实现的虚拟化环境中,我们用QEMU来模拟部分外设,实现了KVM和QEMU的集成。

内存管理

KVM虚拟主机就是linux的进程,所以,虚拟主机的内存空间,就是Linux进程的虚拟地址空间。Linux内存管理的分页 mmap NUMA 都可以使用到客户端内存管理上。
只是在页面映射的时候,从虚机内到最终物理内存的页面映射很负责,中间出现了多次映射,效率可能会比较低。后来通过硬件EPT的方式替换。

存储

KVM是Linux内核的一部分,能够使用Linux支持的任何存储基础架构。
KVM支持的原生磁盘格式为QCOW2

设备驱动程序

KVM支持4种方式的外设虚拟化:

设备模拟 QEMU 纯软件模拟
前后端接口标准 Virtio 在虚拟主机中安装virtio半虚拟化驱动
设备直接分配 VT-d 硬件设备直通
设备共享分配 SR-IOV 硬件设备复用 VMDc

硬件虚拟化技术的发展路径

  • VT-x
  • VT-d
  • VT-c
    • VMDq
    • VMDc

KVM 内核模块

kvm内核模块分两部分

  • 跟处理器无关的部分kvm.ko
  • 分处理器有关的部分kvm_intel.ko

/dev/kvm

虚拟机的创建和运行将是一个用户空间的应用程序(QEMU)和KVM模块相互配合的过程。

/dev/kvm 这个设备可以被当作一个标准的字符设备,KVM模块与用户空间QEMU的通信接口主要是一系列针对这个特殊设备文件的loctl调用。

与EUMU/KVM结合的软件

1. Vhost-net
2. Open-vSwitch
3. DPDK
4. SPDK
5. Ceph
6. libguestfs

前三个是对网络,后三个是对存储

KVM管理端

1. Libvirt
2. Virsh
3. Virt-manager
4. openStack

KVM的展望4个方面:

稳定性
实时性
安全性
性能

标签:虚拟化,虚拟主机,KVM,硬件,概念,QEMU,模拟
From: https://www.cnblogs.com/zongzw/p/18253367

相关文章

  • KVM虚拟化
    KVM虚拟化=============================================================0.环境介绍宿主机:内存4G+纯净的系统CentOS-71:什么是虚拟化?虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。2:为什么要用虚拟化?2.1:虚拟化的软件阿里云k......
  • 浅拷贝、深拷贝与序列化【初级Java必需理解的概念】
    浅拷贝首先创建两个类,方便理解浅拷贝@DataclassStudentimplementsCloneable{//年龄和名字是基本属性privateintage;privateStringname;//书包是引用属性privateBagbag;publicStudent(intage,Stringname,Bagbag){this.......
  • Trusty qemu + android环境搭建详细步骤
    下载源码mkdirtrustycdtrustyrepoinit-uhttps://android.googlesource.com/trusty/manifest-bmasterreposync-j32编译./trusty/vendor/google/aosp/scripts/build.pygeneric-arm64查看编译结果lsbuild-root/build-generic-arm64/lk.bin安装运行依赖sud......
  • SEU操作系统概念题
    二二年考题辨析SharedMemory与MessagePassing(各自优缺点)SharedMemory(共享内存)优点:速度快:共享内存允许进程直接访问同一块物理内存,因此数据传输速度快。低开销:一次性设置共享内存后,多次通信无需再次设置,减少了系统调用开销。灵活性高:可以通过共享内存实现复杂的数据......
  • C++前期概念(重)
    目录命名空间命名空间定义1.正常的命名空间定义2.命名空间可以嵌套 3.头文件中的合并 命名空间使用命名空间的使用有三种方式:1:加命名空间名称及作用域限定符(::)2:用using将命名空间中某个成员引入3:使用usingnamespace命名空间名称引入C++输入&输出说明:std......
  • 【Git入门和实战】第2课:git中的专有名词和概念解释:仓库、工作目录、暂存区、远程仓库
    本文是git入门到实战系列文章的第2课,主要讲解git中的专有名词和概念,主要有仓库(repository)、工作目录(WorkingDirectory)、暂存区(Stage/Index)、远程仓库(remote)、、提交(commit)、HEAD指针、文件状态、分支(branch)、合并(merge)、标签(tag)、引用(ref)。(文末附练习题,......
  • 编译安装qemu-devel @FreeBSD
    缘起使用cbsd创建riscvjail的时候提示:youhavenoqemu-user,pleaseinstallqemu-devlewithBSD_USERandSTATICops(emulators/qemu-devel)使用pkg安装之后,创建的riscvjail启动报错:Startingjail:fbriscv,paralleltimeout=5chroot:/bin/sh:Execformaterr......
  • 射频设计基本概念
    单位:dB(分贝)&dBm(毫瓦分贝)功率增益Ap=10lg(Pout/Pin),电压增益Av=20lg(Vout/Vin),他们的单位都是分贝(dB)当放大器的输入输出电阻相同时,以上两个量相等,即:Ap=10lg[(Vout^2/R0)/(Vin^2/R0)]=20lg(Vout/Vin)=Av其中的Vout、Vin为均方根值(交流电中与有效值相等)对于绝对信号电......
  • C++内联函数、内联函数的概念、内联函数的特性、auto关键字、类型名字的问题、auto使
    文章目录前言一、内联函数1.内联函数概念2.内联函数特性二、auto关键字(C++11)1.类型名字的问题2.auto简介3.auto的使用细则1.auto与指针和引用结合起来用2.auto在同一行定义多个变量4.auto不能推导的场景1.auto不能作为函数的参数2.auto不能直接用来声明数组3......
  • 大话考研数据结构:第3篇 数据结构的基本概念(下)
    1数据结构        数据结构(datastructure)是指相互之间存在一种或多种特定关系的数据元素的集合。现实世界中,任何的数据元素并非孤立存在的,它们之间存在千丝万缕的某种关系,它们的这种称之为“结构”。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的......