=================Read transactions with DMT and without snoops================
对于不产生snoop的read trans,建议使用DMT功能,如下图所示:
注意点:
a. SNF并不需要给HNF回响应,因为RN发送的compack可以释放HNF处记录的请求;
================Read transaction with DMT and with snoops=====================
对于带snoop的read trans, 并且数据是从memory来的,DMT也推荐使用;
注意点:
a. SNF并不需要给HNF回响应,因为RN发送的compack可以释放HNF处记录的请求;
==========================Read transaction with DCT==========================
对于read trans需要snoop,并且数据来自其他RN, DCT推荐使用;
DCT from cache line in UC state
Double data return in a DCT transaction
这里的图,协议应该给错了;
================Read transaction without DMT or DCT=========================
====Read transaction with snoop response with partial data and no memory update====
典型的命令是readunique;
====Read transaction with snoop response with partial data and memory update======
典型的用法是readclen;
======== ReadOnce* and ReadNoSnp with early Home deallocation===============
问:这个地方,HN->SN, 为什么要有order需求?
因为RN发送过来时,expack==0,且是一个DMT trans, 那HN发送之后,就必须要有人通知他释放,所以order置位,让SN发送readreceipt通知他;
==ReadNoSnp transaction with DMT and separate Non-data and Data-only response====
1. RNF发送readnosnp给HNF;
2. HNF发送一个readnosnpsep给SNF, 告诉他,等会你只需要返回数据就可以了;
3. HNF发送一个respsepdata给RNF, 告诉他,这个请求已经被我接收了,等会还会有一个sep data返回给你;
4. SNF发送一个readreceipt给HNF, 告诉他,这个请求已经被接收,不会再retry了。这个时候,HNF发现,RNF发送给他的命令没有order要求,HNF已经做完了自己该做的事情,因此,收到这个message之后,就直接释放了;
5. RNF收到respsepdata之后,返回compack给HNF;这个不是功能层面需要的,它和SNF返回数据之间,不一定谁先谁后,因此,HNF如果是再收到readreceipt之后,再收到这个命令,可以直接丢弃;
6. SNF将数据返回给RNF;
==ReadNoSnp transaction with DMT with ordering and separate Non-data and Data-only==
Readnosnp的order域段非0,说明:
a. 下一个相同地址的request, 在收到respsepdata之后,才可以发送;
b. RNF在发送compack之前,必须要等到respsepdata和至少一个datasepresp;
c. HNF此时不能够再发送下一个相同地址的请求给SNF, 直到收到compack;