slab着色与cpu硬件高速缓存

本文探讨了在多核系统中,由于高速缓存行映射导致的缓存行冲突问题,并介绍了Slab着色技术如何通过调整对象偏移量来减少这种冲突,进而提高系统的整体性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同一硬件高速缓存行可以映射 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值