硬件虚拟化技术浅析
硬件虚拟化技术调研报告

硬件虚拟化技术调研报告硬件虚拟化技术调研报告一、引言在当今科技发展的快速推动下,计算机硬件虚拟化技术逐渐成为大数据、云计算等领域中的热门话题。
本调研报告旨在对硬件虚拟化技术进行详细的调研和分析,展示其优势和应用场景。
二、概述硬件虚拟化技术是一种将物理硬件资源分割为多个虚拟环境的技术,使得单台物理主机可以运行多个虚拟机,从而提高资源利用率和系统灵活性。
硬件虚拟化技术使得不同操作系统和应用程序能够在同一台服务器上同时运行,真正实现了多系统共存的目标。
三、核心技术硬件虚拟化技术的核心技术主要包括以下两个方面:1.虚拟机监控程序(hypervisor):虚拟机监控程序是硬件虚拟化的核心组件,也称为VMM(Virtual Machine Monitor)。
它负责管理和控制虚拟机的运行,实现虚拟机与物理硬件之间的隔离和资源管理。
2.硬件辅助虚拟化技术:硬件辅助虚拟化技术是一种在处理器和系统层面提供硬件支持的技术,可以加速虚拟机的运行,并提高整体性能。
常见的硬件辅助虚拟化技术包括Intel的VT-x和AMD的AMD-V。
四、优势与应用场景硬件虚拟化技术具有以下几个优势:1.资源利用率高:硬件虚拟化技术可以将一台物理主机分割为多个虚拟环境,使得不同虚拟机共享物理资源,提高资源利用率。
2.灵活性高:硬件虚拟化技术可以在同一台服务器上运行不同操作系统和应用程序,提供更灵活的系统架构。
3.容错性强:硬件虚拟化技术可以实现虚拟机的冷迁移和热迁移,从而提供高可用性和容错性。
4.易于管理:硬件虚拟化技术可以通过虚拟机管理器来管理虚拟机的运行状态和资源分配,实现对虚拟机的集中管理。
硬件虚拟化技术在以下几个应用场景中具有广泛的应用:1.云计算:云计算平台需要大规模的硬件资源,通过硬件虚拟化技术可以将多个虚拟机运行在同一台服务器上,提高资源利用率和系统灵活性。
2.测试环境:在开发和测试过程中,通过硬件虚拟化技术可以快速搭建测试环境,提高测试效率。
硬件资源虚拟化浅谈

服 务 ,成 为 亟 待 解 决 的 基 础 问题 。
l 操作系统
硬件层
传 统 架 构
虚拟 层 软件 硬 件 层
虚拟化 架构
2 硬 件 资 源 虚 拟 化 分 析
虚拟化 技术最早 出现在 2 0世 纪 6 0年 代 的 I BM 大 型 机 系 统 , 在 7 O年 代 的 S y s t e m3 7 0系
1 引 言
当前 系 统 建 设 中 , 南于 硬 件 资 源 基 础 架 构 日趋 庞 大 , 存 在 大 量 异 构 的硬 件 资 源 , 多 种 各
异 的 资源 管 理 系 统 并 存 ,使 得 管 理 非 常 复 杂 , 资源利用 率低下 。 另外 , 应用 的需求不 断改变 , 经 常 出现 不 可 预 测 的 在 线 服 务 请 求 , 这 种 动 态 的 环 境 要 求 系 统 的 运 控 中 心 能 够 对 各 类 资 源 进 行 灵 活 、 快 速 、动 态 地 按 需 调 度 。 因 此 ,如 何 搭 建 合 理 的 资 源 管 理 基 础 架 构 , 以及 怎 样 管 理 复 杂 的 资 源 系 统 使 得 资源 能 被 有 效 管 理 和 按 需
境 上 运 行 自己 的系 统 和 软 件 。而 这 些 系 统 和 软 件 在 运 行 时 ,也 跟 后 台 的 硬 件 平 台无 关 。传 统 的架 构 与 虚 拟 化 后 的 架 构 对 比如 图 l 所示 。
应 用程序 应 用 程序 应 j = } j 程序
应用程 序
操作系统 f 操作系统 操作系统
・5 3・
电信 技 术 研 究
第3 7 7期 R E S E A RC H ON T E L E CO MMU N I C AT I ON T E CHN OL OGY 2 0 1 3年 第 l 期
计算机技术中的虚拟化技术解析

