目录

  • abstract
  • Introduction
  • background
    • A. flow dependency
    • B.Flow entry update in existing hardware switches
    • C.Dependency graph
    • D.TCAM update scheduler
  • THE WORKING FLOW OF FASTRULE
  • IV. GREEDY ALGORITHM
    • A.On-demand: finding candidate addresses
    • B. Address metric computation
    • C. Greedy algorithm
    • D.Using an array data structure to store metrics
    • E. Using a modified Binary Indexed Tree to store metrics

abstract

目前针对SDN网络更新优化都是集中在控制平面,数据平面也存在优化空间,为了减少流表项更新时间,首先可以使用依赖图(DAG)更新交换机上的流表项,使用DAG可以避免一些不必的流表更新。本文提出了一种流表更新算法FATSRULE,①利用贪心算法加DAG实现部分性能优化②考虑了算法的可扩展性问题。
文中进行了实验对比,本文的算法对于大小为1K的流表对标最新的算法快了100倍。(性能优化真的超级多)。

index term: Software-Defined Networks, TCAM, OpenFlow, greedy algorithm, flow update

Introduction

SDN对网络更新时间的响应时间决定了控制层的敏捷性, 运营商网络中要求重路由要在25ms内,避免丢包或者拥塞。根据最新的测量结果,一个商业的open flow交换机1s最多处理42条流表更新。
流表更新延迟的时间主要用于增加,删除,修改流表项,openflow交换机处理更新效率低的原因是因为它使用tcam.(可以看做能进行并行查询的有序数组),主要用于快速查找,但是更新并不高效。

流表项在TACM中从top到bottom存储,物理地址递降。如果一个数据包可以匹配多个流表项,那么最高地址的流表项优先匹配选择。 流表更新过程中,可能为了维持优先级造成大量的流表项移动。

实际上,不仅基于OpenFlow的交换机,而且5G移动网络都高度依赖TCAM更新效率。 据报道,一些新的5G防火墙设计使用TCAM来提高其检测,区分和选择性阻断效率.

考虑两个维度解决效率问题:

一. 减少控制器发送给交换机的流表更新项数量。例如使用一些调度方法。
二. 交换机中使用算法减少TCAM中流表项移动。更新过程中使用最小依赖图DAG(有向无环图),可以减少很多不必要的流表项移动。

使用DAG需要一个police compiler,功能是将流表项更新转化为DAG图。
对应的,需要一个TCAM update scheduler,功能是将DAG调度转化为TCAM中流表项移动。 RuleTris 这篇论文设计了第一个方面,没有考虑第二个。

本文提出FastRule, 高效的可扩展的流表项框架,通过提供高性能的TCAM更新调度程序,可以在1k大小的流量表中实现每次更新0.04毫秒的固件时间。

并且计算更新调度的时间复杂度 空间复杂度O(n), 其中n是TCMA的大小Cavg是DAG的平均直径。根据测量,对于n=40k的流表,Cavg一般小于15,这个数字远远小于n.

实验将在 ONetSwitch上实现,这是一个可编程硬件,实验结果对标RuleTris,实验结果快100倍。
同时FastRule也适合不同的交换机具有可扩展性。

background

A. flow dependency

如果incoming packet匹配两个流量项,需要提供一个执行匹配顺序,这就是流依赖(flow dependency)

定义:

flow entry A is dependent on a flow entry B if B should be matched first,
We also use A → B to indicate A is dependent on B directly

B.Flow entry update in existing hardware switches

之前提过,TCAM更新慢的主要原因是需要维持一些基于优先级的流依赖, TCAM中每个流表项都拥有物理地址,当数据包匹配多个流表项总是返回最高地址的流表项。如果需要增加一个流表项,首先需要找到一个位置,移动所有的低物理地址的流表项,腾出一个空间。相当于插入排序,如果有N个流表项,平均需要移动N/2次。

C.Dependency graph

移动所有的流表项性能低下,但我们只移动具有依赖关系的流表项会大大提高性能。
如下图插入C*A, 可以只移动两个流表项。

定义:

The minimum dependency graph, which is a kind of Directed Acyclic Graph (DAG) commonly used to describe the flow dependency in a flow table.

抽象模型:

node fu—flow entry
directed edge from node fb to fa—node entry fa is dependent on entry fb.
if fa is dependent on entry fb ,phyaddr(fa) must be higher than phyaddr(fb). 这里我有疑问. A依赖于B, B需要先执行,所以B的物理地址需要更高

下图是一个符号表示列表

图的直径等于图中两个节点之间的“longest shortest path”,Cmax表示流表中流依赖的复杂性。大多情况下Cmac<<n.
一般一个DAG(从路由表或者访问控制列表转化的),可能包含几个不相连的部分,不相连的部分互相不影响,因此Cavg<Cmax<<n.

