slab 着色的理解

slab 着色的理解

之前对slab着色一直不怎么理解。
后来查了不少资料,包括之前转的一篇blog,通过学习之后,总算大致了解了。

这儿也写点总结,按照自己的思路来,以抵抗忘性。

先来看看slab着色的目的。
slab中倾向于把大小相同的对象放在同一个硬件cache line中。为什么呢?方便对齐,方便寻址。
但这样会带来一个问题。
假如有两个对象,A,B,它们size一样,都是18个字节。
这样,如果交替访问这两个对象时,就会造成这两个对象不停地从cache line中换入/换出到RAM中,而其他的cache line很有可能闲着没事干。
怎么解决这个问题呢?
slab着色就上场了。

slab着色是怎么回事呢?
其实就是利用slab中的空余空间去做不同的偏移,这样就可以根据不同的偏移来区分size相同的对象了。
为什么slab中会有剩余空间?因为slab是以空间换时间。
做偏移的时候,也要考虑到cache line中的对齐。
假如slab中有14个字节的剩余空间,cache line以4字节对齐,我们来看看有多少种可能的偏移,也就是有多少种可能的颜色。
第一种,偏移为0,也就是不偏移,那么剩余的14个字节在哪儿呢?放到结尾处,作为偏移补偿。
第二种,偏移4字节,此时偏移补偿为10字节。
第三种,偏移8字节,此时偏移补偿为6字节。
第四种,偏移12字节,此时偏移补偿为2字节。
再继续,就只能回归不偏移了,因为上一种的偏移补偿为2字节,已经不够对齐用了。
来总结一下看看有几种颜色。
第一种无偏移,后面是剩余空间 free 能满足多少次对齐 align ,就有多少种,总数: free/align +1 。
如果 free 小于 align ,slab着色就起不到作用,因为颜色只有一种,即不偏移的情况。
如果size相同的对象很多,但 free 不够大,或者 free/align 不够大,效果也不好。
因为颜色用完了,会从头再来。
继续上面的例子,如果有五个相同的对象,第五个对象的颜色与第一个相同,偏移为0.

原来着色就是这么回事!
被这个绚丽的名字唬住了好久。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值