计算机技术中的虚拟化技术解析虚拟化技术是一种将计算机资源进行抽象和隔离的技术,它可以将物理资源划分为多个虚拟部分,并在每个虚拟部分上运行不同的操作系统和应用程序。
虚拟化技术在计算机技术领域中发挥着重要的作用,它提供了更高的资源利用率、更好的灵活性和可扩展性,同时也简化了管理和维护工作。
本文将对计算机技术中的虚拟化技术进行深入解析。
首先,虚拟化技术的基本原理是将物理资源进行抽象,使其能够被多个虚拟化实例所共享。
这种抽象可以应用于计算、存储和网络等不同的计算机资源。
在计算资源虚拟化中,虚拟机监控器(VMM)或称为hypervisor是一种软件层,它可以在物理主机上创建和管理多个虚拟机实例,并向它们提供虚拟化运行环境。
虚拟机实例是一种虚拟计算机,它具有自己的操作系统、应用程序和资源分配。
其次,虚拟化技术的应用非常广泛。
在服务器领域,虚拟化技术可以将一台物理服务器划分为多个虚拟服务器,每个虚拟服务器可以运行不同的操作系统和应用程序,从而提高服务器资源的利用率和灵活性。
此外,虚拟化技术还可以提供快速的服务部署和迁移能力,使得服务器的管理和维护更加简单和高效。
在存储领域,虚拟化技术可以将多个物理存储设备抽象为一个逻辑存储池,用户可以根据需要动态分配存储空间。
这种存储虚拟化技术可以提高存储设备的利用率和可扩展性,同时也使存储管理更加灵活和方便。
虚拟化技术在网络领域也有重要的应用。
通过网络虚拟化技术,可以将物理网络设备抽象为多个逻辑网络,每个逻辑网络可以有不同的拓扑结构和策略配置。
这种网络虚拟化技术可以提供更好的网络性能和安全性,并简化网络管理和配置。
虚拟化技术的优势在于提高计算机资源的利用率和灵活性。
通过虚拟化技术,可以将多个虚拟机实例运行在一台物理主机上,从而提高硬件资源的利用率。
此外,虚拟化技术还可以实现快速的虚拟机迁移和动态资源调度,使得系统更加灵活和可扩展。
然而,虚拟化技术也面临一些挑战和问题。
首先,虚拟化技术会引入一定的性能开销,因为需要在虚拟机监控器和虚拟机之间进行资源的隔离和调度。
什么是计算机虚拟化的关键技术

