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