同一硬件高速缓存行可以映射
RAM
中多个不同的块,相同大小的对象倾向于存
放在高速缓存内相同的偏移量处。在不同
slab
内具有相同偏移量的对象最终很可能映射到
同一高速缓存行中。而使用
slab
分配器的对象通常是频繁使用的小对象,高速
缓存的硬件可能因此而花费内存周期在同一高速缓存行与
RAM
内存单元之间来来往往的传送两个对象。
如下例:假设
cache
行为
32Bytes
,
CPU
包含
512
个
cache
行(缓存大小
16K
)。
假设对象
A,B
均为
32B
,且
A
的地址从
0
开始,
B
的地址从
16K
开始,则根据组相联或直接相联映射方式
(全相联方式很少使用),
A,B
对象很可能映射到
cache
的第
0
行
,此时,如果
CPU
交替的访问
A,B
各
50
次,每一次访问
cache
第
0
行都失效,从而需要从内存传送数据。而
slab
着色就是为解决该问题产生的,不同的颜色
代表了不同的起始对象偏移量,对于
B
对象,如果将其位置偏移向右偏移
32B
,则其可能会被映射到
cache
的第
1
行上,这样交替的访问
A,B
各
50
次,只需要
2
次内存访问即可。
这里的偏移量就代表了
slab
着色中的一种颜色,不同的颜色代表了不同
的偏移量,尽量使得不同的对象的对应到不同的硬件高速缓存行上,以最大限度的提高效率。实际的情况比上面的例子要复杂得多,
slab
的着色还要考虑内存对齐等因素,以及
slab
内未用字节的大小,只有当未用字节数足够
大时,着色才起作用。
http://blog.chinaunix.net/u2/87570/showart_2369813.html
slab着色与cpu硬件高速缓存
最新推荐文章于 2020-09-08 07:41:01 发布