Memory Systems_ Cache, DRAM, Disk (2010)-学习笔记1-Overview of Cache Principles

 

Cache

一、缓存的作用和原理

缓存是加速存储设备访问的一种技术,可以用于多种类型的存储设备,缓存的核心目标是通过存储常用数据来提高性能,让数据访问速度更快。

1. 引用局部性(Locality of Reference)

缓存之所以能加速访问,是因为它利用了引用局部性这一现象。引用局部性有两个基本特点

  • 时间局部性:某个数据一旦被访问,它很可能会在不久之后再次被访问。

  • 空间局部性:如果某个数据被访问,那么该数据附近的其他数据也很可能会被访问。

2. 存储设备的特点

所有存储设备都可以通过以下两个方面来描述:

  • 访问时间:即从请求到获得数据所需的时间。

  • 每比特成本:存储一比特数据的费用。

一般来说,更快的存储设备(例如,RAM)访问时间较短,但它们的每比特成本较高;而较慢的存储设备(如硬盘、磁带)则访问时间较长,但每比特成本较低。

3. 缓存的实现

缓存常采用比主存储设备更快的技术,大多数访问的速度就会和缓存的速度相同,这通常比直接访问较大的存储设备要快,并且消耗的能源也更少。

3.1、 缓存的实现技术

缓存可以由任何能够保持状态的东西构成

硬件缓存:计算机系统中广泛使用硬件缓存。例如:

  • SRAM(静态随机存储器)可以作为DRAM(动态随机存储器)的缓存,因为SRAM比DRAM访问速度更快。SRAM一般作为cpu的cache

  • DRAM可以作为硬盘的缓存。

  • 更快的DRAM可以作为更慢的DRAM的缓存。

  • 磁盘可以作为磁带的缓存(磁带的访问速度通常较慢)。

还有的会用HBM(3d堆叠的DRAM),服务器GPU、Intel的五六代Xeon用到

软件缓存:除了硬件缓存,软件缓存也很常见。例如:

  • 操作系统缓存磁盘上的数据块和网络地址。 Linux Page Cache

  • Web代理服务器缓存流行的网页文档。 Http Cache,比如浏览器浏览很多图片

  • 硬件设备如磁盘驱动器也可能在本地缓存数据,并通过控制处理器执行缓存算法来管理这些数据。DRAM

3.2 缓存的组织形式

缓存可以是单一的,也可以由多个独立的实体组成。比如:

  • 对称多处理器系统(SMP)中,每个处理器可能有自己的最后一级缓存(如L3缓存),这些缓存可以被视作多个独立的单元,但也可以被看作是一个逻辑上的统一缓存。

  • 有些缓存被设计为多级层次结构(如NUCA,非统一缓存架构),而不是单一的缓存。多级缓存结构通常用于提高效率,将数据分布在多个层次的缓存中,以提高访问速度。

SMP架构下,每个处理器(或核心)通常有自己独立的 L1 和 L2 缓存,有时也有自己的最后一级缓存(L3),这些独立的 L3 缓存单元物理上分开,但是他们需要并行计算,合作处理,这时可以通过一致性协议(如 MESI)保持缓存内容同步

NUCA(Non-Uniform Cache Architecture,非统一缓存架构),L3 缓存物理上分布在芯片不同区域,访问不同缓存块的延迟不同(非统一),通过智能映射和管理,让数据尽可能存放在访问延迟最小的缓存区域,提高整体效率

4. 缓存的类型

4.1透明缓存(Transparent caches)

客户端无需直接干预缓存的管理。缓存会有着自己的启发式算法(heuristics)自动进行决策,判断哪些数据应该被保留,哪些数据可以丢弃。例如:

  • 处理器缓存(Processor Caches):例如,CPU的L1、L2缓存,它们自动缓存程序访问的数据,帮助提高程序运行效率。

  • 文件缓存(File Caches):如分布式文件系统中的文件缓存,自动缓存文件的数据块,以便更快速地访问。

  • Web缓存(Web Cache):例如,浏览器缓存或Web代理缓存。Web缓存通常对客户端透明,缓存的数据是在用户访问网页时自动存储的。

透明缓存有一个重要特性:缓存中的数据可以被删除、丢失或失效,但原始数据仍然可以从原始存储(例如硬盘、远程服务器等)中恢复。客户端不需要担心这些缓存细节,只需要享受更快的数据访问

