OVS源码--sflow(五)

采样流sFlow(Sampled Flow)是一种基于报文采样的网络流量监控技术,主要用于
对网络流量进行统计分析。sFlow 系统包含一个嵌入在设备中的sFlow Agent 和远端的
sFlow Collector。其中,sFlow Agent 通过sFlow 采样获取本设备上的接口统计信息和数
据信息,将信息封装成sFlow 报文,当sFlow 报文缓冲区满或是在sFlow 报文缓存时间超
时后,sFlow Agent 会将sFlow 报文发送到指定的sFlow Collector。sFlow Collector 对
sFlow 报文进行分析,并显示分析结果,组网图如下:
在这里插入图片描述

一、sflow 初始化

SFlow 的配置入口函数是bridge_configure_sflow(),该函数创建SFlow 相关的数据区
并初始化相应配置,形成的主要数据结构如下:
在这里插入图片描述

二、sflow 流表生成

sflow 的实现是在用户态生成sflow 的流表并配置到内核datapath,内核完成数据采
样,发送到用户态,然后有上层sflow agent 发送到collector。sflow 在用户态生成
sflow 的流表。流表生成的代码调用流程add_sflow_action()->compose_sflow_cookie
()->compose_sample_action(),生成OVS_ACTION_ATTR_SAMPLE 类型的action,主要代码如下:
在这里插入图片描述

三、sflow内核处理

sflow在内核执行action的时候处理,入口函数do_execute_actions()->sample(),代码如下,如果是最后一个action,调用output_userspace()发送数据到用户空间;否则把该action加入到队列中等待执行,代码如下:
在这里插入图片描述
在这里插入图片描述

四、sflow 消息处理

内核datapath 采样的数据通过netlink 发送到用户空间的vswithd 进程,接收函数为
recv_upcalls(),调用process_upcall()函数进入核心处理流程,其中对SFLOW_UPCALL 分
支的处理就是sflow 的入口,处理函数dpif_sflow_received(),核心流程如下:
在这里插入图片描述

原文链接:https://www.sdnlab.com/my_sdnlab/wp-content/uploads/2017/02/cntctfrm_1a5b490b5708a374ad0d207df48ec29e_Openvswitch%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章