云计算虚拟化技术有哪些 容器技术和虚拟化技术的区别

前言设备虚拟化技术一直是云计算领域最重要的基础技术之一。我们在虚拟机中看到的各种设备,比如网卡、磁盘、键盘、鼠标等。,离不开这项技术的帮助。在本文中,我们将从技术演进的角度来讨论Linux现有的和即将出现的设备虚拟化技术。陷阱和模拟在最早的阶段,设备虚拟化经常...

前言

设备虚拟化技术一直是云计算领域最重要的基础技术之一。我们在虚拟机中看到的各种设备,比如网卡、磁盘、键盘、鼠标等。,离不开这项技术的帮助。在本文中,我们将从技术演进的角度来讨论Linux现有的和即将出现的设备虚拟化技术。

陷阱和模拟

在最早的阶段,设备虚拟化经常与机器模拟器技术捆绑在一起,比如QEMU。我们可以通过QEMU模拟真实器件的所有寄存器布局和操作过程。当QEMU虚拟机中的设备驱动程序需要访问该虚拟设备的寄存器时,该访问指令将被捕获到QEMU并由QEMU处理。这样,虚拟机中的设备驱动就像访问真实的硬件设备一样操作虚拟设备,设备驱动不需要任何改动。

维尔蒂奥

上面的陷阱和仿真方法用于模拟器件。虽然真正的设备驱动不需要改变,但是设备频繁陷入& Trapping带来了严重的性能问题,因此,virtio这样的半虚拟化技术应运而生,并于2008年集成到Linux内核中。

与trap-and-emulate相比,Virtio不再拘泥于现有的设备驱动程序,而是定义了一套新的专用于虚拟设备的驱动程序框架。设备驱动程序知道它正在操作一个虚拟设备,所以它避免了许多真实的I/O路径,这些路径可能会导致陷入& Trapped mmio/pio操作,从而提高了性能。虚拟机中的Virtio驱动与QEMU模拟的Virtio设备之间的数据交互,本质上是一种基于共享内存+循环队列的通信机制。核心数据结构(split virtqueue)包括两个环形缓冲区(可用环、已用环)和一个描述符表。工作机制类似于DMA。虚拟机中的virtio驱动首先将内存中需要传输的一个hash缓冲区的地址和长度写入描述符表,然后将这些描述符对应的描述符表上的索引写入avail环,并通过eventfd机制通知主机上的virtio后端。由于这些环形缓冲区、描述符表和哈希缓冲区都在共享内存中(虚拟机本质上是一个用户态进程,所以虚拟机内存是由用户态应用和分配的,可以与其他进程共享,比如SPDK、DPDK等。),所以Virtio后端可以直接访问并获取哈希缓冲区的地址和长度,然后直接访问这些哈希缓冲区。处理完请求后,Virtio Backend将数据填充到相应的缓冲区,将相应的描述符表索引写入使用过的环,并注入中断,通过eventfd机制通知虚拟机中的Virtio驱动程序。

虚拟主机

Virtio技术提出后,Virtio设备通常在QEMU中模拟,数据收发需要经过QEMU,再到虚拟机。但是渐渐的,开发者们发现,在QEMU中模拟网卡、收发数据的时候,最终都需要进入内核来操作网卡硬件收发数据。那么,有什么方法可以优化从QEMU到内核的上下文切换以及额外的***开销呢?

2010年,Linux内核社区终于集成了vhost的技术对其进行优化,将Virtuo的数据平面卸载到一个内核线程上进行处理。于是,Virtuo的通信机制从原来的QEMU用户态I/O线程与虚拟机驱动程序(QEMU用户态vcpu线程)之间的通信,变成了vhost内核I/O线程与虚拟机驱动程序(QEMU用户态vcpu线程)之间的通信。vhost内核I/O线程得到数据包后,直接通过内核协议栈和网卡驱动进行处理,优化了QEMU到内核状态的开销。

VFIO

随着云计算规模的不断扩大,一方面,用户不再满足于Virtuo等半虚拟化设备带来的性能体验;另一方面,GPU等难以实现Virtuo的设备应用场景与日俱增。在此背景下,VFIO技术被提出,并于2012年并入Linux内核。VFIO的全称是虚函数I/O,实际上是一个用户态的设备驱动框架。与早期的uio用户态设备驱动框架相比,VFIO可以有效利用硬件IOMMU机制进行安全隔离,因此可以广泛应用于云计算等多租户场景。

