IT外包网管服务,并发原理的MESI与存储器势垒

发布者:上海IT外包来源:http://www.lanmon.net点击数:1374

蓝盟IT外包小贴士,来喽!

当cpu在cache中查找数据时,如果没有数据,将发生cache  miss,此时cpu需要等待从存储器中读取数据,这会花费一段时间,但是由于读取后将其存储在cache中,所以以后的读取会非常快。 为了减少缓存丢失性能,当前的cpu单核心允许ht,并且另一线程现在可以在一个线程等待时执行指令。
为什么有cache  miss,一个是数据预热,机器刚启动时,cache没有数据,另一个是cache不足,需要淘汰旧的数据。
我们使用最多的高速缓存一致性协议是MESI,4个字符分别表示modified,exclusive,shared,invalid,这是cache  line的4种状态
修改:数据由cpu独占,不存储在其他cpu中。
exclusive  :此状态类似于modified,但在此状态下,cache数据已经与主存储同步,因此可以丢弃它。
shared  :数据存在于多个cpu  cache中,各cpu只能读写该数据,不容易写
invalid:cacheline为空


Read:read消息使用cache  line的物理内存地址从其他cpu检索数据
读响应:如果其他cpu具有此cache  line并且已修改,则cpu必须返回消息,因为其他cpu的cache  line和主机没有最新数据
Invalidate:invalidate消息具有cache  line的物理内存地址,允许其他cache从cache  line中删除相应的数据
invalidate  acknowledge  :如果CPU收到invalidate消息,则必须在删除数据后返回消息
Read  Invalidate  :由于此消息是Read和Invalidate的组合,因此需要Read  Response和多个Invalidate  Acknowledge
Writeback:modified状态的cache  line被写入主存储器,可以为其他数据留出空间。
a) cpu将cacheline写回存储器,此时cpu对该cacheline拥有独占权。b) cacheline由cpu修正,不需要cpu间的通信
c  )当CPU收到read  invalidate时,本地缓存线将被禁用
d) cacheline将由本地cpu进行更改,并且必须与其他cpu通信以发出read  invalidate以获取最新数据
e) cacheline将由本地cpu进行更改,并且必须向其他cpu发出invalidate请求
f  )其他cpu发出读取请求
g  )其他处理器发出读取请求
h  )由于cpu意识到数据将立即写入缓冲线,因此invalidate消息被预先发送给另一cpu
I  )其他cpu发来了read  invalidate
j) cpu可能在写入数据之前向其他cpu发送read  invalidate消息,然后进入e状态并立即进入m状态
k) cpu发出读取请求
收到invalidate请求
如果cpu0将数据写入本地cache时不是m或e状态,则必须向cpu1发送invalidate消息,并且只有在从cpu1接收到acknowledgement时才能将数据写入cache。 在此过程中,cpu0必须等待,对性能有很大影响。 解决方案之一是在cpu和cache之间部署store  buffer,在发布invalidate后立即将数据写入store  buffer。
但是,存储器屏障的处理方法存在问题的是,由于存储缓冲器的空间有限,因此如果存储缓冲器的空间被插入smp_mb以后的存储器中,则cpu必须在invalidate消息返回之前继续进行处理要解决此问题,可以提前返回invalidate  ack。 一种方法是提供用于存储invalidate消息的队列。 invalidate  queue. cpu可以在收到本地cache  invalidate后立即返回invalidate  ack,而invalidate消息不能放在invalide  queue中进行后续操作。

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部