專利名稱:大型遙測地震儀高性能數(shù)據(jù)傳輸方法
技術(shù)領(lǐng)域:
本發(fā)明涉及地震儀數(shù)據(jù)傳輸方法,特別是涉及一種大型遙測地震儀高性能數(shù)據(jù)傳輸方法。
背景技術(shù):
I、大型遙測地震儀具有海量回傳地震數(shù)據(jù)的特點(diǎn)。隨著以太網(wǎng)(Ethernet)技術(shù)的日趨成熟與發(fā)展,在地震勘探領(lǐng)域,數(shù)據(jù)采集設(shè)備由開始幾十道、幾百道的小型地震儀發(fā)展到現(xiàn)在具備上萬道甚至十萬道帶道能力的高精度大型遙測地震專用網(wǎng)絡(luò),其中,采集服務(wù)器承擔(dān)了接收整個(gè)地震遙測網(wǎng)絡(luò)采樣數(shù)據(jù)的任務(wù),在使用十萬道儀器持續(xù)8秒的數(shù)據(jù)采集生產(chǎn)過程中,會(huì)回傳3-4G左右的采樣數(shù)據(jù),并且基于施工效率和成本的考慮,需要在基本實(shí)時(shí)情況下將數(shù)據(jù)無損傳輸?shù)讲杉?wù)器并保存,因此,網(wǎng)卡只有在接收速率基本達(dá)到線速(千兆網(wǎng)卡1000Mb/S),并充分利用數(shù)據(jù)接收系統(tǒng)網(wǎng)絡(luò)帶寬和實(shí)現(xiàn)高速存儲(chǔ)才能滿足這一需求。在常規(guī)網(wǎng)絡(luò)數(shù)據(jù)傳輸中,普遍采用的是TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)協(xié)議。TCP協(xié)議是面向連接的、可靠的數(shù)據(jù)流傳輸協(xié)議,對(duì)應(yīng)OSI模型第四層(傳輸層),廣泛應(yīng)用于互聯(lián)網(wǎng)(Internet)和局域網(wǎng)(Ethernet)的數(shù)據(jù)傳輸控制。在數(shù)據(jù)傳輸過程中,數(shù)據(jù)幀的TCP協(xié)議頭段加入了能夠保證數(shù)據(jù)完整性的多項(xiàng)校驗(yàn)字段與數(shù)據(jù)幀索引字段,并且融入了大量數(shù)據(jù)傳輸應(yīng)答機(jī)制,以保證數(shù)據(jù)傳輸安全性,這在互聯(lián)網(wǎng)遠(yuǎn)程數(shù)據(jù)傳輸過程中有其不可替代的優(yōu)勢,但是面向連接和可靠數(shù)據(jù)傳輸?shù)奶攸c(diǎn)是以犧牲大量帶寬為代價(jià)的,這在相當(dāng)程度上降低了用戶數(shù)據(jù)的傳輸效率;IP協(xié)議,對(duì)應(yīng)OSI模型第三層(網(wǎng)絡(luò)層),其主要應(yīng)用于互聯(lián)網(wǎng)數(shù)據(jù)包路由服務(wù),同時(shí)是一種無連接、不可靠傳輸協(xié)議,對(duì)于分層架構(gòu)的遙測地震儀專用網(wǎng)絡(luò)并沒有太多實(shí)際應(yīng)用價(jià)值,因此可以看出,TCP/IP協(xié)議是無法達(dá)到充分利用網(wǎng)絡(luò)帶寬實(shí)現(xiàn)高性能存儲(chǔ)要求的。2、現(xiàn)代計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)普遍采用分層的架構(gòu)體系,目前比較流行的計(jì)算機(jī)架構(gòu)中的網(wǎng)絡(luò)體系是由網(wǎng)絡(luò)硬件設(shè)備層、驅(qū)動(dòng)層、與設(shè)備無關(guān)的網(wǎng)絡(luò)接口抽象層、內(nèi)核協(xié)議層、與協(xié)議無關(guān)的用戶接口層構(gòu)成,因此,在數(shù)據(jù)幀到達(dá)網(wǎng)絡(luò)接口設(shè)備并向上傳遞的過程中,避免不了要做各種各樣的數(shù)據(jù)驗(yàn)證、各個(gè)協(xié)議層對(duì)數(shù)據(jù)幀的拆包與路由處理,所以此過程必然會(huì)導(dǎo)致在數(shù)據(jù)接收過程中效率的下降,無法達(dá)到所需要的高效傳輸速率。3、以太網(wǎng)高速數(shù)據(jù)采集的過程,其實(shí)質(zhì)是對(duì)網(wǎng)絡(luò)數(shù)據(jù)幀的捕獲和快速處理,對(duì)于此問題的解決方案,比較典型的是國外提出的零拷貝(zero copy),此項(xiàng)技術(shù)首先改造網(wǎng)絡(luò)接口設(shè)備的底層驅(qū)動(dòng)程序,使其能夠?qū)⒕W(wǎng)絡(luò)接口設(shè)備接收到的數(shù)據(jù)直接存放(DMA)映射到應(yīng)用層的內(nèi)存空間,再由應(yīng)用層程序不斷輪詢讀取此緩存空間的內(nèi)容,此一過程減少了網(wǎng)卡到內(nèi)核和內(nèi)核到用戶空間的數(shù)據(jù)拷貝,毋庸質(zhì)疑,此方法確實(shí)提高了網(wǎng)絡(luò)上捕包的效 率,并降低了 CPU資源的占用,但此方法也是建立在現(xiàn)代分層的操作系統(tǒng)架構(gòu)體系之上,而現(xiàn)代計(jì)算機(jī)硬件設(shè)備的模塊化、多樣化設(shè)計(jì)使得操作系統(tǒng)在設(shè)計(jì)之初就已經(jīng)充分考慮了對(duì)底層硬件設(shè)備的接口抽象,也即是說無論使用那個(gè)廠家的硬件設(shè)備,只要其硬件接口和驅(qū)動(dòng)程序符合標(biāo)準(zhǔn),操作系統(tǒng)內(nèi)核會(huì)以通用的接口方法去操作此類硬件設(shè)備,因此操作系統(tǒng)具有統(tǒng)一的與設(shè)備無關(guān)的 抽象接口,然而此項(xiàng)技術(shù)改造的基礎(chǔ)是以更改硬件設(shè)備的驅(qū)動(dòng)程序?yàn)榍疤?,也就是跳過操作系統(tǒng)抽象接口直接操作底層硬件設(shè)備,而網(wǎng)絡(luò)接口卡從高端到低端,從型號(hào)到廠家每一款都有自己的驅(qū)動(dòng)程序,在應(yīng)用過程中,對(duì)每一款網(wǎng)卡都要實(shí)現(xiàn)一次驅(qū)動(dòng)程序的改造,顯然是不現(xiàn)實(shí)的,同時(shí),在用戶層輪詢數(shù)據(jù)時(shí)同樣會(huì)占用CPU相當(dāng)?shù)馁Y源。4、目前,部分網(wǎng)絡(luò)接口設(shè)備已經(jīng)具備了 NAPI技術(shù),(即Network ApplicationProgramming Interface),它的核心概念是不采用中斷的方式讀取數(shù)據(jù),而是首先采用網(wǎng)絡(luò)接口設(shè)備中斷喚醒數(shù)據(jù)接收服務(wù)程序,然后關(guān)閉網(wǎng)絡(luò)接口設(shè)備中斷,采用輪詢方法來獲取數(shù)據(jù)。在小包大數(shù)據(jù)流量的網(wǎng)絡(luò)環(huán)境中,網(wǎng)卡每接收到一幀數(shù)據(jù)就會(huì)發(fā)起一次中斷,由于小包接收必然造成頻繁的網(wǎng)卡中斷,這勢必會(huì)造成CPU資源被長時(shí)間占用而無法及時(shí)響應(yīng)其他設(shè)備或網(wǎng)絡(luò)層以上協(xié)議處理程序的中斷處理請(qǐng)求,造成大量丟包,因此NAPI的本質(zhì)是為了降低網(wǎng)卡中斷產(chǎn)生頻率,特別是當(dāng)鏈路中存在大量短長度數(shù)據(jù)包時(shí),此技術(shù)能夠顯著減少中斷在現(xiàn)場保護(hù)和恢復(fù)上的時(shí)間開銷,但是在大流量大包數(shù)據(jù)幀較多而中斷觸發(fā)較少的情況下,CPU仍然要定時(shí)輪詢緩沖區(qū),這造成了 CPU資源的浪費(fèi),經(jīng)測試表明,在千兆網(wǎng)卡接收速率接近線速時(shí),并沒能有效改善性能。另外,根據(jù)相關(guān)的計(jì)算機(jī)可靠性指標(biāo)計(jì)算可以知道,輪詢的方式實(shí)質(zhì)上是程序控制設(shè)備的方式,假如一旦出現(xiàn)死鎖,會(huì)嚴(yán)重波及操作系統(tǒng)對(duì)設(shè)備控制權(quán)的收回并引發(fā)整個(gè)系統(tǒng)故障。從長遠(yuǎn)來看,此方法只能算是權(quán)益之策,未能根本解決網(wǎng)絡(luò)傳輸效率問題。目前計(jì)算機(jī)設(shè)備正在朝向高主頻、多核、海量內(nèi)存發(fā)展,實(shí)際應(yīng)用中表明,在網(wǎng)絡(luò)數(shù)據(jù)接收過程中大容量緩存的應(yīng)用是解決服務(wù)器達(dá)到峰值接收狀態(tài)時(shí)避免丟包的有效辦法。
發(fā)明內(nèi)容
本發(fā)明目的在于克服現(xiàn)有的高性能數(shù)據(jù)接收中存在的效率低、可移植性不高、通用性差的不足問題,提供一種大型遙測地震儀高性能數(shù)據(jù)傳輸方法。為實(shí)現(xiàn)上述目的,本發(fā)明大型遙測地震儀高性能數(shù)據(jù)傳輸方法是通過在操作系統(tǒng)網(wǎng)絡(luò)協(xié)議棧的MAC層(鏈路層)之上建立專用自定義(經(jīng)過精簡的)數(shù)據(jù)傳輸協(xié)議,由專用自定義協(xié)議代替原來的TCP/IP協(xié)議,將收到的符合本協(xié)議的數(shù)據(jù)包經(jīng)過處理,直接映射到應(yīng)用層緩存空間,而對(duì)于不符合本專用協(xié)議的數(shù)據(jù)幀仍由操作系統(tǒng)內(nèi)部的協(xié)議棧處理,使高效與通用性并存。所以本發(fā)明可以看作是針對(duì)特定應(yīng)用的TCP/IP協(xié)議擴(kuò)展。其克服現(xiàn)有的高性能數(shù)據(jù)接收中存在的效率低、可移植性不高、通用性差的不足問題。本發(fā)明利用現(xiàn)代計(jì)算機(jī)系統(tǒng)中的現(xiàn)有資源和特點(diǎn),同時(shí)考慮到大型地震數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)傳輸特征,擴(kuò)展了 TCP/IP協(xié)議,提高了在大型地震儀采集網(wǎng)絡(luò)環(huán)境中的數(shù)據(jù)接收效率,使本發(fā)明具有可靠性高、改造方便、可擴(kuò)展性強(qiáng)的特點(diǎn)。作為優(yōu)化,所述專用自定義數(shù)據(jù)傳輸協(xié)議,總體的數(shù)據(jù)流程為①.應(yīng)用層利用socket系統(tǒng)調(diào)用建立套接字.專用協(xié)議響應(yīng)應(yīng)用層系統(tǒng)調(diào)用并建立專用協(xié)議實(shí)例;③.專用協(xié)議實(shí)例根據(jù)應(yīng)用層傳入的參量進(jìn)行相關(guān)參數(shù)設(shè)置;④.專用協(xié)議實(shí)例根據(jù)傳入的參量構(gòu)建大型緩沖隊(duì)列;⑤.專用協(xié)議實(shí)例向應(yīng)用層映射內(nèi)核緩沖隊(duì)列地址;⑥.應(yīng)用層啟動(dòng)接收和發(fā)送例程開始收發(fā)數(shù)據(jù)。(見圖I)作為優(yōu)化,所述專用自定義數(shù)據(jù)傳輸協(xié)議由協(xié)議初始化注冊(cè)模塊、協(xié)議實(shí)例創(chuàng)建模塊、參數(shù)設(shè)置模塊、數(shù)據(jù)緩沖區(qū)映射模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)發(fā)送模塊、協(xié)議實(shí)例釋放模塊、協(xié)議卸載模塊組成(見圖2);其中協(xié)議初始化注冊(cè)模塊、協(xié)議實(shí)例創(chuàng)建模塊、四模塊集(參數(shù)設(shè)置模塊、數(shù)據(jù)緩沖區(qū)映射模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)發(fā)送模塊)、協(xié)議實(shí)例釋放模塊、協(xié)議卸載模塊依次鏈接。
作為優(yōu)化,當(dāng)應(yīng)用層利用本專用協(xié)議收發(fā)數(shù)據(jù)時(shí),首先利用系統(tǒng)調(diào)用例程指定本協(xié)議族和數(shù)據(jù)幀標(biāo)識(shí),由此觸發(fā)協(xié)議實(shí)例創(chuàng)建模塊,建立專用數(shù)據(jù)結(jié)構(gòu)實(shí)例,用本協(xié)議的操作例程指針和相關(guān)參數(shù)對(duì)其初始化;接下來應(yīng)用層調(diào)用參數(shù)設(shè)置模塊向內(nèi)核傳入緩沖區(qū)設(shè)置參數(shù),由此觸發(fā)數(shù)據(jù)緩沖區(qū)映射模塊將內(nèi)核空間大容量緩存與用戶空間地址相映射,完成內(nèi)核與應(yīng)用層共享同一塊數(shù)據(jù)緩沖區(qū)的目的;隨后,啟動(dòng)數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊負(fù)責(zé)應(yīng)用層與底層之間的數(shù)據(jù)接收和發(fā)送工作,當(dāng)應(yīng)用層關(guān)閉對(duì)本專用協(xié)議的調(diào)用時(shí),會(huì)觸發(fā)協(xié)議實(shí)例釋放模塊來清空相關(guān)數(shù)據(jù)緩沖區(qū)(見圖5);最后,當(dāng)編譯后的整個(gè)協(xié)議模塊向操作系統(tǒng)內(nèi)核注冊(cè)時(shí),會(huì)由內(nèi)核自動(dòng)調(diào)用協(xié)議初始化注冊(cè)模塊,由初始化注冊(cè)模塊完成本協(xié)議專用數(shù)據(jù)結(jié)構(gòu)向內(nèi)核的注冊(cè)工作,而協(xié)議卸載模塊負(fù)責(zé)向內(nèi)核注銷本協(xié)議的功能實(shí)現(xiàn)(見圖6)。作為優(yōu)化,利用現(xiàn)代計(jì)算機(jī)設(shè)備2核或以上CPU架構(gòu)、大容量內(nèi)存的特點(diǎn),采用其中一核與網(wǎng)卡綁定,使其專門服務(wù)處于高速數(shù)據(jù)接收狀態(tài)的網(wǎng)卡中斷請(qǐng)求,使其它CPU核響應(yīng)系統(tǒng)中網(wǎng)卡以外設(shè)備和程序的處理請(qǐng)求,同時(shí)利用高容量緩存將接收到的數(shù)據(jù)暫存,(從而)提高(了)在大數(shù)據(jù)流量背景下的數(shù)據(jù)接收效率。作為優(yōu)化,在通用計(jì)算機(jī)系統(tǒng)中,將網(wǎng)絡(luò)接口設(shè)備的中斷服務(wù)與指定的CPU核綁定,同時(shí)分配大容量數(shù)據(jù)緩存并將用戶空間地址與內(nèi)核空間地址相關(guān)聯(lián);當(dāng)數(shù)據(jù)幀到達(dá)網(wǎng)卡后,硬件發(fā)出中斷請(qǐng)求,由指定的專用CPU核負(fù)責(zé)調(diào)用中斷處理例程將數(shù)據(jù)拷貝到內(nèi)核空間,即交給自定義網(wǎng)絡(luò)收發(fā)協(xié)議,此協(xié)議將數(shù)據(jù)幀作常規(guī)校驗(yàn)后直接掛載到用戶層映射到內(nèi)核中的緩存空間地址上,用戶層利用輪詢的方法不斷從緩存空間讀取有效數(shù)據(jù)并釋放處理后的緩存地址。此方法通過操作通用計(jì)算機(jī)的高速處理和存儲(chǔ)部件實(shí)現(xiàn)高性能數(shù)據(jù)接收。具備可靠性高,構(gòu)建靈活,成本低的特點(diǎn)。作為優(yōu)化,在數(shù)據(jù)到達(dá)計(jì)算機(jī)網(wǎng)絡(luò)接口以后,由專用CPU核調(diào)度數(shù)據(jù)處理程序?qū)?shù)據(jù)放入計(jì)算機(jī)緩存隊(duì)列,此后由操作系統(tǒng)內(nèi)核中專用自定義網(wǎng)絡(luò)協(xié)議處理數(shù)據(jù)幀,此過程中,第一、當(dāng)硬中斷調(diào)度程序執(zhí)行完畢,交由內(nèi)核專用網(wǎng)絡(luò)自定義協(xié)議進(jìn)行處理,比常規(guī)網(wǎng)絡(luò)協(xié)議(TCP/IP等)在內(nèi)核中的處理效率有了極大的提高。第二、由專用CPU核響應(yīng)設(shè)備硬中斷調(diào)度程序,效率極高。第三、專用自定義網(wǎng)絡(luò)協(xié)議將數(shù)據(jù)幀直接掛載到應(yīng)用層映射到內(nèi)核的緩存空間中,這避免了內(nèi)核態(tài)向用戶態(tài)的數(shù)據(jù)拷貝,即節(jié)省了 CPU的切換(switchcontext)時(shí)間;第四、用戶在輪詢處理緩存數(shù)據(jù)時(shí),將數(shù)據(jù)暫存入具有SEG-Y文件結(jié)構(gòu)的內(nèi)存空間中。由于采用了專用CPU核中斷處理綁定、精簡的協(xié)議處理流程,大容量緩存映射和鎖定等機(jī)制,大大增強(qiáng)了數(shù)據(jù)接收的可靠性和效率。作為優(yōu)化,所述將數(shù)據(jù)按SEG-Y的格式暫時(shí)在內(nèi)存中存儲(chǔ)下來,待一次采集完成后,再輸出到外部存儲(chǔ)設(shè)備;在整個(gè)數(shù)據(jù)的接收處理過程中,經(jīng)過一次南橋總線到內(nèi)存的數(shù)據(jù)拷貝,隨后的處理都是通過CPU與內(nèi)存(北橋總線)的有限次通訊完成整個(gè)數(shù)據(jù)接收處理過程,因此極大的增強(qiáng)了 數(shù)據(jù)接收的效率。作為優(yōu)化,在多核、多網(wǎng)絡(luò)接口卡和更高的內(nèi)存容量計(jì)算機(jī)配置中,可以繼續(xù)將多個(gè)CPU核與多塊網(wǎng)卡作一一中斷服務(wù)綁定,并在用戶層加大接收緩存容量并映射至內(nèi)核中?,F(xiàn)在流行的大多數(shù)主板架構(gòu)中,南橋到北橋的數(shù)據(jù)通信速率為2GB、北橋與CPU的通信速率為12. 8GB,理論上可以支持12核CPU和6塊網(wǎng)絡(luò)接口卡,在實(shí)現(xiàn)每塊網(wǎng)卡基本線速接收的情況下(以至少1000Mb/s為例),主機(jī)總的網(wǎng)絡(luò)接口速率至少可以達(dá)到6000Mb/s,能夠滿足數(shù)據(jù)接收的高性能和數(shù)據(jù)安全性要求。隨著計(jì)算機(jī)多核時(shí)代的到來和內(nèi)存容量的不斷擴(kuò)充,在高性能數(shù)據(jù)接收處理領(lǐng)域具有很強(qiáng)的可升級(jí)性。作為優(yōu)化,由于采用現(xiàn)有通用計(jì)算機(jī)架構(gòu)和可靠成熟的操作系統(tǒng)作為實(shí)現(xiàn)方法的平臺(tái),接收數(shù)據(jù)具有高效、穩(wěn)定、實(shí)現(xiàn)靈活,升級(jí)方便的特點(diǎn),能夠滿足實(shí)時(shí)性、可靠性要求高的工業(yè)級(jí)數(shù)據(jù)采集生產(chǎn)環(huán)境;將網(wǎng)絡(luò)接口卡的硬件中斷綁定到多核架構(gòu)CPU中的某一顆核上;將內(nèi)核空間大容量緩存地址與用戶空間虛擬地址相關(guān)聯(lián)并鎖定。本發(fā)明所采用的技術(shù)方案即(見圖7):I、在操作系統(tǒng)內(nèi)核中增加專用自定義網(wǎng)絡(luò)傳輸協(xié)議現(xiàn)代操作系統(tǒng)正在朝向智能化、模塊化發(fā)展,這為實(shí)現(xiàn)在特殊領(lǐng)域的特殊需求提供了必要的保障。操作系統(tǒng)除了其作為一個(gè)應(yīng)用層與設(shè)備層的通用接口服務(wù)程序外,也允許以模塊的方式將特殊的需求程序加入內(nèi)核當(dāng)中,以滿足對(duì)特定硬件設(shè)備的自主控制需要。本方法利用其這一特點(diǎn),對(duì)特定的數(shù)據(jù)幀屏蔽其在網(wǎng)絡(luò)協(xié)議棧中耗時(shí)較多的通用協(xié)議處理例程,加入經(jīng)過精簡的專用自定義數(shù)據(jù)傳輸協(xié)議,來滿足本發(fā)明的高效接收數(shù)據(jù)這一目的。本方法的實(shí)現(xiàn)立足于操作系統(tǒng)設(shè)備接口抽象層之上,不去考慮底層網(wǎng)絡(luò)接口設(shè)備的各種不同設(shè)計(jì)結(jié)構(gòu),充分利用多核與大容量緩存的優(yōu)勢與操作系統(tǒng)內(nèi)核功能模塊化添加的特點(diǎn),向操作系統(tǒng)內(nèi)核嵌入專用自定義協(xié)議處理例程,如此既保證了本方法的通用性和可靠性,也從本質(zhì)上解決了數(shù)據(jù)接收的效率問題。以Iinux操作系統(tǒng)接收網(wǎng)絡(luò)數(shù)據(jù)幀過程為例,在數(shù)據(jù)幀到達(dá)網(wǎng)卡后,網(wǎng)卡產(chǎn)生硬中斷,CPU立即響應(yīng)中斷,調(diào)用內(nèi)核中斷服務(wù)例程,將網(wǎng)卡數(shù)據(jù)傳遞到內(nèi)核緩存空間,并根據(jù)協(xié)議標(biāo)識(shí)通知上層(鏈路層之上)相應(yīng)協(xié)議處理例程處理數(shù)據(jù),據(jù)此本發(fā)明通過在操作系統(tǒng)內(nèi)核網(wǎng)絡(luò)協(xié)議棧鏈路層之上注冊(cè)專用自定義處理協(xié)議和協(xié)議標(biāo)識(shí)符,由底層判斷并將符合本協(xié)議標(biāo)識(shí)符的數(shù)據(jù)傳遞進(jìn)來,并經(jīng)過本協(xié)議精簡處理后直接掛載到做好用戶層映射的內(nèi)存緩沖空間,由應(yīng)用層程序不斷輪詢監(jiān)控緩存中的有效數(shù)據(jù),并按SEG-Y的格式暫時(shí)在內(nèi)存中存儲(chǔ)下來,待一次采集完成后,再輸出到外部存儲(chǔ)設(shè)備。本方法中,第一、精簡了數(shù)據(jù)幀在內(nèi)核中的路由處理過程,第二,節(jié)省了普通處理方式中內(nèi)核到用戶層拷貝數(shù)據(jù)的切換(switch context)時(shí)間,因此,極大的提高了網(wǎng)絡(luò)數(shù)據(jù)接收的性能,充分利用了千兆網(wǎng)卡的接收帶寬,使千兆網(wǎng)卡基本能夠達(dá)到線速接收的效果O2、將網(wǎng)絡(luò)接口卡的硬件中斷綁定到多核架構(gòu)CPU中的某一顆核上。硬件中斷的頻繁發(fā)生必然消耗CPU的資源,在多核CPU架構(gòu)中能夠?qū)⒅匾挠布袛嗳蝿?wù)分配給專一的核去處理,讓其他的核去處理內(nèi)部相對(duì)不重要的任務(wù),能夠顯著提高整個(gè)系統(tǒng)針對(duì)特殊任務(wù)的完成效率。在計(jì)算機(jī)系統(tǒng)中,每個(gè)硬件設(shè)備都會(huì)被分配一個(gè)IRQ號(hào)(中斷號(hào)),此中斷信號(hào)由硬件產(chǎn)生,并直接送至中斷控制器上,然后再由中斷控制器向CPU發(fā)送信號(hào),當(dāng)CPU檢測到這一中斷信號(hào)后,中斷當(dāng)前的工作保存現(xiàn)場,并轉(zhuǎn)而通知操作系統(tǒng)調(diào)用相應(yīng)的中斷服務(wù)例程去處理中斷請(qǐng)求。本方法利用多核CPU下的設(shè)備中斷綁定技術(shù),將一顆CPU核專門服務(wù)于一塊千兆網(wǎng)卡,響應(yīng)其中斷服務(wù),經(jīng)過測試,在每秒百兆字節(jié)背景流量和小包(小于SOByte)接收的環(huán)境下,千兆網(wǎng)卡每秒產(chǎn)生大約167000次中斷,而多核CPU架構(gòu)(以酷睿2為例)中一顆CPU核(以網(wǎng)卡中斷服務(wù)例程為例)每秒能夠響應(yīng)的中斷超過200000次,這完全能夠滿足作為網(wǎng)卡請(qǐng)求中斷服務(wù)的專用伺服CPU的要求,因此無論是在小包大流量背景還是大包大流量背景下都能夠高效可靠接收數(shù)據(jù)?;谶@一思想,本發(fā)明首先將擔(dān)負(fù)數(shù)據(jù)接收任務(wù)的網(wǎng)絡(luò)接口卡設(shè)備中斷綁定到專一 CPU核上,將重要的任務(wù)由多核中的單獨(dú)一顆CPU核來處理,提高了網(wǎng)卡中斷服務(wù)的響應(yīng)效率,進(jìn)而提高了網(wǎng)卡的數(shù)據(jù)接收性能。3、將內(nèi)核空間大容量緩存地址與用戶空間虛擬地址相關(guān)聯(lián)并鎖定。在接收到數(shù)據(jù)以后依賴大容量內(nèi)存,將數(shù)據(jù)暫時(shí)放入內(nèi)存空間,避免了寫入外部存儲(chǔ)設(shè)備時(shí)數(shù)據(jù)進(jìn)入南橋總線降低數(shù)據(jù)存儲(chǔ)效率的問題。以Iinux操作系統(tǒng)為例,數(shù)據(jù)包到達(dá)網(wǎng)卡,內(nèi)核系統(tǒng)會(huì)調(diào)用網(wǎng)卡的中斷處理例程,中斷處理例程根據(jù)自身的狀態(tài)寄存器判斷是否是數(shù)據(jù)幀到達(dá),如果是則調(diào)用驅(qū)動(dòng)程序中的接收例程,而后,對(duì)于所有類型的網(wǎng)卡驅(qū)動(dòng)程序接收到數(shù)據(jù)幀,最終都會(huì)調(diào)用到操作系統(tǒng)內(nèi)核中的netif_rx例程,并將數(shù)據(jù)幀放入接收緩沖隊(duì)列,同時(shí)產(chǎn)生軟中斷(NET_RX_S0FTIRQ),此時(shí)內(nèi)核中net_rx_action例程會(huì)從此隊(duì)列頭中將數(shù)據(jù)幀依次取出并通知上層協(xié)議處理數(shù)據(jù)包,因此,鏈路層接收緩沖隊(duì)列的提取效率對(duì)于丟包率也會(huì)有決定性影響;此外,在操作系統(tǒng)設(shè)計(jì)之初基于安全性考慮,內(nèi)核空間的物理地址內(nèi)存管理機(jī)制與用戶空間的虛擬地址內(nèi)存管理機(jī)制是不同的,所以在傳統(tǒng)數(shù)據(jù)接收過程中,數(shù)據(jù)經(jīng)由底層傳到內(nèi)核層,經(jīng)過內(nèi)核相關(guān)例程處理后,需要將符合用戶層應(yīng)用程序設(shè)定要求的數(shù)據(jù)拷貝到用戶內(nèi)存空間,這一過程增加了從內(nèi)核態(tài)到用戶態(tài)的轉(zhuǎn)換時(shí)間,降低了數(shù)據(jù)包處理效率,所以需要將用戶空間內(nèi)存地址與內(nèi)核空間內(nèi)存地址作映射,以節(jié)省大量的模態(tài)轉(zhuǎn)換和數(shù)據(jù)拷貝時(shí)間;因此,為了能夠構(gòu)造大型緩存隊(duì)列,需要首先由應(yīng)用層控制本專用協(xié)議數(shù)據(jù)緩沖區(qū)映射模塊以頁對(duì)齊方式申請(qǐng)大容量內(nèi)存,然后將用戶內(nèi)存空間地址與操作系統(tǒng)內(nèi)核空間地址相關(guān)聯(lián),即將內(nèi)核中的內(nèi)存地址與用戶層虛擬地址指向同一塊物理內(nèi)存,使內(nèi)核接收處理例程和應(yīng)用層接收程序能夠在接收數(shù)據(jù)時(shí)利用此緩存空間直接掛載數(shù)據(jù)和輪詢數(shù)據(jù),而不需要做過多拷貝與轉(zhuǎn)換等待,從而為高速接收網(wǎng)絡(luò)數(shù)據(jù)創(chuàng)造了條件。最后,從操作系統(tǒng)內(nèi)存管理策略可以知道,對(duì)于申請(qǐng)的內(nèi)存空間如果長時(shí)間未使用,會(huì)被操作系統(tǒng)暫時(shí)置換到虛擬內(nèi)存,也就是外部存儲(chǔ)器,在地震數(shù)據(jù)的高速回傳接收過程中,這顯然是不符合效率要求的,因此,在用戶空間申請(qǐng)內(nèi)存的第一時(shí)刻,需要鎖定申請(qǐng)到的內(nèi)存空間,即不允許操作系統(tǒng)對(duì)申請(qǐng)到的內(nèi)存空間作可能的換頁操作??傊景l(fā)明利用現(xiàn)代計(jì)算機(jī)中多核CPU(2核或以上)、大容量內(nèi)存(2G以上)和多千兆網(wǎng)接口,實(shí)現(xiàn)了適用于大型遙測地震儀的高性能數(shù)據(jù)接口技術(shù)。I)在操作系統(tǒng)內(nèi)核中增加專用自定義網(wǎng)絡(luò)接收協(xié)議,提高網(wǎng)絡(luò)數(shù)據(jù)幀在內(nèi)核中的處理效率;2)將2核或以上CPU其中一核綁定到指定網(wǎng)卡并專門服務(wù)于此網(wǎng)卡中斷,提高網(wǎng)卡中斷請(qǐng)求服務(wù)的處理效率;3)將內(nèi)核空間大容量緩存地址與用戶空間地址相關(guān)聯(lián),減少高速數(shù)據(jù)傳輸過程中的內(nèi) 存拷貝操作;4)同時(shí)鎖定數(shù)據(jù)接收緩存,限制內(nèi)存換頁等方法,有效地解決了超大地震網(wǎng)絡(luò)數(shù)據(jù)傳輸過程中的實(shí)時(shí)數(shù)據(jù)傳輸和存儲(chǔ)瓶頸問題。由于本方法采用現(xiàn)代通用計(jì)算機(jī)架構(gòu)和穩(wěn)定成熟的操作系統(tǒng)作為實(shí)現(xiàn)平臺(tái),具有實(shí)現(xiàn)靈活可靠、成本低、穩(wěn)定性高、可移植性強(qiáng)等特點(diǎn)。
采用上述技術(shù)方案后,本發(fā)明其克服現(xiàn)有的高性能數(shù)據(jù)接收中存在的效率低、可移植性不高、通用性差的不足問題。本發(fā)明利用現(xiàn)代計(jì)算機(jī)系統(tǒng)中的現(xiàn)有資源和特點(diǎn),同時(shí)考慮到大型地震數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)傳輸特征,擴(kuò)展了 TCP/IP協(xié)議,提高了在大型地震儀采集網(wǎng)絡(luò)環(huán)境中的數(shù)據(jù)接收效率,使本發(fā)明具有可靠性高、改造方便、可擴(kuò)展性強(qiáng)的特點(diǎn)。可廣泛應(yīng)用于石油勘探、天然氣勘探、煤田勘探、礦產(chǎn)勘探、地質(zhì)工程勘察、地質(zhì)災(zāi)害監(jiān)測等具有高速、高可靠性數(shù)據(jù)傳輸要求的數(shù)據(jù)采集領(lǐng)域。
圖I :是本發(fā)明大型遙測地震儀高性能數(shù)據(jù)傳輸方法的總體數(shù)據(jù)處理流程圖;圖2 :是本發(fā)明中專用自定義網(wǎng)絡(luò)協(xié)議模塊設(shè)計(jì)圖;圖3、4 :是Iinux雙核系統(tǒng)中CPU與網(wǎng)卡綁定前后對(duì)比;圖5 :是本發(fā)明中專用自定義網(wǎng)絡(luò)協(xié)議內(nèi)部數(shù)據(jù)處理流程圖;圖6 :是本發(fā)明中專用自定義網(wǎng)絡(luò)協(xié)議向內(nèi)核中注冊(cè)與卸載的流程圖;圖7 :是本發(fā)明的總體架構(gòu)設(shè)計(jì)圖。
具體實(shí)施例方式如圖所示,本發(fā)明大型遙測地震儀高性能數(shù)據(jù)傳輸方法所采用的技術(shù)方案即(見圖7)I、在操作系統(tǒng)內(nèi)核中增加專用自定義網(wǎng)絡(luò)傳輸協(xié)議現(xiàn)代操作系統(tǒng)正在朝向智能化、模塊化發(fā)展,這為實(shí)現(xiàn)在特殊領(lǐng)域的特殊需求提供了必要的保障。操作系統(tǒng)除了其作為一個(gè)應(yīng)用層與設(shè)備層的通用接口服務(wù)程序外,也允許以模塊的方式將特殊的需求程序加入內(nèi)核當(dāng)中,以滿足對(duì)特定硬件設(shè)備的自主控制需要。本方法利用其這一特點(diǎn),對(duì)特定的數(shù)據(jù)幀屏蔽其在網(wǎng)絡(luò)協(xié)議棧中耗時(shí)較多的通用協(xié)議處理例程,加入經(jīng)過精簡的專用自定義數(shù)據(jù)傳輸協(xié)議,來滿足本發(fā)明的高效接收數(shù)據(jù)這一目的。本方法的實(shí)現(xiàn)立足于操作系統(tǒng)設(shè)備接口抽象層之上,不去考慮底層網(wǎng)絡(luò)接口設(shè)備的各種不同設(shè)計(jì)結(jié)構(gòu),充分利用多核與大容量緩存的優(yōu)勢與操作系統(tǒng)內(nèi)核功能模塊化添加的特點(diǎn),向操作系統(tǒng)內(nèi)核嵌入專用自定義協(xié)議處理例程,如此既保證了本方法的通用性和可靠性,也從本質(zhì)上解決了數(shù)據(jù)接收的效率問題。以Iinux操作系統(tǒng)接收網(wǎng)絡(luò)數(shù)據(jù)幀過程為例,在數(shù)據(jù)幀到達(dá)網(wǎng)卡后,網(wǎng)卡產(chǎn)生硬中斷,CPU立即響應(yīng)中斷,調(diào)用內(nèi)核中斷服務(wù)例程,將網(wǎng)卡數(shù)據(jù)傳遞到內(nèi)核緩存空間,并根據(jù)協(xié)議標(biāo)識(shí)通知上層(鏈路層之上)相應(yīng)協(xié)議處理例程處理數(shù)據(jù),據(jù)此本發(fā)明通過在操作系統(tǒng)內(nèi)核網(wǎng)絡(luò)協(xié)議棧鏈路層之上注冊(cè)專用自定義處理協(xié)議和協(xié)議標(biāo)識(shí)符,由底層判斷并將符合本協(xié)議標(biāo)識(shí)符的數(shù)據(jù)傳遞進(jìn)來,并經(jīng)過本協(xié)議精簡處理后直接掛載到做好用戶層映射的內(nèi)存緩沖空間,由應(yīng)用層程序不斷輪詢監(jiān)控緩存中的有效數(shù)據(jù),并按SEG-Y的格式暫時(shí)在內(nèi)存中存儲(chǔ)下來,待一次采集完成后,再輸出到外部存儲(chǔ)設(shè)備。本方法中,第一、精簡了數(shù)據(jù)幀在內(nèi)核中的路由處理過程,第二,節(jié)省了普通處理方式中內(nèi)核到用戶層拷貝數(shù)據(jù)的切換(switch context)時(shí)間,因此,極大的提高了網(wǎng)絡(luò)數(shù)據(jù)接收的性能,充分利用了千兆網(wǎng)卡的接收帶寬,使千兆網(wǎng)卡基本能夠達(dá)到線速接收的效果O
4、將網(wǎng)絡(luò)接口卡的硬件中斷綁定到多核架構(gòu)CPU中的某一顆核上。硬件中斷的頻繁發(fā)生必然消耗CPU的資源,在多核CPU架構(gòu)中能夠?qū)⒅匾挠布袛嗳蝿?wù)分配給專一的核去處理,讓其他的核去處理內(nèi)部相對(duì)不重要的任務(wù),能夠顯著提高整個(gè)系統(tǒng)針對(duì)特殊任務(wù)的完成效率。在計(jì)算機(jī)系統(tǒng)中,每個(gè)硬件設(shè)備都會(huì)被分配一個(gè)IRQ號(hào)(中斷號(hào)),此中斷信號(hào)由硬件產(chǎn)生,并直接送至中斷控制器上,然后再由中斷控制器向CPU發(fā)送信號(hào),當(dāng)CPU檢測到這一中斷信號(hào)后,中斷當(dāng)前的工作保存現(xiàn)場,并轉(zhuǎn)而通知操作系統(tǒng)調(diào)用相應(yīng)的中斷服務(wù)例程去處理中斷請(qǐng)求。本方法利用多核CPU下的設(shè)備中斷綁定技 術(shù),將一顆CPU核專門服務(wù)于一塊千兆網(wǎng)卡,響應(yīng)其中斷服務(wù),經(jīng)過測試,在每秒百兆字節(jié)背景流量和小包(小于SOByte)接收的環(huán)境下,千兆網(wǎng)卡每秒產(chǎn)生大約167000次中斷,而多核CPU架構(gòu)(以酷睿2為例)中一顆CPU核(以網(wǎng)卡中斷服務(wù)例程為例)每秒能夠響應(yīng)的中斷超過200000次,這完全能夠滿足作為網(wǎng)卡請(qǐng)求中斷服務(wù)的專用伺服CPU的要求,因此無論是在小包大流量背景還是大包大流量背景下都能夠高效可靠接收數(shù)據(jù)?;谶@一思想,本發(fā)明首先將擔(dān)負(fù)數(shù)據(jù)接收任務(wù)的網(wǎng)絡(luò)接口卡設(shè)備中斷綁定到專一 CPU核上,將重要的任務(wù)由多核中的單獨(dú)一顆CPU核來處理,提高了網(wǎng)卡中斷服務(wù)的響應(yīng)效率,進(jìn)而提高了網(wǎng)卡的數(shù)據(jù)接收性能。5、將內(nèi)核空間大容量緩存地址與用戶空間虛擬地址相關(guān)聯(lián)并鎖定。在接收到數(shù)據(jù)以后依賴大容量內(nèi)存,將數(shù)據(jù)暫時(shí)放入內(nèi)存空間,避免了寫入外部存儲(chǔ)設(shè)備時(shí)數(shù)據(jù)進(jìn)入南橋總線降低數(shù)據(jù)存儲(chǔ)效率的問題。以Iinux操作系統(tǒng)為例,數(shù)據(jù)包到達(dá)網(wǎng)卡,內(nèi)核系統(tǒng)會(huì)調(diào)用網(wǎng)卡的中斷處理例程,中斷處理例程根據(jù)自身的狀態(tài)寄存器判斷是否是數(shù)據(jù)幀到達(dá),如果是則調(diào)用驅(qū)動(dòng)程序中的接收例程,而后,對(duì)于所有類型的網(wǎng)卡驅(qū)動(dòng)程序接收到數(shù)據(jù)幀,最終都會(huì)調(diào)用到操作系統(tǒng)內(nèi)核中的netif_rx例程,并將數(shù)據(jù)幀放入接收緩沖隊(duì)列,同時(shí)產(chǎn)生軟中斷(NET_RX_S0FTIRQ),此時(shí)內(nèi)核中net_rx_action例程會(huì)從此隊(duì)列頭中將數(shù)據(jù)幀依次取出并通知上層協(xié)議處理數(shù)據(jù)包,因此,鏈路層接收緩沖隊(duì)列的提取效率對(duì)于丟包率也會(huì)有決定性影響;此外,在操作系統(tǒng)設(shè)計(jì)之初基于安全性考慮,內(nèi)核空間的物理地址內(nèi)存管理機(jī)制與用戶空間的虛擬地址內(nèi)存管理機(jī)制是不同的,所以在傳統(tǒng)數(shù)據(jù)接收過程中,數(shù)據(jù)經(jīng)由底層傳到內(nèi)核層,經(jīng)過內(nèi)核相關(guān)例程處理后,需要將符合用戶層應(yīng)用程序設(shè)定要求的數(shù)據(jù)拷貝到用戶內(nèi)存空間,這一過程增加了從內(nèi)核態(tài)到用戶態(tài)的轉(zhuǎn)換時(shí)間,降低了數(shù)據(jù)包處理效率,所以需要將用戶空間內(nèi)存地址與內(nèi)核空間內(nèi)存地址作映射,以節(jié)省大量的模態(tài)轉(zhuǎn)換和數(shù)據(jù)拷貝時(shí)間;因此,為了能夠構(gòu)造大型緩存隊(duì)列,需要首先由應(yīng)用層控制本專用協(xié)議數(shù)據(jù)緩沖區(qū)映射模塊以頁對(duì)齊方式申請(qǐng)大容量內(nèi)存,然后將用戶內(nèi)存空間地址與操作系統(tǒng)內(nèi)核空間地址相關(guān)聯(lián),即將內(nèi)核中的內(nèi)存地址與用戶層虛擬地址指向同一塊物理內(nèi)存,使內(nèi)核接收處理例程和應(yīng)用層接收程序能夠在接收數(shù)據(jù)時(shí)利用此緩存空間直接掛載數(shù)據(jù)和輪詢數(shù)據(jù),而不需要做過多拷貝與轉(zhuǎn)換等待,從而為高速接收網(wǎng)絡(luò)數(shù)據(jù)創(chuàng)造了條件。最后,從操作系統(tǒng)內(nèi)存管理策略可以知道,對(duì)于申請(qǐng)的內(nèi)存空間如果長時(shí)間未使用,會(huì)被操作系統(tǒng)暫時(shí)置換到虛擬內(nèi)存,也就是外部存儲(chǔ)器,在地震數(shù)據(jù)的高速回傳接收過程中,這顯然是不符合效率要求的,因此,在用戶空間申請(qǐng)內(nèi)存的第一時(shí)刻,需要鎖定申請(qǐng)到的內(nèi)存空間,即不允許操作系統(tǒng)對(duì)申請(qǐng)到的內(nèi)存空間作可能的換頁操作。更具體是I、本發(fā)明采用的實(shí)驗(yàn)環(huán)境配置
發(fā)包機(jī)硬件配置AMDPhenom(tm) 8400 Triple-Core Processor 1.05GHz ;3G 內(nèi)存Marvell 88E8071 PCI-E 千兆網(wǎng)卡操作系統(tǒng)LinuxUbuntu_X86_64 ;內(nèi)核版本 2. 6. 28-11收包機(jī)硬件配置Intel(R)Core (TM) 2 Duo CPU E6550 2. 33GHz ;2G 內(nèi)存Inter 32566DM_2 千兆網(wǎng)卡操作系統(tǒng)LinuxFedora8_i386 ;內(nèi)核版本2· 6. 26. 8-57聯(lián)網(wǎng)設(shè)備五口千兆網(wǎng)絡(luò)交換機(jī)、超五類雙絞線、RJ45接口、Τ568Β線序?qū)嶒?yàn)程序及數(shù)據(jù)利用libcapl. O庫自行開發(fā)以太網(wǎng)發(fā)包程序作為發(fā)包機(jī)的發(fā)送程序,發(fā)送程序產(chǎn)生不同長度數(shù)據(jù)包向接收端批量發(fā)送,利用本專用協(xié)議接口開發(fā)的以太網(wǎng)包收包程序作為收包機(jī)的接收程序接收數(shù)據(jù)包。
2、設(shè)計(jì)專用自定義網(wǎng)絡(luò)協(xié)議族,并以模塊的方式嵌入操作系統(tǒng)內(nèi)核協(xié)議棧。本專用協(xié)議由初始化注冊(cè)模塊、協(xié)議實(shí)例創(chuàng)建模塊、參數(shù)設(shè)置模塊、數(shù)據(jù)緩沖區(qū)映射模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)發(fā)送模塊、協(xié)議實(shí)例釋放模塊、協(xié)議卸載模塊組成,根據(jù)以上內(nèi)容,在Iinux操作系統(tǒng)下本協(xié)議族的實(shí)現(xiàn)分以下八個(gè)部分Α.初始化注冊(cè)模塊的實(shí)現(xiàn)當(dāng)用戶層執(zhí)行insmod將本協(xié)議加入操作系統(tǒng)內(nèi)核協(xié)議棧時(shí),會(huì)觸發(fā)本模塊的執(zhí)行。初始化注冊(cè)模塊由gseisnet_init(void)函數(shù)實(shí)現(xiàn),首先定義協(xié)議族net_proto_family結(jié)構(gòu)體變量gseisnet_family_ops,此結(jié)構(gòu)體變量主要指定協(xié)議族標(biāo)識(shí)GSEISNET和協(xié)議實(shí)例創(chuàng)建函數(shù)指針gseisnet_init,然后利用內(nèi)核協(xié)議棧注冊(cè)函數(shù)sock_register將本專用協(xié)議族注冊(cè)到內(nèi)核網(wǎng)絡(luò)協(xié)議棧以響應(yīng)應(yīng)用層對(duì)本協(xié)議族的socket調(diào)用。關(guān)鍵代碼如下
static struct proto gseisnet_trans_proto - { // sock 函數(shù)操作集定義 .name= "GSEISNET'// 協(xié)議名稱
.owner = THISJ10DULE,// 所屬模塊
.obj一size = sizeof (struct gseisnet_sock), // 自定義 sock 大小
};
static struct net_proto_famiIy gseisnet_faraily__ops = { // 協(xié)議族結(jié)構(gòu)體變量定義 .family = GSEISNET,// 協(xié)議族標(biāo)識(shí)
.create = gseisnet—create,/I 協(xié)議創(chuàng)建函數(shù)指針
.owner = THIS—MODULE,// 協(xié)議所屬模塊
};sock_register (&gseisnet_family_ops) ;// 注冊(cè)協(xié)議族
proto_register (&gseisnet_trans_proto) ; //注冊(cè) sock 結(jié)構(gòu)函數(shù)feg作集B.協(xié)議實(shí)例創(chuàng)建模塊實(shí)現(xiàn)當(dāng)應(yīng)用層調(diào)用socket創(chuàng)建套接字時(shí),會(huì)觸發(fā)本模塊的執(zhí)行,proto_ops結(jié)構(gòu)體變量gseisnet_ops定義了 socket上的函數(shù)操作集合,套接字創(chuàng)建時(shí),會(huì)用此結(jié)構(gòu)體對(duì)套接字的函數(shù)操作集指針賦值bsdsocket-> ops = gseisnet_ops,此后由應(yīng)用層調(diào)用的數(shù)據(jù)接收、發(fā)送和參數(shù)設(shè)置等都會(huì)映射到本結(jié)構(gòu)體的函數(shù)指針上面,由對(duì)應(yīng)的本協(xié)議模塊內(nèi)部函數(shù)實(shí)際執(zhí)行相應(yīng)的操作;接下來定義packet_type變量,此變量定義了數(shù)據(jù)巾貞標(biāo)識(shí)符GSEISNET_PACKET和本協(xié)議的接收函數(shù)指針gseisnet_rcv,然后將packe_type變量注冊(cè)到ptype_base鏈表dev_add_pack(&packet_type),當(dāng)鏈路層收到本協(xié)議指定標(biāo)識(shí)符的數(shù)據(jù)幀后,會(huì)通過查找ptype_baSe鏈表查找本協(xié)議注冊(cè)的標(biāo)識(shí)符,隨后調(diào)用其接收函數(shù)gseisnet_rcv繼續(xù)由本專用協(xié)議處理收到的數(shù)據(jù)巾貞。關(guān)鍵代碼如下
static const struct proto_ops gseisnet_ops = { // socket 套接字上的函數(shù)操作集 .family = GSEISNET,Il 協(xié)議族標(biāo)識(shí)
.owner = THIS—MODULE,Il協(xié)議族所屬模塊
.setsockopt = gseisnet_setsockopt,// 參量設(shè)置函數(shù)指針
.getsockopt = gseisnet_getsockopt,// 獲取參量函數(shù)指針
.ioctl = gseisnet_ioctl,//針對(duì)網(wǎng)卡設(shè)備的io參數(shù)設(shè)置
.sendmsg = gseisnet—sendmsg,// 本協(xié)議發(fā)送函數(shù)指針
};
sk = sk—alloc (net, GSEISNET) ;// 分配 sock 空間
bsdsocket->ops = gseisnet_ops;// 指定 bsdsocket 函數(shù)操作集
sock—init_data(bsdsocket, sk) ;Il 交換 sock 與 socket 變量指針
sk~>sk_destruct = gseisnet_sock_destruct ; Il 指定 sock 實(shí)例析構(gòu)函數(shù) static struct packet一type gseisnet_protocol = {
__constant_htons (GSEISNET_PACKET), // 協(xié)議標(biāo)識(shí)符NULL,Il設(shè)備指針,初始化時(shí)為空
gseisnet_rcv,//地震數(shù)據(jù)接收函數(shù)指針
};
dev_add_pack(&gseisnetjprotocol) ;//注冊(cè)本協(xié)議底層調(diào)用的接收函數(shù)C.參數(shù)設(shè)置模塊的實(shí)現(xiàn)此模塊gseisnet_setsockopt由應(yīng)用層的參數(shù)調(diào)用例程setsockopt觸發(fā),主要用于控制本專用協(xié)議建立緩沖區(qū)時(shí)向內(nèi)核傳送必要的設(shè)置參數(shù),例如緩沖區(qū)頁面大小和分配的緩沖區(qū)塊數(shù)量等。關(guān)鍵代碼如下
Static Int gseisnet—setsockopt(struct socket* sock, int level, int optname, char—user* optval, int optlen) {
權(quán)利要求
1.一種大型遙測地震儀高性能數(shù)據(jù)傳輸方法,其特征在于通過在操作系統(tǒng)網(wǎng)絡(luò)協(xié)議棧的MAC層或者鏈路層之上建立專用自定義數(shù)據(jù)傳輸協(xié)議,由專用自定義協(xié)議代替原來的TCP/IP協(xié)議,將收到的符合本協(xié)議的數(shù)據(jù)包經(jīng)過處理,直接映射到應(yīng)用層緩存空間,而對(duì)于不符合本專用協(xié)議的數(shù)據(jù)幀仍由操作系統(tǒng)內(nèi)部的協(xié)議棧處理。
2.根據(jù)權(quán)利要求I所述傳輸方法,其特征在于所述專用自定義數(shù)據(jù)傳輸協(xié)議,總體的數(shù)據(jù)流程為①.應(yīng)用層利用socket系統(tǒng)調(diào)用建立套接字;②.專用協(xié)議響應(yīng)應(yīng)用層系統(tǒng)調(diào)用并建立專用協(xié)議實(shí)例專用協(xié)議實(shí)例根據(jù)應(yīng)用層傳入的參量進(jìn)行相關(guān)參數(shù)設(shè)置;④.專用協(xié)議實(shí)例根據(jù)傳入的參量構(gòu)建大型緩沖隊(duì)列;⑤.專用協(xié)議實(shí)例向應(yīng)用層映射內(nèi)核緩沖隊(duì)列地址; .應(yīng)用層啟動(dòng)接收和發(fā)送例程開始收發(fā)數(shù)據(jù)。
3.根據(jù)權(quán)利要求I所述傳輸方法,其特征在于所述專用自定義數(shù)據(jù)傳輸協(xié)議由協(xié)議初始化注冊(cè)模塊、協(xié)議實(shí)例創(chuàng)建模塊、參數(shù)設(shè)置模塊、數(shù)據(jù)緩沖區(qū)映射模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)發(fā)送模塊、協(xié)議實(shí)例釋放模塊、協(xié)議卸載模塊組成。
4.根據(jù)權(quán)利要求I所述傳輸方法,其特征在于當(dāng)應(yīng)用層利用本專用協(xié)議收發(fā)數(shù)據(jù)時(shí),首先利用系統(tǒng)調(diào)用例程指定本協(xié)議族和數(shù)據(jù)幀標(biāo)識(shí),由此觸發(fā)協(xié)議實(shí)例創(chuàng)建模塊,建立專用數(shù)據(jù)結(jié)構(gòu)實(shí)例,用本協(xié)議的操作例程指針和相關(guān)參數(shù)對(duì)其初始化; 接下來應(yīng)用層調(diào)用參數(shù)設(shè)置模塊向內(nèi)核傳入緩沖區(qū)設(shè)置參數(shù),由此觸發(fā)數(shù)據(jù)緩沖區(qū)映射模塊將內(nèi)核空間大容量緩存與用戶空間地址相映射,完成內(nèi)核與應(yīng)用層共享同一塊數(shù)據(jù)緩沖區(qū)的目的; 隨后,啟動(dòng)數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊負(fù)責(zé)應(yīng)用層與底層之間的數(shù)據(jù)接收和發(fā)送工作,當(dāng)應(yīng)用層關(guān)閉對(duì)本專用協(xié)議的調(diào)用時(shí),會(huì)觸發(fā)協(xié)議實(shí)例釋放模塊來清空相關(guān)數(shù)據(jù)緩沖區(qū); 最后,當(dāng)編譯后的整個(gè)協(xié)議模塊向操作系統(tǒng)內(nèi)核注冊(cè)時(shí),會(huì)由內(nèi)核自動(dòng)調(diào)用協(xié)議初始化注冊(cè)模塊,由初始化注冊(cè)模塊完成本協(xié)議專用數(shù)據(jù)結(jié)構(gòu)向內(nèi)核的注冊(cè)工作,而協(xié)議卸載模塊負(fù)責(zé)向內(nèi)核注銷本協(xié)議的功能實(shí)現(xiàn)。
5.根據(jù)權(quán)利要求I或2或3或4所述傳輸方法,其特征在于利用現(xiàn)代計(jì)算機(jī)設(shè)備2核或以上CPU架構(gòu)、大容量內(nèi)存的特點(diǎn),采用其中一核與網(wǎng)卡綁定,使其專門服務(wù)處于高速數(shù)據(jù)接收狀態(tài)的網(wǎng)卡中斷請(qǐng)求,使其它CPU核響應(yīng)系統(tǒng)中網(wǎng)卡以外設(shè)備和程序的處理請(qǐng)求,同時(shí)利用高容量緩存將接收到的數(shù)據(jù)暫存,提高在大數(shù)據(jù)流量背景下的數(shù)據(jù)接收效率。
6.根據(jù)權(quán)利要求I或2或3或4所述傳輸方法,其特征在于在通用計(jì)算機(jī)系統(tǒng)中,將網(wǎng)絡(luò)接口設(shè)備的中斷服務(wù)與指定的CPU核綁定,同時(shí)分配大容量數(shù)據(jù)緩存并將用戶空間地址與內(nèi)核空間地址相關(guān)聯(lián);當(dāng)數(shù)據(jù)幀到達(dá)網(wǎng)卡后,硬件發(fā)出中斷請(qǐng)求,由指定的專用CPU核負(fù)責(zé)調(diào)用中斷處理例程將數(shù)據(jù)拷貝到內(nèi)核空間,即交給自定義網(wǎng)絡(luò)收發(fā)協(xié)議,此協(xié)議將數(shù)據(jù)幀作常規(guī)校驗(yàn)后直接掛載到用戶層映射到內(nèi)核中的緩存空間地址上,用戶層利用輪詢的方法不斷從緩存空間讀取有效數(shù)據(jù)并釋放處理后的緩存地址。
7.根據(jù)權(quán)利要求I或2或3或4所述傳輸方法,其特征在于在數(shù)據(jù)到達(dá)計(jì)算機(jī)網(wǎng)絡(luò)接口以后,由專用CPU核調(diào)度數(shù)據(jù)處理程序?qū)?shù)據(jù)放入計(jì)算機(jī)緩存隊(duì)列,此后由操作系統(tǒng)內(nèi)核中專用自定義網(wǎng)絡(luò)協(xié)議處理數(shù)據(jù)幀,此過程中,第一、當(dāng)硬中斷調(diào)度程序執(zhí)行完畢,交由內(nèi)核專用網(wǎng)絡(luò)自定義協(xié)議進(jìn)行處理;第二、由專用CPU核響應(yīng)設(shè)備硬中斷調(diào)度程序;第三、專用自定義網(wǎng)絡(luò)協(xié)議將數(shù)據(jù)幀直接掛載到應(yīng)用層映射到內(nèi)核的緩存空間中;第四、用戶在輪詢處理緩存數(shù)據(jù)時(shí),將數(shù)據(jù)暫存入具有SEG-Y文件結(jié)構(gòu)的內(nèi)存空間中。
8.根據(jù)權(quán)利要求I或2或3或4所述傳輸方法,其特征在于所述將數(shù)據(jù)按SEG-Y的格式暫時(shí)在內(nèi)存中存儲(chǔ)下來,待一次采集完成后,再輸出到外部存儲(chǔ)設(shè)備;在整個(gè)數(shù)據(jù)的接收處理過程中,經(jīng)過一次南橋總線到內(nèi)存的數(shù)據(jù)拷貝,隨后的處理都是通過CPU與內(nèi)存或者北橋總線的有限次通訊完成整個(gè)數(shù)據(jù)接收處理過程。
9.根據(jù)權(quán)利要求I或2或3或4所述傳輸方法,其特征在于在多核、多網(wǎng)絡(luò)接口卡和更高的內(nèi)存容量計(jì)算機(jī)配置中,繼續(xù)將多個(gè)CPU核與多塊網(wǎng)卡作一一中斷服務(wù)綁定,并在用戶層加大接收緩存容量并映射至內(nèi)核中。
10.根據(jù)權(quán)利要求I或2或3或4所述傳輸方法,其特征在于采用現(xiàn)有通用計(jì)算機(jī)架構(gòu)和可靠成熟的操作系統(tǒng)作為實(shí)現(xiàn)方法的平臺(tái);將網(wǎng)絡(luò)接口卡的硬件中斷綁定到多核架構(gòu)CPU中的某一顆核上;將內(nèi)核空間大容量緩存地址與用戶空間虛擬地址相關(guān)聯(lián)并鎖定。
全文摘要
本發(fā)明涉及一種大型遙測地震儀高性能數(shù)據(jù)傳輸方法,為解決現(xiàn)有大型遙測地震儀數(shù)據(jù)傳輸性能差問題,其是通過在操作系統(tǒng)網(wǎng)絡(luò)協(xié)議棧的MAC層或者鏈路層之上建立專用自定義數(shù)據(jù)傳輸協(xié)議,由專用自定義協(xié)議代替原來的TCP/IP協(xié)議,將收到的符合本協(xié)議的數(shù)據(jù)包經(jīng)過處理,直接映射到應(yīng)用層緩存空間,而對(duì)于不符合本專用協(xié)議的數(shù)據(jù)幀仍由操作系統(tǒng)內(nèi)部的協(xié)議棧處理。其解決了現(xiàn)有技術(shù)存在的效率低、可移植性不高、通用性差的不足問題;提高了在大型地震儀采集網(wǎng)絡(luò)環(huán)境中的數(shù)據(jù)接收效率,具有可靠性高、改造方便、可擴(kuò)展性強(qiáng)的特點(diǎn)。
文檔編號(hào)H04L29/08GK102638487SQ201110049308
公開日2012年8月15日 申請(qǐng)日期2011年3月2日 優(yōu)先權(quán)日2011年3月2日
發(fā)明者劉光鼎, 劉寧, 徐善輝, 郭建 申請(qǐng)人:中國科學(xué)院地質(zhì)與地球物理研究所, 北京吉奧菲斯科技有限責(zé)任公司