现代的cache设计大都采用set-association方式,即提高利用率又节省硬件。color只能提高这种cache的使用率。
简单说来,整个内存被分为n个cache page,每个cache page包含数量固定的cache line。
整个cache被分为m个cache way,每个cache way有相同数量的cache line,而且和内存的cache page所含有的cache line数目相同。
内存中的数据依据自己在内存中的cache line索引只能被放入某一个cache way中相对应的cache line里面。而不能任意放入其他cache地址。
比如一个cache有2个cache way,每个cache way有10个cache line。某个数据结构的内存地址的cache line索引为2,则它只能被放入某个cache way的第2个cache line中。假使所有的cache way的第二个cache line都被使用,则必须换出某一个。即使此时2个cache way中的第3个,第4个cache line都未被使用,也无法利用。
因此如果多个数据地址的cache line相同,即使cache中还有很大的空间,还是竞争激烈。
而使用slab的数据结构都是分配和释放频繁的小的数据结构,而且数目很多,比如dentry,如果没有color,他们在内存中相对于页的偏移量很可能相同,则其cache line索引也相同,对于x86这种2way 的cache结构,即使cache size很大,也一样使用率低下。color则将不同slab中的同样的数据结构的地址进行一个偏移,因此这些数据结构的cache line索引就错开了。从而能更好的利用cache
这里用简短的文字描述还是比较抽象,最好能读一下x86的cache工作原理,则很容易就明白了。
阅读(3782) | 评论(0) | 转发(0) |