4.2 临时缓存(Scratch-pad)

客户端必须手动管理数据的移动,并且缓存的数据版本就是唯一的版本,不会自动将缓存中的数据更新回原始存储。

寄存器文件(Register File):理器中的寄存器是一个典型的临时缓存。它用于存储CPU运行时需要的临时数据,数据存入寄存器后由处理器直接操作。

没有标签的SRAM(Tagless SRAM):这种类型的缓存常见于微控制器(MCU)和数字信号处理器(DSP)中,数据需要由客户端(通常是应用程序或操作系统)明确地读写

4.3 混合缓存(Hybrid Caches)

结合了自主管理(autonomy)客户端控制(client-directed management)的特性

  • VMP多处理器系统中的软件控制缓存:Cheriton等人在VMP系统中提出了一种软件控制缓存,其中缓存的管理由操作系统或者软件来控制,而并非完全由硬件自主管理。

  • 现代多处理器中的“嗅探”缓存:这些缓存通常用于处理器之间的共享数据访问,缓存管理系统自动进行,但也允许不同的处理器根据需要进行控制。

  • 操作系统的缓冲区缓存:操作系统使用一部分主内存作为缓冲区缓存来存储磁盘块。虽然缓存的管理是由操作系统进行的,但操作系统本身也可以作为缓存的客户端。换句话说,缓存既有管理者(操作系统控制缓存的内容和策略),也有客户端(应用程序和操作系统自己也可以从缓存中读取数据)。(不太能理解)

自主管理:浏览器会自动缓存你访问的网页资源,客户端(你)不需要干预缓存的管理。你只需要享受更快的网页加载速度,浏览器会决定哪些资源应该缓存,以及缓存多久。

客户端管理:虽然缓存是自动的,但你仍然有一定的控制权。例如,你可以手动清除缓存、设置缓存策略(比如指定资源的过期时间),或者强制刷新页面(不使用缓存)。这些操作显示了客户端管理的部分

透明缓存几乎没有来自运行中的应用程序的直接指令,它就必须推断应用程序的意图,它必须尝试预测客户端(例如当前正在执行的应用程序)的未来行为。所以数据获取(fetch)、淘汰(eviction)和放置(placement)策略非常重要,这些策略决定了缓存的有效性。

客户端管理的缓存则根本不包含基于缓存的启发式策略。

5. 缓存的三大特点

每个缓存,无论是硬件实现还是软件实现,无论是透明缓存还是客户端管理缓存,无论是分布式还是单一整体,都体现了以下三个方面

5.1 缓存的组织(Organization)

操作系统的缓冲区缓存可以组织成一组队列,每个队列大致表示存储对象最后一次被访问的时间(例如,队列1存放刚刚到达的项目,队列2存放最近访问过的项目,队列3存放一段时间未被访问的项目,等等)

5.2 内容管理启发式(Content-management heuristics)

是否缓存某个特定数据项的策略,些策略可以由程序员和/或编译器在设计时实现,也可以由应用软件和/或缓存自身在运行时实现。启发式策略可以是静态的(缓存内容随时间变化不大),也可以是动态的(缓存内容可能随时剧烈变化)。

  • 静态启发式:缓存策略比较固定,比如什么时候缓存数据,缓存什么类型的内容。

  • 动态启发式:缓存的内容根据应用程序的实时需求发生变化,就是随机应变的那种。

5.3 一致性管理启发式(Consistency-Management Heuristics

一致性管理的目标是确保缓存中的数据在任何时候都与主存储中的数据保持一致,确保应用程序获得的数据是最新的,避免“脏数据”或数据冲突。

一致性管理的主体:一致性可以由不同的实体管理,取决于缓存的类型和设计:

  • 操作系统:操作系统负责维护系统缓存的一致性,确保缓存中的数据符合当前的系统状态。

  • 应用程序:应用程序本身可能会管理一致性,尤其是在分布式缓存系统中,应用程序需要确保多个副本之间的一致性。

  • 缓存本身:一些高级缓存系统会自主管理一致性,自动同步缓存和主存储之间的数据。

posted @ 2025-07-20 23:27  xyh0703  阅读(54)  评论(0)    收藏  举报