?

一種基于大規模工業熱數據的數據采集和存儲系統設計

2023-12-26 04:46陸超杰楊鑫王啟蒙朱逸廷陶松
智能制造 2023年6期
關鍵詞:內核線程隊列

陸超杰,楊鑫,王啟蒙,朱逸廷,陶松

(1.國核自儀系統工程有限公司,上海 200240;2.烽臺科技(北京)有限公司,北京 100195)

1 引言

隨著互聯網技術在工業控制領域的廣泛應用,工業控制網絡智能化和自動化的水平越來越高,系統也從隔離封閉的環境逐步轉為半開放的系統,甚至與互聯網直接進行連接[1-2]。工業控制網絡的發展造成生產力提高的同時,也帶來了安全方面的挑戰。

通過對工業控制網絡熱數據的分析,可以實現對生產環境的監控,實現對諸如高溫、高壓等異常狀況的預警。同時大多數安全軟件依靠對數據幀進行捕獲與分析來實現安全防護的功能,但工業控制網絡日益增長的帶寬對數據流量的捕獲造成了極大的限制[3]。為了應對這些問題,需要一種在高速網絡環境下能夠實現低延遲、低丟失率的方法,對數據包進行捕獲轉儲。通過對轉儲數據的分析處理,實現對工業控制網絡的安全監控。

在傳統的網絡數據轉儲中常用 Wireshark、TCPDUMP 等軟件進行數據包捕獲,這類軟件依賴操作系統提供的接口獲取數據幀,當數據量過大時不能完整對數據流進行捕獲,從而出現丟包等現象[4-6]。并且在工業控制網絡中數據包長度在 64~ 100 bit 區域附近數據包較多,而操作系統的網絡協議棧是通過中斷來獲取數據包到達的消息,長度較短的數據包在相同的帶寬下造成的中斷次數更多,給操作系統造成了極大的中斷開銷[7]。

而 DPDK 則通過用戶空間驅動的方式繞過內核網絡協議棧,將所有必要的驅動程序移至用戶空間,從而避免系統調用并實現應用程序的零拷貝訪問。在用戶空間通過輪詢的方式判斷數據幀的到達,直接從網絡設備獲取數據并進行處理,極大地提高了數據包獲取的性能。

針對萬兆級工業熱數據采集存儲問題,本文提出了一種基于數據平面開發框架 DPDK 的網絡數據幀采集存儲方案,在構建的工控網絡靶場中得以驗證,在保證快速采集工業熱數據的同時,保證數據的完整性。

2 背景技術

2.1 數據平面開發框架

數據平面開發框架 DPDK 是一個由 Linux 開源基金會管理的開源軟件項目。它提供一組用于數據平面處理的函數庫和基于輪詢模式的用戶空間網卡驅動程序,將數據包的處理從內核空間轉移到了用戶空間。與內核空間提供的基于中斷的驅動程序相比,實現了更高的計算效率與更高的數據吞吐量。

DPDK 框架通過環境抽象層,隱藏了具體的實現細節,并且為不同的硬件平臺和操作系統提供了統一的編程接口,實現了源代碼級別的可移植性。DPDK 還提供多線程與多進程模型、CPU 親和性、內存緩沖池、原子與鎖定操作及無鎖循環隊列等功能。

2.2 Libpcap

Libpcap 是一個可移植的用于網絡流量捕獲和分析的函數庫,包括數據包嗅探、網絡監視、流量生成等功能。Libpcap 為不同操作系統提供一套與操作系統無關的接口,來實現應用程序對多個操作系統數據包捕獲的需求。

2.3 RESTful API

REST 是一種基于超媒體構建分布式系統的架構風格。在通常情況下,RESTful API 會使用 HTTP 作為應用程序協議。RESTful API 圍繞任何類型的對象、數據或服務等資源進行設計,每一個資源可以被 URL 唯一標識。RESTful API 使用統一的接口,有助于實現客戶端與服務器分離。

2.4 gRPC

gRPC 是一個開源的高性能遠程過程調用框架,可以在多種不同的編程語言環境和硬件平臺下進行工作。它可以通過負載均衡、跟蹤和身份驗證動態的與數據中心進行連接。典型的 gRPC 客戶端將會公開實現特定功能的本地函數,以供遠程計算機上的另一個進程調用。并且將遠程調用偽裝成本地調用。

