博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: network

国产虚拟化云宏

[复制链接]
 楼主| 发表于 2023-1-16 19:06:30 | 显示全部楼层
作者:胡克
链接:https://www.zhihu.com/question/53963418/answer/228463470
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


有没有未来不好判断,但是有空间是可以肯定的。
这里边有整体市场因素,有公司技术路线因素,有客户需求变化因素。本质上还是要看国产虚拟化做的有没有价值。
国产虚拟化主流上看是基于XEN或者KVM开源版本开发,可以肯定的说国产虚拟化厂商能做出好用的产品,因为本人亲身经历过几个大的行业用户的虚拟化项目的交付。

先说第一类成功的虚拟化项目实施,业务定制型 ,这块市场可能是国产虚拟化厂商认为是金牛,而国外大厂又认为是瘦狗的地带,因为想VMware这种做产品的赚钱太舒服,他自然看不上这种“老妈子”式的工作,即使做,也会找个马甲。而这一种有洽洽是好多国产虚拟化厂商的必争之地。因为,你没有过人之处,总得有点积极的态度和服务。可能有人问你们定制了个啥,其实从客户角度看,上到业务流程管理,下到环境部署、镜像裁剪甚至是驱动优化用户都希望你能够提供针对性的解决方案。没有这方面需求的用户基本上是差钱或者不大懂。从这些年的切身感受来看,用户用虚拟化产品还是非常需要贴身服务的,因为从运维的角度看,在应用端呈现越简单,系统后台需要做的工作越多越复杂。我曾经经理过一个客户希望把虚拟化管理的流程做的简便、扁平化,后来我们花了9个月的时间把主要的业务流程进行重构,包括整体业务环境打包创建、备份/恢复、虚拟机部署、资源申请审批,这些听起来没大有技术含量的内容,我们却花了很大的功夫重构,目的就是让不太懂技术,不太懂虚拟化的人能够用起来,这个过程是非常痛苦的,不是1-2场标准的所谓原厂培训能够搞定的。因为客户需要的是以他的业务视角去看产品,而不是以虚拟化产品的视角看业务。
第二类 某些行业里自主可控的需求,这个不是钱的问题,有些命脉的行业对自主可控的诉求极高。一是不想被国外商业化产品绑架,二是避免潜在的安全威胁。在之前接触的客户曾经直接问,你们得性能比VMware差多少,实测之后性能大概是VMware的70%—80%,最终客户依然可以接受,因为他的核心痛点不是快而是稳定、可控,满足客户的90%的核心诉求,剩下的10%那只是需要尽力而为的部分了。有很大一部分单位需要的不是购买license模式的产品,更多的希望是项目性的服务;同时,涉及国计民生、国家命脉的单位,也不希望给自己站岗的是外国人。
第三类 价格因素,有一点毋庸置疑的是,国产虚拟化厂商不断成长,虚拟化产品的暴利空间被不断压缩,虚拟化的市场普及率不断提升,并且虚拟化也不再被视为多么高深的技术,已经开始走进企业的万户千家。之前分析过国内使用虚拟化的用户分成三类,第一类 能源、金融、电信行业、央企,这种一不差钱,二是自身信息化水平比较高的用户自然有很大的选择权,早期用VMware,现在开始通过开始尝试自主+合作的方式基于开源环境(openstack+kvm)构建自己的云平台;第二类,政务、教育、中大规模企业,这类用户前期可能通过使用VMware进行过尝鲜式的建设,在大规模应用时,成本成为了平台建设的重要因素,基于XEN和KVM的一些开源虚拟化软件,在功能和性能上足够满足这些客户的要求,并且价格上有明显的优势,这也是国产虚拟化软件市场空间增长的主体;第三类SMB市场,这个市场在之前应该是VMware盗版充斥的市场,现在可能更多的企业会选择公有云,或者超融合解决方案。公有云方面 阿里、腾讯、百度在底层虚拟化技术上依然会在开源虚拟化技术上进行开发,超融合市场上 华为、浪潮、华三、联想这些传统服务器厂商,通常会采用软硬一体化的解决方案,这里边大部分会采用自研的虚拟化软件。
所以,个人认为 空间还是有的,关键是看整体方案构建能力和服务能力的提升,虚拟化已经不是云计算领域的新鲜事物变成了日常必需品,在这种情况下,产品的持续改进能力、服务质量的持久一致性将是一个成熟市场发展的关键,对于虚拟化来说,已经没有什么“洪荒之力”可以来个市场大逆转了,关键是在这篇红海中谁的耐力更好,整体实力更强。



 楼主| 发表于 2023-1-16 19:07:17 | 显示全部楼层
