传统的存储解决方案,在虚拟化化场景下,处理繁杂且高频访问的数据时,常会遭遇性能瓶颈、延迟过高、以及扩展困难等问题,导致用户业务发展受阻。为打破这一困境,一种基于Vhost-user协议构建的高性能分布式存储系统应运而生,该系统以其创新的设计理念与先进的技术特性,为金融、医疗、制造等行业及各类企业提供了一种高性能、高可扩展、且极具成本效益的高性能解决方案。

I/O 虚拟化过程经历了从 I/O 全虚拟化、I/O 半虚拟化、硬件直通再到 Vhost-user,vDPA 加速技术的演进。
3.1 什么是虚拟化
虚拟化技术是一种资源管理技术,它允许在单台物理服务器上运行多个虚拟机(VM),每个虚拟机都有自己的操作系统和应用程序,这种技术可以提高硬件资源的利用率,降低能源消耗,提高系统的可靠性和扩展性。
当前主流的 I/O 设备虚拟化方案:
QEMU 纯软件模拟
利用软件模拟 I/O 设备提供给虚拟机使用。
Virtio 半虚拟方案:
规范了前后端模型,在虚拟机(Guest OS)中使用 frontend 驱动(Virtio Drive),在 Hypervisor(QEMU)中使用 backend 设备(Virtio Device)提供 I/O 能力,通过减少内存复制次数和 VM 陷入次数,提升 I/O 性能,这种方案需要安装 Virtio 驱动。
3.2 什么是KVM
KVM是Kernel-based Virtual Machine的缩写, KVM是一种虚拟化技术,允许通过一个操作系统平台管理多个操作系统。
KVM通过Linux内核的虚拟化功能来实现虚拟机的创建和管理。意味着它依赖于Linux内核来创建和管理虚拟环境。
KVM它使用硬件辅助虚拟化技术,如Intel的VT-x和AMD的AMD-V,来提高虚拟化的效率和性能。KVM的架构包括一个控制接口和一个后端模块,用户可以通过控制接口管理虚拟机,而后端模块负责处理虚拟机的具体操作。
KVM允许用户在一个物理服务器上运行多个虚拟机,每个虚拟机都可以运行不同的操作系统和应用程序互不干扰。
3.3 Virtio 规范和 Vhost 协议
3.3.1 什么是 Virtio
Virtio是一种标准的半虚拟化IO设备模型,将半虚拟化的IO设备驱动(网卡、磁盘设备等)统一起来,便于后续的维护、扩展和优化。任何Hypervisor或其他后端都可以根据Virtio设备的标准实现Virtio设备的后端功能,从而避免继续向内核中加入新的半虚拟化设备驱动。Guest用户也可以在不同虚拟化实现下使用相同的虚拟IO设备和功能,不用考虑不同的Hypervisor下还要适配不同虚拟设备的问题。
Virtio 规范标准:
Virtio是 VM 实现 I/O 通信的标准规范,为虚拟设备提供了一套标准、简单、高效、可扩展的方案。Virtio 规范基于两个元素:设备和驱动程序。
Virtio 目前被用作虚拟机(VM)访问块设备(Virtio-blk)和网络设备(Virtio-net)的标准开放接口,Virtio提供了虚拟机和物理服务器数据交换的通用机制,得到了大多数hypervisor的支持,成为事实上的标准。
Virtio的组成:

Virtio 由三部分组成,前端是驱动层,位于Guest系统内部,中间是虚拟队列(virtqueue),负责数据传输和命令交互,后端设备层,用于具体处理 Guest 发送的请求。
Virtio的优点:
高性能:由于直接与硬件设备通信,避免了额外的软件层开销,提高了I/O性能。
低延迟:减少了数据在虚拟机和宿主机之间的传输,降低了延迟。
Virtio的缺点:
兼容性:需要特定的设备驱动支持,可能在某些操作系统中无法使用。
维护成本:需要对设备驱动进行维护和更新。
3.3.2 什么是 Vhost
Vhost (Virtual Host)是Virtio的一种后端实现方案。Vhost实现了在内核中将Virtio数据路径处理从QEMU卸载到外部元素,bypass掉QEMU进程,让数据包从Host直接转发到Guest。

