前面发现自己对cache的概念模糊了,又拿起《计算机组成与设计:软硬件接口》这本经典之作温习了一下。
cache的存在是为了解决CPU处理速度比memory范围速度快得多的问题。如果没有CPU与memory速度上的差异,cache不需要存在。
采用cache技术,需要关注一下几个问题:1.如何知道数据在cache中 2.如何定位一个数据 3.如何处理cache和memory数据一致性的问题。如何知道数据是否在cache中与如何定位数据往往息息相关。一般是定位好数据之后通过一个valid bit来确定是否这个数据是否有效。
简单的cache,查询数据过程为:通过对地址取模定位到cache的一行,然后通过cache中tag位来校验是否是该地址的数据,最后通过valid bit来确定数据是否真的有效。
上述过程是一个直接映射的过程,即:memory中的一个位置,只能唯一地映射到cache中的一个位置。
为降低memory中数据对cache同一存储位置竞争的可能性,同时提高cache的利用率,产生了新的组织cache的方法。主要有3种,分别是:1.直接映射(direct mapped cache)2.组关联(set-associative cache)3.全关联(fully associative cache)。
1.直接映射即memory中的一个位置,只能唯一地映射到cache中的一个位置。
2.组关联即memory中的一个位置,只能唯一地映射到cache中的某n个位置,相应的名字即为n路组关联。
3.全关联即memory中的一个位置,可以映射到cache中的任意位置。
组关联、全关联往往会采用并行比较来确定数据所在位置。
有实验表明:当关联度有1路提高到2路时,有效缺失率减少了大约15%,但是继续提高关联度,缺失率没有改善。
还有就是通过多级cache来提高数据访问的性能。
多级cache设计与单级cache的设计理念有比较大的不同。例如二级cache的结构中,一级cache主要需要解决访问时间的问题;而二级cache主要需要解决缺失率的问题。这样带来的影响是:一级cache往往小一点,块的容量也会小一点,而二级cache刚好相反。
处理cache与memory数据一致性问题,主要有方法:写通过(write through)与写回(write back)。
写通过就是写操作穿透cache,直接到memory。
写回则是延迟写,只有当该cache块要被替代时,才将其刷到memory中。
写回效率会高点,当然也会复杂很多。
连接cache与memory的总线(bus)也会成为性能瓶颈,所以也会采用做一些优化。一种方法是增加总线带宽,另一种技术是交叉存取(interleaving),具体做法是:由于总线速度比memory快,可以将存储器组织若干块,实现交叉存取。
cache的一些思考:cache的主要思想有两个:将数据数据放到更快的地方;将数据放到离使用更近的地方。在实际应用中,如果有出现访问有速度上的差异,我们可能就要考虑使用cahce了。
有的时候为了快速响应,会把从数据库中取出的数据直接放到应用服务器就是一个例子,这样做还有一点好处是降低数据库的访问压力。
cache的存在是为了解决CPU处理速度比memory范围速度快得多的问题。如果没有CPU与memory速度上的差异,cache不需要存在。
采用cache技术,需要关注一下几个问题:1.如何知道数据在cache中 2.如何定位一个数据 3.如何处理cache和memory数据一致性的问题。如何知道数据是否在cache中与如何定位数据往往息息相关。一般是定位好数据之后通过一个valid bit来确定是否这个数据是否有效。
简单的cache,查询数据过程为:通过对地址取模定位到cache的一行,然后通过cache中tag位来校验是否是该地址的数据,最后通过valid bit来确定数据是否真的有效。
上述过程是一个直接映射的过程,即:memory中的一个位置,只能唯一地映射到cache中的一个位置。
为降低memory中数据对cache同一存储位置竞争的可能性,同时提高cache的利用率,产生了新的组织cache的方法。主要有3种,分别是:1.直接映射(direct mapped cache)2.组关联(set-associative cache)3.全关联(fully associative cache)。
1.直接映射即memory中的一个位置,只能唯一地映射到cache中的一个位置。
2.组关联即memory中的一个位置,只能唯一地映射到cache中的某n个位置,相应的名字即为n路组关联。
3.全关联即memory中的一个位置,可以映射到cache中的任意位置。
组关联、全关联往往会采用并行比较来确定数据所在位置。
有实验表明:当关联度有1路提高到2路时,有效缺失率减少了大约15%,但是继续提高关联度,缺失率没有改善。
还有就是通过多级cache来提高数据访问的性能。
多级cache设计与单级cache的设计理念有比较大的不同。例如二级cache的结构中,一级cache主要需要解决访问时间的问题;而二级cache主要需要解决缺失率的问题。这样带来的影响是:一级cache往往小一点,块的容量也会小一点,而二级cache刚好相反。
处理cache与memory数据一致性问题,主要有方法:写通过(write through)与写回(write back)。
写通过就是写操作穿透cache,直接到memory。
写回则是延迟写,只有当该cache块要被替代时,才将其刷到memory中。
写回效率会高点,当然也会复杂很多。
连接cache与memory的总线(bus)也会成为性能瓶颈,所以也会采用做一些优化。一种方法是增加总线带宽,另一种技术是交叉存取(interleaving),具体做法是:由于总线速度比memory快,可以将存储器组织若干块,实现交叉存取。
cache的一些思考:cache的主要思想有两个:将数据数据放到更快的地方;将数据放到离使用更近的地方。在实际应用中,如果有出现访问有速度上的差异,我们可能就要考虑使用cahce了。
有的时候为了快速响应,会把从数据库中取出的数据直接放到应用服务器就是一个例子,这样做还有一点好处是降低数据库的访问压力。