Cacheline技术浅析

本文详细介绍了缓存的工作原理及其与物理内存之间的关系,解释了如何利用缓存行来优化内存访问效率,减少冲突。
最近组内有个同事在做cacheline相关的特性,向其学习了一下,对原来的cacheline的理解更近了一步。这里总结一下。请彭超大侠有空的话帮忙在斧正一下

Cache就是对内存的内容进行缓存的一个硬件。cache和内存的逻辑关系结构如下图所示。从左往右,从上到下逐个说明







首先物理内存又是通过物理地址PA(physical address)标识的,内存块用PA+SIZE表示,在读取内存的时候,CPU会将内存块load到cache中,但是并不是按照SIZE的大小load内存块,而是按照cacheline的大小load一个内存块,指定的物理内存块将被包含在这段被load的内存中(如上图黄色+蓝色部分所示,黄色代表了内存块在cacheline大小的内存块中的位置)。所以在编程的时候,尽量将结构设计为cacheline对其的,一次可以加载完成,访问下个结构体的时候,就可以直接访问另一个cacheline,而不发生冲突了。

物理地址又被分为三个部分,tag+index+offset。index就是物理地址在cache这个大数组中的位置,相当于数组索引,索引到了后,offset说明了PA所在的内存在cacheline中的偏移量。
这样看来,就会发现很可能两个物理地址中见的index很有可能发生重复,这就是cacheline冲突。这样的情况下,就要先废除cacheline上前一个的内容后重新加载新的内存才会有效。这样的冲突会大大降低内存的访问效率,所以intel有提出了一种更新的架构,如下图所示




在每个cacheline的下一级又多了way的概念,每个cacheline的下一级又被分为4WAY或8WAY,每个way都相当于一个cacheline。这样即使index冲突,也可以将内存内容放到不同的way中减少冲突。tag就是用来表示是那个way上的。上面的结构就是所谓的4路组相连或8路组相连的概念。



### 定义 Cacheline 对齐是指将数据存储在内存中时,使其起始地址与 Cacheline 的边界对齐。一般一个 Cacheline 是 64 位,也就是 8 个 long 类型数据。通过合理安排数据的存储位置,让数据处于同一个或合适的 Cacheline 中,避免不同线程对同一 Cacheline 中的不同数据进行操作,从而减少伪共享问题的发生[^1]。 ### 作用 Cacheline 对齐的主要作用是避免伪共享问题,提高程序的性能。在多核 CPU 系统中,每个核都有自己的 cache 设备,根据 cache 的一致性协议,多核的 cache line 保持一致。若多个线程同时访问同一个 Cacheline 中的不同数据,当其中一个线程修改了该 Cacheline 中的数据时,会导致其他核中该 Cacheline 失效,需要重新从内存中加载数据,从而增加了数据访问的延迟,降低了程序的性能。通过 Cacheline 对齐,可以使不同线程访问的数据位于不同的 Cacheline 中,避免这种伪共享现象,提高程序的并发性能[^2]。 ### 实现方法 可以通过合理定义数据结构来实现 Cacheline 对齐。例如,将变量定义为合适的数据类型,并添加一些无用的变量来填充 Cacheline。以将 `x` 和 `y` 两个变量进行 Cacheline 对齐为例,把 `x` 定义为 `long` 类型,并同时定义 7 个没有用的 `long` 变量,这样这 8 个数就在同一个 CacheLine 中,之后再定义 `y`,`y` 自然也就在下一个 CacheLine 中了,这就完成了 Cacheline 对齐。以下是示例代码: ```c #include <stdio.h> // 定义一个结构体来实现 Cacheline 对齐 typedef struct { long x; long padding[7]; // 填充 7 个 long 变量以实现 Cacheline 对齐 long y; } CacheLineAlignedData; int main() { CacheLineAlignedData data; data.x = 10; data.y = 20; printf("x: %ld, y: %ld\n", data.x, data.y); return 0; } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值