阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

KVM架构与原理详解

208次阅读
没有评论

共计 1557 个字符,预计需要花费 4 分钟才能阅读完成。

1. KVM 架构

kvm 基本结构有 2 个部分构成:

kvm 驱动,现在已经是 linux kernel 的一个模块了。其主要负责虚拟机的创建,虚拟内存的分配,VCPU 寄存器的读写以及 VCPU 的运行。

另个组成是 Qemu,用于模拟虚拟机的用户空间组件,提供 I / O 设备模型,访问外设的途径。

KVM 架构与原理详解

图 1 kvm 基本结构

kvm 基本结构如上图。kvm 已经是内核模块,被看作是一个标准的 linux 字符集设备(/dev/kvm)。Qemu 通过 libkvm 应用程序接口,用 fd 通过 ioctl 向设备驱动来发送创建,运行虚拟机命令。设备驱动 kvm 就会来解析命令(kvm_dev_ioctl 函数在 kvm_main.c 文件中), 如下图:

KVM 架构与原理详解

图 2 kvm_dev_ioctl 函数

kvm 模块让 Linux 主机成为一个虚拟机监视器(VMM),并且在原有的 Linux 两种执行模式基础上,新增加了客户模式,客户模式拥有自己的内核模式和用户模式。在虚拟机运行时,三种模式的工作各为:

客户模式:执行非 I / O 的客户代码,虚拟机运行在这个模式下。

用户模式:代表用户执行 I / O 指令,qemu 运行在这个模式下。

内核模式:实现客户模式的切换,处理因为 I / O 或者其他指令引起的从客户模式退出(VM_EXIT)。kvm 模块工作在这个模式下。

在 kvm 的模型中,每一个 Gust OS 都是作为一个标准的 linux 进程,都可以使用 linux 进程管理命令管理。

这里假如 qemu 通过 ioctl 发出 KVM_CREATE_VM 指令,创建了一个 VM 后,qemu 需要需要发送一些命令给 VM,如 KVM_CREATE_VCPU。这些命令当然也是通过 ioctl 发送的,用户程序中用 ioctl 发送 KVM_CREATE_VM 得到的返回值就是新创建的 VM 对应的 fd(kvm_vm),fd 是创建的指向特定虚拟机实例的文件描述符,之后利用这个 fd 发送命令给 VM 进行访问控制。kvm 解析这些命令的函数是 kvm_vm_ioctl。

2. KVM 工作原理

kvm 基本工作原理概述:

用户模式的 qemu 利用 libkvm 通过 ioctl 进入内核模式,kvm 模块未虚拟机创建虚拟内存,虚拟 CPU 后执行 VMLAUCH 指令进入客户模式。加载 Guest OS 并执行。如果 Guest OS 发生外部中断或者影子页表缺页之类的情况,会暂停 Guest OS 的执行,退出客户模式出行异常处理,之后重新进入客户模式,执行客户代码。如果发生 I / O 事件或者信号队列中有信号到达,就会进入用户模式处理。(如下图)

KVM 架构与原理详解

图 3 KVM 工作原理流程图

————————————– 分割线 ————————————–

RHEL6 KVM 虚拟化创建桥接网卡 - 网桥 http://www.linuxidc.com/Linux/2013-08/88517.htm

RedHat Linux KVM 虚拟机桥接 http://www.linuxidc.com/Linux/2013-02/79934.htm

CentOS 5.6 下 KVM 的安装 / 桥接设置 / 虚拟机创建及运行 http://www.linuxidc.com/Linux/2012-12/76883.htm

Ubuntu 下用 libvirt 安装 KVM 虚拟机时找不到 /bin/qemu-kvm 问题解决 http://www.linuxidc.com/Linux/2013-08/88985.htm

RedHat6.5 下安装配置 KVM 虚拟机 http://www.linuxidc.com/Linux/2014-10/107972.htm

————————————– 分割线 ————————————–

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1557字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中