近来一直实验被卡在如何有效的构建一个实时的可扩展的SDN 测量和监控上。 其实关于SDN的测量,这几年有大量的工作,比如Open sketch, UnivMon 等,这些工作后面有空我再分享。 这里谈一谈一个比较有意思的工作, RFlow+, 今年Infocom的一个工作。 它本质上是将测量与监控任务分成长期和短期。 长期任务有控制器周期性收集数据,来定制和完成相应的规则。短期任务则是在数据平面实时测量,并通过预先制定的一些规则来实现诸如热门流检测,恶意流隔离之类的工作。 本质上来说,这个工作的创意放到2017年这个SDN已经渐渐脱离炒概念的年份,有些平凡无奇,但是让我比较感兴趣的是作者在文章用于做实时流统计的计数器 RCC。

直接切入主题,RCC 究竟是什么?

RCC由两个hash 表构成,即图中所示的Counter A 和 Counter B 构成。 Counter A 本质上采用的是随机计数器,类似于CSE。 简单说起来,就是所有的流的统计,都放在这一块内存上,只不过通过哈希函数,映射到不同的bit 上。 这里做的一个改进是,对于一个流,它映射的s 位不会 散布在整个内存上,而是集中在一个 c-bit的小块上。这也就是所谓的受限(with confinement)。 具体结构,可以参考下图。

这里可以看出RCC能完成的其实是每流包统计。 这个统计是这么做的呢? 当每一个流来是时候,通过 H(f)把他映射成 (w,a_1,a_2….a_s). w 表示那个内存小块的索引,a_i表示小块上的位置。以 c=32bit 为例,这里, w 为 mA/32 个bit, a_i 均是5个bit。 寄存器一次读取 索引为w的小块,这时候(a_1,a_2…a_s)构成一个虚拟向量。这个流的每一个包,都会随机生成一个1-s 的数,然后把向量的对应这个数的位置为1. Z来统计,这个向量中0的个数。这样每次包近来,映射到相应的位置,如果这一位原来是0,Z就减1. 置1的操作则是总是进行的。
为什么这样可以统计? 这来自一篇更早一点的论文《A Linear Time Probabilistic Counting Algorithm for Database Applications》。 这里描述了一个利用hash表来进行统计的原理,这里不用特别大的空间,允许冲突,损失一定的精度,但能统计互不相同的项的个数。

这个例子可以看出,把包含1个重复项的12个元素映射到一个空间仅仅为8的哈希表,统计表中0的个数,即Vn=2.
这里给出统计值的预估公式:
e_n = -m ln(Vn)
代入可得 e_n = 11.1 非常接近正确值 11.
RCC 的counter A 就是基于这个原理,具体的正确性证明以及误差分析,可以参考前面给出的论文 《A Linear Time Probabilistic Counting Algorithm for Database Applications》,以及CSE的论文 《Fit a Compact Spread Estimator in Small High-Speed Memory》。这些数学证明还是比较有意思,这里得到的结论是这种统计,当0的个数在30%以上即装载率在70%一下,这个机制都工作的很好。具体过程这里暂且略过,以后有经历,也许我会整理一下。
回到RCC上来, counter A 利用这种方式进行统计,当某个小块装载率 达到70%,就会将其统计到Counter B中。 Counter B就是我们正常用的哈希表,对于冲突采用的二次探测 的方法。 统计值 est_i 是不断累加的。 对于 Counter A过载提交之后,就会清空,但这里注意,由于存在多流共享一些bit的存在,所以不是全变成0,而是随机翻转一些位, 如前面那个counterA示意图的(c)所示。具体翻转多少位,其实就是让这个向量达到全部内存的平均噪声水平,即 0占的比例和整个A 所在的内存块一致。公式是S *Z/MA - Zf。 后面我给出一个符号列表,以及具体的统计的编解码过程,这里要考虑共享内存带来的误差和噪音。但基本原理就是上面我所描述的这些。


总结性思考: 为什么要用RCC而不是简单的累加 呢 ? 这是因为,网路中存在大量的流,而每流的数据包大小分布各不相同,我们如何分配内存呢? 如果要是固定大小互补干扰的分配,我们只能按照最大的来,这样浪费大量的内存用来统计小流。 而不幸的是,网络实际中充斥着大量的小流,而大流的数据包数目又相当的多。再没有预先大小流识别的机制下,设计一个好的计数器都是一个很难的工作,简单的想法,下场就是内存空间大量浪费却又很容易过载,还要频繁进行内存访问。 从这个角度看,RCC牺牲一定的精准度,很好的面向实时流的包统计。
当然这只是一种包统计而不是流量统计,而且这种概率统计的机制,更适合做类别统计,而不是计数,我觉得,因为面对大流很容易过载,所以还是有很大的局限性。 但不可否认,这是一个有意思的工作,也是数据平面counter的一个很好的补充。

