谷歌云推出gVisor VFS2和LISAFS协议:突破容器沙箱性能瓶颈,冷启动提速 25%
目录
在云上构建灵活的应用程序架构、CI/CD 管道和容器工作负载时,运行不受信任的代码需要与敏感的基础设施进行隔离。Google Cloud 采用纵深防御策略,通过使用 gVisor 驱动的 GKE Sandbox 和无服务器产品(App Engine、Cloud Run、Cloud Functions)来对应用程序工作负载进行沙箱隔离,提供额外的保护层。然而,这种安全增强也带来了新的性能挑战,尤其是在文件系统操作上。为了应对这一挑战,Google 编写了一个全新的文件系统层 VFS2,并在保持严格安全性的同时,显著提高了 gVisor 的性能。
1. 纵深防御下的文件系统性能难题
gVisor 的第一层防御是在用户模式下运行的 gVisor 内核。由于假设恶意容器可能破坏 gVisor 内核,文件系统操作必须由一个隔离的代理(称为 Gofer)代理执行。Gofer 作为一个单独的进程运行,并受到深度防御层的保护。
在 VFS2 出现之前,gVisor 内核在 Gofer 授予访问权限后,需要大量操作来遍历文件路径。这个问题在使用 Gofer 挂载文件系统时尤为明显,因为每个操作的往返成本因 RPC 和调度成本而加剧。gVisor 沙箱必须向 Gofer 发出新的 RPC 来遍历每个路径组件,从而大大降低了性能。

2. VFS2 文件系统和 LISAFS 协议的改进
为应对挑战,Google 重新设计了文件系统和沙箱-Gofer 协议层:
VFS2 的路径解析委托:VFS2 允许 gVisor 的哨兵将路径解析直接委托给文件系统。这使得 Gofer 文件系统可以发出单个 RPC 来执行大型遍历,而不是像 VFS1 那样为操作中的每个路径组件发出一个 RPC。
LISAFS 协议:Google 构建了一个名为 LISAFS 的新协议来替代早期的 9P2000.L 协议。LISAFS 在 RPC 和内存使用方面更经济,并为多路径组件行走提供了一个 RPC。VFS2 中的 Gofer 文件系统现在可以使用 LISAFS 执行这种一次性遍历,同时 LISAFS 还可以通过 RPC 执行更快的文件 IO。
VFS2 和 LISAFS 通过减少操作数、减少锁争用、更有效地分配内存以及提高与 Linux 的兼容性,显著提高了性能。

3. 性能提升与实际应用场景
执行频繁文件系统操作的工作负载,例如运行解释性语言(Python 和 NodeJS)以及 CI/CD 工作负载(例如 Bazel),正在从 VFS2 和 LISAFS 中获得显著的性能提升。
冷启动时间缩短:App Engine LISAFS 推出数据显示,LISAFS 平均将冷启动提高了 25% 以上。
基准测试结果:针对构建 gRPC 和 Abseil 的开源 Bazel 基准测试结果表明,VFS2 和 LISAFS 持续改进了 Root、绑定和 tmpfs 等所有配置的性能,有效缩小了 runsc(沙箱)与原生(runc)性能之间的差距。
VFS2 和 LISAFS 现已在所有 GKE 和无服务器产品中 100% 推出。这些改进大大缩小了性能差距,同时并未牺牲安全性。VFS2 架构使得 Google Cloud 在提供企业就绪容器安全解决方案的同时,能够持续改进安全性和性能的平衡。
更多推荐
所有评论(0)