3 系統設計

3.1 方案整體架構

本方案采用模塊化設計思想,按照所負責的功能分為控制層與數據層兩大模塊,模塊之間通過遠程過程調用進行通信??刂茖臃譃閮蓚€子模塊,分別是調度模塊與信息采集模塊。數據層分為收發模塊、采集模塊與匯聚模塊??刂茖痈鶕蝿招枨?,對位于本地或遠程的數據層下達指令完成相應任務,并采集數據層上報的相關信息;數層根據控制層下發的任務完成采集匯聚,并將過程信息與執行結果上報給控制層。整個系統的架構如圖1 所示。

圖1 基于軟件定義網絡的數據采集存儲系統結構

3.2 調度模塊設計

調度模塊負責本系統與外部應用的協同工作,具體過程如圖2 所示。調度模塊根據外部應用發布的任務信息生成任務,并放入按照一定優先級排序的任務隊列,等待任務執行。當數據層空閑的時候,調度模塊向控制層下發指令并推送任務信息,使控制層開始工作。同時調度模塊根據外部應用的請求返回任務的執行情況或任務的執行結果信息。

圖2 采集調度模塊流程示意圖

在開發跨編程語言或跨硬件平臺軟件時,通常會因為進程之間的通信問題而不能簡單高效地集成,而單一程序又不能有效地實現系統需求。所以為了更好地與外部應用集成以進行協同工作,需要合適的通信協議來完成進程之間的通信。

在與外部應用集成的情況下,要求協議層次清晰、語義簡潔,而對性能要求不高。所以調度模塊采用 HTTP RESTful API 風格的接口進行與外部應用的通信,以保證與其他應用簡單集成。

而在與同一應用不同模塊之間的通信,則要求高性能與快速響應。所以調度模塊采用gRPC 框架進行不同模塊之間的通信。

3.3 信息采集模塊設計

在系統數據層運行時,會產生系統運行時數據,包括運行狀況、轉儲數目、轉儲文件大小等,通過這些數據可以對系統健康狀況、任務完成進度等進行判斷。

信息采集模塊會在控制層執行任務時,采集控制層上報的運行數據,并緩存在特定的存儲空間中,供外部應用調取。并且在任務結束時采集任務完成信息。具體操作流程如圖3 所示。

圖3 信息采集模塊流程示意圖

同時,在萬兆級別的網絡環境下,每秒產生的數據量通常有1G 以上,遠超普通機械硬盤的寫入速度,而固態硬盤價格昂貴,不適合作為大量數據的存儲介質。為了實現轉儲文件在高網絡負載的情況下,能夠快速存儲,本方案采用 Linux 內存文件系統 tmpfs 來作為系統臨時文件的緩存方式。tmpfs 是Linux 中的一種文件系統,他將所有的文件都存儲在內存或交換分區中。將文件放入tmpfs 是加快文件訪問速度的有效方法。

在本方案中,使用 Libpcap 將從無鎖循環隊列中取出的數據幀存儲為 pcapng 格式的臨時文件。pcapng 是下一代網絡數據包跟蹤轉儲格式,具有良好的可擴展性、可移植性,并且可以進行數據的合并與追加。pcapng 格式嵌入了豐富的文件信息,供其他程序使用,并且數據格式獨立于網絡設備、硬件平臺與操作系統,可以簡單地將數據幀轉儲文件推送到服務器等其他設備進行分析。pcapng 格式解決了pcap 格式的一些不足,支持諸如多網絡接口捕獲、更高精度與長度的64 位時間戳、在文件中存儲額外元數據等,是工業互聯網熱數據轉儲的良好選擇。

采集模塊會在的采集線程在采集工作開始時,會在內存文件系統中創建一個臨時的 pcapng 文件。之后采集模塊會從無鎖循環隊列中取出數據幀,并通過 Libpcap 寫入臨時pcapng 文件。當文件臨時到達一定大小,采集線程會創建新的臨時文件并將之前的文件路徑通過無鎖循環隊列發送到匯聚模塊。