D.TCAM update scheduler

定义:

For inserting a flow entry into the TCAM, after the correct place for the newly inserted entry is chosen, a sequence of flow entry movements is applied in order to make the chosen space free in the TCAM, such a sequence is called update sequence.

(I, f, A) 表示插入操作,I-insert, f-flow entry, A-address, eg, (I,C ∗ A, 0x5)
(D, A) 表示删除操作.

对于上图1-③中更新操作,可以表示为: (I,C∗A, 0x5), (I,∗∗A, 0x2), (I,∗∗∗, 0x1) 。

THE WORKING FLOW OF FASTRULE

fastRule工作流程如图2所示:

first stage: compiler.

  • 有很多实现的方案,可以利用这些工作,比如论文RuleTris。
  • 输出是:node, 也就是流表项f以及f需要满足的流表依赖。

The second stage searches for a sequence of TCAM entry movements

  • 设计一个贪心算法寻找最优解
  • 这个算法不断寻找移动最小步数的地址,最终找到可行的地址,每个候选地址关联一个metric,测量值越小表示性能越好,移动次数越少。

third stage is the TCAM

  • 应用更新序列到tcam

图2示例解释:

首先利用贪心算法为f找到候选地址集,选择metric小的值A,为f的插入地址。获得A地址原有的流表项fp = val(A), 将fp作为新的f, 继续贪心寻找候选地址集。 知道找到一个空地址,循环结束。
算法时间复杂度为O(Cavg).

显然获取最小测量值是最重要的,给出三种方法,根据不同需求获得最小测量值。
1)on-demand: 每次都从头计算候选集中所有的metric,时间复杂度O(Cavgn), 综合时间复杂度O(Cav^2n)
2)Pre-compute with array: 使用一个数组存储所有流表项metric,每次循环结束更新metric。每次选择最小metric时间复杂度O(n), 每次更新时间复杂度0(Cavg)综合时间复杂度O(Cavg*n.)每次遍历metric需要遍历地址也就是tcam, 所以时间复杂度O(n)
3) Pre-compute with BIT:使用一个改进的BIT(binary Indexed Tree)存储所有候选集的metric值,每次循环结束更新。每次选择最小metric时间复杂度为o(logn), 更新metric有O(Cavg(logn)^2).

定义:

firmware time :As we have mentioned above, the time for the second stage is called firmware time,
TCAM update time:the time for the third stage is called TCAM update time.

IV. GREEDY ALGORITHM

A.On-demand: finding candidate addresses

当需要插入一个流表项f, 具有依赖关系fa->f->fb,那么f的地址在范围add(fa)+1到add(fb)之间,

B. Address metric computation

M(A)表示为地址A的metric值。简单来说就是需要移动的流表项数目,从A地址开始移动流表项,一直到找到一个空地址。
定义:

M(A) is the number of nodes in a specific path P(A) in DAG that starts from val(A) and ends with val(Al). The out-degree of val(Al) must be 0.

举例说明一个DAG中某一分量代表的流依赖为f1->f2->f3->f4->f5, 而且val(A) = f2, 那么M(A)=3,F2依赖f3, f4, f5, 知道找到不依赖任何流表项的出度为0的节点。

作者提出了伪代码:

我的理解为:
对于地址A,原地址A的流表项为h = val(A), 寻找DAG中h依赖的所有节点中,物理地址最小的一个(最接近h的节点),他的物理地址赋值为新一轮的地址A,继续寻找,知道找到一个空地址。
原文伪代码:

疑问:循环过程不是寻找两个物理地址之间有没有空就可以了 。。。。否则一定要找到很多的节点替换。。。
理解:因为需要找A的测量值计算,如果A地址所在的流表项是一个依赖很多的流表项不符合要求,我们总算法中的确是有一个候选地址集的,所以这只是一个测量方法,大循环中寻找可用的地址集合,如果第一轮有空地址,直接结束循环,如果都没有空的,选择一个测量值小的地址,测量值小就意味着需要移动的流表项小,这就是我们这个算法计算的原理。

C. Greedy algorithm

update sequence: 上文提过,当插入一个f, 以及地址A都已经选定,需要确定一个移动流表项的顺序。这就是update sequence.
这是本节探讨的主要内容

如下:

  • 5-9表示为节点f找到合适地址A并且插入。
  • 10-12表示循环找到update sequence
  • 13表示如果有空位置,循环结束
  • 5-9 结束之后,fp = val(A)变成新一轮的节点f, 他的候选地址为A+1–succ(A)
  • 理解succ(A)为fp在G的依赖中最小的地址。

    论文简单证明了算法的正确性,只要存在空余空间DAG又是无环图,总能找到插入方案。

如图3是一个算法调用的例子。


