来自指南《理解Linux内核第三版》,第8.2.10章,Slab着色-
(1) 我无法理解板块着色试图解决的问题。当正常进程访问数据时,如果数据不在缓存中并且遇到缓存未命中,则数据将与进程尝试访问的数据地址周围的数据一起提取到缓存中以提高性能。如何出现同一特定缓存行不断被交换的情况?进程保持访问两个不同的数据地址,位于两个不同内存区域的内存区域中相同偏移量的概率非常低。即使发生这种情况,缓存策略通常会根据某些议程(例如LRU,随机等)选择要交换的行。不存在这样的策略,可以根据正在访问的地址的最低有效位的匹配选择驱逐行。 (2) 我无法理解板块着色是如何从板块末尾到开头获取空闲字节,并导致第一个对象具有不同偏移量的不同板块来解决缓存交换问题的。 [已解决] 经过小调查,我相信我找到了我的问题的答案。答案已发布。我们从第二章知道,同一硬件高速缓存行映射许多不同的RAM块。在本章中,我们还看到,相同大小的对象最终被存储在高速缓存的相同偏移量处。在不同slab内具有相同偏移量的对象将以相对较高的概率被映射到相同的高速缓存行中。因此,高速缓存硬件可能会浪费内存周期将同一高速缓存行中的两个对象来回传输到不同的RAM位置,而其他高速缓存行则未充分利用。slab分配器通过一种称为slab着色的策略来减少这种不良的高速缓存行为:将不同的任意值分配给slab,称为颜色。