聶玉鑫
(第七一五研究所,杭州,310012)
一種千兆以太網(wǎng)數(shù)據(jù)記錄設(shè)備的實(shí)現(xiàn)
聶玉鑫
(第七一五研究所,杭州,310012)
介紹了一種基于linux操作系統(tǒng)的以太網(wǎng)高速數(shù)據(jù)記錄儀。該記錄儀實(shí)現(xiàn)了400 Mbps實(shí)時(shí)數(shù)據(jù)的記錄和回放,并具備完全網(wǎng)絡(luò)控制功能,可不需要單獨(dú)的顯示控制終端,作為一個(gè)模塊集成到系統(tǒng)中。
千兆以太網(wǎng);數(shù)據(jù)存儲(chǔ);網(wǎng)絡(luò)控制
隨著數(shù)據(jù)采集的多元化,數(shù)據(jù)采集和傳輸系統(tǒng)的實(shí)時(shí)數(shù)據(jù)量越來越大,需要將海量的實(shí)時(shí)數(shù)據(jù)記錄下來,用作后續(xù)的分析和處理。本文介紹了一種基于PC平臺(tái)的網(wǎng)絡(luò)數(shù)據(jù)實(shí)時(shí)記錄系統(tǒng),該網(wǎng)絡(luò)數(shù)據(jù)記錄儀是一個(gè)“黑盒子”,可以“單板+硬盤”形式存在于系統(tǒng)中,它不需要鍵盤及顯示器等控制和顯示終端,由控制臺(tái)通過網(wǎng)絡(luò)協(xié)議進(jìn)行控制。記錄儀只對(duì)外提供一個(gè)千兆以太網(wǎng)接口。通過該接口完成數(shù)據(jù)、命令以及系統(tǒng)狀態(tài)信息的傳輸。經(jīng)過測(cè)試,當(dāng)網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)率400 Mbps時(shí),記錄1T數(shù)據(jù)不丟包。
該記錄儀硬件平臺(tái)為一臺(tái)PC機(jī)。CPU采用4 核Intel Xeon e5410,數(shù)據(jù)記錄軟件將按照不同功能模塊對(duì)CPU資源的使用率,合理的將不同的模塊分配到不同的CPU核上運(yùn)行,提高了系統(tǒng)的穩(wěn)定性。數(shù)據(jù)記錄系統(tǒng)內(nèi)存資源4 G,其中分配了500 M的專用內(nèi)存空間用作數(shù)據(jù)環(huán)形緩沖區(qū),從而避免在高速數(shù)據(jù)流不斷到來的同時(shí),寫硬盤過程中的突發(fā)事件延遲引起的數(shù)據(jù)丟失。數(shù)據(jù)記錄儀包括一個(gè)64 G的操作系統(tǒng)盤和1T的數(shù)據(jù)記錄盤。為提高系統(tǒng)數(shù)據(jù)記錄效率,減少文件塊碎片對(duì)系統(tǒng)數(shù)據(jù)記錄的影響。記錄儀將操作系統(tǒng)盤與數(shù)據(jù)記錄盤分開。64 G的操作系統(tǒng)盤掛載在SATA0鏈路上,該硬盤上安裝了RHEL5操作系統(tǒng)[1]、數(shù)據(jù)共享軟件服務(wù)器端、系統(tǒng)初始化腳本以及數(shù)據(jù)記錄軟件。數(shù)據(jù)記錄盤掛載在SATA1鏈路上。在系統(tǒng)開機(jī)時(shí),系統(tǒng)初始化腳本將該數(shù)據(jù)記錄盤自動(dòng)掛載到指定文件系統(tǒng)目錄下,記錄軟件繞過文件系統(tǒng)[2],通過相應(yīng)模塊對(duì)該數(shù)據(jù)盤進(jìn)行管理。當(dāng)數(shù)據(jù)盤可用空間不足時(shí),可更換新的數(shù)據(jù)記錄盤。同時(shí)數(shù)據(jù)共享軟件將所有數(shù)據(jù)通過SAMBA協(xié)議共享,任意一臺(tái)連接到網(wǎng)絡(luò)中的PC機(jī)都可訪問數(shù)據(jù)。系統(tǒng)硬件架構(gòu)見圖1,系統(tǒng)運(yùn)行示意圖見圖2。
圖1 系統(tǒng)架構(gòu)
圖2 系統(tǒng)運(yùn)行示意圖
2.1 軟件環(huán)境
數(shù)據(jù)記錄軟件實(shí)現(xiàn)了數(shù)據(jù)記錄儀的主要功能。在系統(tǒng)上電時(shí),默認(rèn)從操作系統(tǒng)盤sda1引導(dǎo)并加載RHEL5操作系統(tǒng)。操作系統(tǒng)啟動(dòng)完成后,自動(dòng)運(yùn)行初始化腳本,設(shè)置軟件運(yùn)行環(huán)境,修改一些重要的系統(tǒng)參數(shù),并掛載數(shù)據(jù)盤sdb1到指定文件系統(tǒng)目錄下。在完成以上一系列的初始化操作后,系統(tǒng)將自動(dòng)運(yùn)行數(shù)據(jù)記錄軟件,開始監(jiān)聽控制指令端口。
2.2 軟件架構(gòu)
數(shù)據(jù)記錄軟件主要包括以下幾個(gè)模塊:數(shù)據(jù)記錄模塊;數(shù)據(jù)回放模塊;系統(tǒng)狀態(tài)記錄及心跳模塊;網(wǎng)絡(luò)控制模塊;丟包測(cè)試模塊;數(shù)據(jù)整理模塊,軟件架構(gòu)圖如圖3所示。
圖3 數(shù)據(jù)記錄軟件架構(gòu)
加載數(shù)據(jù)記錄軟件后,主程序會(huì)自動(dòng)創(chuàng)建兩個(gè)模塊:網(wǎng)絡(luò)控制模塊和系統(tǒng)狀態(tài)記錄及心跳模塊。這兩個(gè)模塊在記錄系統(tǒng)運(yùn)行過程中和主程序一起(橢圓)處于阻塞監(jiān)聽狀態(tài)。在主程序收到網(wǎng)絡(luò)命令控制模塊的指令后,向其它四個(gè)模塊(矩形)發(fā)出控制命令。主程序針對(duì)每個(gè)模塊定義了一個(gè)全局狀態(tài)變量。通過讀取這些狀態(tài)變量,來獲取各個(gè)模塊狀態(tài)信息。然后再通過flag互斥變量對(duì)四個(gè)模塊進(jìn)行控制,即同一時(shí)刻這四個(gè)模塊只能有一個(gè)處于運(yùn)行狀態(tài)。
2.2.1 數(shù)據(jù)記錄模塊
數(shù)據(jù)記錄模塊數(shù)據(jù)流如圖4。由于實(shí)時(shí)數(shù)據(jù)率非常大。當(dāng)網(wǎng)口速率為400 Mbps時(shí),每秒將接收并存儲(chǔ)50 M數(shù)據(jù)。程序設(shè)置了一個(gè)專用的三維環(huán)形緩沖區(qū),用于緩沖網(wǎng)絡(luò)接口與硬盤接口之間的高速數(shù)據(jù)流[3]。環(huán)形接收緩沖區(qū)共20480維,由0至20479編號(hào),至20479后反轉(zhuǎn)。
圖4 數(shù)據(jù)緩沖區(qū)
數(shù)據(jù)記錄主程序?qū)CP/IP協(xié)議棧內(nèi)的套接字緩沖區(qū)(SOCKET BUFFER)[4]設(shè)置為(225?1)字節(jié)。數(shù)據(jù)接收線程從SOCKET BUFFER接收到20個(gè)數(shù)據(jù)包后,寫入到環(huán)形緩沖區(qū)中。當(dāng)前緩沖區(qū)寫滿后,設(shè)置READY,并將當(dāng)前緩沖區(qū)編號(hào)通過消息隊(duì)列發(fā)送給數(shù)據(jù)存儲(chǔ)子線程。數(shù)據(jù)存儲(chǔ)子線程依次從消息隊(duì)列中獲取READY緩沖區(qū)的編號(hào),存儲(chǔ)數(shù)據(jù),然后置EMPTY。讀寫環(huán)形緩沖區(qū)操作由WP 和RP兩個(gè)指針控制。
2.2.2 網(wǎng)絡(luò)控制模塊
系統(tǒng)網(wǎng)絡(luò)控制模塊始終處于運(yùn)行狀態(tài),它負(fù)責(zé)控制和管理整個(gè)系統(tǒng)的其它模塊的運(yùn)行狀態(tài)。同時(shí)它也是與控制終端(如信號(hào)處理機(jī))進(jìn)行命令和系統(tǒng)狀態(tài)交互的一個(gè)模塊。網(wǎng)絡(luò)控制模塊通過監(jiān)聽網(wǎng)絡(luò)控制端口,接收控制終端發(fā)送的控制命令,對(duì)命令進(jìn)行解析,然后通過Linux信號(hào)量與其它模塊通信,完成對(duì)其它模塊的控制功能。
2.2.3 系統(tǒng)狀態(tài)記錄及心跳模塊
數(shù)據(jù)記錄模塊由“顯示文件列表”、 “選擇文件回放”、“結(jié)束回放”三條命令控制,通過解析網(wǎng)絡(luò)控制模塊接收到的控制命令發(fā)出。數(shù)據(jù)回放模塊收到“顯示文件列表”命令后,打印數(shù)據(jù)存儲(chǔ)目錄下所有的數(shù)據(jù)文件信息,并對(duì)每一個(gè)文件進(jìn)行編號(hào)??刂婆_(tái)根據(jù)終端顯示,通過選擇文件編號(hào),選擇相應(yīng)的文件進(jìn)行回放?;胤潘俣韧ㄟ^一個(gè)循環(huán)作延時(shí)來控制?;胤啪€程確定回放數(shù)據(jù)后,依次從硬盤讀取數(shù)據(jù),按照數(shù)據(jù)記錄時(shí)的真實(shí)順序進(jìn)行回放?;胤胚^程中,主程序和網(wǎng)絡(luò)控制模塊同時(shí)監(jiān)聽控制命令。當(dāng)收到“停止回放”命令后,強(qiáng)制結(jié)束回放線程,釋放資源,回到主程序。如果回放過程沒有收到任何命令,在回放完成后結(jié)束回放線程,回到主程序。
該數(shù)據(jù)記錄系統(tǒng)實(shí)現(xiàn)了高速以太網(wǎng)實(shí)時(shí)數(shù)據(jù)的記錄功能。經(jīng)過如圖2測(cè)試,采用兩臺(tái)PC機(jī)器模擬實(shí)時(shí)數(shù)據(jù)源,不間斷發(fā)送UDP數(shù)據(jù)包,在控制臺(tái)上運(yùn)行控制軟件,控制記錄儀完成數(shù)據(jù)記錄和回放等功能測(cè)試。在總速率400 Mbps(數(shù)據(jù)源1和數(shù)據(jù)源2)情況下記錄5 h,總數(shù)據(jù)量約1TB情況下,沒有出現(xiàn)丟包。同時(shí)能夠順利完成網(wǎng)絡(luò)控制、數(shù)據(jù)回放、系統(tǒng)狀態(tài)記錄及心跳發(fā)送等功能。
對(duì)于整個(gè)系統(tǒng)而言,數(shù)據(jù)記錄儀是一臺(tái)透明存在的設(shè)備;只需在控制臺(tái)上運(yùn)行一個(gè)程序,該程序按照網(wǎng)絡(luò)控制協(xié)議向記錄儀發(fā)送控制命令,就能夠完成對(duì)記錄儀的所有控制功能。而記錄儀就如同一個(gè)黑盒子,只需要通過千兆網(wǎng)口連接到網(wǎng)絡(luò)中。目前,該記錄儀數(shù)據(jù)率的瓶頸主要在硬盤的訪問速度上。將來采用RAID0或RAID10磁盤陣列系統(tǒng)提高數(shù)據(jù)存儲(chǔ)速度[5],從而實(shí)現(xiàn)更高速的網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)記錄。
[1] DANIEL P BOVET, MARCO CESATI. Understanding the linux kernel, O’Reilly Media, 2005.
[2] 毛德操, 胡希明. Linux內(nèi)核源代碼情景分析[M]. 杭州:浙江大學(xué)出版社, 2001.
[3] 張冬.大話存儲(chǔ)2-存儲(chǔ)系統(tǒng)架構(gòu)與底層原理極限剖析[M]. 北京: 清華大學(xué)出版社, 2011.
[4] STEVENS W RICHARD. TCP/IP詳解-卷1:協(xié)議[M].范建華,譯. 北京: 機(jī)械工業(yè)出版社, 2000.
[5] 張冬. 大話存儲(chǔ)-網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)原理精解與最佳實(shí)踐[M].北京: 清華大學(xué)出版社, 2008.