如上图所示,QEMU可以通过VFIO直接打开虚拟PCI设备和物理PCI设备之间的数据链路。当虚拟机中的设备驱动访问虚拟PCI设备的bar 空 room时,这个mmio访问会通过EPT机制重定向到真实物理设备对应的bar 空 room,不再需要trap到QEMU。这样虚拟机驱动就相当于直接访问真实的物理设备,几乎零消耗,性能可以达到最佳。同时,VFIO驱动程序使用IOMMU实现设备DMA和中断的重映射。一方面起隔离作用,即某个虚拟机不能操作VFIO,直通设备向同一主机上的其他虚拟机发起DMA和中断。另一方面保证了设备在DMA时可以通过给定的虚拟机物理地址直接访问正确的物理内存。

虚拟主机用户

虽然VFIO可以让虚拟机的I/O性能体验接近物理机,但是这项技术还有一个缺陷,就是不支持热迁移,带有VFIO设备的虚拟机将无法像传统的带有virtio设备的虚拟机一样进行热迁移。这使得开发者开始探索新的设备虚拟化技术,既能满足性能要求,又能灵活运维。2014年QEMU社区整合的vhost-user技术就是其中之一。由于QEMU和vhost的线程模型对I/O性能的优化并不友好,而且从系统的全局角度来看,每个虚拟机分离线程处理I/O的方式可能并不是最优的,vhost-user提出了一种新的方式,即将virtio设备的数据平面卸载到另一个专用进程进行处理。这样,由于是专用进程,线程模型不再受传统QEMU和vhost线程模型的限制,可以随意优化。同时,多个虚拟机的I/O请求可以以1: m模式同时处理。与内核线程模式vhost相比,用户进程在操作和维护上更加灵活,vhost-user框架自提出以来就受到了广泛关注。此外,还介绍了一些以轮询+用户驱动为核心的新的虚拟机I/O服务模型,如SPDK和OVS-DPDK。

视频音频接口模块

在实际应用场景中,VFIO技术除了前面提到的不支持热迁移的问题之外,还有一个限制,就是一个设备只能透明的传输到一个虚拟机,因此无法共享资源。SR-IOV技术可以在一定程度上解决这个问题,即一个物理PCI设备从硬件层面将其资源划分为多个VF,传输给多个虚拟机使用。然而,许多设备可能不具有SR-IOV能力。因此,Linux内核社区在2016年加入了VFIO-mdev技术框架,希望提供一个标准接口,帮助设备驱动在软件层面实现资源划分,并通过VFIO技术传输到虚拟机。

本质上,该技术在内核中实现了一个虚拟设备的总线驱动模型,并扩展了VFIO内核的框架,增加了对mdev总线驱动的支持,只支持从标准硬件PCI设备和硬件平台设备获取透明传输信息。例如,PCI bar 空 room已经更改为既支持从硬件设备直接访问,也支持从mdev设备驱动程序定义的虚拟设备接口访问。这样,比如需要划分一个PCI设备的bar 空作为资源时,通过实现合适的mdev设备驱动,可以将bar 空以4KB(页面大小)的粒度传输到不同的虚拟机。

vDPA

VFIO和virtio是最主流的设备虚拟化技术。VFIO可以直接将硬件资源传输给虚拟机,虚拟机的性能最好,而virtio的性能稍逊,但更灵活。有没有可能结合两者的优势?2020年并入Linux内核主线的vDPA技术框架就是为了实现这个目标。

vDPA的全称是Virtio Data Path Acceleration,代表一类设备:这类设备的数据平面处理严格遵循Virtio协议规范,即驱动程序和设备会按照第三节提到的Virtio通信过程进行通信,但是控制路径,例如通信过程中提到的环形缓冲区和描述符表的内存地址,驱动程序如何通知设备, 设备支持的功能以及驱动程序如何理解这些功能都是由制造商定义的,不一定遵循Virtio协议。 这样做的好处是可以降***造商实现这种设备的复杂性。

