2022-03-07KVM 虚拟化架构
KVM 是嵌入在 Linux 操作系统标准内核中的虚拟化模块。 Linux标准内核转换为VMM,嵌入KVM模块的Linux标准内核可以支持通过kvm工具加载。所以在这样的操作系统平台下,计算机的物理硬件层直接就是VMM虚拟化层,没有独立的操作系统层。在这样的环境中是一个 VMM。
每个由 KVM(或 VMM)创建的都是一个进程。上面在User-space中运行的可以理解为进程中的一个线程。
需要注意的是,KVM 只是虚拟化解决方案的一部分。要实现全虚拟化,还需要其他条件:
1.CPU处理器提供虚拟化支持(VT-x硬件辅助虚拟化,可以创建虚拟化处理器,本质上是寄存器的隔离模拟和指令集的划分)。
2.内存可以被kvm虚拟成一个单独的虚拟化地址(/dev/kvm)
3. I/O 虚拟化 (QEMU)
==> KVM 虚拟化 = KVM 内核模块 + /dev/kvm + QEMU
/dev/kvm
Linux 操作系统标准内核中的KVM 内核模块生成一个名为/dev/kvm 的设备。使用 /dev/kvm 设备,地址空间(内存地址、磁盘地址)可以独立于标准内核或任何其他地址空间。 Linux 操作系统目录结构中包含的 /dev 目录树下的设备对所有 User-space 进程或线程(无论是在 VMM 上还是在 VMM 上)都是通用的,但每个打开的 /dev/kvm 设备不同的进程或线程可以使用唯一的以及不同的地址映射(为了支持它们之间的隔离)。
KVM 内核模块通过 /dev/kvm 设备提供内存虚拟化,给它一个相对独立于内核或其他的地址空间。每个都有自己的地址空间,这些地址空间是在实例化时映射的。映射到的物理内存其实就是映射到VMM中对应进程的虚拟内存。
有两种方法支持Guest地址到Host(VMM)地址的转换:
所以一般来说,/dev/kvm设备的作用是:不同地址隔离之间的转换,或者(VMM)和(VMM)之间的地址隔离
QEMU
QEMU 是一种 I/O 虚拟化解决方案,能够处理完整的计算机物理层环境 (例如磁盘、图形适配器、网络设备)。
QEMU中产生的所有I/O请求都会被QEMU拦截,并重新发送到QEMU进程模拟的User Mode。
KVM和QEMU的关系
KVM用于模拟CPU的运行,但缺乏对I/O的支持。 QEMU-KVM 是一个完整的仿真器,它基于 KVM 并提供完整的 I/O 支持。其中,为了跨VM,不会直接控制QEMU-KVM,而是通过.的库间接控制QEMU-KVM。
KVM的虚拟化实现
KVM内核模块为Linux标准内核引入了除现有Mode和User Mode之外的新进程模式以外的新进程模式。这种新模式叫做Guest Mode,顾名思义,就是用来执行代码的。
Linux标准内核的执行模式可以针对不同的运行内容和目的进行定义。访客模式用于执行代码,但仅适用于非 I/O 代码。 I/O 代码也需要 QEMU 的支持。
可以在两种模式下运行:
同样是I/O操作只能在User Mode下进行,这个由QEMU-KVM单独管理。
分类:
技术要点:
相关文章:
暂无评论内容