QEMU(quick emulator)是一款由免费的可执行硬件虚拟化的开源托管虚拟机(VMM)。其与Bochs,PearPC类似,但拥有高速(配合KVM),跨平台的特性。

QEMU 是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux 平台上使用广泛。Bochs,PearPC 等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过 KQEMU 这个闭源的加速器,QEMU 能模拟至接近真实电脑的速度。

QEMU

QEMU 是一个托管的虚拟机镜像,它通过动态的二进制转换,模拟 CPU,并且提供一组设备模型,使它能够运行多种未修改的客户机 OS,可以通过与 KVM(kernel-based virtual machine 开源加速器)一起使用进而接近本地速度运行虚拟机(接近真实电脑的速度)。

QEMU 还可以为 user-level 的进程执行 CPU 仿真,进而允许了为一种架构编译的程序在另外一种架构上面运行(借由 VMM 的形式)。

目前,0.9.1 及之前版本的 qemu 可以使用 kqemu 加速器。在 qemu1.0 之后的版本,都无法使用 kqemu,主要利用 qemu-kvm 加速模块,并且加速效果以及稳定性明显好于 kqemu。

运作模式
QEMU 有两种主要运作模式:

* User mode 模拟模式,亦即是用户模式。QEMU 能启动那些为不

同中央处理器编译的 Linux 程序。而 Wine 及 Dosemu 是其主要目标。

* System mode 模拟模式,亦即是系统模式。QEMU 能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为跨平台编写的程序进行测试及除错工作变得容易。其亦能用来在一部主机上虚拟数部不同虚拟电脑。

QEMU的主体部份是在 LGPL 下发布的,而其系统模式模拟则是在 GPL 下发布;而 kqemu 这个加速器则是在免费但闭源的条件下发布的。使用 kqemu 可使 QEMU 能模拟至接近实机速度,但其在虚拟的操作系统是 Microsoft Windows 98 或以下的情况下是无用的。

软件优点
默认支持多种架构。可以模拟 IA-32 (x86)个人电脑,AMD 64 个人电脑,MIPS R4000, 升阳的 SPARCsun3 与 PowerPC(PReP 及 Power Macintosh)架构

可扩展,可自定义新的指令集

开源,可移植,仿真速度快

在支持硬件虚拟化的 x86 构架上可以使用 KVM 加速配合内核 ksm 大页面备份内存,速度稳定远超过 VMware ESX

增加了模拟速度,某些程序甚至可以实时运行

可以在其他平台上运行 Linux 的程序

可以储存及还原运行状态(如运行中的程序)

可以虚拟网络卡

软件缺点
对微软视窗及某些主机操作系统的不完善支持(某些模拟的系统仅能运行)

对不常用的架构的支持并不完善

除非使用 kqemu 或 KVM 加速器,否则其模拟速度仍不及其他虚拟软件,如 VMware

比其他模拟软件难安装及使用

使用实例
以下的指令可以建立一个 500MB 大小的”qcow”格式的硬盘映像。

qemu-img create -f qcow c.img 500M

而以下的指令会使虚拟机器在 128MB 内存,使用 c.img 这个用以上介绍的指令所建立的硬盘映像及以 linux.iso 为光盘映像的情况下运行。注意,如果使用物理光驱,请将-cdrom linux.iso 这个参数变为 -cdrom /dev/cdrom 或您所用的光驱。

qemu -clock dynticks -rtc-td-hack -localtime -hda c.img -cdrom linux.iso -boot d -m 128 -enable-audio -localtime

如果想缺省使用全萤幕启动子操作系统,可作以上指令后再加上”-full-screen”这个参数,如想在运行时离开全萤幕,请使用组合键 Ctrl-Alt-F 便可。

参数简介
-L dir 指向 BIOS 和 VGA BIOS 所在目录

-hda/-hdb/-hdd/-hdc “文件名” 使用“文件名”作为硬盘 0/1/2/3 镜像。

-cdrom “文件名” 使用“文件名”作为光盘镜像(文件应该是 ISO 类型)。

