当前,服务器虚拟化市场呈现出多元化发展格局,由众多技术创新型科技企业持续推动功能迭代。传统虚拟化厂商如 VMware 凭借 vSphere 产品依然被众多企业采纳,与此同时,开源技术的兴起推动并加速了以 KVM(Kernel-based Virtual Machine)为核心的虚拟化方案在云计算领域快速普及。国内外众多科技公司,包括公有云服务提供商和私有云解决方案提供商,均基于 KVM 技术构建产品和解决方案,不断推动虚拟化技术的演进与开源项目的持续发展。
作为专注于技术创新的企业云厂商,SmartX 基于 KVM 技术深度开发了原生虚拟化模块 ELF,为企业用户提供稳定、可靠、好用的虚拟化平台。同时,得益于专业的自研能力,SmartX 积极参与开源社区共建,在实践中发现问题、解决问题,累计提交 85 次 Patch(代码补丁),推动虚拟化开源技术的可持续升级。
欲了解更多 SmartX ELF 虚拟化及企业云平台核心功能,欢迎点击获取《SmartX ELF 虚拟化核心功能集》!
始于开源技术,重在自主创新
SmartX 于 2013 年创立之初,致力于为企业打造灵活易用、稳定可靠且可按需扩展的数据中心基础架构。其核心为自主设计研发的分布式存储系统,作为基础底座提供数据服务。在虚拟化功能方面,SmartX 结合自身经验,并经过充分的技术和行业调研,选择基于开源虚拟化技术 KVM 和 QEMU 进行深度的二次开发,并在过程中不断探索 SPDK 和 DPDK 等新技术的融合,打造了一套安全、稳定和高性能的虚拟化解决方案。结合自研分布式存储软件,SmartX 企业云基础设施既可支持计算存储融合部署(超融合架构),又可支持计算与存储分离部署(存算分离)架构,满足多种企业云化基础设施需求。

