目录
V. FASTRULE IN DIFFERENT TCAM LAYOUTS
A. Free spaces interleaved between non-free spaces
一般情况下,流表项会安排在TCAM的顶部或者底部,如下图:
这个架构称作original layout, 上面的讨论都是基于这种架构。
还有一些架构是,每j个流表项之间有i个空余空间,可以用来删除插入流表项,贪心算法的循环时间变成i.如下图。
如果中间的层都填满,那么循环时间会增加为Cmax, 所以需要调整移动流表项,这将造成额外的负担,我们在下一节会实验介绍。
B. Free spaces in the middle
还有一种架构是TCAM的流表项分成两部分一部分在顶部,一部分在底部,空余空间在中间。这种架构的插入删除操作也和其他不一样。
上图是一个例子说明这种架构可以减少流表项移动次数。
1)插入:
如果依赖关系fa->f->fb,如果fa, fb都是在顶部,或者都在底部,那么插入f就像以前的算法一样即可。否则将f插入到中间位置,我们需要选择插入到上面还是下面,定义一个阈值t, 上面的流表项数量mt, 下面的流表项数量mb, 如果mt-mb>t, 就把流表项插入到底部,反之顶部。
我们需要衡量Mt和Mb之间的差距,如果两者的差距小,流表项移动相对较少,但是维持的代价也增大。
另一个例子,如下图,插入多个连续流表项,导致很多额外的移动,解决方案就是每次插入流表项从连续的空间中每次随机选择。
2)删除
删除流表项比原来的设计更复杂,两种选择:
- dirty delete: 删除流表项,空余的空间可以留下来等新的流表项插入
- balance delete: 删除流表项,然后利用现在已存的流表项填补空间。
dirty delete这种方法使用的话就不是中间空余的设计方式了,这会浪费这个空余的空间。
balance delete如下入,我们要移动其他的流表项,这回带来负载。另外我们也需要平衡顶部和底部的流表项数量。