首页 > 其他分享 >谷歌是如何改进 GKE、Cloud Run 的 gVisor 文件系统性能的?

谷歌是如何改进 GKE、Cloud Run 的 gVisor 文件系统性能的?

时间:2023-02-06 16:47:31浏览次数:59  
标签:负载 Run LISAFS 文件系统 RPC gVisor GKE

灵活的应用程序架构、CI/CD 管道和容器工作负载通常运行不受信任的代码,因此应该与敏感的基础设施隔离。一种常见的解决方案是部署纵深防御产品(如使用gVisor的GKE Sandbox)以通过额外的保护层隔离工作负载。Google Cloud 的无服务器产品(App Engine、Cloud Run、Cloud Functions)也使用 gVisor 对应用程序工作负载进行沙箱处理。

【本文由Cloud Ace整理发布,谷歌云服务请访问 Cloud Ace 官网

然而,增加防御层也会带来新的性能挑战。当 gVisor 的用户空间内核需要多个操作来遍历文件系统路径时,然后谷歌发现了一个这样的挑战。为了解决这个问题并显着提高 gVisor 的性能,编写了一个全新的文件系统层,同时考虑到性能,同时保持相同级别的安全性。新文件系统 (VFS2) 减少了为文件系统系统调用提供服务所需的操作数,减少了锁争用,更有效地分配内存,并提高了与 Linux 的兼容性。

纵深防御和文件系统

第一层防御是在用户模式下运行的 gVisor 内核。gVisor 威胁模型假设恶意容器可以破坏 gVisor 的内核,同时仍将恶意容器与底层主机基础设施或其他工作负载隔离开来。由于 gVisor 内核不可信任,因此它无法直接访问文件系统。文件系统操作由代理(称为 Gofer)代理,该代理与可能的恶意工作负载隔离。打开、创建和统计等操作被转发到代理,经过审查,然后由代理执行。Gofers 作为一个单独的进程运行,pod 中的每个容器一个,并且还受到深度防御层的保护,仅授予它所需的访问权限。

 

在 gofer 授予对文件的访问权限后,在 gVisor 内核文件系统返工之前,需要大量操作来遍历文件路径,从而导致一些性能缺陷。这个问题在使用 gofer 挂载文件系统时尤为明显,其中每个操作的往返成本因 RPC 和调度成本而加剧。更值得注意的是,gVisor 沙箱会向 gofer 发出新的 RPC 以遍历每个路径组件,这会大大降低性能。

改进的文件系统性能

应对这一挑战需要使 gVisor 的哨兵能够将路径解析直接委托给文件系统。这允许 gofer 文件系统发出单个 RPC 来执行大型遍历,而不是为操作中的每个路径组件发出一个 RPC。例如,在 VFS1 中,stat(/foo/bar/baz) 向 gofer (foo, bar, baz) 生成至少三个 RPC,而 VFS2 只生成一个。

借此机会,谷歌重新设计了 sandbox-gofer 协议层。而早些时候使用的是 9P2000.L 协议的修改版本。然而,这个协议非常繁琐,发出许多 RPC 并消耗大量内存。谷歌构建了一个名为LISAFS(Linux 沙盒文件系统协议)的新协议来替代 9P。LISAFS 在 RPC 和内存使用方面更经济。LISAFS 为多路径组件行走提供 RPC。VFS2 中的 gofer 文件系统现在可以使用 LISAFS 执行这种一次性遍历。LISAFS 还可以通过 RPC 执行更快的文件 IO。

执行频繁文件系统操作(如打开、创建、统计、列表和加载库)的工作负载正在使用 VFS2 和 LISAFS 提高性能。这些工作负载的示例包括运行解释性语言(例如 Python 和 NodeJS)以及大量导入,或者从源代码构建二进制文件。CI/CD 工作负载(例如 bazel)构建在大型代码库上,并提供对文件系统性能的深入了解。此类工作负载必须打开和读取大量源文件,并写入大量目标文件和二进制文件。

以下是截至 2022 年 12 月构建gRPC和Abseil 的开源 bazel 基准测试的结果。这些基准测试在类似 GKE 的环境中运行。要理解结果,理解以下术语会很有帮助:

·Runsc overhead这是 gVisor 相较于 native 增加的性能开销。例如,如果本机运行工作负载(使用 runc)需要 10 秒,而 runsc 需要 13 秒,则 runsc 开销为 30%。