Vhost协议是一组消息传递机制,被设计出来以用于解决Virtio低效的方面。Vhost 协议允许将 Virtio 数据面实现 offload 到用户态(Vhost-user)或内核(Vhost-net)中以增强性能。
Vhost的优点:
高性能:直接访问宿主机文件系统,避免了额外的数据传输开销。
灵活性:可以在不同的操作系统中使用,不需要特定的设备驱动。
Vhost的缺点:
安全性:虚拟机直接访问宿主机文件系统,可能存在安全风险。
3.3.3 什么是 Vhost-user
Vhost-user是一种新型的半虚拟化技术,它允许虚拟机直接访问宿主机的文件系统,从而提高存储性能。
Vhost-user也是采用 vring 完成共享内存,eventfd 机制完成事件通知。不同之处在于 Vhost-user 实现在用户空间中,用于用户空间中两个进程之间的通信,其采用共享内存的通信方式。
Vhost-user的提交者是Luke Gorrie,他也是snabbswitch的作者。Vhost-backend从原来kernel中的Vhost-net变成了用户空间的snabbswitch,snabbswitch直接接管物理网卡的驱动,从而直接控制网络信息的输入输出。
在软件实现的网络I/O半虚拟化中,使用Vhost-user技术,从虚拟机到host上实现了数据的zero copy(通过大页共享),host到NIC的zero copy(snabbswitch实现的驱动),能进一步加快数据的传输。
4.1 Virtio方案
Virtio 基于 Vring 的 I/O 通讯机制,相比QEMU的纯软件模拟,有效降低了I/O延迟,具有性能优势。这也是Virtio普及的原因,各个厂商的半虚拟化I/O设备实现方式开始变得统一。
Virtio 由三部分组成,前端是驱动层,位于 Guest 系统内部,中间是虚拟队列(virtqueue),负责数据传输和命令交互,后端设备层,用于具体处理 Guest 发送的请求。

Virtio, 作为一种半虚拟化的解决方案,通过virtqueue简化了虚拟机与主机的通信,减少了io和mmio操作,减少陷出次数,显著提升了网络性能。它的工作流程是:虚拟机中断后,数据在用户空间(QEMU)和内核(Virtio-backend)间通过virtqueue进行交换,仅需两次用户态到内核态的切换。
4.2 Vhost 加速
Virtio后端Device用于具体处理Guest的请求,负责I/O的响应,把I/O处理模块放在QEMU进程之外去实现的方案称为Vhost。
Vhost方案的核心是将数据面的处理放到用户空间中,而控制面的逻辑则通过Unix域套接字进行配置。
两种加速方案:
Vhost-kernel方案主要是将I/O负载卸载到内核完成
Vhost-kernel进一步优化了Virtio-net,内核引入Vhost-net.ko模块,使得网络数据可以在内核态处理,只进行一次切换,显著减少了数据传输的延迟,这使得网络性能得到了显著提升。
Vhost-user方案主要是讲IO负载卸载到用户态完成。
Vhost-user则是Vhost-kernel的进一步发展,将部分驱动操作移到用户态,通过snabbswitch(用户空间的网络驱动)直接操控物理网卡,实现了数据的zero copy,极大地提高了数据传输速度。
4.3 Vhost-user方案
Vhost-user工作机制
Vhost-user协议作为Vhost高性能存储的核心技术之一,在用户空间实现了用户态应用程序与虚拟机间的直接数据传输,大幅减少了内核态与用户态之间的切换,有效降低了CPU中断处理开销,提升整体性能。