Recyclable Counter With Confinement (RCC)浅析相关推荐

  1. STM32 RCC浅析

    RCC的全称是reset and clock control, 以下将从reset和clock两个方面进行介绍 Reset 在stm32中·有三种类型的复位: system reset, power ...

  2. 流式处理框架storm浅析(下篇)

    本文来自网易云社区 作者:汪建伟 举个栗子 1 实现的目标 设计一个系统,来实现对一个文本里面的单词出现的频率进行统计. 2 设计Topology结构: 这是一个简单的例子,topology也非常简单 ...

  3. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码...

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  4. 【flink】Flink 1.12.2 源码浅析 : Task数据输入

    1.概述 转载:Flink 1.12.2 源码浅析 : Task数据输入 在 Task 中,InputGate 是对输入的封装,InputGate 是和 JobGraph 中 JobEdge 一一对应 ...

  5. 【flink】Flink 1.12.2 源码浅析 :Task数据输出

    1.概述 转载:Flink 1.12.2 源码浅析 :Task数据输出 Stream的计算模型采用的是PUSH模式, 上游主动向下游推送数据, 上下游之间采用生产者-消费者模式, 下游收到数据触发计算 ...

  6. 【flink】Flink 1.12.2 源码浅析 : Task 浅析

    1.概述 转载:Flink 1.12.2 源码浅析 : Task 浅析 Task 表示TaskManager上并行 subtask 的一次执行. Task封装了一个Flink operator(也可能 ...

  7. 【密码算法 之七】GCM 浅析

    文章目录 1. 概述 1.1 GHASH 1.3 GCTR 2. GCM 加密 3. GCM 解密 4. 总结   在我的另一篇博客[密码算法 之三]分组密码工作模式 (ECB \ CBC \ CFB ...

  8. LinuxTracing System浅析和eBPF开发经验分享

    ​更多内核安全.eBPF分析和实践文章,请关注博客和公众号: CSDN博客:内核功守道 公众号: 内核功守道 说明背景: 本文为主题分享<Linux Tracing System浅析 & ...

  9. Linux操作系统基础理论(3)-----浅析Linux 与Minix 下进程实现的异同

    Linux操作系统基础理论(3)-----浅析Linux 与Minix 下进程实现的异同 目录 摘要:... 1 1.     引言... 1 1.1  Minix简介... 1 1.2  Linux ...

最新文章

  1. App.config的典型应用
  2. Couchbase 介绍 - 更好的 Cache 系统
  3. 释疑の手工凭证界面不显示页数
  4. 从0搭建在线聊天室,只需4步!
  5. php代码以什么开始以什么结束,【后端开发】php语句以什么符号结束
  6. @Conditional进行条件判断等
  7. 让人想骂街的 Python 炫技操作:条件语句的七种写法
  8. python使用pillow下载网络图片到本地预览
  9. Spring 的狭义与广义
  10. 邮件服务器IMail教程(2)
  11. 对于新安装的MySQL如何提升MySQL的安全级别
  12. “订阅”与“反向订阅”--简书功能设计探索
  13. 构建大数据网络 你不得不重视的六个问题
  14. 阿里灵杰问天引擎电商搜索 -- 数据说明
  15. 方法重写和方法重载的区别
  16. 安卓超级压缩管理器(ZArchiver) 汉化版 v0.5
  17. 射频工程师——中兴笔试题
  18. 从美国创业者的成功看行业趋势
  19. python新手教程全套_Python入门教程完整版(懂中文就能学会)
  20. java-net-php-python-16jspm望奎县城郊所考勤系统计算机毕业设计程序

热门文章

  1. TI DSP TMS320C66x学习笔记之通用并行端口uPP(二)
  2. 【智能算法学习】学校优化算法SBO
  3. if之单分支与多分枝
  4. must end with the ';' delimiter.错误的解决
  5. 涛思数据与中天钢铁签署战略合作协议,加速钢铁行业的数字化发展
  6. 百度API获取地理坐标
  7. 计算机设备管理器老是闪烁,电脑显示器经常闪烁怎么回事
  8. 经常被登录的验证码卡住? 解决方案来了!
  9. 软考A计划-电子商务设计师-电商设计师重点
  10. 软件设计7种架构模式