Windows 下的使用者,可以透过下列指令使用实体光盘:

-cdrom //./x: -> x 代表光盘名称/位置

例如:-cdrom //./e: -> 使用 E:\ 为光盘

-fda/-fdb “文件名” 使用“文件名”作为磁盘 0/1 镜像。

-boot [a|d|c] 使用磁盘<a>,光盘<d>,或者硬盘<c>启动。

-m 容量指定内存的大小,单位是 MB。

-soundhw c1,… 使用声卡设备。

-soundhw ? 列出所有可使用的声卡

-soundhw all 使用全部声卡

-usb 允许使用 usb 设备。

-usbdevice 名字 添加一个 usb 设备“名字”。

-net nic 创建一块新的网卡。

加速模块
The QEMU 加速模组 (kqemu)

kqemu 这个加速模组是 Fabrice Bellard 专为 Linux 核心而设计的闭源附加程序,目的是为了加速 QEMU 的子系统运行速度。在 x86 硬件上模拟 x86 的操作系统可达到主机速度。

QEMU 加速模组 – 使用者限制条件

QEMU 加速模组,kqemu,是一套闭源商业产品。可作个人使用而不受限制。但如果想使用光碟, ISO 映像或附加套件等方法分发 QEMU 加速模组,则必须联络作者并取得其同意后方可进行。

QVM86

现时除了以上的 kqemu 这个闭源的 QEMU 加速模组外,亦有一个在 GPL 下发布的 QEMU 加速模组。
 楼主| 发表于 2023-1-16 19:07:42 | 显示全部楼层
kvm虚拟机_龙芯KVM虚拟机实现全链条自主开发,国产虚拟机进入世界顶尖行列
weixin_39795292于 2020-12-03 18:54:04 发布568[url=] 收藏 1[/url]

文章标签: kvm虚拟机





在2019年4月,龙芯公司正式发布了它们基于龙芯3B3000 CPU的KVM虚拟机产品的研究成果,可以全功能支持虚拟化的云主机系统,这也意味着我国的云计算产业已经达到了国际先进水平,对于之后的云计算快速发展以及核心技术研究方面都有着至关重要的意义。

这次龙芯的研发成果可算是扬眉吐气了,将我国的虚拟机全链条研发提升到了世界先进的行列,并且在公布的KVM虚拟机产品解决方案中,包含了以下五大技术突破:


&#8203;1.CPU芯片可以实现虚拟化硬件的全面支持,在多层次和场景下完成高效率的虚拟化任务执行,高效提升了各项虚拟化的效率。

2.以linux作为内核基础环境,完成了KVM模块、CPU、存储以及IO的想UNI化支持,并且虚拟化的执行效率高达95%。

3.在云桌面应用环境方面,龙芯系统可以优化适配Spice协议,QXL虚拟图形等,同时多方面的办公环境应用能力也得到了提升,这也是该项成就可以全面应用的一大技术支持。

4.完成了Libvirt、VirtManager等基础训为管控组件的适配,在云计算应用环境方面也有了重大突破,并且完成了Openstack大型计算环境的移植。

5.在QEMU虚拟机的模拟环境中完成了对龙芯系统架构的标准化,支持了虚拟显示和虚拟网络的功能。


&#8203;同时,抱着“合作共赢”的态度,此次公布的龙芯KVM虚拟机将会在龙芯的开源社区网站中免费提供,各方云厂商以及个人都可以免费下载使用,对于与计算产业的健康发展作出了属于自己的独特贡献,也期待着可以与合作伙伴们携手并进, 共同创新。

不得不说,龙芯此次的突破也离不开长久以来的积淀,从2007年开始,龙芯团队的研究团队就已经开始在CPU、内存和IO虚拟化方面开始了深度的探索,同时也将龙芯的微结构时序模型等架构支持加入到SimOS中,对于后续的开发验证有着很大的帮助。


&#8203;这次龙芯KVM虚拟机的发布可以说是当下行业顶尖的“硬核”科技突破了,这也是我国首次可以达到自主研发从CPU到系统的全链条虚拟机的自主研制。即便是国际中,也只有Intel,ARM掌握了完整的KVM虚拟机研发技术,相信之后龙芯会为我国的云计算产业健康发展,相关人才的培养做出更加卓越的贡献!





 楼主| 发表于 2023-1-16 19:10:04 | 显示全部楼层
QEMU架构浅析

一、QEMU简介及与KVM等虚拟化的关系


QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。本文的目的是描述本人所理解的QEMU技术架构的见解,并以此抛砖引玉。众所周知,QEMU的源代码开发文档非常稀少,描述内部结构和工作机理的文档更是凤毛麟角,一般的开发人员想要从事QEMU的开发工作,通常只能从源代码入手。因此,对于技术人员来说,了解QEMU是一项艰巨的任务。
QEMU有几种虚拟化模式。首先,它可以使用基于内核的虚拟机(KVM)执行x86处理器硬件虚拟化,以几乎比拟硬件本机的速度执行运算任务。其次,它可以通过机器代码的实时转换来模拟其他处理器以用于虚拟机运行不同平台的操作系统。最后,它可以使用实时转换为其他架构运行简单的程序,类似于Linux中的Wine。因为QEMU没有图形用户界面(GUI),而其提供的核心能力又是关键而重要的,因此通常用作更复杂的虚拟化管理器的一部分。比如,我们经常使用的开源VirtualBox、Xen虚拟化产品,其核心底层的虚拟化部分就有集成和使用QEMU,此外,主流的KVM虚拟化也是集成和使用QEMU的主力虚拟化管理器系统。
从KVM的角度来说,KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。在支持VMX(Virtual Machine Extension)功能的x86处理器中,Linux在原有的用户模式和内核模式中新增加了客户模式,并且客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中。KVM模块的职责就是打开并初始化VMX功能,提供相应的接口以支持虚拟机的运行。KVM通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层。KVM在2007年2月被导入Linux 2.6.20内核中。从存在形式来看,它包括两个内核模块:kvm.ko和kvm_intel.ko(或kvm_amd.ko),本质上,KVM是管理虚拟硬件设备的驱动,该驱动使用字符设备/dev/kvm(由KVM本身创建)作为管理接口,主要负责vCPU的创建、虚拟内存的分配、vCPU寄存器的读写以及vCPU的运行。
从QEMU的角度来说,QEMU(Quick Emulator)本身并不包含或依赖KVM模块,而是一套由Fabrice Bellard编写的模拟计算机的自由软件。QEMU虚拟机是一个纯软件的实现,可以在没有KVM模块的情况下独立运行,但是性能比较低。QEMU有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化以及I/O设备的虚拟化。在不需要KVM加速的情况下,QEMU通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。QEMU有两种工作模式:系统模式,可以模拟出整个电脑系统,另一种是用户模式,可以运行不同与当前硬件平台的其他平台上的程序(比如在x86平台上运行跑在ARM平台上的程序)。目前最新版本是4.x。从QEMU角度来看,虚拟机运行期间,QEMU通过KVM模块提供的系统调用接口进行内核设置,由KVM模块负责将虚拟机置于处理器的VMX模式运行。QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化加速以提高虚拟机的性能。
而现在流行的KVM虚拟化平台,就是在修改了QEMU代码,把他模拟CPU、内存的代码换成KVM,而网卡、显示器等留着,因此QEMU+KVM就成了一个完整的虚拟化平台。由于KVM运行在内核空间,只是内核模块,QEMU运行在用户空间,实际模拟创建,管理各种虚拟硬件(磁盘,网卡,显卡等)。从KVM的角度来说,用户没法直接跟内核模块交互,需要借助用户空间的管理工具,因此需要借助QEMU这个运行在用户空间的工具。KVM和QEMU相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备并实现和内核空间的KVM的交互,虽然这个交互并不仅仅只有QEMU能够办到。此外,由于QEMU模拟IO设备效率不高的原因,现在常常采用半虚拟化的virtio方式来虚拟IO设备。
综上,理解了QEMU和KVM的关系,也就理解了VirtualBox、Xen等虚拟化产品集成和使用QEMU的关系。

二、QEMU架构及组成

QEMU的架构如下图所示,由几个基本的组件组成:
图 QEMU架构图
如图所示,QEMU由以下几个部分组成:
  • Hypervisor控制仿真
  • Tiny Code Generator(TCG)在虚拟机器代码和宿主机代码之间进行转换。
  • 软件内存管理单元(MMU)处理内存访问。
  • 磁盘子系统处理不同的磁盘映像格式
  • 设备子系统处理网卡和其他硬件设备

