Strato,取自 stratosphere,意指地球大气层中的平流层,大气层可以保护地球不受外界环境侵害,而平流层则是大气层中最稳定的一层;类似的,虚拟化技术是操作系统平台之上的隔离层,既能保护操作系统平台不受上层恶意应用的破坏,又能为正常应用提供稳定可靠的运行环境;以 Strato 入名,寓意为保护 openEuler 平台上业务平稳运行的轻薄保护层。同时,Strato 也承载了项目的愿景与未来:轻量、灵活、 安全和完整的保护能力。
StratoVirt 是计算产业中面向云数据中心的企业级虚拟化VMM,实现了一套架构统一支持虚拟机、容器、Serverless 三种场景,在轻量低噪、软硬协同、安全等方面具备关键技术竞争优势。StratoVirt 在架构设计和接口上预留了组件化拼装的能力和接口,StratoVirt 可以按需灵活组装高级特性直至演化到支持标准虚拟化,在特性需求、应用场景和轻快灵巧之间找到最佳的平衡点。
在项目成立初期,我们调研了业界成熟基于 C 语言开发的虚拟化软件-QEMU,统计了在过去十几年中 QEMU 的 CVE 问题,发现其中有将近一半是因为内存问题导致的,例如缓冲区溢出、内存非法访问等等。如何有效避免产生内存问题,成为我们在编程语言选型方面的重要考虑。因此,专注于安全的 Rust 语言进入我们视线。
StratoVirt 是 openEuler 最稳定、最坚固的保护层。它重构了 openEuler 虚拟化底座,具有以下六大技术特点。
StratoVirt 核心架构自顶向下分为三层:
StratoVirt源码目录解析主要分为四部分:
当前 StratoVirt 实现了两种机型:microvm 和标准机型。其中,microvm 实现了运行业务负载的最小的设备集合。因此 LightMachine 是 StratoVirt 最重要的顶层数据结构,它的逻辑上分为 CPU 模拟管理,地址空间管理,IO 设备模拟管理(包括中断控制器和 bus 数据结构中管理各类仿真设备,例如 virtio 设备,serial 设备等),如下图右侧所示:
x86_64 和 aarch64 下的标准机型分别为 q35 和 virt,可以通过 libvirt 来进行生命周期等标准虚拟机管理。标准机型的系统总线下拥有 PCIe 主桥,下面可以挂接 virtio-pci 设备,支持 VFIO 设备直通。此外,标准机型支持构建 ACPI 表,不仅可以提供 UEFI 的标准启动能力,还可以在未来提供设备热插拔、虚拟机更完善的生命周期管理能力。
首先,我们先看一下 address_space 地址空间模拟实现功能:
其次,我们再看一下 CPU 模拟实现功能:
最后,我们再看一下 IO 设备模拟功能:
轻量化虚拟机的主要设备均通过 VirtioMMIO 协议实现,统一通过 VirtioMmioDevice 数据结构来模拟。
在 IO 设备初始化阶段,通过 VirtioMMIO 协议协商前后端都可以访问的 virtio queue、中断事件以及通知事件等等。当前端 VM 有 IO 请求时,将请求数据写入 virtio queue 中,通过通知事件告知后端 StratoVirt;后端监听通知事件发生时,读取 virtio queue 中的请求数据,根据请求数据进行 IO 处理,IO 请求处理完成后,并以中断事件方式通知前端 VM。
virtio 设备同样也支持挂到 PCI 总线上,因此在拥有 PCIe 主桥的标准机型下支持为虚拟机添加 virtio-pci 设备。virtio-pci 设备同样遵循上图的 I/O 下发流程,只是传输层协议从 mmio 变成了 PCI。
StratoVirt 的发展路标为,通过一套代码架构分别提供轻量以及标准机型,支持 serverless、安全容器、标准虚机等多种应用场景:
StratoVirt 当前已经在 openEuler 社区(openEuler 是一个开源、免费的 Linux 发行版平台,将通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系)开源。在未来的一段时间我们将开展一系列主题的分享,让大家更加详细的了解 StratoVirt 的实现,非常期待您的围观和加入!
项目地址:https://gitee.com/openeuler/stratovirt
项目 wiki:https://gitee.com/openeuler/stratovirt/wikis
项目交流:virt 邮件列表 或提交一个 issue。
virt 邮件列表:https://mailweb.openeuler.org/postorius/lists/virt.openeuler.org/
提交 issue:https://gitee.com/openeuler/stratovirt/issues
如果您对虚拟化技术感兴趣,点击阅读原文即可可以进入 openEuler StratoVirt 主页查找相关资源,包括安装指导、虚拟机配置、代码仓库、学习资料等。也欢迎加入Virt SIG 技术交流群,讨论 StratoVirt、KVM、QEMU 和 Libvirt 等相关虚拟化技术。感兴趣的同学可以添加如下微信小助手,回复 StratoVirt 入群。
本文分享自微信公众号 - openEuler(openEulercommunity)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
|