什么是CHI及cache一致性协议——CHI(1)

目录

一、什么是CHI

二、cache一致性协议MOESI

三、拓扑结构

四、snoop 方式

五、CHI层次


一、什么是CHI

        CHI(Coherent Hub Interface)协议是AMBA的第五代协议,是ACE协议的进化版,将所有的信息传输采用包packet的形式来完成,用于解决多个CPU(RN)之间的数据一致性问题。

        CHI 旨在实现可扩展性,能够构建小型、中型或大型系统。这些系统使用多个组件,范围从处理器集群、图形处理器和内存控制器,到 I/O 桥、PCI ExpressPCIe子系统和互联本身。

二、cache一致性协议MOESI

        我们在学习CHI之前,需要先了解cache一致性协议(MOESI)

        MOESI认为cache有5种状态位:

M(modified)位。当前cache行中的数据跟处理其中的不一样,并且只有当前cache保存这个cache行数据,其他cache没有该副本。当对这个cache进行替换的时候,不要现将cache行中的数据协会到存储器中。

E(exclusive)位。只在该cache中有副本,其他cache中没有该cache行副本。cache行内容跟存储器中的一样。

I(invalid)位。I位为1表示当前cache行没有有效数据,或者cache行没有使能。

O(owned)位。当存在O位为1 cache行的时候,cache行数据一定在多个cache有副本,并且cache行中的内容跟存储器的内容不一样,各个cache行副本中的内容是一样的。

S(shared)位,S位为1表示该cache行在多个cache中存在副本,但是cache行内容是否跟存储器内容一样要视情况而定,如果该cache行存在O位为1的副本,那么cache行内容跟存储器内容不同,如果不存在O位为1的副本,cache行内容跟存储器内容一致。

它们的转换关系如图所示:

存储器写,cache命中时

        写命中的时候,cache行的状态可能是M, O, E, S四种:

        为M和E时候,直接将数据写入cache行,cache行的状态变为M。

        为S时候,直接将数据写入cache行,cache行状态改为M,并且其他cache中保存该副本的cache行,从S或O改为I。

        为O时候,直接将数据写入cache行,cache行状态改为M,并且其他cache中保存该副本的cache行,从S改为I。

存储器写,cache未命中时

        如果CPU A对存储器的写操作没有在本地cache中命中,而是在其他CPU,比如CPU B中命中,那么CPU B 中该cache行的状态可能是M, O, E, S四种:

        当为M时候,CPU B将cache 行数据写会存储器,当且将cache行状态改为I,CPU A从存储器中取数据,并在本地cache申请一个cache行保存数据,cache行状态为M。

        当为O时候,CPU B将将cache 行数据写回存储器,当且将该cache行和其他保存该副本的cache行状态改为I,CPU A从存储器中取数据,并在本地cache申请一个cache行保存数据,cache行状态为M。

        当为E时候,CPU B中cache行状态改为I,CPU A从存储器中取数据,并在本地cache申请一个cache行保存数据,cache行状态为M。

        当为S时候,将CPU B中该cache行和其他cache中保存该副本的cache行状态改为I,CPU A从存储器中取数据,保存在本地cache行中,状态为M。

存储器读,cache命中时

        如果CPU在本地cache中命中,那么直接从本地cache中读取。

MOESI协议,存储器读,cache未命中

        如果CPU A没有在本地cache中命中,而是在CPU B cache中命中,CPU B cache行状态可以是M, O, E, S:

        为M时候,CPU B cache行状态改为O,CPU B将数据传给CPU A新申请的cache行中。CPU B不需要将数据写会存储器。这是MOESI比MESI最大的优点,提高了cache利用率。

        为O时候,CPU B cache状态不变,CPU B将数据传给CPU A新申请的cache行中。

        为E时候,CPU B cache行状态变为S,CPU B将数据传给CPU A新申请的cache行中。

        为S时候,CPU B cache状态不变,CPU B将数据传给CPU A新申请的cache行中。

下面的网站用动画生动的展示了cache的状态跳转:

VivioJS MESI (tcd.ie)

CHI协议也对cache状态进行了定义:

cache state

cache line characteristics

Valid / Invalid

Valid表示该cache line存在于cache中,Invalid表示该cache line没有放在cache

Unique / Shared

Unique表示cache line单独存放于该cache中,Shared表示其它cache中也可能存在该cache line,但不保证一定有

Clean / Dirty

