在云计算的浪潮中,虚拟化技术扮演着举足轻重的角色。它通过将物理机集群的资源进行抽象整合,构建出一个统一的虚拟资源池。在这个资源池中,每一台物理机上都会运行宿主机以及虚拟化的系统软件。这些系统软件负责为用户提供虚拟的计算环境,包括虚拟CPU、虚拟内存、虚拟网络等,都是由Hypervisor这一核心组件来实现的。Hypervisor不仅确保了虚拟机计算能力的平稳性和弹性,还为用户提供了灵活的资源调度和分配能力。
虚拟化技术在云数据中心、大数据处理、AI与机器学习等多个领域都得到了广泛的应用。通过虚拟化技术,企业可以更加高效地利用物理资源,实现资源的按需分配和弹性扩展,从而提高业务的灵活性和响应速度。
尽管虚拟化技术带来了诸多优势,但在实际应用中也面临着一些问题和挑战。
首先,虚拟化架构中的管理面会占用部分CPU和内存资源,从而降低了系统整体资源的利用率。系统服务systemd,或libvirtd等虚机管理程序的线程与vCPU线程之间存在资源争抢的问题,导致业务虚拟机的稳定性难以保证,进而影响客户业务的质量。
其次,虚拟机I/O处理线程会占用大量的CPU和内存资源。虚拟化通常使用virtio-blk,virito-net为虚机提供磁盘和网卡设备,为了获得更好的I/O性能,virtio-blk会采用iothread机制加速磁盘I/O的处理;而virtio-net则采用vhost-net的方案将网卡的I/O卸载到内核,通过减少用户态和内核态的切换来减速网卡的I/O的处理;不论是iothread还是vhost-net,都需要在Host上创建对应的线程来完成具体的I/O处理,当I/O负载高的时候,iothread和vhost-net的处理线程会占用大量的CPU和内存资源。
此外,虚拟化技术的安全性问题也不容忽视。当前主流虚拟化方案都是采用QEMU + KVM的形式,QEMU模拟了丰富的外设,由于编写模拟设备的人员众多,加上设备的接口大多数比较复杂,因此QEMU经常在处理这些读写请求的时候没有完整的对请求数据进行安全校验,导致产生了很多安全性问题。攻击者可能会利用虚拟化和Hypervisor的安全漏洞展开攻击,从而威胁到整个虚拟化环境的安全。
针对虚拟化技术面临的问题和挑战,业界头部云服务提供商纷纷展开了探索和研发,并不约而同的提出了基于DPU的轻量虚拟化方案。
AWS研发了Nitro系统,通过Nitro卡将虚拟机的I/O卸载到硬件上,从而消除了I/O处理线程对VCPU的资源抢占。同时,Nitro hypervisor内置了虚拟机的管理能力,将管理组件卸载到Nitro SoC上。这种设计不仅提高了系统的资源利用率和稳定性,还大大增强了虚拟化的安全性。Host侧只运行Nitro hypervisor,不提供通用OS能力,没有用户态和文件系统,从而减少了潜在的攻击面。
VMware也提出了基于DPU的ESXi卸载方案。在该方案中,Host ESXi hypervisor负责虚拟化的核心逻辑,而DPU上的ESXi hypervisor则负责主机管理、存储和网络等功能。这种设计同样消除了管理和I/O处理的CPU占用,减少了vCPU的抢占,保证了vCPU的性能。同时,它也减少了Host的攻击面,增强了系统的安全性。
阿里云则推出了神龙系统,其中的Dragonfly Hypervisor以其超轻薄、资源零损耗的特点著称。根据公开资料,其内存占用每个虚拟机不到1MB,CPU占用小于0.1%。这种超低的资源损耗使得神龙系统能够提供更加平稳、高效的虚拟化服务。同时,Dragonfly Hypervisor还具备超平稳、超平滑的特点,能够解决资源池之间互相热迁移的难题,与KVM无缝兼容,从而为用户提供了更加稳定、可靠的云服务。
基于DPU的轻量虚拟化Hypervisor解决方案在市场上取得了显著的成效。它大幅提升了资源利用率,降低了运营成本,增强了系统的安全性,为用户提供了更加稳定、可靠的云服务。这些优势使得该方案在市场上得到了广泛的认可,其商业价值也得到了充分的体现。
然而,头部云厂商自研的解决方案往往具有高度定制化和封闭性的特点,大部分未面向公开商用市场,这限制了其应用范围的扩大。尤其是在国内市场,商业化、公开的DPU轻量虚拟化解决方案仍然是一片空白。这不仅限制了其他云厂商或行业客户对这些方案的直接采用,也阻碍了基于DPU的虚拟化技术的进一步发展和普及。
综上所述,基于DPU的轻量虚拟化方案将为虚拟化技术带来了新的发展机遇,各云服务提供商和企业对该类方案的需求日益增加,市场呼唤创新和开放的解决方案。
为了应对虚拟化技术面临的问题和挑战,中科驭数在多年的技术积累和丰富的行业经验基础上,面向公开市场,推出了基于自研DPU的轻量虚拟化解决方案。
基于中科驭数DPU的轻量虚拟化方案,在Host侧只保留Hypervisor和部分Linux内核功能,且不提供用户态控制面组件。QEMU作为Device Emulation service组件运行在SoC,提供虚机机型及设备的模拟,Host侧只有VCPU内核线程。驭数DPU卡支持nvme和virtio-net的硬件卸载,因此虚机的存储和网卡采用VF直通的方式透传给虚机,提供高性能的存储和网络。其他非关键I/O设备则采用半卸载的方式,卸载到SoC侧,交由QEMU进行模拟。
该方案中,每一个虚机都分配了一个特殊的PCIe设备,该PCIe设备的BAR空间划分成了两部分,其他一部分用于API信息的交互,成为API CHANNEL;另外一部分用于I/O请求的交互,称为IOREQ RING BUFFER。
以下为该方案的关键组件:
Libvritd:该组件运行在SoC侧,对上层管理组件如nova-compute等提供虚机管理API,libvirtd进一步和SoC侧QEMU进行交互达到管理虚机生命周期的目的。
QEMU:运行在SoC侧,提供虚机的I/O设备模拟服务,QEMU的交互接口是SoC-KVM提供的/dev/kvm-soc设备文件。QEMU在模拟I/O设备的过程中通过DPU卡提供DMA机制访问HOST内存。
SOC-KVM:这是HOST-KVM内核模块在SoC侧的镜像,通过向用户态暴露/dev/kvm-soc设备文件,供用户态组件如QEMU,libvirtd等调用SOC-KVM提供的能力。该KVM内核模块不提供具体的CPU、MEMORY、I/O等虚拟化能力,只是作为管理面API和虚机I/O请求的转发模块。管理面API通过API channel转发到HOST-KVM模块,并由HOST-KVM进行处理;来自HOST-KVM的I/O请求保存在IOREQ RING BUFFER中,并由SOC-KVM分发给用户态QEMU。
HOST-KVM:这个内核模块是原生KVM的扩展,与原生KVM的区别是:请求不是来自用户态I/OCTL请求,而是来自API channel;除了原生提供的API,HOST-KVM进一步提供了管里面API的处理,如nova-compute或kubelet的资源汇报类接口。
驭数DPU卡提供了SoC和Host间的双向内存同步机制及SoC和Host间的双向中断机制,配合IOREQ RING BUFFER,使得虚机的I/O请求可以卸载到SoC侧QEMU完成;通过API channel,使得来自SoC侧管理API可以被HOST-KVM处理。
中科驭数DPU轻量虚拟化在保持虚机形态不变的情况下,完成了的虚机I/O和控制面的卸载;以下对主要部分做详细描述:
Libvirt-soc使用原生API和QEMU-SOC交互,QEMU-SOC采用原生API和KVM-SOC交互,KVM-SOC使用硬件的API channel通道,转发KVM-SOC的API到KVM-HOST,最后由KVM-HOST完成具体的处理。上图以虚机启动为例展示了各个组件的交互,在完成VM和VCPU创建后,QEMU-SOC进一步加载BIOS或kernel,加载后需要使用DMA机制将BIOS内存块同步给Host;加载成功后,设置虚机的寄存器,并发送kvm_run请求,开始VCPU的运行。
GUEST的I/O操作,无论是PIO还是MMIO操作,都会导致VMEXIT,VMEXIT后KVM-HOST检查是否能够处理该I/O,如果无法处理,则需要将该I/O转交给KVM-SOC。KVM-HOST构造I/OREQ结构体,该结构体描述了该I/O的类型,地址,长度,数据等内容。构造完成后,将该IOREQ存放在IOREQ RING BUFFER中,并通过中断机制通知SoC侧,有新IOREQ到达。
KVM-SOC通过ioeventfd机制通知QEMU-SOC,QEMU-SOC访问BAR空间的IO RING BUFFER,取出IOREQ并处理。处理过程中,通过DMA机制访问Host内存。处理结束后,QEMU-SOC通过KVM-SOC 的ioctl接口注入中断。KVM-SOC通过BAR空间的API channel转发中断注入的API到KVM-HOST,最终由KVM-HOST完成虚机中断的注入工作。
Libvirt-soc发起热迁移操作,使用QEMU-SOC提供的QMP命令接口通知QEMU-SOC。QEMU-SOC连接迁移对端的QEMU,并开始热迁移的操作。QEMU-SOC首先发送全量的内存到对端,内存的同步使用DMA机制完成;全量内存发送完成后,开始迭代发送脏页,首先通过API channel,告知KVM-HOST开始记录脏页,在后续的迭代过程中,使用DMA机制将脏页信息从Host同步到SoC。在热迁移的最后阶段,KVM-SOC通过API channel发送暂停VCPU的API,KVM-HOST停止VCPU的运行。VCPU暂停后,QEMU-SOC停止所有I/O设备的运行,并发送最后的脏页的设备状态到对端。热迁移结束后,QEMU-SOC调用KVM-SOC的ioctl接口,销毁虚机,KVM-SOC通过API channel通知KVM-HOST完成真正的销毁操作。
在该方案中nova-compute和libvirt均运行在DPU的SoC系统内,libvirtd直接和SoC侧QEMU交互镜像虚机管理,Host文件系统通过sharedfs代理到SoC侧,libvirtd通过在SoC侧访问Host文件系统来完成Host系统资源的跟踪和管理。虚机的网络和存储使用PCIe直通的方式,给虚机提供高性能存储和网络。存储和网络资源的管理通过nova-compute的yusur-driver完成,yusur-driver使用/dev/kvm-soc接口请求KVM-HOST侧的PCIe资源管理能力,完成虚机PCIe资源的准备、销毁等操作。
基于DPU的轻量虚拟化解决方案展现出了显著的价值与优势,这一方案不仅填补了市场空白,更引领了云计算行业的技术创新。
a. 填补空白,引领创新
该方案作为国内首创的、公开的、可商业化的DPU轻量虚拟化方案,打破了头部云厂商自研方案的封闭性,为更多云厂商和行业客户提供了可借鉴和采用的先进技术。这一方案的推出,无疑为云计算行业的多元化发展注入了新的活力。
b. 硬件加速,性能卓越
基于DPU的轻量虚拟化方案充分利用了DPU提供的硬件加速能力,显著提升了系统性能和I/O处理效率。在云计算环境中,I/O性能往往是决定业务稳定性和响应速度的关键因素。该方案通过I/O卸载技术,将I/O处理下放给DPU,有效减轻了HOST的负担,从而提升了整体系统的性能。
c. 显著提升资源利用率
该方案还显著提升了资源利用率。传统的虚拟化技术中,管理面和I/O处理线程会占用大量的CPU和内存资源,导致系统整体资源利用率降低。而基于DPU的轻量虚拟化方案则通过精简Hypervisor的设计,几乎不消耗任何主机侧的资源,使得所有的资源都被业务系统所使用。这一优势不仅降低了运营成本,还提高了业务的盈利能力。
d. 减少攻击面,强化安全
该方案在安全性方面也表现出色,通过I/O卸载技术,将I/O处理下放给DPU,有效地减少了HOST的攻击面,大大增强了HOST的安全性。同时,该方案还采用了多种安全技术和措施,进一步提升了系统的安全性。
综上所述,基于DPU的轻量虚拟化解决方案在技术创新、性能提升、资源利用率提高以及安全性增强等方面都展现出了显著的优势和价值。这一方案的推出将为云计算行业的发展带来新的机遇。
展望未来,基于DPU的轻量虚拟化解决方案具有广阔的发展前景。随着云计算、大数据、人工智能等领域的快速发展,资源池规模不断扩大,对虚拟化技术的需求将日益增长。该方案以其卓越的性能、高效的资源利用率和强大的安全性,将成为推动这些领域发展的关键力量。
在技术层面,随着DPU技术的不断演进和升级,基于DPU的轻量虚拟化解决方案也将不断优化和完善,我们可以期待该方案在I/O处理效率、资源利用率和安全性方面实现更大的突破,为用户提供更加优质、高效的云服务体验。
同时,该方案的商业化应用也将进一步拓展。随着越来越多的云厂商和行业客户认识到其价值和优势,基于DPU的轻量虚拟化解决方案有望在市场上实现更广泛的应用和推广,为云计算行业的持续发展注入新的动力。
本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。
作者: Yusur_Tech, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3991230.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论