Cache 相关内容:
Cache 失效率优化方法主要包括以下几种策略:
- 选择恰当的块容量(Block Size):块容量过小会导致更多的 Cache 行被频繁替换,增加失效率;块容量过大则可能造成空间浪费和冲突增加。需在局部性与利用率之间权衡。
- 提高 Cache 容量:更大的 Cache 可以缓存更多数据,从而提升命中率、降低失效率。但容量增大会导致成本上升、访问延迟略有增加,并可能影响时钟频率。
- 提高 Cache 的相联度(Associativity):如从直接映射改为组相联或全相联,可减少冲突失效率,提升性能。但高相联度会增加比较电路复杂度和访问时间。
Cache 容量与命中率的关系:
随着 Cache 容量增大,命中率通常会提高,失效率逐渐下降并趋近于 0。然而,这种提升存在边际效益递减现象——当容量达到一定阈值后,再增加容量对命中率的改善有限。同时,大容量 Cache 会带来更高的制造成本和稍长的访问延迟。
多级 Cache 结构:
现代处理器普遍采用多级 Cache 架构(L1、L2、L3 等):
- L1 Cache:位于 CPU 核心内部,容量小(通常为几 KB 到几十 KB),速度最快,一般分为指令 Cache 和数据 Cache(哈佛结构)。
- L2 Cache:容量更大(几百 KB 到几 MB),速度略慢于 L1,通常被单个核心独占或多个核心共享。
- L3 Cache:容量更大(可达数十 MB),为多个核心共享,速度较慢但仍远快于主存。
访问顺序为:CPU 先查 L1,未命中则查 L2,再未命中查 L3,最后访问主存。
虚拟存储器相关内容:
-
物理地址 vs 虚拟地址:
- 物理地址是主存中实际存在的地址,由地址总线直接寻址。
- 虚拟地址是程序使用的逻辑地址,通过 MMU(Memory Management Unit)转换为物理地址后才能访问真实内存。
-
地址转换机制:
操作系统为每个进程提供独立的虚拟地址空间,MMU 使用页表(Page Table)将虚拟页号映射到物理页框号。配合 TLB(Translation Lookaside Buffer)加速地址转换过程,避免每次访问都查询内存中的页表。
示例说明:
若主存容量为 4GB(即物理地址空间为 32 位),操作系统可通过更大的虚拟地址空间(如 48 位)让每个进程“看到”一个连续且独立的地址范围。MMU 在运行时动态完成地址翻译,实现内存隔离与保护。
调整 Cache 块大小是优化 Cache 性能的关键手段之一,其核心在于平衡时间局部性与空间局部性的利用效率。
-
空间局部性(Spatial Locality):指程序在访问某个内存地址后,短时间内很可能访问其附近的地址。
较大的块容量可以更好地利用空间局部性,因为每次从主存加载一个数据时,会同时将相邻的数据一并载入该 Cache 行中。例如,在遍历数组或执行连续指令时,大块能显著提升命中率。 -
时间局部性(Temporal Locality):指程序在不久的将来可能再次访问最近使用过的数据。
小块容量可以在相同 Cache 容量下容纳更多行数(即更多不同的内存地址),从而提高缓存多样性,有利于保留近期频繁使用的多个不同数据项,增强对时间局部性的支持。
如何通过块大小进行平衡?
| 块大小 | 对空间局部性的影响 | 对时间局部性的影响 | 潜在问题 |
|---|---|---|---|
| 较小块 | 利用较差,无法预取邻近数据 | 更多行可用,利于保留多个热点数据 | 浪费带宽、增加缺失次数 |
| 适中块(如 64 字节) | 良好利用常见访问模式 | 行数量合理,兼顾多样性和保留能力 | 当前主流设计选择 |
| 较大块 | 极好利用连续访问模式 | 行数减少,易导致冲突和替换频繁 | 内部碎片大、标签开销高、失效率反而上升 |
实际权衡策略:
-
避免过大块:虽然一次传输更多数据可提升空间局部性收益,但会导致:
- Cache 中存储的有效数据比例下降(内部碎片)。
- 相同容量下总行数减少,降低整体命中率。
- 替换更粗粒度,可能踢出有用的小区域数据。
-
避免过小块:
- 增加访问主存的次数(每块数据太小)。
- 增加标签存储开销占比(每个块都有独立标签)。
- 无法有效利用总线带宽(一次只传少量数据)。
-
现代典型值:目前大多数处理器采用 64 字节块大小,这是一个经过广泛验证的折中方案,能够较好地平衡空间局部性增益与资源利用率。
示例说明:
假设有一个循环遍历整型数组 int A[16],每个整型占 4 字节:
- 若块大小为 16 字节 → 可装 4 个元素 → 一次加载可服务后续几次访问(良好空间局部性)。
- 若块大小为 64 字节 → 可装 16 个元素 → 整个数组一次性载入,非常高效。
- 若频繁切换两个不相关的变量(强时间局部性),则小块更有利,因允许它们共存于 Cache 中而不互相挤出。
因此,最佳块大小需结合工作负载特征(访存模式)、主存带宽、Cache 容量和制造工艺综合设计。


1015

被折叠的 条评论
为什么被折叠?