·Root项目的源代码放在根文件系统中,以独占方式挂载。这意味着沙盒可以完全控制文件系统并使用更积极的缓存来提高性能。

·绑定:项目源代码放在绑定挂载中。所有绑定挂载都以共享模式挂载。这意味着可能会发生文件的外部修改,并且 gVisor 会在每次访问时重新验证缓存以确保状态是最新的。

·tmpfs项目源代码放在tmpfs(内存文件系统)中。

可以看到 VFS2 和 LISAFS 持续改进所有这些配置的性能,并使 runsc 更接近本机 (runc) 性能。

VFS2 和 LISAFS 现已在所有 GKE 和无服务器产品中 100% 推出,并在几个月内逐步推出了这些优化。这些还有助于缩短一些在初始化时执行大量文件系统工作的应用程序的冷启动时间。例如,从 2022 年 8 月开始的 App Engine LISAFS 推出数据显示,LISAFS 平均将冷启动提高了 25% 以上。

为大规模容器工作负载提供纵深安全防御帮助确定性能权衡,例如需要新实施的 gVisor 文件系统。这些改进大大缩小了性能差距,而无需牺牲安全性。VFS2 架构使大家能够在提供企业就绪容器安全解决方案的同时,继续改进安全性和性能权衡。

立即试用 GKE Sandbox 以增强工作负载安全性

GKE Sandbox 为您的工作负载提供了额外的安全层,您今天就可以试用了。阅读启用 GKE 沙盒指南,通过查看GKE 沙盒概述了解有关容器安全的更多信息,或者立即开始使用 Google Cloud免费试用。

如果您想更深入地了解技术细节,您可以查看官方 gVisor 文档,查看GitHub 上的源代码,甚至可能做出贡献。期待看到更多沙盒工作负载在 Google Cloud 上运行!

 

标签:负载,Run,LISAFS,文件系统,RPC,gVisor,GKE
From: https://www.cnblogs.com/googlecloud/p/17095844.html

相关文章

  • iOS runtime 实战之关联对象(一)
    一、什么是关联对象1、关联对象的概念:associatedObject又称关联对象,把一个对象关联到另外一个对象身上,使两者能够产生联系,我们可以通过associatedObject来给分类扩展属性......
  • 缺少 vcruntime140_1.dll
    情景:安装mysql解压包提示缺少 vcruntime140_1.dll下载vcruntime140_1.dll,将下载过来的dll文件复制到C:\Windows\System32目录下(windows64位系统)  成功install后,启动m......
  • httpRunner的从0-1的使用教程
    一、httprunner库安装使用1.安装httprunner库pipinstallhttprunner==2.5.7-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com2.检查是否安装成功h......
  • (转)深入浅出Golang Runtime
    原文:https://www.cnblogs.com/lovezbs/p/14467801.html本文为腾讯NOW直播研发工程师郝以奋在8月19日深圳GopherMeetup上的分享,以下为根据PPT进行的详细注解。介绍......
  • (转)Golang标准库——runtime
    原文:https://www.jianshu.com/p/c1b6de70c004runtimeruntime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见》reflect报......
  • 恢复truncate后的表
    文档课题:恢复truncate后的表.数据库:oracle11.2.0.41、模拟异常1.1、建测试表[oracle@leo-oel150trace]$sqlplus/assysdbaSQL*Plus:Release11.2.0.4.0Productionon......
  • dremio AppBundleRunner 简单说明
    AppBundleRunner的作用运行通过AppBundleGenerator生成的jar加载上边jar相关依赖到类加载器中初始化实例,并调用main方法同时还包含运行实例的停止参考处理说明......
  • 如何正确使用docker run -i -t -d 参数
    如何正确使用dockerrun-i-t-d参数在使用dockerrun命令时,我们经常会使用到-i、-t和-d参数,那么这几个参数的作用究竟是什么呢,这篇文章简单讲一下。选项说明官方文档......
  • Windows设置右键以管理员身份打开CMD(right click open command prompt runas adminis
    打开注册表编辑器win+r输入regedit打开注册表编辑器找到计算机\HKEY_CLASSES_ROOT\Directory\Background\shell新建runas项选中shell然后右键新建项,命名为runas选......
  • P1467 循环数 Runaround Numbers(DFS)
    题目描述循环数是那些不包括0且没有重复数字的整数(比如81362)并且还应同时具有一个有趣的性质,就像这个例子:如果你从最左边的数字开始(在这个例子中是8)向右数最左边这个......