在过去的一年里,Linux内核的sysctl代码中进行了大量工作,通过在每个数组的末尾删除最后一个sysctl“sentinel”条目,来清除整个内核中每个数组约64字节的膨胀。这也有助于减少内核的构建时间,是一个很好的改进。在Linux 6.10中,将在不同的子系统中进行sysctl哨兵清除。
终于清除了每个sysctl数组上的最后一个空元素。例如,网络子系统中的sysctl sentinel删除已在上周排队。
这次合并总结如下:
为什么?
通过删除sysctl sentinel元素,我们避免了内核膨胀,因为ctl_table数组从kernel/sysctl.c移到了它们自己的数组中
各自的子系统。这一举措早就开始了,以避免合并冲突;哨兵移除位是在Mathew Wilcox建议它避免在数组移出时使内核膨胀一个元素之后出现的。这个补丁集将使内核的总体构建时大小和运行时内存膨胀减少约64字节/声明的ctl_table数组。
...
在vmlinux中节省:
移除后,每个哨兵总共保存64个字节;我以x86_64为单位进行了测量,以给出合计节省的想法。实际节省将取决于单个内核配置。
*膨胀计
-“yesall”配置可节省3976字节
-减少配置可节省1263字节节省分配的内存:
在这个集合中没有,但当从proc_sysctl.c中删除多余的分配时会发生。我在这里包括它作为上下文。在引导配置期间估计节省了6272个字节。
Nice to see this sysctl sentinel clearing work culminating after the lengthy effort over the past year.