TinyKVM:最快的沙盒

主要观点:

  • 作者在攻读博士、开发libriscv和未命名游戏之余,开发了基于 KVM 的单进程沙箱TinyKVM
  • TinyKVM 可用于沙箱化常规 Linux 程序或嵌入服务器的具有专用 API 的程序,具有多种特性和优势。
  • 介绍了 TinyKVM 的设计特点,如运行静态 Linux ELF 程序、利用巨页提升性能、低函数调用开销、可远程调试、支持 fork 及快速重置等。
  • 阐述了系统调用的实现方式,通过定义和挂钩系统调用在模拟器中创建与主机的 API。
  • 给出了基准测试结果,展示了 TinyKVM 在各种场景下的性能表现,如编码 AVIF 图像等。
  • 指出了 TinyKVM 的一些缺点,如在 KVM API 中增加 vCPU 计数后无法减少等。
  • 提出了未来的工作方向,包括支持 Intel TDX/AMD SEV、AArch64 移植等。
  • 总结 TinyKVM 是较小且可能最快的沙箱解决方案,重视安全性,代码库较小,未来将开源 Varnish 的 VMOD 以安全地使用 TinyKVM。

关键信息:

  • TinyKVM 运行静态 Linux ELF 程序,可在 AMD64 和 AArch64 上运行,创建巨页,函数调用开销低,可远程调试、fork 及快速重置,使用 KVM API 少,创建静态页表等。
  • 系统调用通过 SYSCALL/SYSRET 和 OUT 指令实现,往返时间约 1 微秒。
  • 基准测试显示在多种场景下性能良好,如编码 AVIF 图像。
  • 缺点是增加 vCPU 计数后无法减少,有多种 workaround 方法。
  • 未来工作包括支持特定技术、AArch64 移植、加强内存锁定等,目前代码库较小,文档和用户 API 有待完善,未来将开源 Varnish 的 VMOD。

重要细节:

  • [https://easyperf.net/blog/202...]提到为执行段分配 2MB 页面可使 LLVM 代码库的编译提升 5%。
  • 测量 call 开销时将重置 VM 的成本作为尾延迟,重置时间随工作内存使用而变化。
  • 文中提到的各种图片展示了 TinyKVM 的相关信息,如性能对比等。
  • 提到可通过重置 VM 到另一个不同的 VM 来重用 VM 以解决一些问题。
  • 未来工作中提到的 KVM_MEM_READONLY 功能可进一步锁定 guest。
  • 博客最初发布在这里
阅读 5
0 条评论