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

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