Rocket - tilelink - Filter
Posted wjcdx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rocket - tilelink - Filter相关的知识,希望对你有一定的参考价值。
https://mp.weixin.qq.com/s/6XX0CZHoDotIgLbNDSIUog
简单介绍Filter的实现。
??
1. 基本介绍
使用过滤器过滤掉client和manager的一部分能力。
2. ManagerFilter/ClientFilter
用于对manager和client进行过滤:
??
a. 若过滤掉则返回None;
b. 若没过滤掉,也可能进行更改;
3. mIdentity/cIdentity
不产生任何变化的过滤器:
??
4. diplomacy node
1) TLAdapterNode
是一个适配器节点。
2) clientFn
把本节点看到的client参数,映射为下游节点看到的client参数:
??
a. 把client都经过过滤器处理一遍;
b. 确保过滤器过滤掉一部分能力:
??
这里IDEA提示把out.map换为out.foreach比较好。
看最后一个:require(!c.requestFifo || o.requestFifo)
从中可以看出:不需要fifo比需要fifo能力强。不需要fifo说明client具备请求序列化的能力,需要fifo则client自身不具备,需要manager使用fifo来为之实现。
a. 若c.requestFifo=false,表明c不需要fifo,那么无论o需不需要fifo都不超过c的能力;
b. 若c.requestFifo=true, 则o.requestFifo=true,即如果c不具备序列化的能力,那么o也不能具备;
3) managerFn
把本节点看到的manager参数,映射为上游节点看到的manager参数:
??
a. 把manager都经过过滤器处理一遍;
b. 确保过滤器过滤掉一部分能力:
??
也看最后一个:require(o.fifoId.isEmpty || m.fifoId == o.fifoId)
从中可以看出:具有fifoId的能力要强于没有fifoId。原因在于,有fifoId则内部实现了针对该fifoId的序列化功能。
5. lazy module
用于实现内部逻辑。
??
1) 成对出现的输入边和输出边
??
2) 输入边和输出边直连即可
??
由此可以看出Filter的功能,主要通过diplomacy node实现。
3) 若不支持Acquire操作,则默认关闭channel b/c/e:
??
6. object TLFilter
其中定义了一些过滤器实例。
1) mIdentity/cIdentity
不做改变:
??
2) mSelectIntersect
这是一个manager过滤器:
??
把manager中的地址集合与参数select求交集,并调整transfer的能力。
3) mHideContained
??
重构一下:
??
只保留没有被container完全包含的地址集合。
4) mHideCacheable
去除支持Cache的manager:
??
5) mSelectCacheable
去除不支持Cache的manager:
??
6) mMaskCacheable
去除支持cache的manager的cache能力:
??
7) mSelectAndMaskCacheable
??
a. 去除支持cache的manager的cache能力;
b. 去除不支持cache的manager;
8) cHideCaching
去除支持cache的client:
??
9) cSelectCaching
选择支持cache的client:
??
以上是关于Rocket - tilelink - Filter的主要内容,如果未能解决你的问题,请参考以下文章
Rocket - tilelink - Monitor
Rocket - tilelink - ProbePicker
Rocket - tilelink - Edges
Rocket - tilelink - Xbar
Rocket - tilelink - Filter
Rocket - tilelink - Metadata