下面将对这些组件介绍。

2.1 Hypervisor管理程序

Hypervisor(虚拟机管理程序)是一种创建和运行虚拟机的虚拟机监视器。 QEMU中的Hypervisor(虚拟机管理程序)从磁盘映像加载二进制机器代码,使用TCG将其转换为本机机器代码,连接到虚拟或实际设备,并启动软件MMU,然后开始在磁盘映像中模拟操作系统。其中,TCG和软件MMU是实现虚拟化CPU和内存的关键。
而集成KVM后,QEMU将使用Linux内核的KVM功能以纯模式执行虚拟机。KVM基本上是Linux内核中的Hypervisor(虚拟机管理程序)。它可以并行运行多个操作系统。QEMU可以在KVM中启动一个新线程以执行模拟操作系统,然后KVM控制执行。从这部分来说,KVM的Hypervisor(虚拟机管理程序)替换掉了QEMU的Hypervisor(虚拟机管理程序)。

2.2 微代码生成器(TCG)

在QEMU中,Tiny Code Generator(TCG)将源处理器机器代码转换为虚拟机运行所需的机器代码块(如x86机器代码块)。从物理硬件的架构和角度上来说,不可能在一个处理器上运行为另一个处理器的指令集架构(ISA)编译的机器代码,例如,x86处理器上的ARM机器代码。因此,引入中间环节对不同的处理器指令集架构(ISA)进行翻译和转换是实现虚拟化通用性的技术途径和解决方案。在Tiny Code Generator(TCG)中,这些已经翻译的代码块放在转换缓存中,并通过跳转指令将源处理器的指令集(ISA)和目标处理器的指令集(ISA)链接在一起。当Hypervisor(虚拟机管理程序)在执行代码时,存放于转换缓存中的链接指令可以跳转到指定的代码块,并且执行可以在不同的已翻译代码块上运行,直到需要翻译新块为止。在执行的过程中,如果遇到了需要翻译的代码块,执行动作就会暂停并回会跳回到Hypervisor(虚拟机管理程序),Hypervisor(虚拟机管理程序)就会使用和协调TCG对需要进行二进制翻译的源处理器指令集(ISA)进行转换和翻译并存储到转换缓存中。下图显示了QEMU的TCG工作原理:
图.微代码生成器工作原理
在TCG在运行的过程中存在一个小缺点,即它无法正确运行自修改代码,因为它没有将修改后的代码页进行标记,再次运行时需要重新翻译。这影响了QEMU的二进制运行效率,从另外一个角度来说,这也增加了一定的安全性。自修改代码在软件世界中容易被漏洞利用。特别是缓冲区溢出攻击等内存损坏漏洞,这些漏洞利用威胁代理(例如后门)提供的特殊代码覆盖易受攻击的应用程序代码,如果已经被覆盖的代码已经被运行(并因此被缓存),出了正常运行的会导致漏洞攻击利用外,更多的时候则会导致TCG运行和翻译失败,从而导致程序复现异常或崩溃。
此外,在翻译的过程中,如果新处理器使用的寄存器多于x86处理器并且具有许多复杂指令,那么对TCG进行编程以处理和适应新的CPU仿真就可能需要大量的工作。目前来说,QEMU所支持的大部分处理器都拥有部分相同的指令集。例如,“MOV”指令几乎存在于所有处理器中,并且可以简单地复制,除非CPU寄存器中存在一些位大小差异。例如,在32位处理器上模拟64位处理器可能需要许多额外的指令,这也需要更多时间在TCG转换器中进行编程。
在QEMU的源代码中,有一个名为'tcg'的子目录,其中包含将机器指令转换为相应的x86机器指令的代码。此代码是一个用C编写的简单翻译状态机。还有用于内存访问和跳转的特殊转换,因为它们可以生成对软件内存管理单元的调用。而虚拟化CPU和内存也往往是在一起的,因为从本质上来说,CPU的工作就是对内存的区域数据进行搬运,CPU是内存的搬运工。在QEMU保护代码块之外的其他内存区域。机器代码中的跳转和分支也必须到达正确的存储器地址。
所以通过二进制翻译技术,针对CPU的仿真和虚拟化就非常简单了。TCG和Hypervisor(虚拟机管理程序)能够实现基于CPU的仿真,其中,其CPU仿真流程如下图所示:
图  QEMU CPU仿真流程
从上图我们可以看到,针对CPU的仿真和虚拟化其实就是将源处理器的指令集(ISA)转换和翻译成目标处理器的指令集(ISA)。CPU仿真和虚拟化就是通过中间的转换和翻译来实现的,由此,针对CPU的虚拟化的第一种技术就完全实现了。这种二进制翻译技术是最早的CPU虚拟化技术,诞生了VMware这样的虚拟化巨头,也诞生了QEMU这样的开源虚拟化鼻祖。

