序言
机器设备虚拟技术一直是云计算技术行业最重要的基本技术性之一。我们在vm虚拟机中见到的各类机器设备,如网口,硬盘,电脑键盘和电脑鼠标,都离不了此项新技术的协助。在这篇文章中,大家将从技术性演变的视角来谈一谈Linux目前的和将要发生的机器设备虚拟技术。
圈套和效仿
在较早的环节,机器设备虚拟化技术常常与设备手机模拟器技术性捆缚在一起,比如QEMU。我们可以根据QEMU仿真模拟真正元器件的全部存储器合理布局和操作步骤。当QEMUvm虚拟机中的机器设备推动必须浏览这一虚似机器设备的存储器时,这一浏览命令会被截流到QEMU中,由QEMU解决。那样,vm虚拟机中的机器设备驱动软件如同实际操作虚似机器设备时浏览真正的硬件配置机器设备一样,机器设备驱动软件不用一切变更。
病毒感染
以上圈套仿真模拟方式用以仿真模拟机器设备。尽管不用拆换真真正正的机器设备推动,但机器设备浏览时不停的断线断线产生了明显的特性难题。因此,一种半虚拟技术virtio应时而生,并于2008年划入Linux核心。
与圈套仿真模拟对比,Virtio不会再依靠引进的机器设备驱动软件,反而是界定了一个最新的常用于虚似机器设备的驱动架构。机器设备驱动软件了解自已在实际操作虚似机器设备,因而规避了很多mmio/pio实际操作,这种实际操作将会会造成真正I/O途径上的圈套和圈套,进而提高了特性。vm虚拟机中的Virtio驱动软件与QEMU仿真模拟的Virtio机器设备间的数据信息互动,实质上是一套根据共享内存 环状序列的通讯体制。分拆virtqueue包含两个环缓冲区域(可以用环,已用环)和一个ioctl表。工作方案类似DMA。vm虚拟机中的virtio驱动软件最先将运行内存中必须传送的一个hach缓冲区域的具体位置和长短载入ioctl表,随后将这种ioctl相匹配的ioctl表里的数据库索引载入avail ring,并根据eventfd体制通告服务器上的virtio后面。因为这种环状缓冲区域,ioctl表和hach缓冲区域都是在共享内存中(vm虚拟机实质上是客户方式的过程,因而vm虚拟机运行内存是由客户方式运用和分派的,能够与别的过程共享资源,如SPDK,DPDK等。),Virtio后面能够同时浏览并获得hach缓冲区域的具体位置和长短,随后立即浏览这种hach缓冲区域。在解决要求时,virtio后面将数据信息补充到合适的缓冲区域,将特定的ioctl表数据库索引载入已用环,并根据eventfd体制引入终断,通告vm虚拟机中的Virtio驱动软件。
云虚拟主机
Virtio技术性明确提出后,一般在QEMU中仿真模拟Virtio机器设备,数据信息的传送和接受必须通过QEMU再到vm虚拟机。但慢慢地,开发人员发觉,在QEMU中仿真模拟网口,收取和发送数据信息时,都必须进到核心实际操作网口硬件配置开展具体的数据信息收取和发送。那麼,有什么方法能够提升从QEMU到核心的前后文转换及其附加的拷贝花销呢?
2010年,Linux核心小区总算列入了vhost技术性实现提升,将virtio的数据信息平面图卸载掉到一个核心进程开展解决,促使virtio通讯体制从原先的QEMU客户方式I/O进程和vm虚拟机驱动软件(QEMU客户方式vcpu线程)通讯变成vhost核心I/O进程和vm虚拟机驱动软件(QEMU客户方式vcpu线程)通讯。vhost核心I/O进程获得数据文件后,立即去核心tcp协议和无线驱动开展解决,进而提升了QEMU到核心情况的附加花销。
VFIO
伴随着云计算技术经营规模的不断发展,客户不达到于virtio等半虚拟化技术机器设备产生的特性感受,另一方面,GPU等无法Virtio的专用设备的应用领域日益增加。在这类情况下,VFIO于2012年被明确提出并列入Linux核心。VFIO的全名是虚函数I/O,事实上是一个客户方式的机器设备推动架构。与前期的uio客户方式机器设备推动架构对比,VFIO能够合理运用硬件配置IOMMU体制开展可靠防护,因而能够普遍使用于云计算技术等多租户要求的情景。
如上图所述所显示,QEMU能够根据VFIO立即开启虚似PCI机器设备和物理学PCI机器设备间的卫星通信系统路。当vm虚拟机中的机器设备推动浏览虚似PCI机器设备的bar 空时,这类mmio浏览会根据EPT体制跳转到真正物理学机器设备相匹配的bar 空上,而不是陷印到QEMU上。那样vm虚拟机推动能够以贴近零耗费的方法立即浏览真正的物理学机器设备,特性能够达到最好。与此同时,VFIO推动应用IOMMU完成机器设备DMA和终断的重投射。一方面具有隔离的作用,即一个vm虚拟机没法实际操作VFIO直达机器设备向同一服务器上的别的vm虚拟机进行DMA和终断;另一方面也确保了机器设备在实行DMA时,能够根据给出的vm虚拟机MAC地址立即浏览正常的物理内存。
Vhost客户
尽管VFIO能够产生贴近物理机的I/O特性感受,可是这个方法或是有一个缺点,便是不兼容热转移,带VFIO机器设备的vm虚拟机没法像传统式带virtio机器设备的vm虚拟机一样开展热转移。这促使开发人员逐渐探寻新的机器设备虚拟技术,既能达到性能测试方案,又在运维管理上具备协调能力。2014年,QEMU小区融合的vhost客户技术性便是这其中之一。因为QEMU和vhost的进程实体模型对I/O特性的提升并不友善,而每一个vm虚拟机独立分离出来进程解决I/O的形式从系统软件全局性看来很有可能并并不是最佳的,因而vhost-user明确提出了一种新的方法,将要virtio机器设备的数据信息平面图卸载掉到另一个独特的过程开展解决。那样,因为是一个比较特殊的全过程,进程实体模型不会再受传统式QEMU和vhost进程实体模型的限定,能够随便提升。与此同时,能够以1: m方式与此同时解决好几个虚拟系统的I/O要求。除此之外,与核心进程方式vhost对比,客户过程在操控和维护保养上更为灵便,vhost-user架构自明确提出至今就遭受普遍关心。除此之外,还详细介绍了以轮循 客户方式为关键的新式vm虚拟机I/O服务项目实体模型SPDK和OVS-DPDK。
VFIO-mdev
在VFIO技术性的具体应用领域中,除开之前看到的不兼容热转移的难题,还有一个限定便是一个机器设备只有传送到一个vm虚拟机,没法资源共享。SR-IOV技术性能够在一定水平上处理这个问题,即从硬件配置方面将一个物理学PCI机器设备分为多个VFS,并传送给多个vm虚拟机应用。可是,很多机器设备很有可能不具有SR-IOV作用。因而,Linux核心小区在2016年列入了VFIO-mdev做为技术性架构,期待给予一个通信接口,协助机器设备推动完成手机软件方面的資源区划,并根据VFIO技术性传送到vm虚拟机。
实质上,该技术性在核心中完成了一个Mediated机器设备的系统总线推动实体模型,并在VFIO核心架构上开展了拓展,提升了mdev系统总线推动对MDEV等虚似机器设备的适用。从最开始,它只适用从规范硬件配置PCI机器设备和硬件系统机器设备获得全透明信息内容。比如,PCI bar 空早已变成一个虚似机器设备插口,能够立即从硬件配置机器设备获得,由mdev机器设备推动界定。以这类方法,比如,当PCI机器设备的bar 空必须被区划为資源时,根据完成适合的mdev机器设备驱动软件,bar 空能够以4KB(网页页面尺寸)的粒度分布被传送到不一样的vm虚拟机。
vDPA
VFIO和virtio是二种一直是最核心的机器设备虚拟技术。VFIO能够同时将硬件平台传送给vm虚拟机,特性最好是,而virtio特性较低,但更灵便。是否有很有可能把二者的优势融合起來?2020年,它被列入Linux核心的vDPA技术性架构,便是为了更好地完成这些总体目标。
vDPA的全名是Virtio Data Path Acceleration,表明一种机器设备:这类设施的数据信息平面图解决严苛遵循Virtio协议书标准,即驱动软件和机器设备会依照第3节提及的Virtio通讯流开展通讯,但操纵途径,比如通讯流中提及的环状缓冲区域和ioctl表的基址,驱动软件怎样通告机器设备,机器设备兼容的作用,驱动软件怎样认知这种全是生产商设计的,很有可能不一定遵循Virtio协议书。那样做的益处是,在达到这类机器设备时,能够减少生产商的多元性。
为了更好地运用这类机器设备,Linux核心明确提出了一个vDPA的技术性架构。这一系统架构实质上类似VFIO-mdev,也完成了一个系统总线推动的vDPA机器设备实体模型。与VFIO-mdev不一样,根据vDPA架构虚拟化技术的机器设备能够被vm虚拟机应用,立即从服务器(如器皿)浏览。这一切都得益于vDPA机器设备的数据信息途径遵循virtio协议书标准,因而能够由服务器上的Virtio驱动软件立即浏览。与此同时,技术性架构拓展了vhost核心分系统,授予其相近VFIO技术性架构的作用,并容许硬件平台(环状缓冲区域,ioctl表,电子门铃存储器等)。)由vDPA机器设备用以传送到vm虚拟机的数据通讯。因而,vm虚拟机的virtio驱动软件在传递数据时也立即浏览硬件平台,而不是根据vhost或vhost-user解决他们。更主要的是,因为vm虚拟机推动是原来的virtio推动,当必须适用热转移时,QEMU能够灵便转换手机软件仿真模拟方式,确保热转移的顺利开展。那样,机器设备虚拟化技术的技术性架构vDPA既保证了最好特性又保存了virtio机器设备的协调能力,还统一了vm虚拟机和器皿的I/O技术栈。
VDUSE
根据以上vDPA技术性架构,大家基本上解决了机器设备虚拟技术一直以来在vm虚拟机情景中曝露出去的一些难题,更主要的是,它将virtio技术性送到了器皿行业。可是这一系统架构或是有一个难题,便是必须硬件配置设施的适用。回忆一下,前边看到的virtio,vhost和vhost-user实质上是软件定义的虚似机器设备。vDPA技术性架构是不是还可以应用软件定义的机器设备?VDUSE技术性用以完成这一总体目标。根据VDUSE,我们可以在客户过程中完成一个软件定义的vDPA机器设备,并根据上边提及的vDPA架构浏览virtio或vhost分系统,供器皿或vm虚拟机应用。
此项技术性是大家自主研发的,上年10月宣布向Linux核心小区对外开放。目前,大家的方法早已融进到Linux核心的主线任务中,大家将在Linux 5.15版本号中与您碰面。与此同时,大家将在9月15日举办的虚拟化技术行业高档技术交流KVM社区论坛上线上共享。
结语
从服务项目vm虚拟机到适用器皿,从纯手机软件模拟仿真到硬件配置直达再到硬件软件融合,近几十年来,Linux机器设备虚拟技术一直向着完美特性,灵便运用的方位演变。伴随着云原生的浪潮和各种硬件配置公司的进到,硬件软件相结合的新方法层出不穷。大家相信未来朗诵会出现大量令人激动的方法等待大家。