高速缓存(cache memory)在计算机系统中起着关键作用。事实上,所有现代计算机系统,包括台式电脑、数据中心的服务器和基于云的计算资源,都有少量非常快的静态随机存取内存(sram),位置非常靠近中央处理器(cpu),这种内存称为高速缓存内存。服务器网卡
尽管与主内存(ram)或二级内存(存储资源)相比,缓存内存的大小比较小,但是它对系统的总体性能有很大的影响。
什么是高速缓存?
计算机系统有硬盘驱动器(hdd)或固态驱动器(ssd)来提供高容量、进行长期的数据存储,以及ram, ram用于存储中央处理器正在使用或即将需要的数据和程序代码。ram比hdd或ssd存储快得多。它通常由动态随机存取内存(dram)组成,而dram的每gb价格也更昂贵。
但是cpu的工作速度要比ram快得多,所以有时它不得不等待从ram中读取指令或数据后才能继续处理,这降低了计算机系统的整体性能。
为了防止这种情况发生,计算机系统通常都配备了高速缓存内存:一小部分dram,速度非常快,但是非常昂贵,而且非常靠近cpu。
这种高速缓存存储了cpu可能不久就要使用的数据或指令。因为这样可以防止cpu长时间等待,这就是为什么使用缓存来提高读取性能。高速缓存和性能
高速缓存增加了计算机的性能。高速缓存内存非常靠近cpu,要么就在cpu芯片上,要么在cpu附近的主板上,由专用数据总线连接。因此,与普通ram相比,指令和数据可以更快地从中读取(并写入)。
这意味着cpu就不太会一直等待,或者等待时间将大大缩短。其结果是,非常少量的高速缓存可以显著提高计算机的性能。高速缓存的工作原理
高速缓存的工作原理是在ram中的某些内存地址获取数据或指令,并将它们复制到高速缓存中,同时记录下这些指令或数据的原始地址。
这将产生一个包含少量ram内存地址的表,以及这些ram内存地址包含的指令或数据的副本。高速缓存命中(hit)
当处理器需要来自给定ram内存地址的指令或数据时,在从ram检索这些指令或数据之前,它会检查高速缓存是否包含对该ram内存地址的引用。如果是这样,那么它将从高速缓存中读取相应的数据或指令,而不是从ram中读取。这就是所谓的缓存命中。由于高速缓存内存比ram更快,而且它更靠近cpu,因此它可以更快地获取和开始处理指令和数据。
当需要将数据或指令写入内存时,执行相同的过程。然而,在这种情况下,还有一个额外的步骤,因为如果任何东西被写入高速缓存,那么它最终也必须被写入ram。
如何做到这一点取决于缓存的写策略。最简单的策略称为write-through:使用该策略,任何写入高速缓存的内容都可以直接写入ram。
另一种策略是write-back。使用write-back策略,写入高速缓存的数据也会立即写入ram。任何写进高速缓存的东西都被标记为dirty,这意味着它不同于从ram中读取的原始数据或指令。当它从高速缓存中删除时,才会写入ram,替换原始信息。
中间策略允许将dirty信息排队并成批地写回ram,这比多个单独的写操作更有效。高速缓存未命中(miss)
如果在高速缓存中没有找到给定ram内存地址的数据或指令,那么这就是所谓的高速缓存未命中。在这种情况下,当从ram检索信息时,cpu只好被迫等待。
事实上,数据或指令从ram中检索并写入高速缓存,然后发送到cpu。原因是最近使用的数据或指令很可能在不久的将来再次需要,所以cpu从ram请求的任何东西都会被复制到高速缓存中。
(有一个例外,一些很少重复使用的数据类型可以标记为不可缓存。这可以防止数据不必要地占用有价值的高速缓存空间。)
这就引出了一个问题:如果缓存内存已经满了,会发生什么情况?答案是,必须清除高速缓存中的一些内容,以便为需要写入其中的新信息腾出空间。
如果需要做出决定,那么高速缓存将通过替换策略来决定哪些信息被删除。
有许多可行的替换策略,最常见的策略之一是最近最少使用(lru)策略。该策略的原则是,如果最近没有使用某些数据或指令,那么在不久的将来,它们比最近需要的数据或指令更不可能被需要。高速缓存的关键价值
高速缓存被用来减少ram和cpu之间的性能瓶颈。它的使用类似于将ram用作磁盘缓存。在这种情况下,存储在二级存储系统(如hdd或ssd)上的常用数据被临时放在ram中,cpu可以更快地访问这些数据。
由于ram比二级存储更昂贵(但更快),所以磁盘缓存比hdd或ssd更小。由于sram比dram更昂贵(但更快),因此高速缓存比ram更小。高速缓存的类型
主缓存。大多数高速缓存内存与cpu本身在物理上位于同一个晶粒上,最靠近cpu核心的部分,有时称为主缓存,不过这个术语现在已经不常用了。
二级缓存。这通常指的是另一块高速缓存,它位于靠近cpu的主板上的一个独立芯片上。这个术语也不常用,因为大多数高速缓存现在位于cpu 晶粒本身上。高速缓存等级
现代计算机系统有不止一块高速缓存,这些高速缓存的大小和与处理器核心的距离不同,因此速度也不同,存在不同的等级。
最小和最快的高速缓存被称为一级缓存,或l1缓存,下一个是l2缓存。现在大多数系统都有l3缓存,自从推出skylake芯片以来,英特尔也在一些处理器上增加了l4缓存。1级
l1高速缓存是内置于cpu本身的高速缓存,以与cpu相同的时钟速度运行。它是最昂贵的高速缓存,所以大小非常有限。但是因为它非常快,所以是处理器查找ram中缓存的数据或指令的第一个地方。
事实上,在大多数现代cpu中,l1缓存被分为两部分:数据部分(l1d)和指令部分(l1i)。它们分别保存数据和指令。现代cpu的缓存大小近似于每个核心32 kb l1i和l1d。2级
l2高速缓存也可能位于cpu芯片中,尽管它不像l1高速缓存那样靠近核心。或者更少见的是,它可能位于靠近cpu的单独芯片上。l2缓存比l1缓存更便宜、更大,因此l2缓存的大小往往更大,每个核心的大小可能为256 kb。3级
3级缓存往往比l1或l2缓存大得多,但在另一个重要方面也有所不同。l1和l2缓存对处理器的每个核心都是私有的,而l3则是所有核心都共享的缓存。这使得它能够在数据共享和核心间的通信中发挥重要作用。l3缓存的大小可能是每个核2 mb。
缓存映射
高速缓存,正如前面所讨论的,是非常快的这意味着它可以非常快地读取。
但它存在一个潜在的瓶颈:在从高速缓存中读取数据之前,必须先找到它。处理器知道要读取的数据或指令的ram内存地址。它必须搜索高速缓存,以查看其中是否有对该ram内存地址的引用,以及相关的数据或指令。
有很多方法可以将ram中的数据或指令映射到高速缓存中,这些方法直接影响找到它们的速度。但是有一个权衡:最小化搜索时间也会最小化缓存命中的可能性,而最大化缓存命中的机会则会最大化搜索时间。
常用的缓存映射方法如下:直接映射
使用直接映射缓存,高速缓存中只有一个地方可以存储ram中的给定数据块。
这意味着cpu只需要查看高速缓存中的一个位置,就可以查看它正在寻找的数据或指令是否存在,如果存在,就会很快找到。直接映射缓存的缺点是,它严重限制了可以存储在高速缓存中的数据或指令,因此缓存命中的次数很少。关联映射
也称为完全关联映射,这与直接映射相反。使用关联映射方案,ram中的任何数据块或指令都可以放在任何高速缓存块中。这意味着cpu必须搜索整个高速缓存,以查看它是否包含要查找的内容,但是缓存命中的几率要高得多。
组相联映射
这两种映射类型之间的折衷是组相联映射(set-associative mapping),它可以将一个ram块映射到有限数量的不同高速缓存块。
2路相联映射系统允许将ram块放在高速缓存中两个位置中的一个,相比之下,8路相联映射系统允许将ram块放在8个高速缓存块中的任意一个。
2路系统的搜索时间是直接映射系统的两倍,因为cpu必须在两个位置而不是一个位置进行搜索,但是缓存命中的几率要大得多。想了解更多存储产品需要合作与咨询搭建方案请联系上的在线客服嘉华众力自2000年成立以来一直在网络存储、传输这方面积累、沉淀;经过多年发展与全新的品牌定位,( ceacent )嘉华众力品牌已成为国内外极具实力的数据通讯产品及方案提供商,请关注嘉华众力:wwwunicacacom |ceacent as3008r磁盘阵列卡riad卡硬盘hba通道卡 sas3008芯片 ,拥有大部分主板都适用的pci-ex8接口,为集成raid0-1,raid10,raid1e能提供稳定,高效的带宽通道,最大传输速度达到9600ms ;,2 * mini sas接口 ,支持固态硬盘、硬盘驱动器和磁带驱动器。
部分资料来源于:it168