本章节详细介绍了由发起主设备(initiating master)在读取地址通道和写入地址通道上可以发起的事务。每个事务组预期的通道活动被描述,并对每个事务提供了简要概览。每个事务都包括了相关的缓存行状态变化的描述。章节内容涵盖以下几个部分:
-
发起主设备(Initiating Master):讨论了发起主设备的角色和功能,以及它如何通过读取地址和写入地址通道发起事务。
-
监听过滤(Snoop Filtering):描述了在监听操作中如何根据发起主设备的需求过滤相关的监听请求,以及这些请求如何影响缓存行的状态。
-
不同事务上的状态变化:概述了在执行各种事务时,缓存行状态如何变化,包括读事务、写事务、使无效事务等。
-
状态变化描述:提供了对缓存行状态变化的详细描述,解释了每种状态变化的含义和背后的机制。
-
读事务(Read Transactions):详细介绍了读事务的类型、流程和缓存行状态的变化,如ReadOnce、ReadShared等。
-
清洁事务(Clean Transactions):讨论了清洁事务,如CleanInvalid和CleanShared,以及它们如何影响缓存行的清洁状态。
-
制造事务(Make Transactions):描述了制造事务,如MakeInvalid和MakeUnique,以及它们如何改变缓存行的状态,通常是将其变为无效或唯一的状态。
-
写事务(Write Transactions):详细介绍了写事务的类型和流程,包括如何处理脏数据和缓存行状态的变化。
-
驱逐事务(Evict Transactions):讨论了驱逐事务,如WriteEvict,以及它们如何从缓存中移除缓存行,并可能将其写回内存。
-
处理重叠写事务(Handling Overlapping Write Transactions):探讨了当多个写事务同时发生时,如何管理和协调这些事务,以确保数据一致性和事务的正确执行。
4.1主设备(initiating master)的行为
本节描述了发起主设备(initiating master)的行为。通常,发起主设备会发起一个事务来推进其内部操作,例如加载(load)或存储(store)操作。以下是发起主设备在执行加载和存储操作时的内部行动要求:
加载操作(Load Operation):
对于加载操作,主设备需要获取数据,这可以通过以下两种方式之一实现:
- 有效缓存行副本:主设备从其缓存中找到并使用适当的、有效的缓存行副本。
- 返回有效读数据的事务:如果缓存中没有有效副本,主设备需要发起一个读取事务,该事务能够返回有效的读取数据。
存储操作(Store Operation):
对于存储操作,主设备需要获得存储缓存行的权限,这同样可以通过以下两种方式之一实现:
- 处于唯一状态的缓存行副本:主设备拥有适当缓存行的唯一副本,这意味着没有其他缓存持有该数据的副本。
- 允许存储的事务类型:如果主设备没有缓存行的副本,或者缓存行不是唯一的,它需要发起一个事务,该事务允许主设备存储缓存行。这可能涉及到获取对缓存行的独占访问权限,或者等待直到缓存行变为非共享状态。
Note:
- 发起主设备必须确保在加载或存储操作之前,它拥有适当的数据副本,并且遵守系统的缓存一致性协议。
- 在存储操作中,如果主设备没有获得适当的权限,它可能需要等待,直到缓存行的状态变为允许它进行存储为止。
- 主设备的行为必须与系统中的其他组件协调一致,以确保数据的一致性和系统的稳定性。
在ACE协议中可以事务分成5类:
4.1.1读事务(Read transactions):
读事务由主设备发起,目的是从内存或缓存中获取数据。在这些事务中,主设备会在地址通道上发出读请求,并在数据通道上接收数据。
读取事务组(Read transaction group)在ACE协议中包括以下几种类型的事务:
- ReadNoSnoop:不监听的读事务,不会引起其他缓存的监听操作。
- ReadOnce:单次读事务,通常用于获取不被缓存的数据。
- ReadClean:清洁读事务,用于读取已经标记为干净的数据。
- ReadNotSharedDirty:非共享脏读事务,用于读取可能被修改的数据,但不会导致其他缓存的副本被标记为共享。
- ReadShared:共享读事务,用于读取可能被多个缓存共享的数据。
- ReadUnique:唯一读事务,用于读取期望是唯一的数据,即没有其他缓存持有该数据的副本。
读取事务的进展过程如下:
-
地址发出:主设备在读取地址(AR)通道上发出地址信息。这包括内存地址和事务相关的控制信号。
-
数据和响应返回:数据和响应在读取数据(R)通道上返回。所需的数据拍(beats)数量由ARLEN信号确定。这意味着读取事务需要传输的数据量是根据ARLEN信号指定的突发长度来决定的。
-
事务完成信号:读取事务的完成由主设备断言读确认信号(RACK)来信号。RACK信号表明主设备已经成功接收了所需的数据,并且事务可以认为已经完成。
4.1.2清洁事务(Clean transactions):
清洁事务涉及将脏缓存行(即已修改的数据)写回主内存,并可能随后将缓存行标记为干净或无效。这些事务通常用于缓存维护。
清洁事务组(Clean transaction group)在ACE协议中包括以下几种类型的事务,它们用于维护缓存中数据的一致性和状态:
-
CleanUnique:此事务类型用于将一个当前处于唯一(Unique)状态的缓存行标记为干净(Clean)。这意味着该缓存行是脏的(Dirty),因为它包含了未写回主内存的修改,但这些修改可以被安全地写回,因为不存在其他缓存副本。
-
CleanShared:清洁共享(CleanShared)事务用于将一个当前处于共享(Shared)状态的缓存行标记为干净。这通常发生在缓存行被修改后,且系统确定不再需要保持该缓存行的独占访问,允许其他缓存副本存在。
-
CleanInvalid:清洁无效(CleanInvalid)事务用于将一个干净的缓存行标记为无效(Invalid),并从缓存中移除。这可能是因为缓存行不再被需要,或者是为了为新的缓存行腾出空间。
清洁事务(Clean transaction)的进展过程如下:
-
地址发出:主设备在地址通道(AR channel)上发出目标缓存行的地址。这个地址用于指定需要被清洁的缓存行。
-
响应返回:在读数据通道(R channel)上进行单个传输以返回响应。对于清洁事务,不会返回数据。这一步确认了清洁操作已经被接收,并且相关的缓存行已经被处理。
-
事务完成信号:主设备通过断言读确认信号(RACK)来信号清洁事务的完成。RACK信号表明主设备已经确认了清洁操作的响应,并且事务可以认为已经成功完成。
清洁事务通常不涉及数据传输,因为它们的目的仅仅是改变缓存行的状态,而不是传输数据。例如,在CleanUnique
或CleanInvalid
事务中,主设备可能需要将脏数据写回主内存,并更新缓存行的状态。一旦这些操作完成,主设备就会通过RACK信号来指示事务的结束。
4.1.3制作事务(Make transactions):
制作事务可能涉及将缓存行从非共享状态转换为共享状态,或者改变缓存行的其他属性。这些事务的具体行为可能依赖于系统的一致性模型。
制作事务组(Make transaction group)在ACE协议中包括以下类型的事务,它们用于改变缓存行的一致性状态或可见性:
-
MakeUnique:
MakeUnique
事务的目的是使缓存行变为唯一(Unique)状态。这意味着该事务确保系统中没有其他缓存持有该缓存行的副本。如果缓存行之前是脏的(Dirty),即包含未写回主内存的修改,MakeUnique
事务会将这些修改写回主内存,并确保其他缓存中的副本被无效化或更新。 -
MakeInvalid:
MakeInvalid
事务用于使缓存行变为无效(Invalid)状态。这个事务通常在缓存行不再被主设备需要时使用,它会导致缓存行从缓存中移除。如果缓存行是脏的,事务会先将数据写回主内存,然后再将缓存行标记为无效。
对于发起主设备,制作事务(Make transaction)的进展过程如下:
-
地址发出:发起主设备在地址通道(AR channel)上发出目标缓存行的地址。这个地址用于指定需要进行制作操作的缓存行。
-
响应返回:在读数据通道(R channel)上进行单个传输以返回响应。对于制作事务,不会返回数据,因为这种事务通常不涉及数据传输,而是关于改变缓存行的状态。
-
事务完成信号:制作事务的完成由发起主设备通过断言读确认信号(RACK)来指示。RACK信号表明发起主设备已经接收到响应,并且事务可以认为已经成功完成。
4.1.4写事务(Write transactions):
写事务用于将数据从主设备传输到内存或缓存。如果缓存行是脏的,写事务可能还会涉及将这些数据写回主内存。
写事务组(Write transaction group)在ACE协议中包括以下几种类型的事务,它们用于处理主设备向内存或缓存写入数据的操作:
-
WriteNoSnoop:不监听的写事务,不会触发其他缓存的监听操作。
-
WriteUnique:写事务,期望缓存行在写入时是唯一的。
-
WriteLineUnique:写事务,期望写入的是整个缓存行,并且缓存行在写入时是唯一的。
-
WriteBack:写回事务,用于将脏缓存行的数据写回主内存,通常在缓存行被替换时发生。
-
WriteClean:写事务,用于将干净的缓存行数据写回主内存。
-
WriteEvict:逐出事务,用于在缓存行被逐出缓存时,将脏数据写回主内存。
发起主设备(initiating master)的写事务(Write transaction)进展过程如下:
-
地址发出:主设备在写地址通道(AW channel)上发出目标内存位置的地址。这个地址指定了将要写入数据的位置。
-
数据传输:主设备通过写数据通道(W channel)发送要写入的数据。这通常包括数据本身以及可能的字节使能信号(WSTRB),指示哪些字节是有效的,应该被写入。
-
响应返回:写事务的响应通过写响应通道(B channel)返回给主设备。响应通常包含一个信号(如BRESP),指示事务是否成功完成,以及是否需要进一步的操作。
-
事务完成信号:一旦收到响应并且所有的写操作都已完成,主设备会通过断言写确认信号(WACK)来信号写事务的完成。WACK信号表明主设备已经成功完成了写操作,并且数据已经正确地写入目标内存位置。
4.1.5逐出事务(Evict transactions):
逐出事务发生在缓存行被替换或逐出缓存时。这可能涉及到将脏数据写回主内存,并从缓存中移除缓存行。
逐出事务组(Evict transaction group)在ACE协议中通常只包含一种类型的事务,即:
- Evict:逐出事务,用于从缓存中移除一个缓存行。
对于发起主设备,逐出事务(Evict transaction)的进展过程如下:
-
地址发出:主设备在写地址通道(AW channel)上发出要逐出缓存行的地址。这个地址指定了将要被逐出的缓存行的位置。
-
响应返回:由于逐出事务不涉及数据传输,所以没有数据在通道上传输。逐出事务的响应通过写响应通道(B channel)返回给主设备。响应通常包含一个信号(如BRESP),指示事务是否成功完成。
-
事务完成信号:一旦收到响应并且逐出操作已完成,主设备会通过断言写确认信号(WACK)来信号逐出事务的完成。WACK信号表明主设备已经成功完成了逐出操作,并且缓存行已经从缓存中移除。
4.1.6其它
除了上述基本传输事务之外,还存在ACE协议中还存Read Barrier、Write Barrier和DVM事物。这些事物具体在之后的第8、13章会详细介绍,在这里只大概说明其传输过程:
Read Barrier
对于发起事务的主设备,读屏障事务(Read Barrier transaction)的进展过程如下:
-
事务发出:主设备在地址通道(AR channel)上发出读屏障事务。读屏障事务通常用于确保在屏障之前的所有读事务都已完成,以便在多处理器系统中维护数据的一致性和顺序性。
-
响应返回:在读数据通道(R channel)上进行单个传输以返回响应。对于读屏障事务,不会返回数据,因为屏障事务的目的不是数据传输,而是作为系统中的一个同步点。
-
事务完成信号:一旦主设备接收到响应,它会通过断言读确认信号(RACK)来信号读屏障事务的完成。RACK信号表明主设备已经确认了屏障事务的响应,并且事务可以认为已经成功完成。
Write Barrier
对于发起事务的主设备,写屏障事务(Write Barrier transaction)的进展过程如下:
-
事务发出:主设备在写地址通道(AW channel)上发出写屏障事务。写屏障事务用于确保在屏障之前的所有写事务都已完成,这样在多处理器系统中可以维护数据的一致性和顺序性。
-
响应返回:写屏障事务不涉及数据传输,因此在写数据通道(W channel)上不会有数据传输。写屏障事务的响应通过写响应通道(B channel)返回给主设备。这个响应通常包含一个信号(如BRESP),指示事务是否成功完成。
-
事务完成信号:一旦主设备接收到响应,它会通过断言写确认信号(WACK)来信号写屏障事务的完成。WACK信号表明主设备已经确认了屏障事务的响应,并且事务可以认为已经成功完成。
DVM
对于发起事务的主设备,分布式虚拟内存(DVM)事务的进展过程如下:
-
事务发出:主设备在地址通道(AR channel)上发出DVM事务。DVM事务用于在分布式系统中管理虚拟内存,可能涉及内存页面的迁移、复制或清除等操作。
-
响应返回:在读数据通道(R channel)上进行单个传输以返回响应。对于DVM事务,通常不会返回数据,因为DVM事务的目的不是数据传输,而是完成某些特定的内存管理操作。
-
事务完成信号:一旦主设备接收到响应,它会通过断言读确认信号(RACK)来信号DVM事务的完成。RACK信号表明主设备已经确认了DVM事务的响应,并且事务可以认为已经成功完成。
DVM事务是分布式系统中的关键组成部分,它们允许系统在多个处理器或节点之间有效地管理内存资源。通过DVM事务,系统可以实现负载均衡、提高内存利用率,并优化整体性能。
4.2监听过滤(snoop filtering)
监听过滤(Snoop filtering)是一种机制,用于跟踪主设备缓存中分配的缓存行。它在缓存一致性协议中起着重要作用,特别是在多处理器系统中,用于确保数据的一致性和减少不必要的监听操作。
外部监听过滤(External Snoop Filtering):
- 广播缓存行:为了支持外部监听过滤,缓存主设备必须能够广播(broadcast)其缓存中已分配的缓存行以及被逐出的缓存行。这允许系统中的其他缓存知道哪些数据可能已经被修改或不再有效。
- 可选支持:在ACE协议中,支持外部监听过滤是可选的。如果一个主设备支持这种过滤机制,它必须在其数据表中声明,以便系统设计者和开发者了解其能力。
- ACE协议支持:ACE协议提供了构建外部监听过滤的机制,具体细节和实现方法可以在协议的第D10章“可选的外部监听过滤”中找到。
无外部监听过滤支持的主设备:
- 状态要求:对于那些不支持外部监听过滤的主设备,事务完成后允许的缓存行状态要求不那么严格。这意味着这些主设备可能不需要遵循与支持外部监听过滤的主设备相同的缓存一致性规则和状态管理策略。
- 灵活性:这种设计提供了一定的灵活性,允许系统设计者根据具体的应用需求和性能目标来选择是否实现外部监听过滤。
监听过滤的正确实施对于优化系统性能和维护数据一致性至关重要。通过减少不必要的监听操作,系统可以减少通信开销,提高整体效率。同时,支持外部监听过滤的主设备能够更精确地管理缓存行的状态,从而在多处理器系统中实现更高效的缓存一致性管理。
在缓存一致性协议中,不同的事务类型会导致缓存行状态的变化。在本章后面的内容会详细介绍ACE协议中不同事务如何影响缓存行状态的规则,敬请期待。
推荐阅读:
ACE(AXI Coherency Extensions) 协议学习记录1:ACE协议总览
ACE(AXI Coherency Extensions) 协议学习记录2:ACE接口信号
ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(上)
ACE(AXI Coherency Extensions) 协议学习记录3:Channel Signaling(下)