博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vscode构建rust_使用rust-vmm构建未来的虚拟化堆栈
阅读量:2530 次
发布时间:2019-05-11

本文共 1925 字,大约阅读时间需要 6 分钟。

vscode构建rust

一年多以前,我们开始开发 ,这是一种在KVM(基于内核的虚拟机)上运行的虚拟机监视器(VMM)。 我们希望创建一个轻量级的VMM,以在不到一秒钟的时间内启动虚拟机(VM),并减少内存占用,以实现高密度的云环境。

我们最初通过创建Chrome OS VMM( )来开发Firecracker,但是不久之后我们就出现了分歧,因为我们针对不同的客户用例。 CrosVM在Chrome操作系统中提供Linux应用程序隔离,而Firecracker用于大规模运行多租户工作负载。 即使我们走了不同的道路,我们仍然拥有通用的虚拟化组件,例如KVM输入/输出控件(ioctls)上的包装器,最小的内核加载器以及设备模型的使用。

考虑到这一点,我们开始考虑共享通用代码的最佳方法。 共享代码库提高了两个项目的安全性和质量标准。 当前,要修复安全漏洞,需要进行重复的工作,以将更改从一个项目移植到另一个项目,并经历不同的审核过程以合并更改。 在开源Firecracker之后,我们收到了添加功能(包括GPU支持和启动文件)的请求。 有些请求与Firecracker的目标不符,但在其他方面却是有效的用例,只是找不到合适的实现位置。

rust-vmm项目

项目于2018年12月生效,当时亚马逊,谷歌,英特尔和Red Hat员工开始讨论共享虚拟化软件包的最佳方法。 一路走来,有更多的贡献者加入了这项倡议。 我们仍处于这一旅程的开始,只有一个组件发布到 (Rust的程序包注册表),而其他几个组件(例如Virtio设备,Linux内核加载器和KVM ioctls包装器)也正在开发中。 由于有两个用Rust编写的VMM受到积极的开发,并且对构建其他专用VMM的兴趣日益浓厚,因此rust-vmm诞生了,是共享核心虚拟化组件的主机。

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

使用rust-vmm创建自定义VMM

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

custom rust-vmm components

图右侧的每个框都是一个库的GitHub存储库,对应于一个包,在Rust中称为crate 。 一个板条箱的功能可以进一步分为模块,例如virtio-devices 。 让我们看一下这些组件及其一些潜在的用例。

  • KVM界面:在KVM之上创建我们的VMM需要一个可以从Rust调用KVM功能的界面。 kvm-bindings板条箱表示到KVM内核标头的Rust外部功能接口(FFI)。 由于标头仅包含结构和定义,因此我们还具有用于打开dev / kvm,创建VM,创建vCPU等的KVM ioctl( kvm-ioctls )的包装。

  • Virtio设备和速率限制: Virtio具有前端-后端架构。 当前在rust-vmm中,前端在virtio-devices板条箱中实现,后端在vhost包中。 Vhost支持用户界面和内核界面驱动程序,但用户也可以将virtio设备插入其自定义后端。 virtio绑定是使用Virtio Linux标头生成的Virtio设备的绑定。 使用条件编译将virtio-devices箱子中的所有设备独立导出为模块。 某些设备(例如blocknetvsock)支持每秒I / O和带宽方面的速率限制。 这可以通过使用速率限制器板条箱中提供的功能来实现。

  • 内核加载器负责将内核映像的内容加载到来宾存储器中。

例如,假设我们要构建一个自定义的VMM,允许用户创建和配置在KVM之上运行的单个VM。 作为配置的一部分,用户将能够指定内核映像文件,根文件系统,vCPU的数量和内存大小。 可以使用kvm-ioctl包来创建和配置VM的资源。 可以使用kernel-loader将内核映像加载到来宾存储器中,并且可以使用virtio-devices块模块实现指定根文件系统。 VMM的最后一件事是编写VMM Glue ,该代码负责将rust-vmm组件与VMM用户界面集成在一起,该界面允许用户创建和管理VM。

您将如何提供帮助

这是一个令人兴奋的旅程的开始,我们期待着更多的人对VMM,Rust以及可以找到两者的地方感兴趣: 。

目前,我们每两周一次以讨论rust-vmm组织的未来。 会议对任何愿意参加的人开放。 如果您有任何疑问,请在打开一个问题,或将电子邮件发送到rust-vmm (您也可以 )。 我们也有一个 ,如果您有兴趣的话,鼓励您加入。

翻译自:

vscode构建rust

转载地址:http://atbzd.baihongyu.com/

你可能感兴趣的文章
javascript_basic_02之数据类型、分支结构
查看>>
【Mongodb】---基本命令
查看>>
ZeroMq安装包的生成【ubuntu10】
查看>>
linux 常用命令
查看>>
Centos7部署elasticsearch并且安装ik分词以及插件kibana
查看>>
view的阴影效果shadowColor
查看>>
SQL Server 存储过程
查看>>
Daily English words study
查看>>
倒计时
查看>>
游戏服务器开发如何组织业务逻辑的处理结构?
查看>>
面矢量数据的处理
查看>>
form提供的两种数据传输方式 get和post method=”post“和method=”get”
查看>>
【Linux学习】python脚本直接运行与nohup运行结果不同
查看>>
2017《面向对象程序设计》课程作业一
查看>>
Alpha 冲刺 (6/10)
查看>>
javascript学习:闭包和prototype原型使用基础
查看>>
Django模版系统
查看>>
jQuery的鼠标移入与移出事件
查看>>
图片 压缩
查看>>
多线程多进程基础
查看>>