什么是计算机虚拟化的关键技术计算机虚拟化是现代计算机技术中的一个重要概念,它通过利用虚拟化软件和硬件技术,将一台物理计算机分割成多个虚拟机,从而可以在同一台物理机上同时运行多个操作系统和应用程序。
虚拟化技术在数据中心、云计算、服务器管理等领域有着广泛的应用。
那么,什么是计算机虚拟化的关键技术呢?下面将为您详细介绍。
一、硬件虚拟化技术硬件虚拟化技术是计算机虚拟化的核心技术之一。
它通过将物理计算机的硬件资源(如CPU、内存、硬盘、网络等)进行虚拟化,从而可以在同一台物理机上运行多个虚拟机。
常见的硬件虚拟化技术有以下几种:1. CPU虚拟化技术CPU虚拟化技术是实现虚拟化的关键技术之一。
它使得虚拟机可以独立地运行在物理机上,而不受物理机CPU的限制。
常见的CPU虚拟化技术有全虚拟化和半虚拟化两种。
全虚拟化是指在虚拟机内部需要模拟出一个与物理计算机完全相同的硬件环境,使得虚拟机在运行时不需要对操作系统进行任何修改。
而半虚拟化则是在虚拟机内部需要对操作系统进行一定的修改,以便与虚拟化软件进行通信。
2. 内存虚拟化技术内存虚拟化技术是指将物理计算机的内存划分成多个虚拟机,使得每个虚拟机都可以独立地使用一部分内存资源。
这样可以提高内存的利用率,并且在不同虚拟机之间进行内存资源的隔离,提高系统的安全性。
3. 硬盘虚拟化技术硬盘虚拟化技术是指将物理计算机的硬盘分割成多个虚拟磁盘,使得每个虚拟机都可以独立地使用一部分硬盘资源。
这样可以提高硬盘的利用率,并且在不同虚拟机之间进行硬盘资源的隔离,保障每个虚拟机的数据安全。
4. 网络虚拟化技术网络虚拟化技术是指将物理计算机的网络资源进行虚拟化,使得多个虚拟机可以共享物理网络资源。
这样可以提高网络的利用率,并且在不同虚拟机之间进行网络资源的隔离,保证虚拟机之间的数据传输安全。
二、虚拟化软件技术虚拟化软件技术是计算机虚拟化的另一个关键技术。
它通过在物理计算机上安装虚拟化软件,实现对硬件资源的虚拟化。
简述虚拟化技术的分类

简述虚拟化技术的分类虚拟化技术是一种将物理资源转化为虚拟资源的技术,它可以将一台物理服务器分割成多个虚拟机,每个虚拟机都可以独立运行不同的操作系统和应用程序。
虚拟化技术已经成为当今云计算和大数据时代的重要基础技术,广泛应用于数据中心、云计算、网络安全、测试开发等领域。
本文将简述虚拟化技术的分类。
一、硬件虚拟化技术硬件虚拟化技术是一种基于硬件的虚拟化技术,它通过在物理主机上安装虚拟化软件,在虚拟化层和物理层之间创建一个虚拟化层,将物理资源转化为虚拟资源,从而实现多个虚拟机之间的隔离和共享。
硬件虚拟化技术通常包括以下几种类型:1.全虚拟化技术全虚拟化技术是一种将整个物理机器虚拟化的技术,它可以让多个虚拟机独立运行不同的操作系统和应用程序。
全虚拟化技术通常需要虚拟化软件来模拟硬件设备,使虚拟机可以访问物理设备,从而实现虚拟机和物理机之间的通信和数据传输。
全虚拟化技术的代表产品包括VMware、Hyper-V、KVM等。
2.半虚拟化技术半虚拟化技术是一种通过修改操作系统内核来实现虚拟化的技术,它可以让多个虚拟机共享物理资源,提高资源利用率。
半虚拟化技术通常需要修改操作系统内核,使虚拟机可以直接访问物理设备,从而避免了虚拟化软件的性能开销。
半虚拟化技术的代表产品包括Xen、OpenVZ等。
二、软件虚拟化技术软件虚拟化技术是一种基于软件的虚拟化技术,它可以在应用程序层面上实现虚拟化,将应用程序和操作系统分离,从而实现多个应用程序之间的隔离和共享。
软件虚拟化技术通常包括以下几种类型: 1.容器化技术容器化技术是一种将应用程序和其依赖的库文件打包成一个独立的容器,实现应用程序的隔离和共享。
容器化技术通常采用轻量级的虚拟化技术,不需要虚拟化软件,从而避免了虚拟化软件的性能开销。
容器化技术的代表产品包括Docker、LXC等。
2.应用虚拟化技术应用虚拟化技术是一种将应用程序打包成一个独立的虚拟环境,实现应用程序的隔离和共享。
什么是计算机网络虚拟化请介绍几种常见的虚拟化技术

