cache问题
- 谁cache?——cache placement
- cache谁?——content placement=cache decision+cache replacement
- Interest怎么找到cache?-content discovery
后两个问题合在一起可以称之为cache strategy
cache strategy分类
略。
问题
本质上就是Breadcrumb,只是做了点点优化。
优化目标是cache命中率。
手段是:1. 增加cache diversity 2. 让off-path的缓存副本也能被找到
场景设定
有一个ISP,ISP内若干router相连,每个router可以缓存内容。
source在ISP外,被请求的内容会从域外返回:
- 决定谁该存它
- 决定下次再有相同请求,怎么找到缓存副本
目标是:
- 提高ISP内cache命中,从而减少inter-AS traffic
- 同时不引起较大的开销,和latency的增加
idea
主要内容是:
- 存谁?随便设置一个缓存策略就行,不是重点
- 怎么找到缓存内容?
记录路径
使用面包屑的办法,用一个类似于PIT的表EFIB,记录到cache的trace
EFIB与PIT区别:PIT一定与路由相反,从source发出,下一跳一定是downstream;EFIB是指向cache,它的下一跳可以是upstream可以是downstream。
- 如果Data从cache来,trace指向这个命中的cache;
- 如果Data不是从cache来,那么当前router需要考虑缓存不缓存它:
- 缓存策略随意
- 若当前router不cache它,这个router的下游会有人缓存它;那trace指向下游这个cache;
- 如果当前router cache它,那么这个router不需要记录EFIB,且从它发出去的包被视作“从cache来”。
其实设置【Data不是从cache来才进入缓存策略】是为了保证返回路径上只有一个缓存副本。
其实也可以不这么限制。
总之要保证:1. cache里存了内容a的没有关于a的EFIB;2. EFIB记录的trace是指向cache的
选择路径
//
走了EFIB就不会再走FIB——否则会路由循环。
优化
广播式和停等式的tradeoff,主要在于如何控制有多个下一跳时,同时发送的offpath请求包的数量。数量多,开销大,但是速度快;数量少,开销小,但是速度慢。
越靠近source,越不需要查offpath;
所以在从FIB变成EFIB的那个节点上,把“到source的代价”(比如说跳数等等)作为开始走EFIB的“启动资金”。
每生成一个offpath Interest,就花掉一些“资金”,“资金”的多少可以是固定的,可以是动态可变的;与链路状况、cache大小等可能都有关系。
没“资金”时,就无法再生成offpath Interest走EFIB了。
某个下一跳能找到内容的可能性越高,就越不需要再生成复数的请求。
- 某下一跳找到内容的可能性越高,产生到它的请求的“价钱”就越贵,这样使得“资金”很快被花完,就不会再走其它的下一跳了。
- 某下一跳找到内容的可能性越低,产生到它的请求的“价钱”就越便宜,这样使得能走更多的下一跳。