openEuler开源下一代全场景虚拟化平台StratoVirt

3,670 阅读5分钟

近期openEuler开源了一枚重磅利器 ——StratoVirt,StratoVirt是计算产业中面向云数据中心的企业级虚拟化平台,实现了一套架构统一支持虚拟机、容器、Serverless三种场景。StratoVirt在轻量低噪、软硬协同、Rust语言级安全等方面具备关键技术竞争优势。

为什么叫StratoVirt?

Strato, 取自stratosphere ,意指地球大气层中的平流层,寓意为保护openEuler平台上业务平稳运行的轻薄保护层。Strato承载了项目的愿景与未来: 轻量、灵活、 安全和完整的保护能力。以Strato入名,同样代表着openEuler对推进下一代全场景虚拟化技术的繁荣、构建虚拟化关键技术竞争力,有着必胜的信心!

为何要做StratoVirt?

说起虚拟化,openEuler平台目前已经集成了业界成熟的qemu-kvm解决方案,那么StratoVirt又期望构 建一个怎么不一样的解决方案呢?

  • Insight 1: QEMU的演进历史

提到虚拟化,咱们不得不提到qemu。qemu-kvm是整个虚拟化产业发展的基石和主线,但是在多年的 发展历史中,也积累了庞大的代码基线和繁多的历史设备。按照我们的统计,现在qemu已经有157万代码,而且其中又有很大一部分代码是用来支持legacy特性 或者设备的,功能和设备严重耦合在一起,导致无法轻装上阵。
另外一个insight就是CVE,我们分析统计了过去十几年中QEMU的CVE问题,其中有将近一半是因为内 存问题导致的。做过基础设施的兄弟都应该都深有感触,碰到CVE,加班熬夜通宵都不是事,而且搞不好还是加了班还 背锅,因此我们也在积极探寻一条自我救赎的道路。
我们期望这个答案是Rust。

  • Insight 2:资源隔离方案演进

还有一个insight就是如何进行资源隔离。大家都知道,一台服务器上的资源太大了,肯定要分开了用或 者分开卖。咱们手里的两个有力的武器是container和虚拟机,都可以实现资源的分割。当然,从管理 面上咱们可以看到K8S,openstack,libvirt这些东西。 container这玩意非常好,但是就是不够安全,所以咱们又搞了一条新的路,用虚拟机套容器(其实也 就是所谓的安全容器)。安全性的问题解决了,但是又带来一个新的问题,虚拟机太重了,对于一些常驻的业务还好,对一些轻量的业务(比如serverless),那就真是要命了。向左走,还是向右走?咱们 的解决方案是啥,microvm。
在轻量化场景下,openEuler在开源的解决方案做了很多探索,也尝试来解题。 第一个发现是docker太重了,对每个vm的管理开销接近100MB,因此我们有了isula。同时我们发现 qemu也太重了,因此有了stratovirt。

StratoVirt的架构设计原理是什么?

从顶层架构上看,当前StratoVirt在软件栈中所处的位置和qemu、Firecracker类似:向下借助KVM模 块实现硬件加速,例如X86的VT和鲲鹏平台的Kunpeng-V;向上通过容器引擎isula或docker对接容器生 态,通过虚拟机引擎libvirt对接虚拟机生态,以此实现对端、边、云中多种应用场景的支持。
就StratoVirt本身而言,相比于Rust-VMM最大的架构特征就是组件化、可灵活配置:例如在StratoVirt 中引入了device model的概念,基于此实现了CPU、扁平内存、堆叠内存、virtio设备PCI设备等多种公 共组件;
针对轻量化场景,我们可以选用轻量机型主板并在此基础上增加CPU、扁平内存、Virtio设备等必要组 件;
针对标准化场景不,我们可以选用标准机型主板并增加CPU、堆叠内存模型、PCI系统、Virtio设备等组 件,这样便可以灵活应对各种场景的需求。

StratoVirt未来

StratoVirt的发展路标为, 通过一套架构,支持轻量虚拟机和标准虚拟机两种模式:

  • 轻量虚拟机模式下,单虚机内存底噪小于4MB,启动时间小于50ms,且支持ms级时延的设备极速伸缩能力,当前已经开发完毕,2020年9月已经在openEuler社区开源;
  • 标准虚拟机模式下,可支持完整的机器模型,启动标准内核镜像,可以达成Qemu的能力,同时在代码规模和安全性上有较大优势。

欢迎加入

目前StratoVirt已经在openEuler社区开源,期待你的围观和加入!

项目地址:gitee.com/openeuler/s…

openEuler社区近期每周二晚8点通过B站直播深入解读StratoVirt,欢迎来直播间和StratoVirt项目贡献者交流!直播间地址: live.bilibili.com/22290444

  • 2020.10.27 20:00 如何安装并使用StratoVirt
  • 2020.11.03 20:00 StatoVirt之CPU子系统剖析
  • 2020.11.10 20:00 StatoVirt之内存子系统剖析
  • 2020.11.17 20:00 StatoVirt之IO子系统剖析
  • 2020.11.24 20:00 StatoVirt技术规划和展望