为了应用这类设备,Linux内核提出了vDPA作为技术框架。这个技术框架本质上类似于VFIO-mdev,它也实现了一个vDPA设备的总线驱动模型。与VFIO-mdev不同的是,vDPA框架虚拟化的设备可以被虚拟机使用,也可以直接从主机(比如容器)访问。这一切都是因为vDPA设备的数据路径遵循virtio协议规范,所以可以由主机上的Virtio驱动程序直接访问。同时,该技术框架扩展了vhost的内核子系统,赋予其类似于VFIO技术框架的功能,允许硬件资源(环形缓冲区、描述符表、门铃寄存器等。)由vDPA设备用于数据通信,以传输到虚拟机使用。这样虚拟机的virtio驱动也是直接访问硬件资源进行数据通信,不需要经过vhost、vhost-user等处理。更重要的是,由于虚拟机驱动是原有的virtio驱动,QEMU可以在需要支持热迁移的时候,灵活切换软件模拟的方式,保证热迁移的顺利进行。这样,设备虚拟化的技术框架vDPA既保证了最佳性能,又保留了virtio设备的灵活性,还统一了虚拟机和容器的I/O技术栈。

VDUSE

通过上述的vDPA技术框架,我们基本上解决了长期以来设备虚拟化技术在虚拟机场景下暴露出来的一些问题,更重要的是也将virtio技术带入了容器领域。但是这个技术框架还有一个问题,就是需要硬件设备的支持。回想一下,之前提到的virtio、vhost和vhost-user本质上是软件定义的虚拟设备。vDPA这种技术框架有没有可能也可以使用软件定义的设备?VDUSE的技术就是用来实现这个目标的。通过VDUSE,我们可以在一个用户进程中实现一个软件定义的vDPA设备,通过上面的容器或虚拟机的vDPA框架访问virtio或vhost子系统。

这项技术是我们自主研发的,去年10月正式向Linux内核社区开放。现阶段,我们的解决方案已经并入Linux内核主线,我们将在Linux 5.15版与大家见面。同时,我们也将在9月15日举办的虚拟化领域高端技术论坛KVM论坛上在线分享。

结束语

从服务虚拟机到支持容器,从纯软件模拟到硬件直通再到软硬件结合,几十年来,Linux设备虚拟化技术一直朝着极致性能和灵活应用的方向演进。随着云原生的浪潮,各大硬件厂商的进入,软硬件结合新方式的出现,相信未来会有更多精彩的技术在等着我们。

本文来自挽梦忆笙歌投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/535579.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 05-06
下一篇 05-06

相关推荐

  • 无人驾驶技术公司排名

    极飞科技是一家以“提升全球农业生产效率”为使命,构建“无人化”农业生态系统的智慧农业科技公司,成立十几以年来,极飞自主研发并制造了农业无人机农业无人车农机自驾仪农业物联网遥感无人机智慧农业系统等智慧。宝马在其豪华车中已经发布了先进的驾驶员辅助技术例如,车道

    2023-07-28 13:25:01
    535 0
  • 深度技术win7系统稳定吗

    1.2022深度科技win7好用。2022深度科技Win7纯版搭配USB30深度优化版,由新深度科技团队精心打造。它具有超纯、超稳、超快、超耐用等特点。系统严格检测符合安装规范,不存在恶意插件。该系统包含必要的运行组件、通用驱动程序等。2.\x0d\x0a3深度科技Win7系统稳定性高,和正版

    2023-07-28 09:25:01
    825 0
  • 数据挖掘概念与技术第三版pdf 数据挖掘原理与算法第三版

    前不久我们的推荐算法还不够精准?让知识图谱解决”和“如何将知识图谱特征学习应用于推荐系统”的系列文章受到了同学们的广泛欢迎。大家都很关心推荐系统及其相关的底层数据挖掘技术。为了帮助朋友们更好地学习相关内容,我们邀请了微软亚洲研究院社会计算组研究员张福正为大

    2023-07-28 06:09:01
    984 0
  • 云计算虚拟化技术有哪些(云计算虚拟化技术与应用题库)

    近年来,“云计算”的概念在科技界特别是电子界非常流行。云计算已经成为当今的热词,也正在成为新时代科技的象征。那么,什么是云计算呢?有什么用?下面简单回答一下这些问题。云计算(图片来自网络)云计算是分布式计算的一种,指的是将庞大的数据计算和处理程序分解成无数个

    2023-07-24 20:00:01
    472 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信