Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >说一说虚拟化绕不开的io半虚拟化

说一说虚拟化绕不开的io半虚拟化

作者头像
虚拟化云计算
修改于 2018-04-13 14:16:42
修改于 2018-04-13 14:16:42
3.1K0
举报
文章被收录于专栏:虚拟化云计算虚拟化云计算

QEMU-KVM作为一个VMM提供了全虚拟化环境,guest不经过任何修改就能运行在KVM环境中。不过KVM在IO虚拟化方面,使用QEMU纯软件的方式来模拟IO设备,效率并不高。在KVM中,要想提高IO虚拟化的效率,就要使用半虚拟化的方式:virtio。

简单介绍全虚拟化和半虚拟化

在全虚拟化 中,guest操作系统运行在VMM之上,并不知道它已被虚拟化,不需要任何更改就可以工作。相反,在半虚拟化中,guest操作系统不仅知道它运行在 VMM上,还需要做修改来对接VMM的代码。

在全虚拟化中,VMM必须模拟设备硬件,尽管这种模拟很彻底很干净,但它效率低代码最复杂。在半虚拟化模式中,guest和 VMM共同合作,模拟更加高效。

IO全虚拟化使用QEMU软件模拟

1.当虚拟机进行I/O操作时,根据《也谈Intel的cpu虚拟化》我们知道,虚拟机通过VM exit将cpu控制权返回给VMM,从而陷入到root模式下的ring0内的VMM,进行”陷入模拟“。

2.将本次I/O请求的信息存放到IO共享页,QEMU从IO共享页读取信息后由硬件模拟代码来模拟出本次的IO操作,并调用内核中的硬件驱动把IO请求发送到物理硬件,完成之后将结果放回到IO共享页。

3.KVM模块中的捕获代码读取IO共享页中的结果,把结果返回到guest。

4.通过VM entry,guest再次获得cpu控制权,根据IO返回的结果进行处理。

说明:VMM和guest的IO信息共享不光IO共享页一种,还可以使用DMA。QEMU不把IO结果放到IO共享页中,而是通过DMA将结果直接写到guest的内存中去,然后通过KVM模块告诉客户机DMA操作已经完成。

下面这张图(来自网络)是软件模拟IO的流程图:

IO半虚拟化virtio

guest和host使用使用virtio前后端的技术减少了guest IO时的VM Exit(guest和host的上下文切换)并且使guest和host能并行处理IO来提高throughput和减少latency。但是IO的路径并没有比全虚拟化技术减少。下面是virtio的IO路径:

guest在IO请求时,首先guest需要切换到host kernel,然后host kernel会切换到hyperisor来处理guest的请求,hypervisor通过系统调用将数据包发送到外部网络后切换回host kernel,然后再切换回guest。这个长IO路径和全虚拟化时相同的,只是减少了VM exit和VM entry。

vhost

为了解决virio的IO路径太长的问题,vhost产生了。它是位于host kernel的一个模块,用于和guest直接通信,所以数据交换就在guest和host kernel间进行,减少了上下文的切换。vhost相对与virto架构,把virtio驱动后端驱动从用户态放到了内核态中(vhost的内核模块充当virtiO后端驱动)

下面这张图(来自redhat)描述了在virtio和vhost(vhost-net时vhost架构中的网卡实现)架构下内核的不同工作流程:

下面这张图(来自intel)介绍了vhost工作原理:

vhost-user

vhost-user和vhost类似,只是使用一个用户态进程vhost-user代替了内核中的vhost模块。vhost-user进程和Guset之间时通过共享内存的方式进行数据操作。vhost-user相对与vhost架构,把virtio驱动后端驱动从内核态又放回到了用户态中(vhost-user进程充当virtiO后端驱动)。

下面这张图(来自intel)介绍了vhost-user的工作原理:

总结

io虚拟化经历了从全虚拟化io到半虚拟化virtio。半虚拟化的后端驱动又经历了从VMM中到内核中,从内核中到用户空间中的过程。


