專利名稱:一種支持多客戶端的rdma消息發(fā)送方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù),具體來說,涉及一種在單服務(wù)器和多個客戶端之間通過高速的InfiniBand網(wǎng)絡(luò)來進(jìn)行RDMA通信的方法。
背景技術(shù):
InfiniBand網(wǎng)絡(luò)是一種支持多并發(fā)鏈接的“轉(zhuǎn)換線纜”技術(shù),該技術(shù)的主要特點是高帶寬(單條鏈路的SDR帶寬為2. 5(ibps,DDR為5(ibps,QDR為10(ibps,如果需要更大的帶寬,只需要增加鏈路數(shù)量即可,比如4x的QDR帶寬可以達(dá)到40(ibpS)、低時延(交換機(jī)延時 140ns、應(yīng)用程序延時3 μ s、新的網(wǎng)卡技術(shù)將使應(yīng)用程序延時降低到1 μ s水平)、系統(tǒng)擴(kuò)展性好(可輕松實現(xiàn)完全無擁塞的數(shù)萬端設(shè)備的hfiniBand網(wǎng)絡(luò))。另外,InfiniBand標(biāo)準(zhǔn)支持RDMA(Remote Direct Memory Access),使得在使用hfiniBand構(gòu)筑服務(wù)器、存儲器網(wǎng)絡(luò)時比萬兆以太網(wǎng)以及Fibre Channel具有更高的性能、效率和靈活性。傳統(tǒng)的TCP/IP技術(shù)在數(shù)據(jù)包處理過程中,要經(jīng)過操作系統(tǒng)及其他軟件層,需要占用大量的服務(wù)器資源和內(nèi)存總線帶寬。所產(chǎn)生嚴(yán)重的延遲來自系統(tǒng)龐大的開銷以及數(shù)據(jù)在系統(tǒng)內(nèi)存、處理器緩存和網(wǎng)絡(luò)控制器緩存之間來回進(jìn)行復(fù)制移動。而在RDMA中數(shù)據(jù)的處理不需要經(jīng)過操作系統(tǒng)和其他軟件層,它使得網(wǎng)卡可以直接與應(yīng)用內(nèi)存相互傳輸數(shù)據(jù),從而消除了在應(yīng)用內(nèi)存與內(nèi)核內(nèi)存之間復(fù)制數(shù)據(jù)的需要,整個傳輸過程如1所示。主機(jī)1中緩沖區(qū)1里面的數(shù)據(jù)可以直接經(jīng)網(wǎng)卡寫入主機(jī)2的緩沖區(qū)2中,整個過程不需要處理器和操作系統(tǒng)的參與。但是,如果同時有多個客戶端注冊到服務(wù)器,那么整個系統(tǒng)的管理將變得非常復(fù)雜,甚至可能出錯。比如其中一個客戶端斷開后不能影響其他客戶端的通信,也不能因為一個客戶端持續(xù)地發(fā)送數(shù)據(jù)而影響其他客戶端的數(shù)據(jù)發(fā)送。
發(fā)明內(nèi)容
本發(fā)明提供了一種安全高效的單服務(wù)器、多客戶端的通信機(jī)制,使得一臺計算機(jī)可以通過InfiniBand高速地將數(shù)據(jù)同時發(fā)往多個客戶端,且多客戶端之間的數(shù)據(jù)傳送互不影響。一種支持多客戶端的RDMA消息發(fā)送方法,服務(wù)器和客戶端之間通過高速的 InfiniBand連接,服務(wù)器首先對hfiniBand環(huán)境進(jìn)行初始化,并在任意時刻接受客戶端的注冊,一旦注冊成功即可以通過InfiniBand網(wǎng)絡(luò)向多個客戶端高速發(fā)送數(shù)據(jù),期間,任何地方出現(xiàn)錯誤都可以將所有環(huán)境重建以保證傳輸?shù)恼_進(jìn)行;客戶端從服務(wù)器接受數(shù)據(jù)并正確處理,整個流程受超時機(jī)制的控制,一旦在超時時限到達(dá)的時候收不到數(shù)據(jù),則認(rèn)為鏈路出現(xiàn)問題,客戶端主動重連服務(wù)器。優(yōu)選的,所述服務(wù)器采用Linux系統(tǒng),客戶端采用Windows系統(tǒng)。優(yōu)選的,所述服務(wù)器在系統(tǒng)啟動時對整個系統(tǒng)進(jìn)行初始化,包括對硬件的初始化和軟件的初始化,硬件為對InfiniBand的相關(guān)操作,軟件為對緩沖區(qū)的分配和通信協(xié)議的設(shè)定。優(yōu)選的,所述服務(wù)器采用多線程方式進(jìn)行工作;包括主線程,用于設(shè)定配置參數(shù)、創(chuàng)建監(jiān)聽線程,以及退出清理工作;監(jiān)聽線程,用于與隨時可能發(fā)起注冊請求的客戶端建立初始連接,雙方交換RDMA 通信的必要信息;發(fā)送線程,用于通過hfiniBand網(wǎng)絡(luò)將每一幀數(shù)據(jù)發(fā)送至客戶端。優(yōu)選的,所述配置參數(shù)包括監(jiān)聽線程的端口、InfiniBand設(shè)備名和端口號、每一幀的大小和幀緩沖區(qū)的數(shù)目。優(yōu)選的,所述服務(wù)器采用RDMA方式將數(shù)據(jù)發(fā)往客戶端。優(yōu)選的,所述RDMA方式可以在不需要客戶端顯示接收的情況下將數(shù)據(jù)發(fā)往客戶端的緩沖區(qū)。優(yōu)選的,所述服務(wù)器在每個幀前附加一個私有區(qū),在服務(wù)器和所有客戶端間一同傳輸,私有區(qū)中存放一個64位的整數(shù)序列號,服務(wù)器對每一幀數(shù)據(jù)以遞增1的方式編號,客戶端檢測到序列號不連續(xù)的錯誤,反饋給客戶端錯誤代碼。優(yōu)選的,所述服務(wù)器在出現(xiàn)錯誤時,向用戶準(zhǔn)確地告知出錯的位置,以便用戶可以根據(jù)出錯提示修復(fù)錯誤。
圖1是RDMA傳輸過程示意2是本發(fā)明的工作過程示意3是服務(wù)器工作流程4是客戶端工作流程圖
具體實施例方式本發(fā)明采用客戶端服務(wù)器模型設(shè)計,支持單個服務(wù)器和多個客戶端,它們之間通過高速的InfiniBand連接,且支持跨平臺,服務(wù)器采用Linux系統(tǒng),客戶端采用Windows系統(tǒng),整體結(jié)構(gòu)如圖2所示。服務(wù)器首先對MfiniBand環(huán)境進(jìn)行初始化,并在任意時刻接受客戶端的注冊,一旦注冊成功即可以通過InfiniBand網(wǎng)絡(luò)向多個客戶端高速發(fā)送數(shù)據(jù),期間,任何地方出現(xiàn)錯誤都可以將所有環(huán)境重建以保證傳輸?shù)恼_進(jìn)行。另一方面,系統(tǒng)中存在多個Windows 客戶端,它的主要功能是從服務(wù)器接受數(shù)據(jù)并正確處理,整個流程受超時機(jī)制的控制,一旦在超時時限到達(dá)的時候收不到數(shù)據(jù),可以認(rèn)為鏈路出現(xiàn)問題,客戶端會主動重連服務(wù)器。服務(wù)器工作服務(wù)器運行在Linux系統(tǒng)上,負(fù)責(zé)將用戶的數(shù)據(jù)發(fā)送到客戶端。它包括初始化、客戶端管理、數(shù)據(jù)的發(fā)送和可靠性等多方面的任務(wù)。初始化,在系統(tǒng)啟動時需要對整個系統(tǒng)進(jìn)行初始化的操作,包括對硬件的初始化和軟件的初始化,硬件主要是對InfiniBand的相關(guān)操作,軟件則主要指對緩沖區(qū)的分配和一些通信協(xié)議的設(shè)定??蛻舳斯芾?,為了支持多個客戶端,服務(wù)器的設(shè)計需要按多線程方式進(jìn)行;另外,不排除用戶使用多線程來處理和發(fā)送數(shù)據(jù),因此采用多線程的程序結(jié)構(gòu),各線程的角色描述如下主線程,用戶通過主線程設(shè)定一些配置參數(shù)(如監(jiān)聽線程的端口、InfiniBand設(shè)備名和端口號、每一幀的大小、幀緩沖區(qū)的數(shù)目等等)、創(chuàng)建監(jiān)聽線程,以及做必要的退出清
理工作。監(jiān)聽線程,用于與隨時可能發(fā)起注冊請求的客戶端建立初始連接,雙方交換RDMA 通信的必要信息。這是基于這樣一個事實RDMA雙方通信之前,必須通過另外一種通信通道交換彼此的身份和認(rèn)證信息,否則RDMA連接將無法建立。這里的另外一種通信通道指基于 InfiniBand 的 socket 通信。發(fā)送線程,通過hfiniBand網(wǎng)絡(luò)將每一幀數(shù)據(jù)發(fā)送至客戶端。程序整體流程如圖3所示發(fā)送數(shù)據(jù),服務(wù)器的主要功能是將用戶的數(shù)據(jù)盡快發(fā)往所有的客戶端,這里采取的發(fā)送方式RDMA,即遠(yuǎn)程DMA,可以在不需要客戶端顯示接收的情況下將數(shù)據(jù)發(fā)往客戶端的緩沖區(qū)。這樣可以充分利用InfiniBand網(wǎng)絡(luò)高帶寬、低延遲的特點將用戶的數(shù)據(jù)高速發(fā)送出去。根據(jù)用戶的要求,這里要設(shè)置超時機(jī)制,一旦超過一定時間數(shù)據(jù)仍然沒有發(fā)送出去,則停止發(fā)送,將問題通知用戶并等待用戶的進(jìn)一步操作。服務(wù)器始終只發(fā)送實時數(shù)據(jù)。 任何發(fā)送操作都是非阻塞的,若失敗一般不作重新嘗試。為了檢測由此導(dǎo)致的丟幀現(xiàn)象,在每個幀前附加一個私有區(qū),在服務(wù)器和所有客戶端間一同傳輸,私有區(qū)中存放一個64位的整數(shù)序列號,服務(wù)器對每一幀數(shù)據(jù)以遞增1的方式編號,即使對所有客戶端發(fā)送失敗,也要維持序列號的遞增??蛻舳藱z測序列號不連續(xù)的錯誤,反饋給客戶端代碼??煽啃?,服務(wù)器要注意的一個問題是,InfiniBand或者其它資源使用過程中出現(xiàn)錯誤,絕大多數(shù)在系統(tǒng)中嘗試修復(fù)或者簡單忽略(如傳送序列問題等),不向用戶呈現(xiàn)。但是也有一些錯誤必須呈現(xiàn)給用戶,比如明顯的內(nèi)存分配失敗,設(shè)備初始化失敗。本發(fā)明的一大特色是需要向用戶準(zhǔn)確地告知出錯的位置,以便用戶可以根據(jù)出錯提示修復(fù)錯誤。客戶端工作整個過程如圖4所示。一開始即初始化socket環(huán)境用以連接服務(wù)器,如果失敗則不斷重試;成功后進(jìn)入接收數(shù)據(jù)狀態(tài),如果經(jīng)過一段時間沒有收到數(shù)據(jù),則超時重新初始化并建立連接,這是基于客戶現(xiàn)場環(huán)境比較復(fù)雜,各個地方都可能出現(xiàn)問題,而這些問題可以由工程師解決,客戶端程序只需要不停重試即可。
權(quán)利要求
1.一種支持多客戶端的RDMA消息發(fā)送方法,其特征在于服務(wù)器和客戶端之間通過高速的InfiniBand連接,服務(wù)器首先對InfiniBand環(huán)境進(jìn)行初始化,并在任意時刻接受客戶端的注冊,一旦注冊成功即可以通過InfiniBand網(wǎng)絡(luò)向多個客戶端高速發(fā)送數(shù)據(jù),期間, 任何地方出現(xiàn)錯誤都可以將所有環(huán)境重建以保證傳輸?shù)恼_進(jìn)行;客戶端從服務(wù)器接受數(shù)據(jù)并正確處理,整個流程受超時機(jī)制的控制,一旦在超時時限到達(dá)的時候收不到數(shù)據(jù),則認(rèn)為鏈路出現(xiàn)問題,客戶端主動重連服務(wù)器。
2.如權(quán)利要求1所述的方法,其特征在于所述服務(wù)器采用Linux系統(tǒng),客戶端采用 Windows 系統(tǒng)。
3.如權(quán)利要求1所述的方法,其特征在于所述服務(wù)器在系統(tǒng)啟動時對整個系統(tǒng)進(jìn)行初始化,包括對硬件的初始化和軟件的初始化,硬件為對InfiniBand的相關(guān)操作,軟件為對緩沖區(qū)的分配和通信協(xié)議的設(shè)定。
4.如權(quán)利要求1所述的方法,其特征在于所述服務(wù)器采用多線程方式進(jìn)行工作;包括主線程,用于設(shè)定配置參數(shù)、創(chuàng)建監(jiān)聽線程,以及退出清理工作; 監(jiān)聽線程,用于與隨時可能發(fā)起注冊請求的客戶端建立初始連接,雙方交換RDMA通信的必要信息;發(fā)送線程,用于通過MfiniBand網(wǎng)絡(luò)將每一幀數(shù)據(jù)發(fā)送至客戶端。
5.如權(quán)利要求4所述的方法,其特征在于所述配置參數(shù)包括監(jiān)聽線程的端口、 InfiniBand設(shè)備名和端口號、每一幀的大小和幀緩沖區(qū)的數(shù)目。
6.如權(quán)利要求1所述的方法,其特征在于所述服務(wù)器采用RDMA方式將數(shù)據(jù)發(fā)往客戶端。
7.如權(quán)利要求6所述的方法,其特征在于所述RDMA方式可以在不需要客戶端顯示接收的情況下將數(shù)據(jù)發(fā)往客戶端的緩沖區(qū)。
8.如權(quán)利要求6所述的方法,其特征在于所述服務(wù)器在每個幀前附加一個私有區(qū),在服務(wù)器和所有客戶端間一同傳輸,私有區(qū)中存放一個64位的整數(shù)序列號,服務(wù)器對每一幀數(shù)據(jù)以遞增1的方式編號,客戶端檢測到序列號不連續(xù)的錯誤,反饋給客戶端錯誤代碼。
9.如權(quán)利要求1所述的方法,其特征在于所述服務(wù)器在出現(xiàn)錯誤時,向用戶準(zhǔn)確地告知出錯的位置,以便用戶可以根據(jù)出錯提示修復(fù)錯誤。
全文摘要
本發(fā)明提供了一種支持多客戶端的RDMA消息發(fā)送方法,服務(wù)器和客戶端之間通過高速的InfiniBand連接,服務(wù)器首先對InfiniBand環(huán)境進(jìn)行初始化,并在任意時刻接受客戶端的注冊,一旦注冊成功即可以通過InfiniBand網(wǎng)絡(luò)向多個客戶端高速發(fā)送數(shù)據(jù),期間,任何地方出現(xiàn)錯誤都可以將所有環(huán)境重建以保證傳輸?shù)恼_進(jìn)行;客戶端從服務(wù)器接受數(shù)據(jù)并正確處理,整個流程受超時機(jī)制的控制,一旦在超時時限到達(dá)的時候收不到數(shù)據(jù),則認(rèn)為鏈路出現(xiàn)問題,客戶端主動重連服務(wù)器。
文檔編號H04L29/06GK102404398SQ20111036429
公開日2012年4月4日 申請日期2011年11月17日 優(yōu)先權(quán)日2011年11月17日
發(fā)明者劉新春, 袁清波, 許建衛(wèi), 邵宗有 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司