什么是计算机网络虚拟化请介绍几种常见的虚拟化技术计算机网络虚拟化是一种将计算机网络资源进行抽象和分离,以提供更高效、灵活和可管理的网络服务的技术。
通过虚拟化技术,可以将物理网络资源划分成多个虚拟实例,使这些虚拟实例能够独立运行,相互隔离,同时共享底层物理资源。
在这篇文章中,我们将介绍几种常见的计算机网络虚拟化技术。
一、硬件虚拟化技术硬件虚拟化技术是一种将物理服务器划分为多个虚拟机的技术,每个虚拟机可以运行自己的操作系统和应用程序,并与其他虚拟机相互隔离。
常见的硬件虚拟化技术有两种主要类型:全虚拟化和半虚拟化。
1. 全虚拟化全虚拟化技术是一种在物理服务器上运行虚拟机的技术,每个虚拟机都可以运行自己的完整操作系统,如Windows、Linux等。
全虚拟化技术通过虚拟机监视器(Hypervisor)来模拟硬件资源,使虚拟机能够访问物理服务器的CPU、内存和硬盘等资源。
2. 半虚拟化半虚拟化技术是一种在物理服务器上运行经过修改的操作系统,这些操作系统可以与其他虚拟机共享物理服务器的硬件资源。
与全虚拟化技术相比,半虚拟化技术的性能更高,但需要对应用程序进行修改以实现虚拟化。
二、网络虚拟化技术网络虚拟化技术是一种将物理网络资源进行划分和隔离,以创建多个逻辑网络的技术。
通过网络虚拟化技术,可以将某个物理网络划分为多个虚拟网络,每个虚拟网络可以拥有独立的网络拓扑、IP地址和网络策略等。
1. 逻辑隔离逻辑隔离是一种通过虚拟局域网(VLAN)技术来将物理网络划分为多个虚拟网络的方法。
每个虚拟网络都有自己的VLAN标识,使其能够独立访问物理网络资源,同时与其他虚拟网络相互隔离。
2. 虚拟交换机虚拟交换机是一种在虚拟网络中模拟物理交换机的技术。
虚拟交换机可以创建多个虚拟端口,每个虚拟端口都有自己的MAC地址,并可以与其他虚拟端口进行通信。
通过虚拟交换机,可以在虚拟网络中实现二层网络的功能。
3. 虚拟路由器虚拟路由器是一种在虚拟网络中模拟物理路由器的技术。
电脑虚拟化技术解析更高效利用硬件资源

电脑虚拟化技术解析更高效利用硬件资源电脑虚拟化技术解析:更高效利用硬件资源在当今信息技术飞速发展的时代,电脑虚拟化技术成为了企业和个人日常工作中不可或缺的一项技术。
通过将一台物理机分割为多台虚拟机,电脑虚拟化技术不仅大幅提高了硬件资源的利用率,还带来了更高的灵活性、安全性和可扩展性。
本文将解析电脑虚拟化技术的原理和应用,并探讨其如何更高效地利用硬件资源。
一、电脑虚拟化技术的基本原理电脑虚拟化技术通过使用虚拟化软件(例如VMware、VirtualBox 等)在一台物理机上创建多个虚拟机,每个虚拟机都具有独立的操作系统和应用程序。
这种虚拟化技术的基本原理是在物理层和逻辑层之间引入一个虚拟层,将物理资源抽象成虚拟资源,使得不同的虚拟机可以共享同一台物理机的硬件资源。
具体而言,电脑虚拟化技术通过三个关键的虚拟化组件实现:虚拟机监视器(VMM)、宿主机和客户机。
虚拟机监视器是虚拟化软件的核心组件,负责管理和分配宿主机的硬件资源。
宿主机是指运行虚拟化软件的物理机,它提供了计算、存储和网络等基本资源。
而客户机则是在虚拟机监视器的管理下运行的虚拟机,每个客户机可以独立运行操作系统和应用程序。
二、电脑虚拟化技术的应用领域1. 服务器虚拟化服务器虚拟化是电脑虚拟化技术最常见的应用之一。
通过在一台物理服务器上创建多个虚拟机,企业可以充分利用硬件资源,提高服务器的利用率。
同时,服务器虚拟化还具有实时备份、快速恢复和资源动态调整等功能,为企业提供了高可用性和灵活性。
2. 桌面虚拟化桌面虚拟化是将用户的桌面操作系统和应用程序提供为一种服务的技术。
通过在服务器上创建多个虚拟桌面,用户可以随时随地通过终端设备访问自己的桌面环境。
桌面虚拟化不仅提高了管理效率和安全性,还支持跨平台和移动办公,提升了员工的工作效率和灵活性。
3. 存储虚拟化存储虚拟化是通过将多个物理存储设备抽象成一个统一的虚拟存储池,实现数据的集中管理和优化。
通过存储虚拟化技术,用户可以更加高效地利用存储资源,提升数据的可用性和可靠性。
硬件测试中的仿真与虚拟化测试技术

