謝俊宇,周 嚴(yán)
(南京理工大學(xué)機械工程學(xué)院,江蘇南京210094)
摘要:針對地震勘探中網(wǎng)絡(luò)傳輸系統(tǒng)遇到的數(shù)據(jù)量大、傳輸速度慢、地震勘探服務(wù)器性能不足的問題,設(shè)計了基于IOCP傳輸模型的地震勘探服務(wù)器系統(tǒng)。通過對IOCP傳輸模型的深入分析,設(shè)計了多個地震采集道的并發(fā)高速傳輸?shù)姆⻊?wù)器軟件系統(tǒng)。最后,利用實際的地震采集道進行傳輸性能測試,測試表明,采用IOCP傳輸模型的服務(wù)器系統(tǒng)可以在原有的硬件基礎(chǔ)上大幅度提高網(wǎng)絡(luò)傳輸速度,并且穩(wěn)定性更高,能夠滿足地震勘探過程中對網(wǎng)絡(luò)傳輸?shù)囊蟆?
關(guān)鍵詞:地震勘探;網(wǎng)絡(luò)傳輸;完成端口
中圖分類號:TP39文章編號:1006 - 2394( 2016) 04 - 0018 - 04
0引言
地震勘探是目前最主要的油氣資源勘探方法,地震采集數(shù)據(jù)的傳輸主要基于有線或者無線以太網(wǎng)進行數(shù)據(jù)傳輸,在中等規(guī)模的地震勘探采集系統(tǒng)中,采集道的數(shù)目通常維持在幾百到上千的數(shù)量級別,這些采集道由中央工作站進行統(tǒng)一控制,中央工作站作為服務(wù)器通常需要承擔(dān)管理眾多采集道的功能。
在目前采用的傳統(tǒng)的C/S(服務(wù)器/客戶端)編程模型中,通常采用“一個線程對應(yīng)一個客戶端”的服務(wù)器方案,這種方案一方面會極大地消耗服務(wù)器的資源,另一方面會加大服務(wù)器的處理負(fù)擔(dān),服務(wù)器需要不停的在各個線程中進行切換,一旦切換失敗,就會導(dǎo)致服務(wù)器系統(tǒng)的崩潰。
本文針對地震勘探中地震采集道眾多的特點,采用IOCP(完成端口)機制合理地處理客戶端的并發(fā)和傳輸問題,使得服務(wù)器的資源可以被合理應(yīng)用和調(diào)度,有效解決地震勘探系統(tǒng)中服務(wù)器壓力問題,大幅度提高地震勘探服務(wù)器的運行效率。
1地震勘探網(wǎng)絡(luò)傳輸系統(tǒng)的構(gòu)成
本文研究的地震勘探系統(tǒng)主要由中央工作站和采集節(jié)點組成,中央工作站和采集節(jié)點之間通過無線網(wǎng)絡(luò)進行通信,無線通信采用802.11 b/g/n標(biāo)準(zhǔn)。采集節(jié)點部署在測線上,每條測線部署一定數(shù)量的采集節(jié)點,采集節(jié)點包含檢波器、采集設(shè)備、無線傳輸設(shè)備、GPS設(shè)備等部分,測線由拖曳車輛牽引。在網(wǎng)絡(luò)系統(tǒng)中部署一定數(shù)量的AP設(shè)備,所有的采集節(jié)點就近接入AP形成無線傳輸網(wǎng)絡(luò),所有的AP設(shè)備和中央工作站都接入交換機組成有線傳輸網(wǎng)絡(luò);網(wǎng)絡(luò)拓?fù)淠P蜑樾切途W(wǎng)絡(luò),避免了因為采集點的單點故障造成整個網(wǎng)絡(luò)系統(tǒng)的癱瘓。系統(tǒng)的結(jié)構(gòu)圖如圖1所示。
![](/images-w/news_dt/2016-05/0512-12-01.jpg)
中央工作站是網(wǎng)絡(luò)控制的核心,所有的地震采集客戶端都需要連接至中央工作站,中央工作站服務(wù)器系統(tǒng)承擔(dān)著協(xié)調(diào)各個地震采集道進行傳輸和指令控制的功能。
如圖2所示為地震勘探服務(wù)器的總體組成結(jié)構(gòu),其中采集模塊、指令包解析模塊等都建立在IOCP通信模塊的基礎(chǔ)上;IOCP通信模塊是整個服務(wù)器系統(tǒng)中最關(guān)鍵的組成模塊,IOCP通信模塊主要負(fù)責(zé)進行地震采集道的連接以及地震采集道和服務(wù)器之間的數(shù)據(jù)通信,本文將主要對IOCP通信模塊的原理和實現(xiàn)進行探索。
![](/images-w/news_dt/2016-05/0512-12-02.jpg)
2地震勘探網(wǎng)絡(luò)服務(wù)器系統(tǒng)設(shè)計和實現(xiàn)
2.1完成端口(IOCP)的通信框架
IOCP(IO Completion Port,完成端口)是一種重疊I/O模型,在微軟引入IOCP之前,服務(wù)器程序的其他設(shè)計方式通常為使用并發(fā)模型,所謂并發(fā)模型是指服務(wù)器在啟動時首先建立監(jiān)聽線程,此監(jiān)聽線程專門用于等待客戶端的連接請求,每當(dāng)有一個新的客戶端連接請求到達時,監(jiān)聽線程將會創(chuàng)建一個新的線程服務(wù)該請求。在響應(yīng)該服務(wù)請求的同時,監(jiān)聽線程將繼續(xù)等待下一個客戶連接請求,即當(dāng)存在多個客戶端連接時,就會存在多個線程每個線程服務(wù)于一個連接。
在通常地震勘探中,采集道的規(guī)模至少在100道以上,大型的勘探系統(tǒng)甚至含有數(shù)萬的采集道。在本文設(shè)計的拖曳式地震勘探系統(tǒng)中,地震道的規(guī)模在100~1 000道之間,中央工作站為4核心的CPU,采集道作為客戶端不斷地對中央工作站發(fā)起網(wǎng)絡(luò)請求,可見,本文設(shè)計的服務(wù)器系統(tǒng)中,客戶端的規(guī)模遠遠大于CPU的核心數(shù),如果仍然采用并發(fā)模型,服務(wù)器系統(tǒng)的性能將會急劇下降,不僅影響網(wǎng)絡(luò)傳輸?shù)目煽啃,也會影響網(wǎng)絡(luò)傳輸?shù)乃俣取?
IOCP模型即用來解決并發(fā)模型的缺陷,IOCP是一種特殊的內(nèi)核對象,它用于在異步I/O操作完成時通知應(yīng)用程序。一個IOCP內(nèi)核對象可以和多個設(shè)備對象關(guān)聯(lián),即IOCP對象可以監(jiān)控多個套接字上的多個網(wǎng)絡(luò)I/O請求。一個IOCP對象會包含四個隊列,即所監(jiān)控設(shè)備的隊列、當(dāng)前所有完成通知的隊列、等待線程隊列、運行線程隊列,如圖3所示。
![](/images-w/news_dt/2016-05/0512-12-03.jpg)
由圖3可以看出IOCP的工作方式:每當(dāng)針對某個設(shè)備的一個異步1/0操作完成以后,系統(tǒng)會把一個完成通知添加到通知隊列,然后再從等待線程隊列中喚醒一個線程,讓該線程處理完成通知,同時把該線程從等待隊列中轉(zhuǎn)移到運行線程。
2.2基于IOCP模型的服務(wù)器系統(tǒng)軟件設(shè)計
2.2.1IOCP模型的建立步驟
由前面的論述可知,IOCP模型主要由主線程和工作線程組成,本文在研究IOCP的原理的基礎(chǔ)上分別對IOCP的主線程和工作線程進行設(shè)計,使得服務(wù)器系統(tǒng)能夠滿足地震勘探的要求。
1)主線程設(shè)計
主線程是IOCP模型的主要組成部分,主線程主要完成對IOCP內(nèi)核對象的初始化和綁定等操作。
①創(chuàng)建完成端口
使用IOCP模型的第一步是創(chuàng)建IOCP內(nèi)核對象,在服務(wù)器程序中,調(diào)用CreateIoCompletionPort函數(shù)完成內(nèi)核對象的創(chuàng)建。
![](/images-w/news_dt/2016-05/0512-12-04.jpg)
②創(chuàng)建工作者線程
工作者線程池由等待線程隊列和運行線程組成,主要用于處理網(wǎng)絡(luò)中出現(xiàn)各種異步I/O請求。為了保證線程調(diào)度的高效性,通常將工作者線程池中的線程數(shù)目設(shè)置為CPU數(shù)目的兩倍,任意時刻,一個線程一定位于等待線程隊列或者運行線程隊列,服務(wù)器實現(xiàn)創(chuàng)建工作者線程的函數(shù)為CreateThread。
![](/images-w/news_dt/2016-05/0512-12-05.jpg)
![](/images-w/news_dt/2016-05/0512-12-06.jpg)
③創(chuàng)建監(jiān)聽套接字
監(jiān)聽套接字需要完成對地震采集道的監(jiān)聽操作,該監(jiān)聽套接字需要與IOCP內(nèi)核對象進行綁定才能完成監(jiān)聽操作。核心實現(xiàn)代碼為:
![](/images-w/news_dt/2016-05/0512-12-07.jpg)
2)工作線程設(shè)計
工作者線程池由等待線程隊列和運行線程組成,主要用于處理網(wǎng)絡(luò)中出現(xiàn)各種異步I/O請求。在本文設(shè)計的工作者線程中主要完成處理網(wǎng)絡(luò)接收和發(fā)送的請求,線程同步和線程的安全退出的功能。其主要實現(xiàn)如下:
①處理網(wǎng)絡(luò)的接收和發(fā)送
在IOCP模型中,所有的網(wǎng)絡(luò)接收和發(fā)送請求都通過調(diào)用WSARecv和WSASend完成。其主要實現(xiàn)邏輯如下:
![](/images-w/news_dt/2016-05/0512-12-08.jpg)
在WSARecv和WSASend的函數(shù)參數(shù)中,p _wbuf存儲數(shù)據(jù)的緩沖區(qū),用來給重疊操作傳遞參數(shù),p_ol是OVERLAPPED類型的結(jié)構(gòu)體指針,用來在異步I/O操作時傳遞參數(shù)。
②工作線程的安全退出
在關(guān)閉服務(wù)器的時候,需要合理地退出工作線程,并釋放相應(yīng)的Socket資源,從而避免造成內(nèi)存泄露,為此,本文設(shè)計的代碼不采用TerminateThread之類的強制停止線程的函數(shù),而采用PostQueuedCompletion-Status函數(shù),通過向完成通知隊列中添加完成通知項,線程在收到完成通知項的通知后退出線程執(zhí)行函數(shù)。關(guān)鍵代碼如下所示:
![](/images-w/news_dt/2016-05/0512-12-09.jpg)
2.2.2 IOCP模型的運行流程
根據(jù)IOCP的運行和建立步驟,得到如圖4所示的IOCP服務(wù)器模型的主要運行流程,由圖中可以看出,在IOCP的兩種線程模型中,主線程只進行IOCP的初始化連接工作,而工作者線程負(fù)責(zé)處理所有的網(wǎng)絡(luò)10請求操作。
![](/images-w/news_dt/2016-05/0512-12-10.jpg)
3系統(tǒng)測試
為了驗證本文設(shè)計的IOCP(完成端口)的通信模型的正確性,在已有的地震采集道的基礎(chǔ)上進行了傳輸性能測試。運行WireShark監(jiān)控軟件檢測網(wǎng)絡(luò)傳輸流量,地震采集道的采集頻率設(shè)置為4 kHz,采集時長設(shè)置為10 min,分別采用傳統(tǒng)的“一個客戶端對應(yīng)一個線程”的傳輸模型和IOCP的傳輸模型進行網(wǎng)絡(luò)傳輸?shù)乃俣葘Ρ葴y試,采用不同傳輸模型的網(wǎng)絡(luò)流量圖的對比如圖5所示。
![](/images-w/news_dt/2016-05/0512-12-11.jpg)
在圖5中,橫坐標(biāo)代表傳輸時間,單位為s,縱坐標(biāo)表示傳輸速度,單位為Byte,上圖是采用傳統(tǒng)的“一個客戶端對應(yīng)一個線程”的地震勘探傳輸模型方式得到的網(wǎng)絡(luò)傳輸速度圖,下圖為采用本文設(shè)計的IOCP傳輸模型得到的網(wǎng)絡(luò)傳輸速度圖,兩者對比可以發(fā)現(xiàn),采用傳統(tǒng)的傳輸模型得到的傳輸速度慢,并且速度十分不穩(wěn)定,平均速度維持在25 KByte/s,這表明系統(tǒng)耗費了大量的時間在進行線程切換而不是數(shù)據(jù)接收。而在采用IOCP的傳輸模型中,速度是傳統(tǒng)傳輸模型的5~6倍,高達1.6 MByte/s,并且傳輸速度十分穩(wěn)定?梢钥匆,采用IOCP模型之后的地震傳輸網(wǎng)絡(luò)在傳輸速度和傳輸?shù)姆(wěn)定性方面都得到了理想地提高。在
此基礎(chǔ)上進行傳輸?shù)目煽啃则炞C,如圖6所示。
![](/images-w/news_dt/2016-05/0512-12-12.jpg)
在圖6中橫坐標(biāo)代表采樣時間,單位為s,縱坐標(biāo)代表波形幅度,單位為V,由圖中可得,采用IOCP模型的服務(wù)器系統(tǒng)不僅可以保證可靠的傳輸速度,也可以保證地震波在傳輸過程中不發(fā)生失真,充分驗證了本系統(tǒng)的傳輸可靠性。
4結(jié)論
本文針對制約地震勘探系統(tǒng)發(fā)展的網(wǎng)絡(luò)傳輸問題,設(shè)計了一種基于IOCP模型的服務(wù)器系統(tǒng),在原有硬件條件不變的情況下,相對于傳統(tǒng)的地震勘探服務(wù)器模型,網(wǎng)絡(luò)的傳輸速度和可靠性得到了理想的提高,可以有效解決目前地震勘探系統(tǒng)中的網(wǎng)絡(luò)傳輸問題,系統(tǒng)的主要特點為網(wǎng)絡(luò)傳輸高速可靠,符合現(xiàn)代低成本、高效地震勘探的發(fā)展方向。