2.3 硬件设备
虚拟机的硬件设备要求可以通过直接连接主机中的实际物理设备或通过QEMU中的硬件设备仿真来实现。与硬件相关的大多数QEMU代码位于目录“hw”中。
在QEMU中,存在两种使用硬件设备的方式:直通模式使用主机实际物理设备和QEMU的设备驱动仿真实现的模拟虚拟设备。如果采用直通方式使用实际的物理设备,那么就会抢占主机的设备使用权,并且其他虚拟机也将无法使用该物理设备。在直通模式中,虚拟机可以直接访问USB总线或PCI总线,并可以直接与设备通信。一般情况下,采用直通模式的物理设备都是很难进行QEMU仿真的设备,比如网络摄像头、串行和并行端口等。其他设备因为大部分虚拟机都会使用,而且很难与主机共享,例如网络设备,因此大都会使用QEMU模拟仿真的虚拟设备。比如在虚拟机的网络设备中,可通过模拟网卡来解决,从而在网络堆栈上添加额外的层。此外,QEMU可以选择连接到Linux内核中的“virtio”半虚拟化驱动程序,这意味着Linux内核处理虚拟机和硬件设备之间的输入/输出,而不采用QEMU的模拟设备进行中转和传输(仅用作中介)。

2.4 磁盘映像

QEMU可以处理几种不同的磁盘映像格式。首选格式为raw或qcow2。Raw是一种非常简单的格式,它将文件系统中的字节逐字节存储在文件中。大多数其他仿真器都支持此格式。Qcow2是QEMU自己的图像格式,对小图像很有用,并且支持磁盘映像压缩以及捕获磁盘映像状态的快照。还支持另外两种格式:在VirtualBox中使用的vdi和在VMWare中使用的vmdk。
QEMU的磁盘映像通过其存储IO协议栈来进行支持,其存储协议栈如下图所示:
图 QEMU存储协议栈
从QEMU的存储协议栈来说,应用程序和虚拟机内核的工作类似于裸机。虚拟机通过仿真硬件与QEMU交互,并将IO执行情况的控制流和数据流交互给QEMU,QEMU代表虚拟机对磁盘镜像文件执行I / O操作。而从主机内核层面上,主机内核会将虚拟机I / O视为一种用户空间的应用程序IO请求进行正常的执行处理。整个QEMU的存储协议栈相比较Linux的存储协议栈而言,中间会加一层中间层以做虚拟化处理。本文将不展开对QEMU的存储协议栈进行细述。

2.5 软件MMU
传统处理器中的内存管理单元(MMU)处理对计算机内存位置的访问。当处理器想要访问某个存储器地址时,MMU获取该地址的内容。此内容可以来自处理器芯片上的本地快速缓存,来自随机存取存储器(RAM)或来自光盘。它甚至可以做出一些关于缓存某些内存位置的控制决定。
QEMU有一个基于软件的MMU,其工作方式与硬件MMU类似。它使用地址转换缓存,其中包含访客地址、主机地址和偏移值,以提高转换速度。它还允许智能链接代码块,以便在没有内存故障的情况下实现更快的执行,其中必须重新加载和重新转换内存块。
在寻找在QEMU中运行的虚拟机的漏洞时,软件MMU是否正在进行翻译和正确放置块会是其测试和Fuzz的重点。

三、总结

      其实搞清楚QEMU的技术架构和实现细节,我们需要弄明白QEMU的架构和组成,以及每个组件的作用及运行机制。此外,我们还需要了解每个组成组件之间的相互交互关系,从数据流的角度来看,其主要是控制流和数据流;从IO角度来看,其主要是网络IO和存储IO,从技术实现机制来看,其主要是虚拟化CPU和内存以及存储、网络协议栈的实现。本文有许多的未尽事宜,待请后续补充。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-11-25 13:02 , Processed in 0.090410 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表