
文章目录
-
- [5.3 Write transaction flows](#5.3 Write transaction flows)
-
- [5.3.1 Write transaction with no snoop and separate responses](#5.3.1 Write transaction with no snoop and separate responses)
- [5.3.2 Write transaction with snoop and separate responses](#5.3.2 Write transaction with snoop and separate responses)
- [5.3.3 CopyBack Write transaction to memory](#5.3.3 CopyBack Write transaction to memory)
- [5.4 Atomic transaction flows](#5.4 Atomic transaction flows)
-
- [5.4.1 Atomic transactions with data return](#5.4.1 Atomic transactions with data return)
- [5.4.2 Atomic transaction without data return](#5.4.2 Atomic transaction without data return)
- [5.4.3 Atomic operation executed at the SN](#5.4.3 Atomic operation executed at the SN)
5.3 Write transaction flows
本节给出了写入事务的互连协议流程示例。
5.3.1 Write transaction with no snoop and separate responses

WriteNoSnp 事务流的步骤如下:(传输的数据副本以粗体标记。)
- RN-F0 向 HN-F 发起 WriteNoSnp 事务。HN-F 接收并分配该请求。
- HN-F 发送 DBIDResp 而不发送 Comp。同时,HN-F 向 SN-F 发送 WriteNoSnp。
- RN-F0 用数据 NCWrData 作出响应。SN-F 向 HN-F 返回 CompDBIDResp。
- HN-F 在接收到来自 SN-F 的 CompDBIDResp 后发送 Comp。HN-F 向 SN-F 发送 NCBWrData。(此流程示例显示 Comp 在接收到来自 SN-F 的 CompDBIDResp 后发送。然而,HN-F 被允许在接收到来自 RN-F0 的 WriteNoSnp 请求后随时发送 Comp。)
- RN-F0 等待来自 HN-F 的 Comp,并释放其请求。
5.3.2 Write transaction with snoop and separate responses
WriteUniquePtl事务实例
带有Snoop的WriteUniquePtl步骤:
- RN-F0向HN-F发送WriteUniquePtl写入请求。
- HN-F向RN-F1和RN-F2发送SnpCleanInvalid请求。HN-F还向RN-F0返回DBIDResp。RN-F2缓存行状态从UD转换为I。
- RN-F1向HN-F发送SnpResp_I,RN-F2向HN-F发送SnpRespData_I_PD。
- RN-F0向HN-F发出NCBWrData。HN-F将写入数据与dirty line合并,并向SN-F发送WriteNoSnp。
- HN-F向RN-F0发送Comp响应。
- SN-F 返回 CompDBIDResp 给 HN-F。
- HN-F 发送 NCBWrData 给 SN-F。
5.3.3 CopyBack Write transaction to memory
WriteBackFull示例
- RN-F0 向 HN-F 发送WriteBackFull请求。
- HN-F 返回 CompDBIDResp 给 RN-F0。RN-F0 缓存行状态从 UD 转变为 I。
- RN-F0 向 HN-F 发送 CBWrData_UD_PD。HN-F 向 SN-F 发送 WriteNoSnp。
- SN-F 返回 CompDBIDResp 给 HN-F。
- HN-F 发送 NCBWrData 给 SN-F。
5.4 Atomic transaction flows
本节展示不同原子事务类型的流程。
5.4.1 Atomic transactions with data return
此流程适用于:
- AtomicLoad
- AtomicCompare
- AtomicSwap
Atomic transaction with snoops and data return
下图显示了在 HN-F 执行的原子操作。

- RN-F0 向 HN-F 发送原子事务。
- 在接收到原子请求后,HN-F:
• 向RN-F0发送DBIDResp以获取原子事务数据。
• 在确定需要窥探后,向其他RN-F发送SnpUnique窥探请求。
• HN-F被允许但不要求向SN-F发送一个推测性的ReadNoSnp请求。 - RN-F2在UD状态下拥有缓存行,并通过发送数据和使其自己的缓存副本失效来响应。
• 响应为SnpRespData_I_PD。
• 该数据标记为(InitialData,初始数据),以将其与请求者发送的数据和在执行原子操作后写入SN-F的数据区分开。
• HN-F还从RN-F1接收到第二个窥探响应SnpResp_I。 - 在接收到所有窥探响应后,HN-F将CompData_I发送给请求者。
• 与Comp一起发送的数据是数据的初始副本。
• 该数据在 RN-F0 处不得以一致状态缓存。 - 作为之前发送的 DBIDResp 的响应,HN-F 从请求者接收 NonCopyBackWrData_I 响应。
• 该数据标记为 (TxnData),以将其与 RN-F2 对 HN-F 的窥探请求的响应中发送的数据区分开。 - 一旦 HN-F 从请求者接收到 NonCopyBackWrData_I 响应,并且从 RN-F2 接收到带数据的窥探响应,它将执行原子操作。
• 原子操作执行后的结果值标记为 (NewData),并写入 SN-F。 - 在此示例中,由于推测性读取而接收到的读取数据被 HN-F 丢弃。
Atomic transaction without snoops and with data return
下图显示了在Home节点执行的原子操作。
- RN-F0 向Home节点发送原子事务请求。
- Home节点向 RN-F0 返回DBIDResp。
- Home节点向 SN 发送ReadNoSnp请求。与此同时,RN 向Home节点发送 NCBWrData(TxnData)。
- SN 向Home节点返回 RespData_I(InitialData)。
- Home节点返回 CompData_I(InitialData)。
- Home节点执行原子操作并向 SN 发送WriteNoSnp请求。
- SN 向Home节点返回 CompDBID 响应。
- Home节点将原子操作的结果发送给 SN,标记为(NewData)。
5.4.2 Atomic transaction without data return
此流程适用于AtomicStore事务。
Atomic transaction with snoops and without data return
下图显示了在HN-F执行的原子操作。该流程类似于带有窥探且有数据返回的原子事务,唯一不同的是对RN-F0的Comp响应不包含数据。
HN执行的AtomicStore事务的步骤如下:
- RN-F0向HN-F发送AtomicStore请求。
- HN-F向请求者RN-F0发出DBIDResp,并向RN-F1和RN-F2发出SnpUnique请求。
- RN-F1向HN-F返回SnpResp_I响应。RN-F2的缓存行处于UD状态,并返回SnpRespData_I_PD(InitialData)响应。 这使得RN-F2中的缓存副本失效。
- RN-F0 将写入数据 (TxnData) 发送到 HN-F。HN-F 在本地执行 AtomicStore 操作。
- HN-F 向 SN-F 发出 WriteNoSnp 请求。
- SN-F 向主节点返回 CompDBIDResp。
- HN-F 将原子操作的结果发送给 SN-F,标记为 (NewData)。
Atomic transaction without snoops and without data return
下图显示了在Home节点执行的原子操作。该流程类似于没有窥探且有数据返回的原子事务,只是对请求节点的 Comp 响应不包括数据。
注意:
在图中,从SN节点读取是为了获取初始数据,并且不是推测性的。
来自Home节点的 Comp 响应可以与 DBIDResp 响应合并。
- RN 向 HN 发送 AtomicStore 请求。
- HN 返回 DBIDResp 响应给 RN,指示 RN 可以将写入数据发送到 HN。
- HN 向 RN 发送 Comp 响应,并向 SN 发送 ReadNoSnp 请求。
- SN 返回 RespData_I 给 HN。
- 一旦 HN 从 RN 获取写入数据,它可以执行原子操作并向 SN 发送 WriteNoSnp。
- SN 返回 CompDBIDResp 给 HN。
- HN 将原子操作的结果发送给 SN,标记为 NewData。
5.4.3 Atomic operation executed at the SN
下图显示了一个示例原子事务流,其中 SN-F 正在执行原子操作。
在 SN-F 执行的 AtomicStore 事务的步骤如下:
- RN-F0 向 HN-F 发送 AtomicStore 事务。
• 原子请求是针对Snoopable位置的。 - 在接收到原子请求后,HN-F:
• 向RN-F0发送DBIDResp以获取原子事务数据。
• 在确定需要窥探后,向其他RN-F发送SnpUnique。 - RN-F2在UD状态下具有缓存行,并通过发送数据和使其自己的缓存副本失效来响应。
• 响应为SnpRespData_I_PD。
• 该数据在图中标记为(InitialData),以将其与请求者发送的数据和写入SN-F以执行原子操作的数据区分开。
• HN-F还从其他被窥探的RN-F接收到第二个窥探响应SnpResp_I。 - HN-F使用WriteNoSnp事务将接收到的数据写入SN-F。
- 作为之前发送的DBIDResp的响应,HN-F从请求者接收到NonCopyBackWrData响应。
- HN-F在将窥探响应数据发送到SN-F后,向SN-F发送AtomicStore请求,并执行完成原子事务所需的消息序列。
- HN-F 在将 Comp 响应发送给请求者并从 SN-F 收到原子事务的 Comp 响应后,释放请求。
• 当所有窥探响应都收到时,HN-F 可以发送 Comp 响应。