slab为什么要进行染色处理

结论

         先说一下结论哈!slab中着色区的作用,是用来避免cache行的地址争用(跟缓存命中率的意思差不多),因为cache是一个固定映射,一次只能映射64k的空间,也就是说,如果两个访存操作(A,B),并不在同一片区(64k)。那么就必须要先让A完成访存操作,再切换cache的映射区间,再完成B的访问操作。然而染色区就是一个地址偏移,让A,B访问的地址位于同一片区间,防止频繁切换带来的效率低下

Cache结构

         cache总共就32K,每个缓存行为64个字节,一共512行。为什么说cache行是一个固定映射呢,以内存物理地址是0x1000000为例,从0x1000000 —— 0x1008000 属于同一片空间(0x8000 = 2^14 =32K)。从0x1008000 —— 0x1010000 属于另一片空间。cache大小只有32k,也就是一次只能代表一片空间。如果两个访存操作,位于两片不同的空间,那么cache就需要进行切换,才能满足两个访存操作的要求

image-20220710192331345

所以说slab为啥要进行着色

         操作A要对0x10000008地址进行读写操做,而操作B要对0x10008008地址进行读写操做cpu检测到冲突(为啥说是冲突呢,这两个地址都对应着cache0行,你想想操作A未结束,操作B只能等待操作A结束后,cache0行切换地址范围,此时操作B才能进行),这里再纠正上面的一个说法,cache空间并不是整片切换(开始那么说只是为了方便理解),可以是切换某一行,比如说,第0缓存行第一次代表0x1000000—0x1000040这64个字节大小(即缓存行大小),下一次就是代表0x1008000—0x1008040(前后两次中间隔了32K,这是理解为啥着色的关键!!!)

         若是咱们须要进行对这两块上面的数据分别交叉的读取1000次,那么咱们须要进行对高速缓存的不断移除更新,并且读取内存的速度远远的大于读取缓存的速度,那么将会形成大量的时间消耗。

         解决办法就是将第二块读取的数据前加一个偏移,让它移到第1块缓存行上面,两块数据分别能够在缓存行的0和1行上面进行读取,那么咱们读取数据的时候就不会形成没必要要的数据交换。
着色即为添加偏移。

总结
         理解为啥需要着色的关键是:首先你得明白,着色是为了解决缓存行的冲突,然后你再去整明白缓存行为啥会冲突

鸣谢单位

slab为何要进行着色处理 - JavaShuo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值