皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

‌Linux 补丁通过降低 IPv6 协议栈的模块化程度,以减轻架构负担。‌

‌Linux 补丁通过降低 IPv6 协议栈的模块化程度,以减轻架构负担。‌

目前,Linux IPv6 网络栈既可以编译进 Linux 内核中,也可以编译为可加载内核模块,或者完全不编译。根据一位 SUSE 工程师提出的补丁方案,IPv6 网络栈将被限制为只能编译进内核,或者完全不编译(即移除作为可加载内核模块的选项)。取消将 IPv6 作为可加载内核模块的支持,将有助于简化部分代码,并降低 Linux 网络子系统的维护负担。

Linux 内核中的 IPv6 支持将继续保持为可选项,但将不再支持将其作为可加载模块进行编译。这一改动在很大程度上符合现实情况:大多数部署方案要么将 IPv6 直接内置于内核中,要么完全不启用;而将配置设为 CONFIG_IPV6=m(即编译为模块)的情况极为罕见。

Fernando Fernandez Mancera 在补丁的封面信(cover letter)中阐述了该补丁的意图,以及当前因必须支持模块化 IPv6 选项而带来的维护负担:

历史上,Linux 内核一直支持将 IPv6 协议栈编译为可加载模块。虽然在 IPv6 普及的早期阶段,这种做法合乎逻辑,但在现代的部署环境和发行版中,绝大多数情况要么将 IPv6 直接内置于内核中(CONFIG_IPV6=y),要么完全禁用它(CONFIG_IPV6=n)。尽管将 IPv6 模块化能为特定配置带来镜像体积缩小和内存节省的优势,但这种好处远远不及它给子系统在实现和维护方面所带来的架构负担。

为了使核心网络子系统、BPF(伯克利数据包过滤器)、Netfilter 以及各种设备驱动程序能够安全地与一个可能被卸载的 IPv6 模块进行交互,内核依赖于间接调用结构(如 ipv6_stubipv6_bpf_stub 和 nf_ipv6_ops),并针对 ICMPv6 发送器等组件采用了动态的 RCU(读拷贝更新)注册机制。

本补丁系列通过将 CONFIG_IPV6 从三态选项(tristate)改为布尔选项(boolean),从而解决了这一问题,强制规定 IPv6 要么被内置编译,要么被完全禁用。这使得我们能够彻底移除那些存根(stub)基础设施,并安全地将其替换为直接的函数调用。

鉴于将 IPv6 支持作为内核模块的做法并不普及,且该方案允许切换到更直接的函数调用(这将带来更高的安全性和潜在的性能提升),因此这一改动是合乎情理的。实现这些变更的补丁系列现已发布,正在 Linux 内核邮件列表上接受审查。

转自 L Linux Patches Make The IPv6 Stack Less Modular To Lower Architectural Burden – Phoronix

已有 0 条评论
已有 0 条评论
-->