Clean表示该cache不用更新主存数据,Dirty表示该cache line数据相对于主存已经发生了改变,该cache必须确保最终主存的数据被更新

Full / Partial  / Empty

Full 表示cache line所有byte有效;Partial表示可能只有部分byte有效,不是全部有效;Empty表示没有byte有效;

        它们和MOESI之间的对应关系如表中所示:

cache state

cache line characteristics

Invalid (I)

对应MOESII

Unique Clean (UC)

对应MOESIE

Shared Dirty (SD)

对应MOESIO

Unique Dirty (UD)

对应MOESIM

Shared Clean (SC)

对应MOESIS(也可能为O态:如果该cache行存在O位为1的副本,那么cache行内容跟存储器内容不同,如果不存在O位为1的副本,cache行内容跟存储器内容一致。)

Unique Dirty Partial (UDP)

部分数据被修改且有效,在收到snoop请求时,该缓存行必须返回数据给HN,但不能直接将数据给Requester

Unique Clean Empty (UCE)

cache line的数据只在当前cache中,但是所有的数据都是无效的,可以不知会其它RN就对该cache line的数据进行修改。在收到snoop请求时,该cache line不能返回数据给HNRN

三、拓扑结构

        CHI并不规定拓扑结构,常用的有以下三种:

Crossbar : 这种结构相对简单,互连部分延时小,多用于数量不多的组件互连缺点是如果互连组件太多,这种结构的内部走线会非常多,不利于物理实现

Ring :折中考虑了互连组件数量和延时,有利于中等规模的SoC设计

Mesh :可以提供更大的带宽,而且是可以模块化,通过增加网格的行或列来增加更多的节点

四、snoop 方式

        在cache一致性协议那一节中我们知道,每一条cache line的状态,和其他CPU中同一地址的cache line有关,那么我们如何知道其他CPU中的cache line状态呢?

        这就需要snoop

        snoop的方式有2种:snoop filter、snoop directory

snoop filter:

Snooping机制采⽤⼴播的形式,当⼀个master修改了cache line之后,将⼴播通知到总线上其它所有的master。 ⼴播的⽅式虽然简单,但要时刻监听总线上的⼀切活动,然而master之间共享的内存数据毕竟只占少数,snoop filter用于过滤,看自己的 master有没有对应的cache line

snoop directory:

所有mastercache line信息,都被记录在directory, Directory机制采用的是点对点的方式进行播,只发给拥有这个transaction所涉及内存位置对应的cache line

directory的记录方式不做规定,ARM并没有公布如何实现,我在查资料的过程中查到2个图,工参考:

        图一我认为的不对的,因为directory在ICN中,cache line在master或者是main memory中,两者一定是不会在一起的。大家主要看红色部分就行。

        图2也有一定的缺陷,总之,share list部分我认为是没错的。

五、CHI层次

CHI分为协议层,网络层和链接层

CHI在协议层规定了各种transaction;在网络层规定了packet;对于具体的信号,放到了链路

Transaction:一个transaction执行一个单独的操作,如一个transaction可以是读memory或写memory

Message 协议层术语,用于定义两个组件之间交换信息的粒度,如:RequestData responseSnoop request一个数据响应message可能由多个packets组成

Packet :端到端跨越interconnect的传输粒度,一个message可能由一个或多个packets组成,例如一个data response可以由1-4packet组成

Flit : 最小流控单位,对于同一个packet的所有flitsinterconnect上传输必须遵循同样的路径,对于CHI,所有的packets都是由一个flit组成

Phit :物理层传输单位,phit定义为两相邻网络设备之间的一个传输,对于CHI,所有的flits都是由一个phit组成

名称

描述

举例

Transaction

一个transaction执行一个单独的操作,如一个transaction可以是读memory或写memory

ReadwritedatalessCombined Write Atomic OtherSnoop

Message

协议层术语,用于定义两个组件之间交换信息的粒度, 一个数据响应message可能由多个packets组成

RequestData responseSnoop request

Packet

端到端跨越interconnect的传输粒度,一个message可能由一个或多个packets组成,例如一个data response可以由1-4packet组成

REQWDATTDATSNPSRSPCRSP

Flit

最小流控单位,对于同一个packet的所有flitsinterconnect上传输必须遵循同样的路径

对于CHI,所有的packets都是由一个flit组成

Phit

物理层传输单位,phit定义为两相邻网络设备之间的一个传输

对于CHI,所有的flits都是由一个phit组成

flit举例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值