翻译并篡改更新自LWN.NET 2013年8月的一篇文章。
通常,内核开发人员更倾向于设计可读性和可维护性高的数据结构。当人们理解一段代码使用的数据结构时,对代码本身的理解通常就不会遥远。因此,内核使用最频繁的数据结构之一也是其可理解性最差的之一,这个事实可能会令人惊讶。这个数据结构就是struct page,代表物理内存的页面。最近的一个补丁集,使struct page更加复杂,当然,这也为快速概述如何使用此结构提供了契机。
在大多数Linux系统上,一页物理内存包含4096个字节,这意味着典型的系统包含数百万个页面。维护每一个页面都需要一个struct page,这给struct page带来了巨大压力,因为在struct page中每增加1个byte,大概都会提高上兆字节的内存使用量。这就造成了一种情况,即如果可以避免使struct page变大,几乎所有的技巧都是合理的。
Enter Joonsoo Kim发布了一个补丁集,旨在将更多信息压缩到struct page中,但不增加其大小。特别是,他担心struct slab占用的空间,该空间由slab内存分配器使用(可以在内核中配置的三个分配器之一,其他分配器称为SLUB和SLOB)。关于slab的我就不翻译了,相关的slab单元也大量使用。现在作为编辑我的系统上的/proc/slabinfo仅显示ext4 inode高速缓存的活动slab单元就超过28,000个。减少空间使用将是值得欢迎的; Joonsoo认为可以做到这一点-通过将struct slab的内容折叠到表示包含slab本身的内存的页面结构中。