Vhost-user作为Vhost的用户态实现,通过Unix socket与QEMU进程通信,获取virtqueue的配置信息和内存布局,再通过mmap实现QMU/Guest间的共享内存通信。这种机制使得host上的用户态应用(如存储网关)能够直接访问Virtio设备的virtqueue,无需经过其他队列中转,从而显著提升I/O性能。
Vhost-user工作模式:
Vhost使用UNIX域套接字传输控制消息,根据Vhost是作为server或client运行,Vhost-user支持两种配置模式:
Vhost-user:Vhost-user作为服务端运行,创建Unix域套接字服务文件,并监听来自前端的连接。这是最初Vhost-user支持的模式,但存在一旦DPDK业务进程挂掉,就会对所有VM造成影响;
Vhost-user-client:Vhost-user作为客户端运行,由DPDK业务进程负责发起对服务端的连接。
Vhost-user方案优势:
消除 Guest 内核更新 PCI 配置空间,QEMU 捕获 Guest 的 VMM 陷入所带来的 CPU 上下文开销(后端处理线程采用轮询所有 virtqueue)。
用户态的进程间内存共享,优化数据复制效率(零拷贝)。
Vhost-user方案结合Expontech WDS(WiDE Hyper-IO Disk Storage)的无锁架构,Polling机制,零拷贝,NVMe协议等关键技术实现了IO效率的大幅提升。
5.1 WDS的polling机制
WDS 实现的Vhost backend 通过 polling机制,避免了虚拟机每次I/O操作时kick后端存储,极大提升系统性能。

5.2 WDS 的全无锁架构
采用用户态的无锁数据通道,结合RTC IO处理模型,实现端到端无上下文切换、无锁零中断、用户态、以及高速的网络I/O处理。通过CPU绑核,以及异步轮询策略最大化发挥单核(虚拟线程核)处理能力,将软件栈的时延压低至20~40μs,较传统分布式I/O栈的400μs有了数量级提升,充分释放新一代硬件和网络技术的能力。

5.3 WDS 的全栈内存零拷贝技术
由于我们的后端存在高性能的物理NVMe控制器及用户态NVMe驱动,因此对VM中下发的I/O命令,我们通过内存地址转换(Guest物理地址到主机虚拟地址)即可实现VM到NVMe设备端到端的数据零拷贝实现。

5.4 WDS的多核并发处理能力
Vhost-user 协议可以充分发挥 CPU 多核能力,WDS通过均衡算法可以均匀的把 virtqueue分布在每个 CPU 核上,实现极大的并发能力。
5.5 WDS的减少上下文切换开销
传统虚拟化 IO 栈从 Guest OS kernel 到 QEUM 再到 Host OS kernel 有两次上下文切换开销,WDS通过Vhost-user 协议把 Host kernel 部分卸载到了 USS 进程,减少了一次上下文切换。
为了验证Vhost-user方案+WDS主存储的实际效能,我们采用了典型的3台服务器集群配置,并利用了高效能的RDMA网络环境进行连接。

测试过程中,Vhost主存储展现了卓越的性能表现。
6.1 单卷单深度场景测试
在严苛的延迟测试条件下,我们将fio测试设置为depth=1,numjob=1时,虚拟机内部执行的随机4KB读写操作延迟控制在100微秒级别,展现出极佳的实时响应能力。

6.2 单卷多深度场景测试
为验证系统的高并发处理能力,我们将fio测试参数调整为depth=64,numjob=8,此时系统在保证一定性能水平的前提下,成功实现了百万级别的随机小IOPS,读写性能均达到业界领先水平。


在场景实践中,实际表现情况:
某高端制造客户业务测试中,Vhost主存储在集群读写性能上达到行业头部水平,相较于高端存储阵列产品,提升约21%。
某三甲医院测试中,相较传统的物理服务器+存储阵列解决方案,可支撑的挂号并发量提升63%。大大节省了患者的时间,患者就诊体验可以得到显著改善。
某金融客户的批跑测试中,与某国外产品在相同配置条件下进行比较,跑批处理时间实际上降低62%。
通过基础知识和真实的性能数据介绍,可以看出新一代Vhost主存储系统WDS以其创新的技术原理与显著的业务价值,为各行各业提供了高性能、高可靠且极具成本效益的数据存储解决方案。希望这篇文章对于读者理解 Vhost技术,推动企业应对数据挑战有所帮助。
媒体报道 | 36氪专访华瑞指数云:SDS进入2.0时代,渐进式迭代以10年为周期
技术专题 | NVMe-oF给存储带来了什么收益


