用于多核处理器的一致性维护装置及一致性交互方法 【技术领域】
本发明涉及计算机技术领域, 尤其涉及多核处理器 Cache 一致性维护的相关装置 和一致性交互方法。 【背景技术】
良 好 的 可 扩 展 性 和 对 芯 片 面 积 的 高 效 利 用 促 使 CMP 处 理 器 (Chip Multi-Processor) 被广泛使用。然而, 芯片上连线的电气特性不可能与半导体工艺等比例 缩放, 线延迟问题已经成为未来 CMP 设计的重要限制因素。 研究者提出延迟非一致的 Cache 访问 (Non-Uniform Cache Access, NUCA) 结构来减轻线延迟对访问 Cache 延迟的负面影 响, 如 D-NUCA, NuRAPID, Victim Replication 等。在 NUCA 结构下, 访存延迟依赖于请求内 核与目标数据之间的具体物理距离。如果目标数据存在于请求内核附近内核中, 则平均数 据访问延迟就能够被减少, 这一特性同样适用于 Cache 一致性问题。 Cache 一致性协议是 CMP 处理器正确运行的保证, 考虑到扩展性问题, 相对于总线 监听协议来说, 基于目录的 Cache 一致性协议是大规模 CMP 更合适的选择。目录能够跟踪 全局的一致性状态和 L2 Cache 中数据所有共享者的标识。 缺失内核将通过网络把消息发送 到相应目录内核中进行处理。然而, 不断提升的线延迟和多个内核间复杂的一致性交互直 接导致了访存延迟的提升。 如何为深亚微米工艺下的多核处理器设计高效、 可扩展的 Cache 一致性协议已经成为体系结构领域研究的重要内容。
通过研究已有的基于目录的 Cache 一致性协议, 我们发现发生读缺失内核需要访 问目录内核来间接得到一致性信息, 这将增加 Cache 读缺失延迟。更重要的是, 在较为常用 的瓦片式 CMP 结构下, 这种间接性将导致更多的 Cache 缺失。原因是目录信息通常是通过 物理地址映射关系分布在这些瓦片式的内核中, 而不考虑内核可能访问任何一个数据块, 因此需要访问远程 Cache 的可能性大大增加。间接性的读操作将在以下两方面对性能产 生负面影响 : 首先, 相对于写操作来说, 读操作的效率能够在更大程度上影响系统的整体性 能。其次, 在多个请求同时访问目录的情况下, 目录访问会发生拥塞, 多个读操作不得不被 排队依次响应, 从而增加了读缺失的平均访存延迟。 与读缺失类似, 写操作也存在同样的间 接性。
为 了 减 少 一 致 性 交 互 延 迟,文 献 1“Stefanos Kaxiras and Georgios Keramidas.2010.SARC Coherence : Scaling Directory Cache Coherence in Performance and Power.IEEE Micro 30, 5(September 2010), 54-65.” 提出 Writer 一致性协议, 该协议 的创新在于使用基于预测的透明读操作, 能够使一部分读操作在获得数据后不在目录中保 留 “踪迹” , 而是在同步操作时自作废, 后续写操作不用作废这些透明读数据。 这降低了一致 性状态转换频率 (E 或 M → S), 简化了写操作一致性交互过程, 但同时也削弱了已经建立的 数据局部性。 写操作同样基于历史预测, 但如果预测错误需要增加额外的一致性交互延迟。 另外, 这种协议需要弱顺序存储模型和复杂的软件同步策略, 限制了其应用范围。
文 献 2“Alberto Ros, Manuel E.Acacio, and Jose M.Garcia.2010.A Direct
Coherence Protocol for Many-Core Chip Multiprocessors.IEEE Transaction of Parallel and Distributed System.21, 12(December 2010), 1779-1792.” 提出 DiCo-CMP 一致性协议, 通过将目录信息集成在数据拥有者内核中, DiCo-CMP 能直接将请求发送到数 据的拥有者, 而不是先发送到目录内核, 再转发到数据拥有者, 避免了间接数据访问。相对 于普通目录协议, DiCo-CMP 能够使访存延迟平均减少 6%左右。DiCo-CMP 只考虑到直接提 供有效数据, 由于集成目录的数据拥有者内核位置固定, 而无法兼顾到该有效数据是否距 离请求内核最近, 事实上可能存在距离请求内核更近的有效数据, 因此访存延迟仍有降低 空间。
文献 3“Hongbo Zeng ; Jun Wang ; Ge Zhang ; Weiwu Hu ; An interconnect-aware power efficient cache coherence protocol for CMPs, Parallel and Distributed Processing, 2008.IPDPS 2008.IEEE International Symposium on, vol., no., pp.1-11, 14-18 April 2008” 提出了基于片上网络拓扑结构的 Cache 一致性协议, 这种协议不从目录 内核返回数据, 而是通过目录内核将请求转发至距离请求内核最近的目标数据副本内核, 使之响应请求并发送数据。这种机制最小化了数据在连线上的传输距离, 能使网络链路功 耗减少 9.3% ; 并且通过减少链路拥塞加快通信速度, 使整体性能提升 1.4%。该协议虽然 能提供距离最近的数据副本, 有效降低功耗, 但仍需要先访问目录, 间接事件仍然存在, 一 致性交互延迟难以降低。 【发明内容】
本发明的目的在于提供一种用于多核处理器的一致性维护装置及一致性交互方 法, 能偶有效隐藏多核处理器一致性交互过程中的目录访问延迟, 从而提升访存效率。
为了实现上述目的, 本发明一种用于多核处理器的一致性维护装置采用如下技术 方案 :
一种用于多核处理器的一致性维护装置, 包括 N 个处理器内核、 片上网络和主存 ; 所述主存和 N 个处理器内核均连接片上网络 ; 所述 N 个处理器内核构成包含多个节点的二 n 位网络矩阵 ; 每个节点包含 2 个处理器内核, n 为大于等于 1 的正整数, N 为 2n 的整数倍 ;
所述处理器内核包括 : 全局目录, 以粗向量的方式跟踪数据所在节点 ; 节点目录 片段, 负责在节点内跟踪数据副本所在的内核位置 ; 一个节点内的所有节点目录片段构成 该节点完整的节点目录 ; 目录控制器, 包括节点目录控制器和全局目录控制器, 用于接收、 发送一致性交互消息, 控制全局目录和节点目录维护数据一致性 ; 节点预测 Cache, 用于 保存距离请求内核节点最近的有效目标数据副本节点, 为发生缺失时的直接访问提供历 史信息依据 ; 节点共享历史信息 Cache, 用于保存节点对数据的共享历史向量, 为节点预测 Cache 的更新提供历史信息依据 ; 节点挂起指针, 用于在读缺失过程中暂存读缺失节点指 针, 为隐藏目录访问延迟提供支持 ; 最后写节点指针, 用于在基于读缺失的节点预测 Cache 更新过程中指明共享历史向量所在节点位置 ; 私有 L1 Cache ; 共享 L2 Cache 片段。
本发明进一步的改进在于 : 处理器内核还包括一个路由器, 所述处理器内核通过 路由器连接所述片上网络 ; 所述路由器连接全局目录控制器、 共享 L2 Cache 片段和节点 目录控制器 ; 所述全局目录控制器连接所述全局目录、 共享 L2 Cache 片段和节点目录控 制器 ; 所述节点目录控制器连接私有 L1 Cache、 节点挂起指针、 节点目录片段、 节点预测Cache 和节点共享历史信息 Cache ; L1 Cache 连接共享 L2 Cache 片段。
本发明进一步的改进在于 : 一个节点内的 2n 个处理器内核使用 n 位二进制数进行 节点内编码索引。
为了实现上述目的, 本发明一种用于多核处理器的一致性交互方法采用如下技术 方案 :
一种用于多核处理器的一致性维护装置进行一致性交互的方法, 包括节点目录访 问方法, 所述节点目录访问方法包括 :
将节点目录分成 2n 个片段, 每个内核存储一个节点目录片段, 按照数据地址末段 与节点中内核编码相对应的方式将节点内的数据共享信息分布到所有节点中内核的节点 目录片段上 ;
访问节点目录时第一步首先根据数据地址的末 n 位访问对应编码内核的节点目 录片段, 如果访问命中, 则结束访问 ; 如果在该节点目录片段没有命中, 则第二步同时访问 本节点内剩余的节点目录片, 如果仍然不命中, 说明该数据在该节点中不存在, 则节点目录 访问结束。
本发明进一步的改进在于 : 某一处理器内核发生读缺失时, 该处理器内核首先根 据缺失数据地址采用节点目录访问方法访问本节点的节点目录, 如果节点目录命中, 则直 接从本节点的其它处理器内核中获得缺失数据副本, 并更新节点目录 ; 如果节点目录不命中, 则根据缺失数据地址查找本节点内对应的节点预测 Cache 预测信息, 如果节点预测 Cache 也不命中, 则按照 3-hops 读操作流程访问缺失数据地址对 应的全局目录, 由该全局目录通知缓存有效数据副本且距离最近的节点向读缺失处理器内 核发送数据, 读缺失处理器内核收到数据后根据数据地址更新相应的节点目录片段, 同时 全局目录加入读缺失节点共享信息 ;
如果节点目录不命中, 但节点预测 Cache 命中, 则根据节点预测 Cache 中的最近 节点指针向预测节点发出读数据请求 ; 被预测访问节点首先访问节点内目录, 如果不命中 则将该请求转发至该请求数据的全局目录, 然后按照 3-hops 读操作流程, 由该全局目录通 知缓存有效数据副本且距离最近的节点向读缺失处理器内核发送数据, 读缺失处理器内核 收到数据后根据数据地址更新相应的节点目录片段, 同时全局目录加入读缺失节点共享信 息;
如果节点预测 Cache 命中, 且被预测访问节点的节点内目录也命中, 说明预测节 点预测 Cache 预测正确, 则被预测访问的节点在向读缺失节点发送数据副本前先将节点挂 起指针指向读缺失节点, 将读缺失节点挂起 ; 然后向读缺失节点发送数据副本, 并同时通知 全局目录加入读缺失节点信息 ; 全局目录更新完毕后, 被预测访问的节点清除节点挂起指 针, 节点挂起过程结束 ; 如果在挂起过程结束前数据被作废, 则被预测访问的节点在收到全 局目录的作废消息后, 根据节点挂起指针将读缺失节点刚收到的数据副本作废掉。
本发明进一步的改进在于, 包括以下步骤 :
对处于 I 状态的写缺失数据将从下一级存储器先读入数据, 再进行修改 ;
发生写缺失时, 写缺失处理器内核首先根据缺失数据地址访问对应节点预测 Cache, 如果节点预测 Cache 不命中, 则向全局目录发送请求, 然后按照 3-hops 写缺失流程, 由该全局目录向所有缓存该数据副本的节点发送作废请求, 距离写缺失处理器内核最近且
接收到作废请求的节点向写缺失处理器内核发送缺失数据副本, 所有接收到作废请求的节 点作废自身的数据副本 ; 写缺失处理器内核收到数据后根据数据地址更新相应的节点目录 片段, 所有接收到作废请求的节点根据数据地址更新相应的节点目录片段, 同时全局目录 加入写缺失节点共享信息并删除被作废节点的共享信息 ;
如果节点预测 Cache 命中, 则根据最近节点指针进行直接预测访问, 写缺失处理 器内核向全局目录和预测节点同时发出两个访问请求, 根据写缺失数据所处状态的不同, 分为以下两种情况处理 :
1)、 当写缺失数据是 M 或 E 状态时, 发往全局目录的请求查询到写缺失数据状态为 M 或 E 后, 全局目录忽略该请求 ; 而发往预测节点的请求在最近节点指针预测正确的情况下 将直接作废掉处于 M 或 E 状态的唯一写缺失数据副本 ; 而在最近节点指针预测错误的情况 下请求将被错误预测节点转发到全局目录进行处理 ;
2)、 发往全局目录的请求查询到写缺失数据的状态为 S 后, 按照 4-hops 写缺失流 程, 由该全局目录向所有缓存该数据副本的节点发送作废请求, 距离写缺失处理器内核最 近且接收到作废请求的节点向写缺失处理器内核发送缺失数据副本, 所有接收到作废请求 的节点作废自身的数据副本 ; 写缺失处理器内核收到数据后根据数据地址更新相应的节点 目录片段, 所有接收到作废请求的节点根据数据地址更新相应的节点目录片段, 同时全局 目录加入写缺失节点共享信息并删除被作废节点的共享信息 ; 而发往最近节点指针预测节 点的请求在预测正确的情况下将查询到写缺失数据的状态为 S, 此后该被预测访问节点将 忽略该请求 ; 在最近节点指针预测错误的情况下, 请求将被错误预测节点转发到全局目录, 而全局目录将忽略该转发的请求。
本发明进一步的改进在于 :
(a) 替换处于 M 或 E 状态的数据时, 包括如下具体步骤 :
当被替换的数据处于 M 或 E 状态时, 一致性维护装置上只存在唯一数据副本, 发生 替换的处理器内核先发送消息剔除该数据所在节点目录中的内核信息和全局目录中对应 的节点信息 ;
发生替换的处理器内核收到确认消息后进行替换操作 ;
M 状态数据替换前还需要写回主存 ;
(b) 替换处于 S 状态的数据时, 包括如下具体步骤 :
所在的节点中存在多个副本, 只需要通知节点目录剔除发生替换操作的内核信息 后进行替换, 而无需通知全局目录 ;
(c) 替换操作所引起节点预测 Cache 预测访问的扑空, 在读、 写缺失时, 该类扑空 均按照节点预测 Cache 预测错误处理。
本发明进一步的改进在于 :
对共享同一数据的节点在全局目录中留下的共享信息的处理包括以下情况 :
1)、 对一个节点来说, 每当数据发生 I → S、 I → E、 M → S 或 E → S 的状态转换时, 生成新的全局目录共享信息 ;
2)、 对一个节点来说, 每当数据发生 S → M 或 E → M 的状态转换时, 也就是写操作 发生时, 当前全局目录中的共享信息将由写操作节点回收, 并与之前的共享历史向量信息 进行 “或” 操作产生新的共享历史向量信息, 存储在写操作节点的节点共享历史信息 Cache中; 3)、 没有发生过写操作的数据不存在共享历史向量信息, 对一个节点来说, 当数据 第一次发生 I → M、 S → M 或 E → M 的状态转换时生成共享历史向量信息 ; 在后续发生写操 作时根据全局目录共享信息生成新的共享历史向量信息, 并在发生写操作的节点间传递, 从而实现了节点共享历史信息的保存 ;
4)、 对一个节点来说, 每当数据发生 S → I、 E → I 或 M → I 的状态转换时, 说明其 它节点进行了写操作, 该数据的全局目录共享信息被作废掉。
本发明进一步的改进在于, 基于写操作的节点预测 Cache 历史信息更新方法包括 以下情况 :
1)、 发生写缺失时, 当数据处于 E 状态, 对应共享历史向量信息还未生成, 无需进 行历史信息更新 ;
2)、 发生写缺失时, 当数据处于 M 状态, 数据副本唯一并且与对应共享历史向量信 息一起存储在上一个写操作节点中, 写缺失节点根据节点预测 Cache 预测信息进行预测访 问; 在最近节点指针预测正确的情况下, 上一个写操作节点收到访问请求, 并根据本节点中 存储的共享历史向量信息对历史共享节点中的节点预测 Cache 信息进行更新, 使最近节点 指针指向写缺失节点 ; 在最近节点指针预测错误的情况下, 请求将由全局目录中转到达上 一个写操作节点, 并根据本节点中存储的共享历史向量信息对历史共享节点中的节点预测 Cache 信息进行更新, 使最近节点指针指向写缺失节点 ;
3)、 发生写缺失且数据处于 S 状态时, 数据副本不唯一, 共享历史向量信息与其中 一个数据副本一起存储在上一个写操作节点中 ; 全局目录响应写缺失节点的请求, 并根据 目录信息向数据副本所在节点发出作废消息 ; 存有写缺失数据对应共享历史向量信息的数 据共享节点收到消息后不仅要作废自身数据副本, 还要根据共享历史向量信息对历史共享 节点中的节点预测 Cache 信息进行更新, 使最近节点指针指向写缺失节点 ; 其它共享节点 只需作废数据即可 ;
4)、 发生写命中时, 如果上一个写操作节点与当前写操作节点相同, 则无需更新历 史信息 ; 如果上一个写操作节点与当前写操作节点不同, 且当数据处于 E、 M、 S 状态时, 更新 过程分别与对应的上述 1)、 2)、 3) 中写缺失更新过程相同。
本发明进一步的改进在于, 基于读操作的节点预测 Cache 历史信息更新方法包括 以下情况 :
1)、 读缺失内核的数据状态变化为 I → E 时, 数据从下一级存储器中取入, 共享历 史向量信息不存在, 无须更新节点预测 Cache ;
2)、 读缺失内核的数据状态变化为 I → S, 且数据由一致性维护装置上处于 E 状态 节点提供时, 共享历史向量信息不存在, 无须更新节点预测 Cache ;
3)、 读缺失内核的数据状态变化为 I → S, 且数据由一致性维护装置上处于 M 或 S 状态节点提供时, 共享历史向量信息已经存在, 节点预测 Cache 更新过程包括以下两种情 况:
3.1)、 当读缺失节点的节点预测 Cache 命中时, 上一个写操作节点利用自身存储 的共享历史向量信息和当前全局目录共享信息进行两次过滤操作, 生成最终需要更新的历 史共享节点信息, 并根据该最终共享历史向量进行节点预测 Cache 的更新 ; 更新节点预测
Cache 时, 检查更新前后历史共享节点与其预测节点间的距离变化情况, 只在距离缩短的情 况下才更新历史共享节点的节点预测 Cache ;
3.2)、 当读缺失节点的节点预测 Cache 不命中或命中但预测错误时, 除需要全局 目录转发请求外, 更新过程与节点预测 Cache 命中相同 ;
4)、 如果最后写节点指针指向的上一个写操作节点中读缺失数据副本和对应共享 历史向量信息已经被替换出去, 则本次节点预测 Cache 更新终止。
与现有技术相比, 本发明主要具有以下优点 : 本发明公开了一种用于多核处理器 的一致性维护装置及一致性交互方法, 主要用于解决现有多核处理器 Cache 一致性协议在 处理读缺失和写缺失的一致性交互过程中目录访问延迟大的技术问题。 本发明将多核处理 器的所有内核划分为并列关系的多个节点, 每个节点包含多个内核。 在发生读、 写缺失时根 据节点预测 Cache 直接预测访问与读、 写缺失内核最近的有效数据副本节点, 并将更新目 录步骤推迟到数据访问 ( 读操作或作废操作 ) 结束以后进行, 从而完全隐藏目录访问延迟, 提升了访存效率 ; 双层目录结构将目录存储开销由指数级增长转化为线性增长, 更具可扩 展性 ; 由于以节点为单位进行粗粒度预测, 相对以内核为单位进行的细粒度预测节省了预 测信息的存储开销 ; 另外, 还配套设计了节点预测 Cache 的动态更新算法来保证其预测精 确性, 减少了由于预测错误或不准确造成的额外延迟。 【附图说明】 图 1 是基准多核处理器结构图 ;
图 2 是多核处理器的节点划分示例图 ;
图 3 是本发明一致性维护装置中的目录组织结构图 ;
图 4 是本发明一致性维护装置相对于基准多核结构的变化图 ;
图 5 是节点挂起技术的工作流程图 ; 其中图 5(a) 为节点挂起读操作流程, 图 5(b) 节点挂起读操作中加入写操作的作废流程 ;
图 6 是本发明对读缺失的一致性交互方法图 ;
图 7 是本发明对 M、 E 状态写缺失数据的一致性交互方法图 ; 其中图 7(a) 为基于 CNP 正确预测的 M、 E 状态数据的 2-hops 写缺失处理流程 ; 图 7(b) 为基于 CNP 错误预测的 M、 E 状态数据的 4-hops 写缺失处理流程 ;
图 8 是本发明对 S 状态写缺失数据的一致性交互方法图 ; 其中图 8(a) 为基于 CNP 正确预测的 S 状态数据写缺失处理流程 ; 图 8(b) 为基于 CNP 错误预测的 S 状态数据写缺失 处理流程 ;
图9是 “签名” 与 SHV 信息的流向与变化图 ; 其中图 9(a) 为 “签名” 信息的生成、 作废和回收图 ; 图 9(b) 为以图 2 为例 SHV 信息的产生、 传递过程图 ;
图 10 是 M、 S 状态数据基于写缺失的 NPC 更新流程图 ;
图 11 是基于读缺失的 NPC 更新算法图 ;
图 12 是全映射目录与本发明的读缺失一致性交互过程对比图 ; 其中图 12(a) 为 3 3 2 ×2 个内核 CMP 中全映射目录协议的 3-hops 读缺失处理图, 包括以下步骤 : (1)P55 发生 缺失, 向目录发出读请求, (2) 目录通知距离 P55 最近的 P62 提供数据, (3)P62 向 P55 发送 3 3 数据, 同时向目录发确认消息 ; 图 12(b) 为对 2 ×2 内核、 节点规模 22 内核 CMP 的读缺失处
理图, 包括以下步骤 : (1)P55 发生缺失, 向节点目录发出读请求, (2)P55 所在节点 16 的节点 目录未命中, 访问 P56 中 NPC, 根据 CNP 预测访问节点 15 的节点目录, (3) 在 P54 节点目录 片段命中, 将 NHP 指向节点 16, 并通知 P62 向 P55 提供数据 ; 同时向全局目录发出目录更新 请求, (4)P62 向 P55 发送数据, 并更新 P56 节点目录片段, (5)P54 收到全局目录更新确认消 息后将 NHP 清除 ;
图 13 是 现 有 的 全 映 射 目 录 协 议 读 缺 失 一 致 性 交 互 过 程 图 ; 其 中 图 13(a) 为 4-hops 读缺失处理流程, 图 13(b) 为 3-hops 读缺失处理流程 ;
图 14 是现有的全映射目录协议写缺失一致性交互过程图 ; 其中图 14(a) 为 M、 E 状态数据 4-hops 写缺失处理流程, 图 14(b) 为 M、 E 状态数据 3-hops 写缺失处理流程, 图 14(c) 为 S 状态数据 4-hops 写缺失处理流程 ;
图 15 本发明一致性维护装置多个功能部件的连接关系图。 【具体实施方式】
请参阅图 1 至图 15 所示, 本发明一种用于多核处理器的一致性维护装置, 包括全 局目录、 节点目录、 目录控制器、 节点预测 Cache、 节点共享历史信息 Cache、 最后写节点指 针和节点挂起指针。包括以下方面 :
(a) 节点划分方法 片上所有内核被划分为多个节点, 每个节点包含 2n(n ≥ 1) 个内核, 假设片上有 N 个节点, N 个内核构成 2-D MESH 阵列。一个个内核 (N 为 2n 的整数倍 ), 则该处理器包含节点内的 2n 个内核使用 n 位二进制数进行节点内编码索引, 如 n = 2 时, 节点内的 4 个内 核分别编码为 00、 01、 10、 11。多个节点间是同一层次并列关系, 如图 2。
(b) 双层目录结构
如图 3 所示, 全局目录以粗向量的方式跟踪数据所在节点。由于数据地址以静态 的方式映射到所有 L2Cache 片段, 因此全局目录只负责跟踪其对应 L2 Cache 片段中数据副 本。节点目录采用全映射位向量目录, 负责在节点内跟踪数据副本所在的内核位置。
(c) 节点目录的两步访问方法
将 节 点 目 录 分 成 多 个 片 段, 每 个 内 核 存 储 一 个 目 录 片 段, 简 称 为 NDS(Node Directory Slice), 按照数据地址末段与节点中内核编码相对应的方式将节点内的数据共 享信息分布到所有节点中内核的目录片段上。
设节点规模为 M, 则访问节点目录时第一步首先根据数据地址的末 n 位访问对应 编码内核的 NDS, 如果数据确实存在于该节点中, 则访问将在该目录命中。如果在该 NDS 没 有命中, 则第二步同时访问剩余的 M-1 个 NDS, 如果仍然不命中, 说明该数据在该节点中不 存在。举例来说, 假设节点包含 4 个内核, 即 n = 2。使用 2 位二进制数对节点中内核进行 编码, 分别是 00、 01、 10、 11, 共享数据地址末两位为 11 的数据首先将其共享信息存储在编 码为 11 内核的 NDS 中。如果该内核的 NDS 已满, 再写入其它三个内核的 NDS 中, 其它数据 以此类推。 访问节点目录时首先根据数据地址的末两位访问对应编码内核的 NDS, 如果不命 中再访问其它三个内核的 NDS。
(d) 目录控制器与目录集成在一起, 用于对两级目录进行控制, 接收和发送一致性交互消息, 并对 一致性交互过程进行管理。
(e) 节点预测 Cache
如图 4, 节点预测 Cache-NPC(Node Predicting Cache), 用于保存距离请求内核节 点最近的有效目标数据副本节点, 为发生缺失时的直接访问提供历史信息依据 ; NPC 条目 中除 tag 外还保存了最近节点指针 CNP(Closest Node Pointer), 该指针指向距离请求内核 节点最近的有效目标数据副本节点。发生读、 写缺失时, 内核根据 NPC 中存储的 CNP 信息就 能够直接进行访问, 而不需要访问目录。
与节点目录类似, 每个内核的 NPC 只存储地址末 n 位与该内核 n 位节点内二进制 编码相同的数据的预测信息, 也就是说发生读、 写缺失的内核需要根据缺失数据的地址末 n 位来访问该数据 CNP 预测信息所在的 NPC。
(f) 节点共享历史信息 Cache
如图 4, 节点共享历史信息 Cache-SHC(Sharing History Cache), 用于保存节 点对数据的共享历史向量, 为节点预测 Cache 的更新提供历史信息依据 ; CNP 的有效性和 准确性需要更新算法来保证, 为了保证更新算法的精确性, SHC 中保存了共享历史向量 SHV(Sharing History Vector), 用来保证更新时只对那些曾经缓存数据副本的节点发出 更新请求, 避免造成网络拥塞和不完整更新。
(g) 最后写节点指针
如图 11, SHV 存在于最后发生写操作的节点中, 为了在数据处于 S 状态时能跟 踪 SHV 信息的位置, 为全局目录的每个条目增加一个最后写节点指针 LWP(Last Writer Pointer) 来跟踪上一个写操作节点。LWP 指针在每次发生写操作时被更新一次, 始终指向 最后发生写操作的节点。
(h) 节点挂起指针
为隐藏读缺失目录访问延迟, 为每个节点目录片段 (NDS) 增加一个节点挂起指 针 -NHP(Node Hanging Pointer)。 被预测访问的节点在向读缺失节点发送数据副本前先将 NHP 指向读缺失节点, 将读缺失节点挂起。然后向读缺失节点发送数据副本, 并同时通知全 局目录加入读缺失节点信息。全局目录更新完毕后, 被预测访问的节点清除 NHP 指针, 节点 挂起过程结束。
如果在挂起过程结束前数据被作废, 则被预测访问的节点在收到全局目录的作废 消息后, 根据 NHP 指针也将读缺失节点刚收到的数据副本作废掉。
一致性维护装置进行一致性交互的方法, 包括以下两方面 :
(a) 读缺失一致性交互
发生读缺失时, 读缺失内核首先根据缺失数据地址访问本节点目录, 如果节点目 录命中, 则直接从本节点的其它内核中获得缺失数据副本, 并更新节点目录。
如果节点目录不命中, 则根据缺失数据地址查找本节点内对应的 NPC 预测信息, 如果 NPC 也不命中, 则按照图 13 中现有的 3-hops 读操作流程访问全局目录, 由全局目录通 知缓存有效数据副本且距离最近的节点向读缺失内核发送数据, 读缺失内核收到数据后根 据数据地址更新相应的 NDS, 同时全局目录加入读缺失节点共享信息。
如果节点目录不命中, 但 NPC 命中, 则根据 NPC 中的 CNP 向预测节点发出读数据请求。被预测访问节点首先访问节点内目录, 如果不命中则将将该请求转发至该请求数据的 全局目录, 剩余流程与现有 3-hops 读操作流程相同。
如果 NPC 命中, 且被预测访问节点的节点内目录也命中, 说明预测 NPC 预测正确, 则被预测访问的节点在向读缺失节点发送数据副本前先将 NHP 指向读缺失节点, 将读缺失 节点挂起。 然后向读缺失节点发送数据副本, 并同时通知全局目录加入读缺失节点信息。 全 局目录更新完毕后, 被预测访问的节点清除 NHP 指针, 节点挂起过程结束。
如果在挂起过程结束前数据被作废, 则被预测访问的节点在收到全局目录的作废 消息后, 根据 NHP 指针也将读缺失节点刚收到的数据副本作废掉。
(b) 写缺失一致性交互
在写命中的情况下, 仍需访问全局目录将其它副本作废。
对处于 I 状态的写缺失数据将从下一级存储器先读入数据, 再进行修改。
发生写缺失时, 写缺失内核首先根据缺失数据地址访问对应 NPC, 如果 NPC 不命 中, 则向全局目录发送请求, 执行图 14 中现有的 3-hops 写缺失流程。
如果 NPC 命中, 则根据 CNP 进行直接预测访问, 写缺失内核向全局目录和预测节点 同时发出两个访问请求, 根据写缺失数据所处状态的不同, 分为以下两种情况处理 :
●当写缺失数据是 M 或 E 状态时, 发往全局目录的请求查询到写缺失数据状态为 M 或 E 后, 全局目录忽略该请求。而发往预测节点的请求在 CNP 预测正确的情况下将直接作 废掉处于 M 或 E 状态的唯一写缺失数据副本。而在 CNP 预测错误的情况下请求将被错误预 测节点转发到全局目录进行处理
●发往全局目录的请求查询到写缺失数据的状态为 S 后, 按照图 14 中 4-hops 交 互流程处理。而发往 CNP 预测节点的请求在预测正确的情况下将查询到写缺失数据的状态 为 S, 此后该被预测访问节点将忽略该请求。在 CNP 预测错误的情况下, 请求将被错误预测 节点转发到全局目录, 而全局目录将忽略该转发的请求。
(3) 一种利用一致性维护装置进行的保证中节点预测访问准确性的历史信息更新 方法, 包括以下几方面 :
(a)“签名” 信息回收技术
本发明基于 MESI 数据状态转换协议和如图 1 所示的多核处理器基准结构进行说 明, 在采用如 MSI、 MOESI 等其它数据状态转换协议和其它多核处理器结构但仍符合本发明 权利要求范围的情况下, 也属于本发明的范畴。本发明将曾经共享同一数据的节点在全局 目录中留下的共享信息称为 “签名” 信息, 对 “签名” 信息的处理包括如下步骤 :
如图 9(a), 对一个节点来说, 每当数据发生 I → S、 I → E、 M → S、 E → S 的状态转 换时, 生成新的 “签名” 信息。
对一个节点来说, 每当数据发生 S → M、 E → M 的状态转换时, 也就是写操作 ( 包括 缺失和命中 ) 发生时, 当前全局目录中的 “签名” 信息将由写操作节点回收, 并与之前的 SHV 信息 ( 如果有的话 ) 进行 “OR” 操作产生新的 SHV 信息, 存储在写操作节点的 SHC 中。
如图 9(b), 没有发生过写操作的数据不存在 SHV 信息, 对一个节点来说, 当数据第 一次发生 I → M、 S → M、 E → M 的状态转换时生成 SHV 信息。在后续发生写操作时根据 “签 名” 信息生成新的 SHV 信息, 并在发生写操作的节点间传递, 从而实现了节点共享历史信息 的保存。对一个节点来说, 每当数据发生 S → I、 E → I、 M → I 的状态转换时, 说明其它节点 进行了写操作, 该数据的 “签名” 信息被作废掉。
替换操作也会改变 “签名” 信息的内容, 但本发明认为发生替换的节点重用该数据 的可能性不强, 对其历史信息不予保存。
(b) 基于写操作的历史信息更新方法
利用权利要求 3(a) 的 “签名” 信息回收技术, 本发明实现了基于写操作的节点预 测 Cache 历史信息更新方法, 其特征在于包括以下步骤 :
发生写缺失时, 当数据处于 E 状态, 对应 SHV 信息还未生成, 无需进行历史信息更 新。
发生写缺失时, 当数据处于 M 状态, 数据副本唯一并且与对应 SHV 信息一起存储在 上一个写操作节点中, 写缺失节点根据 NPC 预测信息进行预测访问。在 CNP 预测正确的情 况下, 上一个写操作节点收到访问请求, 并根据本节点中存储的 SHV 信息对历史共享节点 中的 NPC 信息进行更新, 使 CNP 指向写缺失节点。在 CNP 预测错误的情况下, 请求将由全局 目录中转到达上一个写操作节点, 并开始相同的历史信息更新过程。
发生写缺失且数据处于 S 状态时, 数据副本不唯一, SHV 信息与其中一个数据副本 一起存储在上一个写操作节点中。全局目录响应写缺失节点的请求, 并根据目录信息向数 据副本所在节点发出作废消息。存有写缺失数据对应 SHV 信息的数据共享节点收到消息后 不仅要作废自身数据副本, 还要根据 SHV 信息更新历史共享节点中的 NPC 信息进行更新, 使 CNP 指向写缺失节点。其它共享节点只需作废数据即可。
发生写命中时, 如果上一个写操作节点与当前写操作节点相同, 则无需更新历史 信息。如果上一个写操作节点与当前写操作节点不同, 则更新过程与发生写缺失时相同。
(c) 基于读缺失的历史信息更新方法
利用权利要求 3(a) 的 “签名” 信息回收技术, 本发明实现了基于读操作的节点预 测 Cache 历史信息更新方法, 其特征在于包括以下步骤 :
读缺失内核的数据状态变化为 I → E 时, 数据从下一级存储器中取入, SHV 信息不 存在, 无须更新 NPC。
读缺失内核的数据状态变化为 I → S, 且数据由片上处于 E 状态节点提供时, SHV 信息不存在, 无须更新 NPC。
读缺失内核的数据状态变化为 I → S, 且数据由片上处于 M 或 S 状态节点提供时, SHV 信息已经存在, NPC 更新过程的特征在于包括以下步骤 :
●当读缺失节点 NPC 命中时, 上一个写操作节点利用自身存储的 SHV 信息和当前 “签名” 信息进行两次过滤操作, 生成最终需要更新的历史共享节点信息, 并根据该最终 SHV 进行 NPC 的更新。
●更新 NPC 时, 检查更新前后历史共享节点与其预测节点间的距离变化情况, 只 在距离缩短的情况下才更新历史共享节点 NPC 中存储的 CNP 指针。
●当读缺失节点 NPC 不命中或命中但预测错误时, 除需要全局目录转发请求外, 更新过程与 NPC 命中相同。
如果 LWP 指向的上一个写操作节点中读缺失数据副本和对应 SHV 信息已经被替换 出去, 则本次 NPC 更新终止。下面结合附图 1 至 15 和具体的实施例对本发明做进一步详细描述。
对于本发明所提出的用于多核处理器的一致性维护装置及一致性交互方法, 如无 特别说明, 后文均基于规模为 4 的节点、 MESI 数据状态转换协议和 Inclusive 两级 Cache 层 次关系结合附图进行实例详细说明。
本发明所提出的一致性维护装置是为了保持 CMP 处理器的存储系统一致性而设 计的。因此, 为了能够清楚的说明本发明的技术方案, 首先对 CMP 处理器的存储系统结构作 说明。如图 1 和图 3 所示, 本发明所基于的 CMP 处理器的存储系统具有以下特征 :
片上网络 (Network on Chip, NoC) 是 CMP 处理器广泛使用的内核互联方式, NOC 以阵列的方式将多个同一尺寸内核连接起来。本发明基于 2-D MESHNOC 互连和 MESI 状态 转换协议进行说明 ;
所有内核私有 L1 Cache, 共享 L2 Cache 和主存 ;
共享 L2 Cache 以多个片段的方式分布在所有内核中, 整个 L2 Cache 在物理上分 布放置。
片上两级 Cache 间采用 Inclusive 模式。 因此, 目录用来维护一个共享的 L2 Cache 与多个私有 L1 Cache 之间的数据一致性。 目录跟踪每个 L1 Cache 数据块的状态。目录和关联的一致性控制器也与它们控 制的私有 L1 Cache 和共享 L2 Cache 片段在片上分布放置。
本发明提供的用于多核处理器的一致性维护装置包括如下功能部件 :
●全局目录 (Global Directory), 以粗向量的方式跟踪数据所在节点 ;
●节点目录 (Node Directory), 负责在节点内跟踪数据副本所在的内核位置 ; 节 点目录片段, 负责在节点内跟踪数据副本所在的内核位置 ; 一个节点内的所有节点目录片 段构成该节点完整的节点目录 ;
●目录控制器, 包括节点目录控制器和全局目录控制器, 用于接收、 发送一致性交 互消息, 控制两级目录维护数据一致性。
●节点预测 Cache-NPC(Node Predicting Cache), 用于保存距离请求内核节点最 近的有效目标数据副本节点, 为发生缺失时的直接访问提供历史信息依据 ;
●节点共享历史信息 Cache-SHC(Sharing History Cache), 用于保存节点对数据 的共享历史向量, 为节点预测 Cache 的更新提供历史信息依据 ;
●节点挂起指针 -NHP(Node Hanging Pointer), 用于在读缺失过程中暂存读缺失 节点指针, 为隐藏目录访问延迟提供支持 ;
●最后写节点指针 -LWP(Last Writer Pointer), 用于在基于读缺失的 NPC 更新过 程中指明 SHV 向量所在节点位置。当数据处于 S 态, 并且该 S 态是从 M 态转换而来时, 存有 SHV 信息的上一个写操作节点已经 “淹没” 在多个 S 态节点中, 导致无法定位 SHV 信息的位 置。本发明为全局目录增加一个 LWP 指针来跟踪上一个写操作节点。
本发明一致性维护装置所包含的多个功能部件的连接关系如图 15 所示 :
(1) 处理器内核与私有 L1 Cache 的连接用于访存指令的数据访问 ;
(2) 私有 L1 Cache 与节点目录控制器之间的连接用于在 L1 Cache 缺失时传送缺 失数据地址、 访问节点目录片段、 跟踪 L1 Cache 中的数据副本状况 ;
(3) 节点目录控制器与多个节点目录片段的连接用与控制节点目录对 L1 Cache
中数据的跟踪 ;
(4) 节点目录控制器与节点预测 Cache 间的连接用与数据在本节点内所有 L1 Cache 中均未命中时, 获取有效数据所在的最近节点的指针, 根据该指针能够进行直接数据 访问 ;
(5) 节点目录控制器与路由器之间的连接用于传送与节点内其它内核的节点目录 片段交互的控制信号、 接收发送 SHV 信息、 来自全局目录的共享向量和更新 NPC 的信息等 ;
(6) 节点目录控制器与节点共享历史信息 Cache-SHC 之间的连接用于在发生写操 作时传送来自其它节点的 SHV 信息和当前全局目录向量 ;
(7) 节点目录控制器与本内核全局目录控制器之间的连接用于传送当前全局目录 向量 ;
(8) 私有 L1 Cache 与共享 L2 Cache 片段之间的连接用于 L1 Cache 缺失时访问共 享 L2 Cache ;
(9)L2 Cache 片段与路由器之间的连接用于访问其它共享 L2 Cache 片段或者在共 享 L2 Cache 缺失时访问主存 ;
(10)L2 Cache 片段与全局目录控制器之间的连接用于传送缺失数据地址、 访问全 局目录、 跟踪 L2 Cache 片段中的数据副本状况 ;
(11) 全局目录与全局目录控制器之间的连接用于控制全局目录对 L2 Cache 片段 中数据的跟踪 ;
(12) 全局目录控制器与路由器之间的连接用于传送与其它节点的节点目录连接 的一致性交互的控制信号、 缺失时提供的全局目录信息和更新 NPC 时需要的当前目录向 量。
基于本发明提供的一致性维护装置, 本发明还提供了一致性维护方法, 具体实施 方式包括以下步骤 :
(1) 读缺失一致性交互
(a) 为 每 个 节 点 目 录 片 段 (NDS) 增 加 一 个 节 点 挂 起 指 针 NHP(Node Hanging Pointer), 在全局目录加入读缺失节点信息前在数据提供节点中临时保留读缺失节点的 “踪迹” , 该 “踪迹” 的存在是数据提供节点发送请求数据的前提条件。如图 5(a), 设节点 A 中某内核缓存了节点 B 请求的数据 D 副本, 节点挂起的具体步骤包括 :
●当节点 A 收到来自节点 B 的数据请求时, 则将对应 NDS 关联的 NHP 指向节点 B( 挂起节点 B) ;
●然后向节点 B 发送数据 D 的同时也向全局目录发送目录更新请求 ;
●全局目录收到请求并加入节点 B 信息后返回一个确认消息 ;
●节点 A 收到该确认消息后清除对应 NHP 指针, 节点挂起过程结束 ;
●节点挂起只针对来自读缺失节点的数据请求, 对于来自全局目录的请求不予挂 起。
(b) 由于全局目录收到节点 A 的目录更新请求前并没有被锁定, 仍可能处理其它 写操作。 如果这时产生了一个对该请求数据的写操作, 则利用节点挂起指针进行作废操作。 如图 5(b) 所示, 具体步骤包括 :
●由于节点 A 存有请求数据副本, 节点 A 会收到来自全局目录的作废消息 ;●节点 A 在作废节点内数据副本的同时根据相应 NHP 的内容也向节点 B 转发该作 废消息 ;
●节点 B 作废掉刚得到的数据副本后向节点 A 返回作废确认消息 ;
●节点 A 收到来自节点 B 的作废确认后向全局目录发送作废确认消息, 至此写作 废过程结束。
(c) 如图 6, 当内核发生读缺失时, 一致性交互包括如下具体步骤 :
●发生读缺失的节点 B 内核根据缺失数据地址按照权利要求 (1)(c) 的两步目录 访问方案访问节点 B 目录 ;
●如果在节点目录命中, 则访问节点 B 中内核, 并更新节点目录 ;
●如果节点目录不命中, 则查找节点 B 内对应 NPC 的预测信息, 如果 NPC 不命中, 则按照图 13 中 3-hops 读操作流程访问全局目录, 由全局目录通知缓存有效数据副本的节 点向请求内核发送数据, 请求内核收到数据后根据数据地址更新相应的 NDS, 同时全局目录 加入节点 B 共享信息。
●如果 NPC 命中, 则根据 CNP 向预测节点 A 发出读数据请求。节点 A 按照两步目 录访问方案访问节点内目录 ;
●如果节点 A 内目录不命中则节点 A 将该请求转发至该请求数据的全局目录, 剩 余流程与 3-hops 读操作相同 ;
●如果在节点 A 内目录命中, 则按照图 5 的节点挂起流程进行处理。
(d) 当片上 Cache 中不存在被请求数据副本时访问主存获得数据。
(2) 写缺失一致性交互
(a) 当写缺失数据处于 M、 E 状态, NPC 命中, 且对应 CNP 预测正确时, 能将写缺失一 致性交互过程缩短为 2-hops。当 NPC 不命中时, 按照 3-hops 流程处理。如图 7, 包括如下 具体步骤 :
●写缺失内核同时向全局目录和 NPC 预测节点发出两个访问请求 ;
●发往全局目录的请求查询到数据 D 状态为 M 或 E 后, 全局目录忽略该请求, 如图 7 中的 1a 消息 ;
●根据 NPC 中 CNP 预测发出的请求在预测正确的情况下将直接作废掉处于 M 或 E 状态的唯一数据 D 副本, 实现了 2-hops 写缺失一致性交互, 如图 7(a) ;
●在 NPC 中 CNP 预测错误的情况下请求将被错误预测节点转发到全局目录进行处 理, 整个过程为 4-hops 交互, 错误预测代价为 1-hops, 如图 7(b)。
(b) 对处于 S 状态的写缺失数据仍维持 4-hops 交互, 只是交互过程稍有不同。如 图 8, 包括如下具体步骤 :
●对于状态为 S 的写缺失数据, 写缺失内核也同时向全局目录和 NPC 预测节点发 出两个访问请求 ;
●发往全局目录的请求查询到数据 D 的状态为 S 后, 继续按照图 14 中 4-hops 交 互流程处理 ;
●发往 NPC 预测节点的请求在预测正确的情况下将查询到数据 D 的状态为 S, 此后 该数据 D 共享节点将忽略该请求, 如图 8(a) 中 1b 消息。
●在 NPC 预测错误的情况下, 请求将被错误预测节点转发到全局目录, 而全局目录将忽略该转发的请求, 如图 8(b) 中 2c 消息。
(c) 对处于 I 状态的写缺失数据将从下一级存储器先读入数据, 再进行修改。
(d) 在写命中的情况下, 仍需访问全局目录将其它副本作废。
(3) 替换
(a) 替换处于 M 或 E 状态的数据时, 包括如下具体步骤 :
●当被替换的数据处于 M 或 E 状态时, 片上只存在唯一数据副本, 发生替换的内核 先发送消息剔除该数据所在节点目录中的内核信息和全局目录中对应的节点信息 ;
●发生替换的内核收到确认消息后进行替换操作 ;
● M 状态数据替换前还需要写回主存。
(b) 替换处于 S 状态的数据时, 根据节点中被替换数据的副本数量分为两种情况。 包括如下具体步骤 :
●第一种情况, 所在的节点中只存在唯一副本, 替换过程与 E 状态类似 ;
●第二种情况, 所在的节点中存在多个副本。只需要通知节点目录剔除发生替换 操作的内核信息后进行替换, 而无需通知全局目录。
(c) 替换操作可能引起 NPC 预测访问的扑空。 在读、 写缺失时, 该类扑空均按照 NPC 预测错误处理。
基于本发明提供的一致性维护装置, 本发明还为一致性维护方法配套提供了历史 信息更新算法, 具体实施方式包括以下步骤 :
(1) 基于读缺失的 NPC 更新
当发生读缺失时, 新出现的数据共享节点将缩短部分历史共享节点与有效数据副 本节点的最小距离, 而另一部分则保持不变。本发明只对前者的 NPC 内容进行精确更新, 不 会发出多余的更新消息, 保证更新后历史共享节点与其预测节点间的距离小于其与所有当 前数据共享节点间的距离。如图 9, 根据读缺失内核的两种数据状态变化 : I → E 和 I → S, NPC 更新包括以下具体步骤 :
(a) 当读缺失内核的数据状态变化为 I → E 时, 数据从下一级存储器中取入, SHV 信息还未生成, 无须更新 NPC ;
(b) 当读缺失内核的数据状态变化为 I → S 时, 如果数据由片上处于 E 状态节点提 供时, SHV 信息不存在, 也无须更新 NPC ;
(c) 当读缺失内核的数据状态变化为 I → S 时, 如果数据由片上处于 M 或 S 状态 ( 该 S 状态由 M 状态, 而非 E 状态转换而来 ) 节点提供时, SHV 信息已经存在, 故本发明只对 该情况下发生的读缺失进行 NPC 更新, 包括以下具体步骤 :
●如图 9(a), 当读缺失节点 NPC 命中时, 全局目录向数据提供节点发出目录更新 确认消息的同时也将 GDV 信息发送到 LWP 指向的 OldWriter 节点, 在那里将进行两次过滤 操作 ;
●第一次过滤先用 GDV 与 SHV 信息进行 “AND”操作, 再将结果与 SHV 信息进行 “XOR” 操作, 过滤掉当前已经缓存数据副本的历史共享节点 ;
●第二次过滤对 SHV 指向的历史共享节点与数据提供节点和读缺失节点之间的 距离进行计算, 过滤掉所有与读缺失节点间距离大于与数据提供节点间距离的历史共享节 点。节点间距离的计算方法如下 : 对于一个有 2n×2n 个节点的 2-D MESH CMP 来说, 需要 2n位二进制数对节点进行编码。编码的高 n 位指明节点位于哪一行, 低 n 位指明节点位于哪 一列。设节点 A 和 B 的编码分别为 a2n-1a2n-2...a1a0 和 b2n-1b2n-2...b1b0, 则节点 A 与 B 之间的 距离为 |b2n-1b2n-2...bn- a2n-1a2n-2...an|+|bn-1bn-2...b0-an-1an-2...a0| ;
●这两次过滤操作可并行进行, 最后将两次过滤的结果进行 “AND” 操作生成最终 需要更新的历史共享节点信息, 如图 9(a) ;
● OldWriter 节点 ( 上一个写操作节点 ) 根据该最终 SHV 进行 NPC 的更新。更新 时 OldWriter 节点将读缺失节点编码发送到需要更新的历史共享节点中 ;
●历史共享节点节点收到更新消息后用读缺失节点编码与自身 NPC 中存储的 CNP 节点编码做距离比较。如果读缺失节点与历史共享节点间的距离小于 CNP 节点与历史共享 节点间的距离, 则用读缺失节点编码更新历史共享节点 NPC 中存储的 CNP 指针, 否则, 保持 原 CNP 内容不变。如图 9(b) 中, 假设 S 状态节点 S1 是距离读缺失节点 R 最近的有效数据 节点, 则所有深色区域节点与 R 节点的距离均小于与 S1 节点的距离, 所有位于深色区域且 未缓存读缺失数据副本的 HS 节点都应更新其 NPC 信息, 如 HS3(CNP = S2)、 HS4(CNP = S1) 和 HS5(CNP = S1)。更新时发现 HS3 虽然位于深色区域, 但 HS3 与其存储的 CNP 指向的 S2 节点间距离仍小于 HS3 与 R 间的距离, 故保持 HS3 节点原先存储的 CNP 不变 ;
●当读缺失节点 NPC 不命中或命中但预测错误时, 全局目录响应请求并通知距离 读缺失节点最近的有效数据副本节点发送数据。数据发送节点向全局目录返回确认消息 后, 全局目录根据 LWP 向 OldWriter 节点发送 GDV, 并开始与 NPC 命中相同的更新过程 ;
●如果 LWP 指向的 OldWriter 节点中读缺失数据副本和对应 SHV 信息已经被替换 出去, 则本次 NPC 更新终止 ;
●如果 LWP 为空, 当前读缺失数据处于 S 状态, 这说明该 S 是由 E 状态转换而来, SHV 信息不存在, 本次 NPC 更新终止。
(2) 基于写操作的 NPC 更新
(a) 如图 10(a)(b), 当数据 D 处于 M 状态时, NPC 更新包括以下具体步骤 :
● OldWriter 节点在收到 NewWriter 节点 ( 当前写缺失节点 ) 的请求后, 作废自 身数据 D 副本并在本节点对应 NPC 中分配空间, 将 CNP 指向 NewWriter 节点 ;
●接着根据 OldWriter 节点对应 SHC 中的 SHV 信息更新历史共享节点, 将它们的 数据 D CNP 信息更新为 NewWriter 节点 ;
● OldWriter 节点将 SHV 信息传递给 NewWriter 节点 ;
● NewWriter 节 点 将 收 到 来 自 全 局 目 录 的 数 据 D 当 前 共 享 信 息 GDV(Global Directory Vector) 和来自 OldWriter 节点的 SHV 信息, NewWriter 节点将这两者做 “OR” 操作, 将结果作为新的 SHV 存储在节点 SHC 中。
(b) 如图 10(c), 当数据 D 处于 S 状态时, NPC 更新包括以下具体步骤 :
●当数据 D 处于 S 状态时, NPC 的更新流程与 M 状态时类似。不同的是, 在有多个 S 状态节点时, 需要这些 S 状态节点同时访问自身的 SHC, 并从发生命中的 OldWriter 节点 中取出 SHV 送往 NewWriter 节点 ;
●如果所有 S 状态节点的 SHC 均未命中, 说明 OldWriter 节点中所有数据 D 副本 和对应 SHV 已经被替换出 L1 Cache 和 SHC, 这时则不用向 NewWriter 节点发送 SHV ;
● NewWriter 节点直接将收到的 GDV 作为新的 SHV 信息 ;● S 状态时如果 CNP 预测错误, 由错误节点转发的请求不会被全局目录响应, 因此 NPC 更新流程与 CNP 预测正确时相同。
(c) 当数据 D 处于 E 状态时, NPC 更新包括以下具体步骤 :
●当数据 D 处于 E 状态时, 数据 D 的 SHV 信息没有生成, 如果这时发生数据 D 写操 作, 缓存数据 D 唯一副本的节点收到 NewWriter 节点的请求后不用进行历史共享节点的 NPC 更新, 也不用进行自身 SHV 信息的传递。
●数据副本所在节点只需作废自身数据 D 副本并在本节点对应 NPC 中分配空间, 将 CNP 指向 NewWriter 节点即可 ;
● NewWriter 节点只会收到来自数据 D 全局目录的 GDV 信息, 并直接将其作为新 的 SHV 信息。
(d) 发生写命中时, 如果上一个写操作节点与当前写操作节点相同, 则无需更新历 史信息。 如果上一个写操作节点与当前写操作节点不同, 则更新过程与发生写缺失时相同。
(3)NPC 更新时的 CNP 与 SHV
(a) 当一个数据 D 副本存在于某节点的 L1 Cache 中时, 该节点对应的 NPC 中无需 保存该数据的 CNP 信息, 因为其本身就是该有效数据的最近节点 ;
(b) 只有当节点中所有数据 D 副本都被作废掉 ( 替换操作不分配 CNP) 时才在 NPC 中为数据 D 分配 CNP 指针, 这样能提升 NPC 空间的利用率 ;
(c) 对数据 D 来说, 其对应 SHV 信息在数据 D 发生第一个写操作时首次出现, 并随 后续写操作节点传递 ;
(d) 当发生替换操作, 并且被替换数据与其对应 SHV 信息位于同一内核时, SHV 信 息也从 SHC 中被替换 ;
(e) 对 L1 Cache 进行替换操作时, 优先替换那些没有在 SHC 中缓存对应 SHV 信息 的数据。
以上实施方式仅用于说明本发明, 而非对本发明的限制, 相关技术领域的科研人 员, 在不脱离本发明精神和范围的情况下, 还可以做出各种变化和变型, 因此, 所有等同的 技术方案也属于本发明的范畴, 本发明的专利保护范围应由权力要求限定。