https://mp.weixin.qq.com/s/XZVCdt50tM6lavchGm9GRg
简单介绍RegionReplicator的实现。
1. 基本介绍
根据mask把某一个区域复制成多个区域。复制的数目是mask中比特1的数目的2次幂。
2. RegionReplicator
1) 类参数
mask是掩码,其中的比特1对应的位:
a. 在待复制的区域地址的基址中应当为0;
b. 在待复制的区域地址的掩码中应当为0;
如此,根据这些位值的变化,就可以复制出多个区域。
2) diplomacy node
diplomacy node用于与上下游节点连接。
这里是一个适配器节点,主要对向下传递的参数进行适配进行适配:
a. ids
mask中值为1的位,取值为0或1,然后各个位进行组合所得值的集合;
b. managerFn
把下游节点的manager参数中的每一个地址集合都使用mask进行扩展。
如此向上游节点显示的manager参数就从之前的单个区域扩展成了多个区域。
3) lazy module
实现RegionReplicator的内部逻辑:
1) 成对的输入边和输出边
2) 默认直连
3) 适配请求的地址
in.a.bits.address是扩展之后的地址,把其中掩码位对应位的值清0,即可得到扩展前的地址。然后使用这个扩展前的地址向下游节点发起请求。
4) 不支持Cache
这个判断是要求regionType从UNCACHED/UNCACHEABLE/PUT_EFFECTS/GET_EFFECTS中取值:
3. HasRegionReplicatorParams
包含一个replicatorMask作为复制时使用的掩码: