cache line技术浅析

来源:互联网 发布:那个基金软件好 编辑:程序博客网 时间:2024/05/21 04:25
最近组内有个同事在做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路组相连的概念。