硬件测试中的仿真与虚拟化测试技术在硬件测试领域中,仿真和虚拟化测试技术被广泛应用。
这些技术能够帮助测试人员提高测试效率、降低测试成本,并确保硬件产品的质量。
本文将介绍硬件测试中的仿真与虚拟化测试技术,探讨它们的优势和局限性。
一、仿真测试技术1. 概述仿真测试技术是通过构建仿真环境,模拟实际硬件运行条件来进行测试。
在仿真环境中,可以对硬件进行各种场景的测试,如性能测试、压力测试、异常处理等。
通过仿真测试,测试人员可以及早发现问题并进行修复,从而提高硬件产品的可靠性。
2. 仿真环境搭建搭建仿真环境是进行仿真测试的第一步。
测试人员可以使用开源仿真平台或自主开发仿真软件,根据硬件产品的特性和测试需求,构建一个与实际硬件完全相同或相似的仿真环境。
在环境搭建过程中,需要考虑到硬件的各种参数和配置,以确保测试结果的准确性。
3. 仿真测试方法在进行仿真测试时,测试人员可以使用不同的方法来验证硬件的功能和性能。
例如,可以编写仿真脚本,模拟各种场景来测试硬件的响应能力;还可以利用仿真平台提供的工具,进行性能测试和负载测试。
通过这些方法,测试人员可以全面评估硬件的表现,并找出潜在的问题。
二、虚拟化测试技术1. 概述虚拟化测试技术是指通过虚拟化软件创建虚拟计算资源,来模拟实际硬件环境进行测试。
虚拟化技术可以将一个物理服务器划分为多个虚拟机,每个虚拟机都可以独立运行操作系统和应用程序。
通过虚拟化测试,测试人员可以在同一硬件上同时进行多项测试,提高测试效率。
2. 虚拟化平台在进行虚拟化测试时,需要选择合适的虚拟化平台。
市面上有多种虚拟化软件可供选择,如VMware、VirtualBox等。
这些平台都提供了丰富的功能和工具,能够满足不同测试需求。
测试人员可以根据实际情况选择最适合的虚拟化平台。
3. 虚拟化测试场景虚拟化测试可以涵盖多个场景,如性能测试、可靠性测试、安全性测试等。
通过虚拟化平台提供的工具和接口,测试人员可以模拟各种操作系统和网络环境,对硬件进行全方位的测试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硬件虚拟化技术浅析====================================目录1 硬件虚拟化技术背景2 KVM的内部实现概述2.1 KVM的抽象对象2.2 KVM的vcpu2.3 KVM的IO虚拟化2.3.1 IO的虚拟化2.3.2 VirtIO3 KVM-IO可能优化地方3.1 Virt-IO的硬盘优化3.2 普通设备的直接分配(Direct Assign)3.3 普通设备的复用===================================1 硬件虚拟化技术背景硬件虚拟化技术通过虚拟化指令集、MMU(Memory Map Unit)以及IO来运行不加修改的操作系统。
传统的处理器通过选择不同的运行(Ring 特权)模式,来选择指令集的范围,内存的寻址方式,中断发生方式等操作。
在原有的Ring特权等级的基础上,处理器的硬件虚拟化技术带来了一个新的运行模式:Guest模式[1],来实现指令集的虚拟化。
当切换到Guest模式时,处理器提供了先前完整的特权等级,让Guest 操作系统可以不加修改的运行在物理的处理器上。
Guest与Host模式的处理器上下文完全由硬件进行保存与切换。
此时,虚拟机监视器(Virtual Machine Monitor)通过一个位于内存的数据结构(Intel称为VMCS, AMD称为VMCB)来控制Guest系统同Host系统的交互,以完成整个平台的虚拟化。
传统的操作系统通过硬件MMU完成虚拟地址到物理地址的映射。
在虚拟化环境中,Guest的虚拟地址需要更多一层的转换,才能放到地址总线上:Guest虚拟地址 -> Guest物理地址 -> Host物理地址^ ^| |MMU1 MMU2其中MMU1可以由软件模拟(Shadow paging中的vTLB)或者硬件实现(Intel EPT、AMD NPT)。
MMU2由硬件提供。
系统的IO虚拟化技术,通常是VMM捕捉Guest的IO请求,通过软件模拟的传统设备将其请求传递给物理设备。
一些新的支持虚拟化技术的设备,通过硬件技术(如Intel VT-d),可以将其直接分配给Guest操作系统,避免软件开销。
[1]X86处理器的生产厂商有自己的称谓,比如英特尔将Guest模式称为non-root operation,与之相对的是root operation,本文称为host模式。
2 KVM的内部实现概述KVM是Linux内核的一个模块,基于硬件虚拟化技术实现VMM的功能。
该模块的工作主要是通过操作与处理器共享的数据结构来实现指令集以及MMU的虚拟化,捕捉Guest的IO指令(包括Port IO和mmap IO)以及实现中断虚拟化。
至于IO 设备的软件模拟,是通过用户程序QEMU来实现的。
QEMU负责解释IO指令流,并将其请求换成系统调用或者库函数传给Host操作系统,让Host上的驱动去完成真正的IO操作。
她们之间的关系如下图所示:+--------------+ +--------+| Qemu | | || | | || +---+ +----+| | Guest || |vHD| |vNIC||<-----+ | || +---+ +----+| | | |+--------------+ | +--------+^ | ^| syscall |IO stream || via FDs | |+----|----------------|------------|--------+| | | v || v | +----------+ || +--------+ +------>| | || |drivers |<--+ | kvm.ko | || +--------+ | +----------+ || ^ | Host kernel |+----|----------|---------------------------+v v+--------+ +---+| HDD | |NIC|+--------+ +---+图 1从Host操作系统的角度来看,KVM Guest操作系统相当于一个进程运行在系统上,普通的命令如kill、top、taskset等可以作用于该Guest。
该进程的用户虚拟空间就是Guest的物理空间,该进程的线程对应着Guest的处理器。
从Qemu的角度来看,KVM模块抽象出了三个对象,她们分别代表KVM自己,Guest 的虚拟空间以(VM)及运行虚拟处理器(VCPU)。
这三个对象分别对应着三个文件描述符,Qemu通过文件描述符用系统调用IOCTL来操作这三个对象,同KVM交互。
此时,Qemu主要只模拟设备,她以前的CPU 和MMU的模拟逻辑都被kvm.ko 取代了。
2.1 KVM的抽象对象KVM同应用程序(Qemu)的交互接口为/dev/kvm,通过open以及ioctl系统调用可以获取并操作KVM抽象出来的三个对象,Guest的虚拟处理器(fd_vcpu[N]), Guest的地址空间(fd_vm), KVM本身(fd_kvm)。
其中每一个Guest可以含有多个vcpu,每一个vcpu对应着Host系统上的一个线程。
Qemu启动Guest系统时,通过/dev/kvm获取fd_kvm和fd_vm,然后通过fd_vm 将Guest的“物理空间”mmap到Qemu进程的虚拟空间,并根据配置信息创建vcpu[N]线程,返回fd_vcpu[N]。
然后Qemu将操作fd_vcpu在其自己的进程空间mmap一块 KVM的数据结构区域。
该数据结构(下图中的shared)用于同kvm.ko 交互,包含Guest的IO信息,如端口号,读写方向,内存地址等。
Qemu通过这些信息,调用虚拟设备注册的回调函数来模拟设备的行为,并将Guest IO请求换成系统请求发送给Host系统。
由于Guest的地址空间已经映射到Qemu的进程空间里面,Qemu的虚拟设备逻辑可以很方便的存取 Guest地址空间里面的数据。
三个对象之间的关系如下图所示:+----------+ | +--------+| Qemu | Host user | | || | | | || | | | Guest || +------+| | | user || |shared|| | | || +------+| | | || ^ | | | |+-------|--+ | | || | | | |fds| | | | |------|---|---------------| |--------|| | | | |v v Host kernel | | Guest |+---------+ | | kernel || | | | || kvm.ko |----+ | | || | |fd_kvm | | |+---------+ | | +--------+v ^+----+ fd_vm ||vmcs|----+--------------+------+ +----+ | +------+| host | | | Guest|| mode | |fd_vcpu | mode |+------+ | +------+^ v ^| +-------+ || vm exit | Phy | vm entry|+-------------| CPU |---------++-------+图 2图中vm-exit代表处理器进入host模式,执行kvm和Qemu的逻辑。
vm-entry 代表处理器进入Guest模式,执行整个Guest系统的逻辑。
如图所示,Qemu通过三个文件描述符同kvm.ko交互,然后kvm.ko通过vmcs这个数据结构同处理器交互,最终达到控制Guest系统的效果。
其中fd_kvm主要用于Qemu同KVM 本身的交互,比如获取KVM的版本号,创建地址空间、vcpu等。
fd_vcpu主要用于控制处理器的模式切换,设置进入Guest mode前的处理器状态等等(内存寻址模式,段寄存器、控制寄存器、指令指针等),同时Qemu需要通过fd_vcpu 来mmap一块KVM的数据结构区域。
fd_vm主要用于Qemu控制Guest的地址空间,向Guest注入虚拟中断等。
2.2 KVM的vcpu如前文所述,KVM的vcpu对应着host系统上的一个线程。
从Qemu的角度来看,她运行在一个loop中:for (;;) {kvm_run(vcpu);switch (shared_data->exit_reason) {...case KVM_IO:handle_io(vcpu);break;case KVM_MMIO:handle_mmio(vcpu);break;...}}该线程同Guest的vcpu紧密相连。
如果我们把线程的执行看作Guest vcpu的一部分,那么从Host的角度来看,该vcpu在三种不同的上下文中运行:Host user/Host kernel/Guest,将运行于一个更大的循环当中。
该vcpu的运行逻辑如下图:Host user | Host kernel | Guest mode || | || | |+->kvm_run(vcpu)-------+ | || | v | || | +->vm entry----------+ || | | | v || | | | Execute || | | | Natively || | | | | || | | vm exit<----------+ || | | | | || | | | | || Yes | | v | || +----------------I/O ? | || | | | | No | || | | | | | || | | | v | || v Yes | | Signal | |+--Handle IO<---------Pending? | || | | No | || +----+ | |图 3实际上,在host上通过ps命令看到的关于vcpu这个线程的运行时间正是这三种上下文的总和。
2.3 KVM的IO虚拟化2.3.1 IO的虚拟化传统系统中,设备都直接或间接的挂在PCI总线上。
PCI设备通过PCI配置空间以及设备地址空间接收操作系统的驱动请求和命令,通过中断机制通知反馈操作系统。
配置空间和设备地址空间都将映射到处理器Port空间或者操作系统内存空间中,所以设备的软件模拟需要VMM将相关的Guest PIO和MMIO请求截获,通过硬件虚拟化提供的机制将其传送给软件。