为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

4路组相连cache设计-cache基本原理

2023-06-18 4页 doc 20KB 13阅读

用户头像 个人认证

is_856463

暂无简介

举报
4路组相连cache设计-cache基本原理  4路组相连cache设计cache基本原理  为什么要了解cache:在学习linuxkernel的过程,经常会cache的概念,从软件层面的page/buffercache;再到硬件层面中CPU的L1L2L3cache、TLB,磁盘内部的硬件cache;以及编程时的cacheline对齐,slab着色等等。cache是我们始终绕不开的一个主题,本文主要介绍处理器内部的硬件高速缓存。为什么要使用cache:原因很简单,提速。CPU处理指令的速度远远快于访问主存的速度,若频繁的访问主存,会大幅拉低整个系统执行程序的效率,而C...
4路组相连cache设计-cache基本原理
  4路组相连cachecache基本原理  为什么要了解cache:在学习linuxkernel的过程,经常会cache的概念,从软件层面的page/buffercache;再到硬件层面中CPU的L1L2L3cache、TLB,磁盘内部的硬件cache;以及编程时的cacheline对齐,slab着色等等。cache是我们始终绕不开的一个主,本文主要介绍处理器内部的硬件高速缓存。为什么要使用cache:原因很简单,提速。CPU处理指令的速度远远快于访问主存的速度,若频繁的访问主存,会大幅拉低整个系统执行程序的效率,而CPU访问cache的速度则很快,快到和系统访问CPU内部寄存器的速度接近,所以使用cache能减少CPU访问主存的次数,从而达到系统提速的目的。cache预备知识:cacheline是什么:每个内存地址代的存储单元是1byte,cache和内存之间传输却不是以单个byte进行的,而是以cacheline为单元。常见的cacheline大小有32、64、128bytes。使用cacheline很明显的一个原因是利用了程序访问的空间局部性,短时间内程序访问内存空间中的数据或是指令大概率会在一段连续的地址范围内,所以一次性从主存中取一段cacheline大小的连续内存,可以减少访问内存的次数。cache的关联方式:cache通过关联方式被分为直接映射cache、多路组相连cache以及全相连cache。如果一块内存数据(大小为一个cacheline),只有一个cacheline与之对应,我们称之为直接映射(Directmapped);如果该块内存数据可以和cache中的任意一个cacheline对应,则称之为全相联(Full-Associative)。而目前更多的实现方式是采用多路组相连(N-WaySet-Associative),即一块内存数据可以对应到N个cacheline上。多路组相连(N-waySetAssociative):ARMv8架构的cortex-a57的L1D-cache采用了2路组相连缓存(2-wayssetassociative),I-cache采用了3路组相连缓存;L2的I-cache和D-cache都使用了16路组相连缓存。我们知道当CPU去读取某地址的内存前,会先去访问cache,如果cache命中就直接从cache里获取数据。那检查命中是怎么个流程呢?假设我们有一个32KB的cache是4路组相连,且cacheline大小为32bytes。那么组的大小是32KB/4=8KB,每组的cacheline数量是8KB/32B=256个。再限定CPU地址位宽是48bit,那判断cache是否命中的信息就全在这48个bit中了。bit0--bit4(2^5=32)用来确定cacheline中的32个byte具体哪个byte;bit5--bit12(2^8=256)用来确定256个cacheline中具体哪路cacheline(由于我们有4路,所以会找到4个cacheline),如何确定是4路中的哪一路呢?而且如果只依据bit5--bit12去定位cacheline,那将会有2^35个可能对应到这4路cacheline。所以每个cacheline还会配一个tag用来解决上面的两个问题,tag存储了cacheline对应内存地址的bit47--bit13,这样所有的地址都用上了,从而能对应到唯一的一条cacheline(对应不到?那就是cachemiss咯)。如上图。关于cacheline中的flags,每个cacheline还会包含V(valid)和D(dirty)的两个flags用于表示当前cacheline是否valid,以及cacheline中的数据是否dirty,有点类似于多级页表中PTE上的present和dirty位。直接映射缓存(Direct-mappedcache):直接映射的方式可大致等同与多路组相连中1路组相连的情况。但从缓存效果上看,直接映射的缺点(还用上面的32KBcache举例)在于:每个bit5--bit12的地址一样的内存块有2^35个,而这2^35个内存块只能对应一个index固定的cacheline,若该cacheline缓存了一块内存数据,那下次再有数据落在这2^35个可能中的任意一内存块中,前一个cacheline中的数据就会被冲掉,还要重新访问内存填充cacheline,这种情况被成为cache颠簸(cachethrashing)。于是出现了多路组相连缓存,更多的组可以减少cachethrashing发生的概率。全相连缓存(Fullassociativecache):全相连缓存可以理解为直接映射缓存中去掉index段,bit5--bit47全部存放在tag中,没有了index的限制,意味着每条cacheline可以对应任意一个内存块。你可能会觉得这样不是最好的吗?倘若cache较大时,cacheline就会变得很多很多,当判断是否cachehit时,需要遍历大量的tag,不够高效,且增加了硬件设计的复杂性。所以全相连只适用于cache容量较小的情况。参考文献:https://en.wikipedia.org/wiki/CPU_cacheDocumentation-ArmDeveloper原创文章,转载和引用请注明出处。作者:YannXu -全文完-
/
本文档为【4路组相连cache设计-cache基本原理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索