谷歌所解决的Linux哪些问题
谷歌开源小组修复了Linux内核的TCP缺陷谷歌解决Linux服务器重启太慢问题
频发安全漏洞谷歌限制IO_uring使用
谷歌解决Linux服务器重启太慢问题
2015年10月上旬消息,Mozilla 公司的 Patrick McManus 发布文章感谢谷歌开源小组修复了潜藏了十年之久的 Linux 内核 TCP 缺陷。Google 传输网络成员(QUIC,TCP 等等)修复了一个将近 10 年的 Linux Kernel 中 TCP 缺陷问题,这将会大大的提升网络的性能和效率。修复分支地址。
这个分支解决了立方拥塞控制的问题,这是大量 Linux 发行版默认的算法。这个问题可以简单总结为控制器错误的将一个静止周期内没有拥挤信号当做网络不拥挤的证据,从而以更快的速度发送信息,这样会导致一个终端(节点/端口)无法成功发送任何流量,这个过程不停的循环,最终导致的就是丢包、重复发送,从而导致浪费带宽,降低应用效率。Google 开源小组整理这个 Linux 内核 TCP 问题并修复,而且把结果也开源了,这对整个网络都起着很重要的作用,感谢他们所做的贡献!
谷歌解决Linux服务器重启太慢问题
2022年4月上旬消息,谷歌方面正在致力于改进由于太多的 NVMe 驱动器,而导致的 Linux 服务器重新启动时间太长问题。缘于在于该公司的一些多驱动器服务器可能需要超过一分钟的时间才能让 Linux 内核执行其 shutdown 任务,而谷歌的这项改进工作也可能使其他用户受益。
一些机器配置了许多 NVMe 设备,并且已针对严格的 shutdown 时间要求进行了验证。每个 NVMe 设备插入系统,通常需要大约 4.5 秒来 shutdown。一个具有 16 个此类 NVMe 设备的系统将需要大约 80 秒来 shutdown 并重新启动。 目前在总线级定义的 shutdown API 被定义为同步的。因此系统中的设备越多,shutdown 所需时间就越长。这个 shutdown 时间极大地拖慢了机器的重启时间。
谷歌工程师在提交的补丁集中提出了一个总线级别的异步 shutdown 接口,修改了核心驱动程序、设备 shutdown routine 以利用新接口;同时保持与现有同步实现的向后兼容性,并利用新接口让所有基于 PCI-E 的设备在必要时使用异步接口语义。PCI-E 级别的实现也以向后兼容的方式工作,以允许现有设备实现与当前的同步语义一起工作。
借助异步 shutdown 接口并调整 NVMe 驱动程序以使用它,其重启以及最终的服务器 down time 可以轻松减少一分钟。
这个拟议的异步 shutdown 接口在目前的形式下只有约 100 行新代码,且谷歌只展示了 NVMe 设备利用这个异步 shutdown 接口的一个示例实现。科技网站 Phoronix 指出,随着现代高性能 Linux 服务器继续添加更多的 NVMe 驱动器和其他 PCIe 设备,Linux 内核的同步 shutdown 接口可能意味着额外的 downtime,希望谷歌提交的这些补丁能在短时间内设法向前推进,并以主线的方式调整更多的驱动程序来使用它。
频发安全漏洞谷歌限制IO_uring使用
2023年6月消息,虽然 IO_uring 是近几年 Linux 内核的最大创新之一,有助于提供更高效和高性能的 I/O,但它也存在各种安全漏洞。由于持续的安全问题,该用于异步 I/O 的接口在 Google 产品中受到限制或被完全禁用。Google 安全博客指出,Google 漏洞奖励计划中 60% 的提交都与 IO_uring 有关。而且 Google 已经为 IO_uring 漏洞奖励支付了约 100 万美元。因此,Google 认为在奖励成本和内核漏洞数量方面显示了 IO_uring 的巨大安全风险。因此,Google 已经在 Chrome OS 中禁用了 IO_uring,直到找到一种适当的沙盒方法。
与此同时,Google 的 Android 正在使用 seccomp-bpf 过滤器,以确保应用程序无法访问 IO_uring。而未来的 Android 版本将使用 SELinux 来限制 IO_uring 仅用于选择的系统进程。此外 Google 还在积极研究在 GKE AutoPilot 中默认禁用 IO_uring。最后,他们已经在 Google 生产服务器上禁用了 IO_uring 的使用。
Google 安全博客继续指出:“虽然 io_uring 带来了性能优势,并通过全面的安全修复及时对安全问题做出反应(如将 5.15 版本反向移植到 5.10 稳定代码树),但它毕竟是内核中相对较新的部分。虽然 io_uring 仍在继续积极开发,但也会受到严重漏洞的影响,而且它还提供了强大的可利用原语 (exploitation primitives)。基于这些原因,目前只认为它对仅供受信任组件的使用是安全的。”