2019年01月09日 15:03:49 rikeyone 阅读数:44更多
所属专栏: 深入浅出内存管理
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rikeyone/article/details/86153809
对于大小相同的slab object,虽然处于不同的物理地址处,但是由于cache访问地址的规则,这两个地址很有可能会被分配给同一个cache line去加载,那么会带来一个问题,比如软件中反复去读取这样的两个对象,那么会带来什么后果呢?
我们发现对应的cache line需要被反复刷新,而其余的cache line却未被充分利用。
我们知道不同的cache line只能加载特定地址偏移的地址,比如
cacheline0--0,32,64...
cacheline1--1,33,65...
我们知道slab都是通过页分配器来进行分配的,也就是它的单位是页大小的,并且其中有一些是未使用的free空间,那么通过对不同的slab起始地址进行一个偏移,那么对应的object也都会具有一个偏移,如果每个slab的偏移都不同,那么不同slab中的对象地址偏移都会不同,就可以使用不同的cache line来加载了,这就是slab着色的概念,可以充分利用硬件cache line的功能,提升系统的访问效率。