CHI Read传输——CHI(3)

目录

一、Read操作概览

二、DMT(Direct Memory Transfer)

三、DCT (Direct Cache Transfer)

四、without Direct Data Transfer

五、ReadNoSnp and ReadOnce* structure with DMT

六、transaction 选择


本篇我们来介绍一下CHI传输类型中的Read

一、Read操作概览

read操作有以下几种:

名称

描述

ReadNoSnp, ReadNoSnpSep

对不可监听的(non-snoopable)地址区域的读取请求。(其余都是对可监听snoopable)地址区域的读取请求。

ReadNoSnp支持RN-ICNICN-SN的通信

ReadNoSnpSep 仅支持ICN-SN的通信

ReadOnce

只是读取一次数据临时用一下,无需保存到本地的cache中。

ReadOnceCleanInvalid

ReadOnce后,期望是将所有的cacheline无效掉(不强制),状态变为invalid,如果cachelinedirty,则需要将dirty数据写回内存。

ReadOnceMakeInvalid

ReadOnce后,期望是将所有的cacheline无效掉,状态变为invalid,如果cachelinedirty,直接丢弃。

ReadClean

返回的数据必须是clean的(UCSC

ReadNotSharedDirty

返回的数据不能是SharedDirty的状态,可以是UCUDSC

ReadShared

返回的数据可以是UCUDSCSD

ReadUnique

返回的数据可以是UCUD

ReadPreferUnique

返回的数据最好是unique,但是shared也行

MakeReadUnique

返回的数据是unique, 典型的用法是,Requester拥有cacheline,并希望获得写cache line的权限。

其中ReadNoSnp, ReadNoSnpSep用于对不可监听区域的访问 ,例如访问main memory

ReadNoSnpReadOnce可以将读到的数据保留在local cache,但该份数据不再保持一致性

ReadOnceCleanInvalid相对ReadOnce的优点是如果cacheline的数据在近期不会使用,该命令可以将cacheline数据刷到memory去,从而提高cache利用率;

ReadOnceMakeInvalid相对ReadOnce的优点是如果cacheline的数据以后都不会使用,该命令可以将cacheline的数据失效掉,从而提高cache利用率且减少不必须要的WriteBackmemory操作。

对于可监听(snoopable)的读操作,可以由DMT和DCT两种方式完成

二、DMT(Direct Memory Transfer)

是指,SN直接将数据返回给Requester

它支持的操作有:

ReadClean

• ReadNotSharedDirty

• ReadShared.

ReadUnique

ReadPreferUnique

MakeReadUnique.

步骤如下:

1、Requester通过REQ通道发送一个snoopableread request

2、ICN通过REQ通道发送一个ReadNoSnp给相应的SN

3、SN,作为completer,在RDAT通道上,使用CompData将读取的数据和任何关联的事务响应直接转发给的请求者,协议规定,completer必须在接收request之后才能发送CompData

4、Requester通过SRSP通道使用CompAck返回一个响应给ICN,表示交易完成。协议规定requester至少需要接收到一个CompData包以后才能发送CompAck

以ReadShare操作为例,我们来看一下具体的流程

1、RN-F0 sends a Read request to HN-F

2、HN-F sends a Snoop request to RN-F1.

3、HN-F sends a Read request to SN-F after receiving the Snoop response from RN-F1, which guarantees that RN-F1 has not responded with data.  

4、SN-F sends a Data response directly to RN-F0.

5、RN-F0 sends CompAck to HN-F as the Request is ReadShared and requires CompAck to complete the transaction.

RN-F0在向HN发送读请求后,HN向其他的RN发送snoop,查询该cache line在其他RN中的状态

RN-F1返回的response是SnpResp_I,对Snoop的Response,其结果是I,即RN-F1中存在需查询的cache line,但是该cache line中的数据是无效的。

因此,HN需要去main memory(SN)中去读

读到的数据直接返回给RN-F0,不必经过HN

由于数据返回后,只有RN-F0会保存,因此该数据的状态是UC(Compdata_UC)

三、DCT (Direct Cache Transfer)

与DMT向对立的是DCT,区别在于,DCT是其它RN-F直接返回数据给原始Requester

它与DMT支持的操作相同:

ReadClean

• ReadNotSharedDirty

• ReadShared.

ReadUnique

ReadPreferUnique

MakeReadUnique.

两者的区别再有,DMT从其他RN中读取数据失败,从而从SN中读取数据返回给RN;而DCT操作,在其他RN中成功读取到了有效数据

步骤如下:

1、Requester过REQ通道发送一个snoopableread request

2、ICN通过SNP通道发送一个Snp[*]FwdrequestRN-F

3、该RN-F作为completer,在RDAT通道上,使用CompData将读取的数据和任何关联的事务响应直接转发给的请求者;

4、该RN-F通过SRSP通道,返回一个SnpRespFwdedICN,表示已经把读数据发给了requester。协议规定,completer必须在接收snoop之后才能发送CompData;

5、Requester通过SRSP通道使用CompAck返回一个响应给ICN,表示交易完成。协议规定,一旦接收到读取数据的第一个数据包,就可以发送CompAck

还是以ReadShare操作为例,我们来看一下具体的流程

1、RN-F0 sends a Read request to HN-F

2、HN-F sends a SnpSharedFwd, a Forwarding Snoop request to RN-F1.

3、RN-F1 cache line state transitions from UC to SC.

4、RN-F1 forwards CompData_SC response to RN-F0.

5、RN-F1 also sends a SnpResp_SC_Fwded_SC Snoop response to HN-F that indicates:

        (1)The data was forwarded to the Requester.

        (2)The final state of the cache line in the snooped cache is SC.

6、After receiving the CompData response RN-F0 sends a CompAck response to HN-F to conclude the transaction.

我们可以看到,HN在snoop RN-F1后,RN-F1表示它有想要访问的数据,此时RN-F1中相应的cache line状态是UC;

那么当它把该数据传输给RN-F0后,该数据就不唯一了,cache line状态需要从UC转变为SC;

同时,RN-F1要告诉HN,它已经将数据发送给RN-F0了,如果是snoop directory的话,HN还要将directory进行更新

RN-F0接收到的数据,也是它和RN-F1同时保存的,因此cache line状态是SC

在上图中,我们看到“SnpResp_SC_Fwded_SC”,它是什么意思呢?

这是一种response,Snoopee发送数据给Requester,但不需要发送数据给Home,则发送该类型的snoop responseHome,指明被snoop后的状态和forwardRequester的数据状态。

同类型的还有:

SnpResp_I_Fwded_I
snoop cache line 处于 I 状态;
I 状态 Forward 数据给 Requester 。(即, Requester 收到 CompData_I
SnpResp_I_Fwded_SC
snoop cache line 处于 I 状态;
SC 状态 Forward 数据给 Requester 。(即, Requester 收到 CompData_SC
SnpResp_I_Fwded_UD_PD
snoop cache line 处于 I 状态;
UD 状态 Forward 数据给 Requester ,更新 Memory 的责任传递给了 Requester
SnpResp_SC_Fwded_SC
snoop cache line 处于 SC 状态;
SC 状态 Forward 数据给 Requester

不同的response由不同的Opcode来表示,例如:

我们看到,DCT和DMT在HNsnoop RN时,分别用了两种操作:SnpSharedFwd, SnpShared

这两种名称的操作执行的内容是一致的:Snoop request to obtain a copy of the cache line in Shared state while leaving any cached copy in Shared state,and must not leave the cache line in Unique state.

区别在于SnpSharedFwd is permitted to be only sent to one RN-F.

四、without Direct Data Transfer

Requester所得到的数据可以由HN提供

它与DMT、DCT支持的操作相同:

ReadClean

• ReadNotSharedDirty

• ReadShared.

ReadUnique

ReadPreferUnique

MakeReadUnique.

步骤如下:

1、The Requester sends a Snoopable Read request on the REQ channel

2、The Completer returns the read data and any associated transaction response with the CompData opcode on the RDAT channel

3、Requester must return an acknowledgement, using the CompAck opcode on the SRSP channel to indicate that the transaction has completed.

以ReadClean操作为例,我们来看一下具体的流程

1、RN-F1 has the cache line in UDP state. RN-F1 responds to the snoop with a snoop response with partial cache line data and passes responsibility for updating memory.

2、HN-F waits for the data response from memory, merges the partial snoop response data with the data response from memory, and sends the resultant data to the Requester.

3、HN-F updates memory as the responsibility for updating memory is not passed on to the Requester.

readclean、readshared区别:readclean返回的数据,必须是clean的,例如:UCSC

Readshared返回的数据,可以是dirty的,例如:UCUDSC,不能是SD

五、ReadNoSnp and ReadOnce* structure with DMT

ReadNoSnp,ReadOnce*它们的共同点是非snoopable,但是ReadOnce*可以snooping其他master

ReadOnce* DCT ,但是ReadNoSnp没有

支持的操作:

ReadNoSnp,    

ReadOnce,    

ReadOnceCleanInvalid

ReadOnceMakeInvalid

步骤如下:

1、Requester 发送request

2、如果requestOrder字段表示需要ordering,则当order建立时,需要返回ReadReceipt (什么是order建立时?这里买个管关子,后面的文章会解释)

3、ICN向SN发送ReadNoSnp请求

4、如果ReadNoSnp requestOrder[1:0]==0b01,则SN返回ReadReceipt

5、作为CompleterSN,在RDAT channel上将opcode CompDate的读数据、response返回给requester

6、如果ExpCompAck==1,则Requester必须返回CompAck,表示传输完成(当接收到读数据的第一个数据包时,就可以返回CompAck

六、transaction 选择

以上介绍了read transaction的各种类型,那么我们在什么时候用哪个呢?

除了ReadNoSnp和ReadOnce,其他的取决于cache的状态,见下图:

  • 17
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值