cisen / blog

Time waits for no one.
135 stars 20 forks source link

cache 相关 #1053

Open cisen opened 3 years ago

cisen commented 3 years ago

总结

概念

way 路

set/index/cacheline index

word

tag

算法

https://www.zhihu.com/question/35334757?sort=created LRU极少在cache里面被采用主要是因为实现开销太大,逻辑层数和per-way的访问历史存储要求都远高过其他替换策略,但是效果却没有好多少,我看到的实测数据是,从LRU到纯随机替换,miss rate只有百分之零点几到百分之一点几的区别,实在是没有必要为这个东西大动干戈的,所以一般都是P-LRU,P-LRU也有很多种,轮转啊,二叉树啊,都有人用。//2016.11 update:最近注意到一些效果超越LRU 10%~15%的先进替换算法,比如DRRIP(ISCA 2010),打算在我们自己的原型系统上试用一波

MESI

MESI中每个缓存行都有四个状态,分别是E(exclusive)、M(modified)、S(shared)、I(invalid)。下面我们介绍一下这四个状态分别代表什么意思。

M:代表该缓存行中的内容被修改了,并且该缓存行只被缓存在该CPU中。这个状态的缓存行中的数据和内存中的不一样,在未来的某个时刻它会被写入到内存中(当其他CPU要读取该缓存行的内容时。或者其他CPU要修改该缓存对应的内存中的内容时(个人理解CPU要修改该内存时先要读取到缓存中再进行修改),这样的话和读取缓存中的内容其实是一个道理)。

E:E代表该缓存行对应内存中的内容只被该CPU缓存,其他CPU没有缓存该缓存对应内存行中的内容。这个状态的缓存行中的内容和内存中的内容一致。该缓存可以在任何其他CPU读取该缓存对应内存中的内容时变成S状态。或者本地处理器写该缓存就会变成M状态。

S:该状态意味着数据不止存在本地CPU缓存中,还存在别的CPU的缓存中。这个状态的数据和内存中的数据是一致的。当有一个CPU修改该缓存行对应的内存的内容时会使该缓存行变成 I 状态。

I:代表该缓存行中的内容时无效的。

问答

cache line,index,tag各是什么?

为什么组相连的设计可以减少颠婆?

cisen commented 3 years ago

语法和内置对象

input和output