用rust-vmm打造未来的虚拟化架构

译文
云计算 虚拟化
一年多以前,我们开始开发Firecracker,这是在KVM(基于内核的虚拟机)上运行的虚拟机监控器(VMM)。我们想创建一种迅速启动虚拟机的轻量级VMM,内存占用少,从而打造高密度云环境。

【51CTO.com快译】rust-vmm有助于在Rust虚拟机监控器之间共享核心虚拟化组件。

 

一年多以前,我们开始开发Firecracker,这是在KVM(基于内核的虚拟机)上运行的虚拟机监控器(VMM)。我们想创建一种迅速启动虚拟机的轻量级VMM,内存占用少,从而打造高密度云环境。

我们开始通过分支Chrome OS VMM(CrosVM)来开发Firecracker,但由于我们针对不同的客户使用场景,没过多久就有了分歧。CrosVM在ChromeOS中提供Linux应用程序隔离,而Firecracker用于大规模运行多租户工作负载。尽管我们现在走不同的道路,仍然拥有通用的虚拟化组件,比如基于KVM输入/输出控件(ioctls)的包装器、最小的内核加载器以及使用Virtio设备模型。

考虑到这一点,我们开始考虑共享通用代码的***方法。拥有共享的代码库可以提升这两个项目的安全和质量标准。目前,修复安全漏洞需要重复的工作:将更改从一个项目移植到另一个项目,经历不同的审核流程来合并更改。开源Firecracker后,我们接到了添加功能的请求,包括GPU支持和启动bzImage文件。一些请求与Firecracker的目标不一致,却是原本合情合理的使用场合,只是没有找到适合实施的地方。

rust-vmm项目

rust-vmm项目于2018年12月问世,当时亚马逊、谷歌、英特尔和Red Hat的员工开始讨论共享虚拟化软件包的***方式。在此过程中,更多的贡献者加入了这项计划。我们仍然处于这个过程的开始阶段,只有一个组件发布到了Crates.io(Rust的软件包注册中心),另外几个组件(比如Virtio设备、Linux内核加载器和KVM ioctls包装器)正在开发中。两个用Rust编写的VMM正在积极开发中,构建其他专用VMM日益受到关注,rust-vmm是作为共享核心虚拟化组件的主机而诞生的。

rust-vmm的目标是使社区能够创建自定义VMM,仅针对使用场合导入所需的构建模块。我们决定将rust-vmm组织成一个多存储库项目,每个存储库对应一个独立的虚拟化组件。每个单独的构建模块都在Crates.io上发布。

使用rust-vmm创建自定义VMM

下面讨论的组件目前正在开发中。

 

图1. 自定义rust-vmm组件

图右侧的每个框都是对应于一个软件包(在Rust中名为crate)的GitHub存储库。一个crate的功能可以进一步分成多个模块,比如virtio-devices。不妨看看这些组件及一些潜在的使用场合。

  • KVM接口:在KVM上创建VMM需要可以从Rust调用KVM功能的接口。kvm-bindings crate代表面向KVM内核头的Rust外部功能接口(FFI)。因为头只包含结构和定义,我们还有基于KVM ioctls(kvm-ioctls)的包装器,我们用它们来打开dev/kvm、创建虚拟机和创建vCPU等。
  • Virtio设备和速率限制:Virtio拥有一套前后端架构。目前在rust-vmm中,前端实现在virtio-devices crate中,后端位于vhost软件包中。Vhost支持用户空间驱动程序和内核空间驱动程序,但用户也可以将virtio-devices插入到自定义后端。virtio-bindings是使用Virtio Linux头生成的Virtio设备的绑定。virtio-devices crate中的所有设备都使用条件编译,作为模块独立导出。一些设备(比如block、net和vsock)在每秒I/O和带宽方面支持速率限制。这可以通过使用rate-limiter crate中提供的功能来实现。
  • kernel-loader负责将ELF内核映像的内容加载到访客内存中。

比如说,假设我们想要构建一个自定义VMM,让用户可以创建和配置在KVM上运行的单个虚拟机。作为配置的一部分,用户能够指定内核映像文件、根文件系统、vCPU数量和内存大小。可以使用kvm-ioctls crate来实现虚拟机资源的创建和配置。可以使用kernel-loader将内核映像加载到访客内存中,并且可以使用virtio-devices block模块来指定根文件系统。我们的VMM所需的***一点是编写VMM Glue,这个代码负责将rust-vmm组件与VMM用户接口集成起来,允许用户创建和管理虚拟机。

原文标题:Building the virtualization stack of the future with rust-vmm,作者:Andreea Florescu

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:武晓燕 来源: 51CTO
相关推荐

2010-09-25 09:37:31

桌面虚拟化基础架构

2011-02-23 17:44:49

虚拟化标准

2024-05-29 07:56:22

2010-11-09 12:10:20

瞻博网络网络构架Juniper

2011-11-25 19:02:09

虚拟化vmwareIT基础架构

2012-07-06 10:32:41

VMware

2009-05-06 19:03:32

节能数据中心Vmware

2010-05-14 14:47:46

x86虚拟机

2015-07-29 13:41:02

虚拟化

2011-11-28 09:32:08

VMware

2012-05-15 09:45:15

桌面虚拟化

2013-08-05 09:45:16

云计算桌面虚拟化

2013-09-03 11:25:35

虚拟化HCC 2013

2013-12-02 10:19:17

虚拟化敏捷型企业

2009-05-13 07:50:29

NovellFossa基础架构

2018-07-17 15:41:37

服务器虚拟化未来

2011-11-17 09:28:24

虚拟化开源虚拟化KVM

2013-07-08 10:15:46

系统虚拟化 Containers

2020-09-16 23:00:15

Rust编程语言开发

2014-07-02 16:03:23

点赞
收藏

51CTO技术栈公众号