关注本公众号,了解更多关于云计算虚拟化的知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 虚拟化云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解:网络虚拟化卸载加速技术的演进
在传统的应用场景中,服务器资源过剩情况普遍,为了充分利用服务器资源,产生了虚拟化技术。虚拟化技术以牺牲部分效率为代价提升了资源的使用率,将原来需要硬件完成的工作,通过软件模拟的方式,满足多个云租户的需要。随着5G、8K等新型业务的不断涌现,应用系统对性能提出了更高的要求,云服务也出现了满足不同QoS要求的分化,有(物理机、裸金属)等不同产品形态。各个功能模块的衔接配合,各租户之间的信息交互都需要高效的网络系统来实现。
SDNLAB
2021/11/17
2.3K0
virtio 虚拟化系列之一:从 virtio 论文开始(文末有福利~)
SmartX是中国领先的超融合产品与企业云解决方案提供商,拥有国内最顶尖的分布式存储和超融合架构研发团队,在分布式存储、虚拟化计算、微服务、容器、前端开发、自动化测试等领域都做着行业最前沿的实践。现正在招兵买马,看完请点击左下角阅读原文查看福利哦~
Linux阅码场
2019/07/08
2.4K0
【重识云原生】第四章云网络4.7.4节vhost-user方案——virtio的DPDK卸载方案
        在 vhost_net 的方案中,由于 vhost_net 实现在内核中,guest 与 vhost_net 的通信,相较于原生的 virtio 方式性能上有了一定程度的提升,从 guest 到 kvm.ko 的交互只有一次用户态的切换以及数据拷贝。这个方案对于不同 host 之间的通信,或者 guest 到 host nic 之间的通信是比较好的,但是对于某些用户态进程间的通信,比如数据面的通信方案,openvswitch 和与之类似的 SDN 的解决方案,guest 需要和 host 用户态的 vswitch 进行数据交换,如果采用 vhost_net 的方案,guest 和 host 之间又存在多次的上下文切换和数据拷贝,为了避免这种情况,业界就想出将 vhost_net从内核态移到用户态。这就是 vhost-user 的实现。
江中散人_Jun
2022/06/27
2.2K0
【重识云原生】第四章云网络4.7.4节vhost-user方案——virtio的DPDK卸载方案
【重识云原生】第四章云网络4.7.5节vDPA方案——virtio的半硬件虚拟化实现
        Virtio作为一种半虚拟化的解决方案,其性能一直不如设备的pass-through,即将物理设备(通常是网卡的VF)直接分配给虚拟机,其优点在于数据平面是在虚拟机与硬件之间直通的,几乎不需要主机的干预。而virtio的发展,虽然带来了性能的提升,可终究无法达到pass-through的I/O性能,始终需要主机(主要是软件交换机)的干预。vDPA(vhost Data Path Acceleration)即是让virtio数据平面不需主机干预的解决方案。该框架由Redhat提出,实现了virtio数据平面的硬件卸载。控制平面仍然采用原来的控制平面协议,当控制信息被传递到硬件中,硬件完成数据平面的配置之后,数据通信过程由硬件设备(智能网卡)完成,虚拟机与网卡之间直通。中断信息也由网卡直接发送至虚拟机不需要主机的干预。这种方式,控制面比较复杂,硬件难以实现。
江中散人_Jun
2022/06/30
2.6K0
【重识云原生】第四章云网络4.7.5节vDPA方案——virtio的半硬件虚拟化实现
virtio —— 一种 Linux I/O 半虚拟化框架 [译]
简言之,virtio 是对于半虚拟化管理程序(para-virtualized hypervisor)中设备的一个抽象层。virtio 是 Rusty Russell 为了支持他自己的虚拟化方案 lguest 而开发的。
Flowlet
2023/08/11
1.3K0
virtio —— 一种 Linux I/O 半虚拟化框架 [译]
KVM详解,学习kvm系列文章
其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:
菲宇
2019/06/12
9.4K1
KVM详解,学习kvm系列文章
【重识云原生】第四章云网络4.7.3节——Vhost-net方案
        virtio是一种I/O半虚拟化解决方案,是一套通用I/O设备虚拟化的程序,是对半虚拟化Hypervisior中的一组通用I/O设备的抽象。virtio分为前端和后端,一个backend组件和一个frontend组件。backend组件是virtio接口的host端,frontend组件是virtio的guest端。
江中散人_Jun
2022/06/27
2.5K0
【重识云原生】第四章云网络4.7.3节——Vhost-net方案
virtio 与 vhost-net 架构
I/O 虚拟化经历了从 I/O 全虚拟化、I/O 半虚拟化、硬件直通再到 vDPA 加速 Vhost-user 技术的演进。
Flowlet
2023/08/11
2.7K0
virtio 与 vhost-net 架构
【重识云原生】第三章云存储3.2节——SPDK方案综述
SSD正在迅速扩展它在数据中心中的份额,同旋转介质(HHD)相比,当前的闪存在性能、功耗和机架密度上具有明显优势,随着下一代媒介进入市场,这些优势将持续扩大。
江中散人_Jun
2022/04/11
4.9K0
【重识云原生】第三章云存储3.2节——SPDK方案综述
KVM最初的2小时——KVM从入门到放弃
那些不能铭记过去的人注定要重蹈覆辙。你还记得当年用Windows隐藏文件夹藏片吗? 作为一个屌丝,虚拟化技术确实意义非常重大。这个最显著的作用显然就是藏片,作为一个程序员,如果还用Windows文件隐藏功能来藏片,这实在是污辱自己和女朋友的智商,让广大码农抬不起头来做人。最早可以帮你实质藏片的手段来自VMware。 VMware这个名字就是一种牛逼,VM就是virtual machine,ware是取自Software中的ware,1999年VMware发布了它的第一款产品VMware Workstation,在那个赛扬333和白衣飘飘的时代。
Linux阅码场
2019/09/30
1.2K0
KVM最初的2小时——KVM从入门到放弃
虚拟化硬件加速-vdpa
惠伟:virtio+ovs转发原理和性能分析​zhuanlan.zhihu.com
惠伟
2021/07/28
5.8K0
【重识云原生】第四章云网络4.7.6节——virtio-blk存储虚拟化方案
        基于virtio的virtio-blk是KVM-Qemu虚拟化生态中的虚拟化块存储的一种实现方式,利用了virtio共享内存的机制,提供了一种高效的块存储挂载的方法。Guest OS内核通过加载virtio-blk驱动,实现块存储的读写,无需额外的厂家专用驱动。Virtio-blk设备在虚拟机以一个磁盘的方式呈现,是目前应用最广泛的虚拟存储控制器。如下是qemu所模拟的PC(基于intel i440fx主板架构)的组成结构图。