KVM 和 QEMU 作为开源虚拟化领域协作密切的核心组件,以其高性能、灵活性和广泛的社区支持,满足了企业对计算资源的高效管理和灵活调度的需求,成为构建虚拟化平台的理想选择。这里简要介绍一下 KVM 与 QEMU 的关系及 SPDK/DPDK,方便读者更好地理解后文内容。
KVM 是 Linux 内核中的虚拟化模块,主要负责提供硬件虚拟化支持,允许宿主机通过 CPU 的硬件虚拟化扩展(如 Intel VT-x / AMD-V / ARM Virtualization Extensions)来运行多个虚拟机。它能够高效地管理虚拟机的 CPU 和内存资源,实现高性能的虚拟化。
然而,KVM 只是提供虚拟化的底层功能,它并不直接管理虚拟机或模拟虚拟硬件。这时,QEMU 就发挥了重要作用。QEMU 是一个强大的虚拟机管理工具,负责管理虚拟机生命周期,并模拟各种硬件设备(如磁盘、网络接口、USB 设备等)。
当 KVM 和 QEMU 配合使用时,QEMU 提供虚拟机的高层管理和硬件模拟功能,而 KVM 则提供硬件加速,利用硬件虚拟化技术提高虚拟机的性能。具体来说,QEMU 通过调用 KVM 的接口,将虚拟机的计算任务交给硬件虚拟化来执行,从而获得接近原生宿主机的性能。他们相互配合,共同为 Linux 系统提供了一种高效、灵活的虚拟化方案。
SPDK(Storage Performance Development Kit)和 DPDK(Data Plane Development Kit)都是用于提升系统性能的开发工具包。SPDK 加速存储设备访问,通过绕过操作系统的传统存储栈,直接访问存储设备,减少数据拷贝和上下文切换,从而显著提高存储 I/O 性能。DPDK 主要用于加速网络数据包的处理,通过优化网卡驱动、内存管理和数据路径,将网络处理从内核态转移到用户态,减少内核态和用户态之间的切换开销,提高处理效率。
专业研发能力,推动社区发展
基于专业的自研能力,SmartX ELF 虚拟化已落地金融、医疗、制造等多个行业头部企业,并在实践中发现问题、解决问题,积极提交 Patch* 以促进开源技术持续升级。
* Patch 是一种用于更新和修改 Linux 系统中软件或内核代码的文件。通常包含了对原始代码的修改、添加或删除等操作。Patch 的作用主要是修复软件漏洞、改进性能、添加新功能等。
在使用开源组件时,我们并不满足于“简单修改“的拿来主义使用方式。在开发过程中,我们发现并修复了 QEMU/SPDK/DPDK 的代码问题和特性缺失等问题,并向社区提交了高质量的 Patch。截至 2024 年底,SmartX 共计向社区提交 85 次 Patch(代码修改),涉及功能开发、特性开发、安全增强和 Bug 修复,通过社区协作方式,不断优化、完善和推进开源项目发展。这些贡献不仅提升了开源项目的健壮性,也为全球开发者提供了更好的技术支持。这些 Patch 包括:
- 实现 vCPU 脏页速率计算,并实现新一代迁移收敛算法 dirty-limit。
- 加密磁盘支持分离密钥 header。
- 加密磁盘算法增强,支持 SM4 算法。
- 实现热迁移周期性限流,将热迁移限流时间优化为常量。
- 完整实现 vhost-user-scsi 重连及 Guest 重启后 vhost-user-scsi/blk 无法正常工作和内存访问越界等问题。
- 完善了 SPDK vhost-user 的各种异常处理,包括异常卡死、死锁、虚拟机 IO error 等严重影响虚拟机运行的问题修复,提高了稳定性和可靠性。
- 解决 DPDK 大页内存问题,以及实现 vhost-user 下 virtio 的 PCI 配置空间变更。
- ……
时间线统计(每年提交 Patch 数量趋势图,提交 Patch 数量远超国内大多数超融合/虚拟化厂商)。
典型 Patch 举例
下面我们挑选一个具有代表性的功能 Patch 进行详细阐述,为方便阅读,尽量简化专业术语。
问题背景:在使用 vhost-user-scsi/blk 替换 virtio (虚拟化设备仿真,例如模拟虚拟磁盘)实现加速虚拟机磁盘存储性能时,遇到一个常见的运维操作问题“扩展虚拟磁盘容量”,Guest VM (虚拟机)无法感知磁盘容量变化(virtio 虚拟磁盘则不存在此问题)。在原生的 DPDK 和 SPDK 实现中,没有对此功能的支持。
构建方案:为 vhost-user-scsi/blk 添加 resize 特性来实现当后端配置发生变化时,触发通知并完成前端配置同步更新。以下是 blk 实现的过程概要。
- 对于 vhost-user 磁盘,由于前后端分离,Qemu 和 Guest OS(虚拟机操作系统)无法感知到后端的变化,vhost-user 前后端之间的联系是通过 vhost Domain Socket 控制平面实现。vhost-user 定义了 Master 和 Slave 角色,一般主动发送消息的为 Master,也就是 QEMU,vhost-user Target 是 Slave 端。
- 基于此结构,正确的做法是通过外部调用 vhost Target 的 RPC 接口,触发一次 Slave 到 Master 的通知(通知类型 VHOST_USER_SLAVE_CONFIG_CHANGE_MSG)。
- vhost-user Slave 可以发送这个消息到 vhost-user Master,通知 Device 的配置空间已经改变。Qemu 将会发送 VHOST_USER_GET_CONFIG 消息到 Slave 来获取最新的配置空间内容。Qemu 在执行完 Get Config 和中断注入通知 Guest OS 配置更新后,需要回复 Slave 配置空间改变是否成功。
- 对于 vhost-user-scsi 的实现与 vhost-user-blk 并不一样,但原理相通,这里不再展开。
意义:此类的 Patch 还有很多,SmartX 围绕自身对产品设计的理解和功能迭代诉求,不断探索新的前沿技术与传统虚拟化的融合,强化基础设施的稳定性、安全性、高性能和易用性,从而为用户带来全新的使用体验,并为社区提供一种技术实现的参考方向。
深度技术掌握,构建核心竞争力
我们不仅在 KVM 和QEMU 的基础上进行了深度定制和优化,还自主研发了多项关键技术,例如:
- 全栈架构(x86 / C86 / ARM)下的虚拟机存储性能加速 Boost 模式。
- 虚拟机 CPU 独占、资源预留和 NUMA 优化。
- 虚拟机网络高性能方案 SRIOV。
- 虚拟机 USB 跨主机远程访问。
- 虚拟机网络和磁盘 I/O QoS。
- 硬件加密设备虚拟化。
- GPU 算力直通和 vGPU 切分。
- 虚拟机高可用 HA(除常规检查外,支持业务网络和操作系统蓝屏或内核崩溃检查机制)。
- 动态资源调度 DRS。
- 虚拟机迁移多种实现手段(热 / 冷 / 分段)。
- 虚拟机秒级快照和克隆。
- ……
这些技术创新不仅使我们的虚拟化软件在功能、性能和易用性上领先于行业水平,还为客户提供了更加灵活和可靠的云化解决方案。
欲了解更多 SmartX ELF 虚拟化及企业云平台核心功能,欢迎点击获取《SmartX ELF 虚拟化核心功能集》!
更多展望
不将开源技术作为“黑盒”使用(指一些科技公司仅使用不贡献,甚至模糊化所使用的技术),SmartX 始终坚持“开源共建”的理念。我们不仅使用开源技术,更通过持续的代码贡献和技术创新,推动开源生态的发展。
SmartX 将继续以技术创新为驱动,为客户提供更优质的产品和服务。我们相信,只有深度掌握核心技术,才能真正实现自主可控;只有积极参与开源社区,才能与全球开发者共同推动技术进步。未来,SmartX 将继续深耕企业云计算领域,探索更多前沿技术,为行业发展和开源生态建设贡献更多力量。
推荐阅读: