1. cache 概念扫描
简介:
cache 是一种小容量的缓存空间,类似于较小的sram 。 它的存在着重解决逻辑访问外部存储(ddr )的时延。 通过一种预测算法(cache 的换入和换出),将逻辑大概率访问的热点流/数据 存储在cache 中,减小访问外设的延时,也可以减少访问外设带宽。
常用术语:
换入: cache ptr申请命中后,将新数据写入chche 。 若存在冲突,老数据需要等待所有读返回后回写ddr;
换出: cache ptr 申请命中,但是存在冲突,需要将老的数据换出; 有老化机制,符合老化标准,也将数据换出,cache ptr 释放;
老化: 一种将cache ptr 回收程序, 可以按照特定算法实现。 下文有描述。
保序:硬件上设计cache ,必然使用并行思想。存在多个读写 outstanding 情况,需要按申请顺序,保序输出读写请求。
哈希:根据实际使用场景,将需要存入chche的热流/数据,通过hash 算法映射成 唯一 一个cache ptr。 为了减少冲突,可以增加cache ptr的dpth ,也就是扩大hash结果的位宽,降低多个热流hash 到一个ptr 的概率。
换出算法:
隨機算法: 固定时间间隔随机 换出一个 cache ptr;
先进先出算法:类似fifo, 第一个申请的ptr ,优先被换出。
可能造成抖动现象: 先申请ptr1 - ptr5 ,然后来了ptr6 占用ptr1 ,此时逻辑会顺序访问ptr 1- ptr5,则ptr1 会重新占用ptr2 ,ptr2 会占重新用ptr3 ......,影响cache 性能。
近期最少使用:对每一个ptr 使用一个cnt 记录其多久未被访问的次数。 例如顺序申请ptr1 ~ ptr5, 当申请完后 其对应cnt 为4,3,2,1,0 。 所以下一次被换出的是ptr1 ,然后将cnt 变为 0,4,3,2,1。 这种实现方式不会出现不同ptr的cnt 相同情况。
最近不经常使用: 使用cnt 记录当前ptr被访问次数,需要换出时,看cnt的最小值对应的ptr。
cache 映射分类:
全相联映射:一个chunk可以映射到缓存的任何一个块,优点是非常的灵活,但缺点是因为存储的随机性所以在缓存中查询某一个块的时间开销会增加,而且会给每个Cache块分配一个比较器所以硬件成本增加。
直接映射:是最不灵活的策略,一个内存块只能存储到cache的一个特定的位置,这由内存块在内存的物理地址和映射函数决定。这种策略容易造成cache还有空余空间,但却发生冲突的情况。
组相联映射:全相联映射和直接映射的结合将cache块进行分组,一个内存块可以映射到特定组的某个缓存块中。实质是组外采取直接映射,组内采取全相联映射。
类似于一个hash 值可以映射到一组存储空间(逃生桶),但是具体使用哪个需要根据key 做一次 mux ;
TODO: 设计框图
参考 :
https://zhuanlan.zhihu.com/p/667534349
3.9.3Cache替换算法-CSDN博客
https://zhuanlan.zhihu.com/p/629237349