江中散人_Jun
2022/06/28
2.2K0
【重识云原生】第四章云网络4.7.6节——virtio-blk存储虚拟化方案
【重识云原生】第二章第一节——计算虚拟化技术总述
楔子:计算虚拟化技术算是云计算技术的擎天之柱,其前两代技术的演进一直引领着云计算的发展,即便到了云原生时代,其作用依然举足轻重。
江中散人_Jun
2022/03/13
1.7K0
【重识云原生】第二章第一节——计算虚拟化技术总述
软硬件融合技术内幕 进阶篇 (3) —— 云计算的六次危机 (上)
所谓的“数据中心税”,指的是数据中心计算、存储、网络等基础资源虚拟化后带来的开销。
用户8289326
2022/12/12
8080
软硬件融合技术内幕 进阶篇 (3) —— 云计算的六次危机 (上)
内核级虚拟化技术
这篇可能讲的有一点点的无聊,因为基本上是概念性的东西,我也是理解了很久才慢慢的搞懂的。 一、虚拟化与虚拟化技术   1.1、虚拟化的定义   虚拟化主要指的是特殊的技术,通过隐藏特定计算平台的实际物理
用户1195962
2018/01/18
2K0
内核级虚拟化技术
软硬件融合技术内幕 进阶篇 (4) ——云计算的六次危机(中)
云计算数据平面发生危机,一般是因为计算机CPU性能的线性增长,难以跟上网络带宽的指数提升,及其带来的“数据中心税”的增加。
用户8289326
2022/12/12
6970
软硬件融合技术内幕 进阶篇 (4) ——云计算的六次危机(中)
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
KVM:Kernel-based Virtual Machine,是基于Linux内核的开源虚拟化解决方案,从2.6.20版本开始被合入kernel主分支维护。最初只支持X86平台的上支持VMX或者SVM的CPU,不久后被确认为标准Linux内核的虚拟化方案并逐步支持S390、IA64和PowerPC等体系架构;KVM本身只提供部分的虚拟化功能(虚拟CPU和内存),而由经过特殊改造后的Qemu(Qemu-kvm)来帮助下提供完整的平台虚拟化功能。
江中散人_Jun
2022/04/08
3K0
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
Virtio网络的演化之路
作为一个开放的标准接口,virtio一直在云计算与虚拟化中扮演着重要的角色。而virtio网络接口,作为virtio标准支持下最复杂的接口之一,在虚拟机/容器网络加速、混合云加速中一直扮演着重要角色。本文将在读者对virtio标准与虚拟化有一定了解的前提下,介绍virtio网络架构从创造之初到如今的演化之路。
虚拟化云计算
2019/11/18
8.3K0
【重识云原生】第四章云网络4.7.2节——virtio网络半虚拟化简介
        在第二章的计算章节,我们在KVM一节有介绍过QEMU,因相隔较远,这里再将其基本架构做一下简要回顾
江中散人_Jun
2022/06/27
1.6K0
【重识云原生】第四章云网络4.7.2节——virtio网络半虚拟化简介
虚拟化与云计算硬核技术内幕 (11) —— 独立自主,自力更生(上)
上期我们在《虚拟化与云计算硬核技术内幕 (10) —— 事事有人管,人人有事管》中,为大家描述了如何将特定外设的中断送到指定的虚拟机的指定CPU上。那么,虚拟机的外设实际上到底是哪里来的呢?
用户8289326
2022/09/08
5030
虚拟化与云计算硬核技术内幕 (11) —— 独立自主,自力更生(上)
推荐阅读
相关推荐
详解:网络虚拟化卸载加速技术的演进
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档