ps: 假设总是高地址有空位,所有M的计算方式是依赖,不是被依赖。也就是查找最依赖的最小的物理地址(最近),下一步做递归调度。

D.Using an array data structure to store metrics

通过数组M[]保存每个地址预先计算的测量值。
算法过程如下:

更新每次U(F)调度之后的节点的metric值。

示例如图4

E. Using a modified Binary Indexed Tree to store metrics

BIT(Binary Indexed Tree)如果不了解,可以先了解学习:
https://blog.csdn.net/qq_16234613/article/details/78534769
https://blog.csdn.net/yezhen910328/article/details/52366948
使用数组M[]存储地址的metric, B[]存储BIT数组
更新:
原始BIT每个相关的B[]加变化值,本文类似,更改最小值。可以看图5a,b示例。


伪代码如下:


下一节介绍不同的tcam rule的FastRule, 实验评估。

FastRule: Efficient Flow Entry Updates for TCAM-based OpenFlow Switches(一)相关推荐

  1. FastRule: Efficient Flow Entry Updates for TCAM-based OpenFlow Switches(二)

    目录 V. FASTRULE IN DIFFERENT TCAM LAYOUTS A. Free spaces interleaved between non-free spaces B. Free ...

  2. A Zero Flow Entry Expiration Timeout P4 Switch

    文章名称:A Zero Flow Entry Expiration Timeout P4 Switch 零流表项期满超时P4交换机 发表时间:2018 期刊来源:SOSR ABSTRACT (摘要) ...

  3. 【论文阅读】Efficient Illuminant Estimation for Color Constancy Using Grey Pixels

    论文:Efficient Illuminant Estimation for Color Constancy Using Grey Pixels 作者:Kai-Fu Yang 年份:2015年 期刊:C ...

  4. A2dele: Adaptive and Attentive Depth Distiller for Efficient RGB-D Salient Object Detection

    A2dele: Adaptive and Attentive Depth Distiller for Efficient RGB-D Salient Object Detection 2020 IEEE ...

  5. EAST: An Efficient and Accurate Scene Text Detector 论文阅读

    EAST: An Efficient and Accurate Scene Text Detector 论文阅读 Reference 正文 摘要 引言 相关工作 方法 算法 网络设计 标签生成 损失函数 ...

  6. 网络结构(1)ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

    论文目录 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 引言 相关工作 高效模型设计 ...

  7. 论文翻译与总结:Relational modeling for robust and efficient pulmonary lobe segmentation in CT scans

    目录 前言 一.介绍 二.数据 三.方法 1.级联关系U-Net 2.关系U-Net 3.非局部模块 4.Online Hard Example Mining(OHEM算法) 5.学习目标 四.实验 ...

  8. 轻量化网络(一)MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    轻量化网络研究(一)MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 研究过深度学习的 ...

  9. Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net论文阅读

    目录 摘要 引言 相关工作 方法 框架和损失函数 方法特色 实验 不同的共享结构 CIFAR-10 rocket和AT的中间层注意图的可视化 结论 摘要 提出了用好网络帮助小网络训练的新的统一框架 这 ...

最新文章

  1. cephfs linux kernel client针对superblock操作流程的分析
  2. 糊涂虫 php,糊涂虫 hat folgende Bedeutung
  3. 【响应式Web前端设计】H5原生表单验证
  4. GitLab修改用户密码
  5. [TCP/IP] 三次握手过程中有哪些不安全性
  6. JavaScript那些事儿(1):对比JavaScript和jQuery的Dom操作
  7. 广度优先遍历类似于二叉树的_二叉树的各种遍历方法的简单解释
  8. ubuntu 命令记忆
  9. 一个好习惯可以让自己享受一辈子
  10. 内联函数、默认参数和函数占位参数
  11. 免费asp.net空间
  12. 技术总监面试有什么技巧
  13. mysql + excel 校正线上数据
  14. 前端实用的20个css技巧
  15. Opencv中 Mat矩阵中属性【随笔记】
  16. 阿里云服务器好用吗?
  17. 传奇服务器限时npc修改,小小方法添加传奇服务器技能兑换NPC
  18. 你要的能做出炫酷图表的网站来啦
  19. 使用java连接neo4j aura数据库
  20. 畅销图书排行榜TOP10(2009上半年)

热门文章

  1. ARM9嵌入式Linux开发-内存与IO操作
  2. 前端实现小型打包工具
  3. 在不停业务的情况下重启ES集群中的节点
  4. 运放的输入共模区间及解决VICMR问题
  5. 学生护眼台灯aa和a的区别?分享适合学生的护眼台灯
  6. linux tar压缩排除某个文件夹
  7. TQ2440 mifi驱动及开机自动连接wifi全过程
  8. 敏捷方法:什么是软件测试中的敏捷模式?
  9. 高手入门STM32总结+学习步骤
  10. android系统扫盲教程