测验:用于快速 OpenZFS 开发的工具

2024 年 3 月 4 日,作者分享了在 OpenZFS 开发中使用微虚拟机(microVM)的经验。

  • 编程风格与 OpenZFS 开发需求:作者偏好高度交互和探索性的编程风格,需要快速的编辑-编译-测试周期。一年前开始从事 OpenZFS 开发,其为大量内核代码,需在真实硬件或虚拟机上开发,容易导致内核崩溃等问题,因此渴望能像开发其他程序一样工作,即快速修改、编译、运行并查看结果,于是开始研究微虚拟机。
  • 微虚拟机相关内容

    • 微机器:需快速启动和停止的虚拟机,QEMU 的“微虚拟机”机器类型可满足,它省略了一些常规设备,减少启动时的初始化工作。还需要自定义内核,只包含已知硬件的支持,将所需内容编译到内核二进制文件中,保留模块支持以便后期加载 OpenZFS 模块,同时保持设备简单,如 CPU、内存、控制台和存储等。quiz 附带的quiz-prepare-kernel程序可负责下载、构建和准备内核。
    • 大量文件:虽不需要 initrd,但仍需在虚拟机内有文件来运行程序,利用 Linux 的文件系统叠加功能,通过“层”构建完整的文件系统。底层是不可变的基本 Unix 系统组件,使用mmdebstrap创建,中间层是主机目录中的普通文件,通过9pfs共享暴露给虚拟机,顶部是 ramdisk 用于存储修改后的文件,init1脚本组装这些部分。
    • 构建块:在最简单模式下,虚拟机进入 shell ,init2脚本进行基本设置并运行用户请求的程序或bash,“配置文件”可进一步扩展,如zfs配置文件确保 OpenZFS 准备好,memdev配置文件创建内存块设备。
    • 更改系统:理论上通过将system共享作为替代安装前缀来构建 OpenZFS,但实际上存在一些交叉编译的问题,需调整configuremake install,有辅助脚本quiz-build-zfs来处理。
  • 完整开发流程:启动 quiz 环境后,OpenZFS 开发流程包括autogen.shquiz-build-zfs configuremakemake install以及创建存储池等步骤。作者还有多架构版本和 FreeBSD 相关的计划。
  • 尝试与反馈:如果在 Linux 上进行 OpenZFS 或内核开发,quiz 可能很有用,可从作者的 Github 获取,欢迎分享使用经验和建议,若喜欢可考虑赞助。
阅读 18
0 条评论