从导理解Linux内核第三版,章8.2.10,板喷漆的Linux slab分配器和高速缓存性能
我们从第2章知道,相同的硬件高速缓存行映射的许多不同的块内存。在这个 一章中,我们也看到相同大小的对象最终被存储在缓存中相同的偏移处。 在相同的缓存行中,具有相同偏移量的对象在相对较高的概率下最终会映射到 。因此,高速缓存硬件可能浪费存储器周期,将来自同一高速缓存行的两个对象 来回传送到不同的RAM位置,而其他高速缓存行未充分利用。 板坯分配器试图通过称为板坯着色的策略来减少这种令人不快的缓存行为:不同的 称为颜色的任意值被分配给板坯。
(1)我无法理解的是,板着色试图解决这个问题。当正常进程访问数据时,如果它不在缓存中并且遇到缓存未命中,则将数据与来自进程尝试访问的数据的超出地址的数据一起提取到缓存中以提升性能。情况如何发生,以便相同的特定缓存行不断交换?一个进程持续访问两个不同存储区的内存区域内相同偏移量的两个不同数据地址的概率非常低。即使发生,缓存策略通常会根据某些议程(例如LRU,随机等)选择要交换的行。不存在根据被访问地址的最低有效位中的匹配来选择排除行的策略。
(2)我无法理解板坯着色,这需要自由字节从板坯开始,与第一个对象不同的偏移不同砖的结果到底如何,解决高速缓存交换问题?
[求助]小调查后我相信我找到了我的问题的答案。回复已发布。
让我看看我是否正确理解你;考虑slab0切片地址0x0,0x20,0x40等。slab1切片地址0x8,0x28,0x48等。使用您提供的简单缓存行,没有缓存行会浪费,因为没有两个地址会给出相同的结果吗? – user2162550
阅读了关于缓存策略和缓存组织后,我没有看到你的答案如何匹配缓存基础知识。根据许多可能的策略之一(例如LRU)选择要交换的行,而不是根据地址的最低有效位的匹配来选择,但是我找不到任何这样做的策略。 – user2162550
@ user2162550:查找“虚假共享”和缓存。 –