在采集模塊中,不同工作線程同時進行工作,相同時間段產生的數據幀可能分散在不同的臨時文件中,直接使用臨時文件進行分析等工作將會產生不確定的結果。

3.4 收發模塊設計

在傳統的數據包轉儲方案中,Linux 系統的網絡流量通過內核協議棧進行處理,并且通過內核中的網絡過濾器 Netfilter 進行過濾。當網絡數據幀到達網絡設備時,網絡設備會以中斷的形式通知內核協議棧對數據幀進行處理,在數據量大時會產生大量的中斷,導致CPU 無法處理其他進程。而內核對數據幀進行處理后還需將數據負載拷貝到用戶空間,并通知用戶空間應用程序。在這個過程中存在兩次上下文切換、內核協議棧數據處理和內核空間到用戶空間數據拷貝造成的開銷。本方案中采用的是DPDK 收發框架構建系統收發能力,與傳統的網絡數據幀轉儲方案不同,通過用戶空間驅動的方式繞過內核網絡協議棧,將所有必要的驅動程序移至用戶空間,從而避免系統調用并實現應用程序的零拷貝訪問。在用戶空間通過輪詢的方式判斷數據幀的到達,直接從網絡設備獲取數據并進行處理,極大地提高了數據包獲取的性能,具體流程示意圖如圖4 所示。

圖4 收發模塊DPDK 收發框架示意圖

DPDK 框架使用內存池技術,避免了在高并發場景下內存申請造成的開銷與延遲。DPDK 將數據幀緩存在一種名為Mbuf 結構體中,當收包模塊輪詢過程中檢測到網絡設備的接收隊列不為空時,將會根據隊列中數據幀的數量在內存池中申請若干個Mbuf 內存塊,并將隊列中的數據幀通過直接存儲器訪問寫入到Mbuf 中;DPDK 發送數據包時,等待網卡將數據發送完畢后將Mbuf 內存塊重新放回內存池中。整個過程沒有不確定大小的內存塊的申請與釋放,極大地提高了數據幀的處理效率。

DPDK 框架支持CPU 親和與CPU 獨占功能特性,它可以將每個工作線程綁定到不同的CPU 核心上面,使該線程只能在特定的核心上運行,線程不會在不同核心之間頻繁遷移,減少調度產生的開銷,避免了緩存失效造成的命中問題或其他消耗。

DPDK 提供流分類技術,DPDK 流分類器通過無鎖循環隊列,將數據幀均勻分配給收發模塊的各個工作線程,工作線程從隊列中取出數據幀進行克隆操作后推入發送隊列進行發送,然后將克隆的數據幀推入采集隊列交由采集模塊進行采集。

在本方案中,收發模塊根據調度模塊發送的指令信息,創建流規則并使能 DPDK 流分類器用來捕捉符合特定規則的數據幀。對于不能匹配流規則的數據幀直接進行轉發,以節省存儲空間。對于匹配流規則的數據幀,則增加對存放該數據幀的 Mbuf 內存塊的引用以進行淺拷貝,然后將淺拷貝數據幀包推入存儲隊列,之后將原數據幀推入網卡發送隊列。

4 結論

本方案提出了一種工業控制網絡熱數據采集存儲方案,采用數據平面開發框架作為開發框架,并結合Libpcap、gRPC 等函數庫,能夠在高負載工業控制網絡場景下,實現對萬兆級別的工業控制網絡熱數據采集與存儲,并保證轉儲數據的可靠性與實時性。并且本方案可以結合鏈路聚合技術使用,對數據層進行動態擴容,實現更高帶寬網絡數據的采集與轉儲。系統可以穩定高效地完成相應工作,并實現相應系統要求。

猜你喜歡
內核線程隊列
強化『高新』內核 打造農業『硅谷』
隊列里的小秘密
基于多隊列切換的SDN擁塞控制*
基于嵌入式Linux內核的自恢復設計
Linux內核mmap保護機制研究
在隊列里
豐田加速駛入自動駕駛隊列
淺談linux多線程協作
微生物內核 生態型農資
基于上下文定界的Fork/Join并行性的并發程序可達性分析*
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合