一致性系统中,使用三种保序方式;
================Completion ack response===================
⭕Completion acknowledgment:
□ 该域段主要是用来,
□ 决定 RN 发送的 trans,与其他 RN 发送的命令产生的 SNP 之间的顺序;
□ 在当前 RN 发送的 tans order 之后的命令产生的 snoop,会在当前 RN 的这个 trans resp 回来之后再到达;
□ The relative ordering of transactions issued by a Requester, and Snoop transactions caused by
transactions from different Requesters, is controlled by the use of a completion acknowledge, CompAck, response.
⭕read trans 和发送compack 的关系如下:
□ RNF 收到 comp或者respsepdata 或者compdata,或者同时收到respsepdata/datasepresp 之后,发送 compack;
□ HNF, 在发送相同地址的 snoop 之前,需要一直等待 compack;
□ 对于copyback trans,write data 被当作 compack,因此,HNF 在发送相同地址的snoop 出去之 前,必须要等待 Write data;
这种机制保证了,RNF 按收 HNF 发送的 comp resp,和 HNF 发送的访问相同地址的snoop req,是按照 HNF 发送的顺序接收的:这样保证了相同地址的 trans 是按照正确的顺序被观察到:
如果某个 RNF, 除了 ReadNoSop and ReadOnce, 使用了 compack 机制,那么可以保证在这个 RNF 发送compack 之前,不会收到HNF 发送的访问相同地址的 snoop 操作;
RN 设置expcompack field,产生compack 要满足如下要求:
□ 对于除了 ReadNoSnp and ReadOnce*的其他 read, RNE 必须发送 compack;
□ 其实ReadNoSnp and ReadOnce*也可以产生 compack;
□ 对于 StashOnce*, CMO, Atomic, or Evict, 不能产生 compack;
□ RNI/RND 的read trans, 也允许产生 compack;
□ RNI/RND 的dataless/atomic trans, 不能产生 compack;
□ 保序的 ReadNoSnp 和 ReadOnce*如果需要使用 DMT,那么必须使用 CompAck 响应。
对于写操作,CompAck 只能用于 WriteUnique,writenosop,当这些 trans 有owo保序需求
时;
□ 对于 WriteEvictOrEvict, expcompack 必须设置成 1,表示如果当 conpleter 发送 comp,而不是compdbidresp时,需要发送comack;
□ HN 必须支持所有允许或需要使用 CompAck 的 transactions, SN 不需要支持 CompAck 的使用。
□ HNF/HNI 和 SNF/SNI 通信时,不能发送 compack;
如果没有 compack:
□ 若无 ACK 机制。RN1 正在进行对某个地址的读取操作(不带 Snoop 或者 snoop 已完成),而 RN2 也在对该地址进行读取操作。对于ICN 而言,虽然先收到RN1的Read, 再收到 RN2 的Read,但由于CH 不要求总线保序,所以可能 Snoop 先于 Compdata 到。这样就会出现对于同一个事情而言,RN1和RN2 看到的不同。RN1 因为先前己经进行了 Snoop,所以认为自己是UC。RN2 因为在 Snoop 的时候看到 RNI 还是没有该地址的cache,也认为自己是 UC。从而产生了不一致。
□ 而增加 ConpAck 机制后,ICN 在收到 CompAck 之后才能发布对同一地址/地址范围的Snoop 访问,从而保证来自一个 Requester 的 transactions 与不同 Requester 的transactions 导致的 snoop transaction 的相对顺序。
□ 这样就保证了任意一个RN,在收到comap 响应,到发送compack之间的时间段内,不会收到其他 RN 发送的对这个相同地址的snp;
□ For WriteNoSnp and Write Unigue transactions that require a CompAck message, a Request Node sends the CompAck after receiving the Comp, DBIDResp, or CompDBIDResp response.
一些compack 的使用命令和限制:
Ordering semantics of RespSepData and DataSepResp.
几个响应/数据,对应的含义:
1. RN 收到第一个datasepresp,就可以认为,这笔rcad trans 已经被所有人都 observed了,因为这个时候没有什么其他的操作可以来修改己经收到的读数据:
2. RN 收到respsepdata from home,可以认为 read tans 已经道道了保序点,并且在此之后,不会收到任何该地址的snoop,但是不能保证这个时刻点,该trans 对应的 snoop 已经完成了:对于HN来讲,在发送respsepdata 之前,必须保证相同地址的snoop 已经完成了:
3. 当RN 发送cornpack 时,表明该RN 己经可以接受任何 RN 发出的 trans 产生的相同地址的snoop;
□ the CompAck must be sent after the RespSepData response is received. It is permitted, but not required, to wait for the DataSepResp response before the CompAck is given.
□ For ReadOnce and ReadNoSnp transactions with an ordering requirement, that is, Order field is set to Ob10 or Ob11 and ExpCompAck field is asserted, it is required that the CompAck is given only after both DataSepResp and RespSepData responses are received.
□ The Requester must wait to receive both RespSepData and DataSepResp before issuing another request to the same address
□ It is required that CompAck must not be given when only DataSepResp is received.