專利名稱:一種在光纖通道環(huán)境中利用rdma存取數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機信息存儲技術(shù)領(lǐng)域,具體涉及一種在光纖通道環(huán)境中的存取數(shù)據(jù)的方法。
背景技術(shù):
在傳統(tǒng)的基于處理器到處理器的互聯(lián)中,主機端對于數(shù)據(jù)的復(fù)制操作是低效的, 所有的數(shù)據(jù)都需要在用戶緩沖區(qū)與內(nèi)核緩沖區(qū)間傳輸,這樣的數(shù)據(jù)復(fù)制操作需要極大的內(nèi)存帶寬。當(dāng)數(shù)據(jù)到達(dá)網(wǎng)絡(luò)接口時,需要通過DMA(直接內(nèi)存訪問,Direct Memory Access)等方式從網(wǎng)絡(luò)設(shè)備接口緩沖區(qū)拷貝到內(nèi)核緩沖區(qū),然后由主機處理器將數(shù)據(jù)從內(nèi)核緩沖區(qū)移動到用戶緩沖區(qū),在這過程中,需要進行大量的讀寫操作,反向亦然。這種方法降低了 CPU 的效率,也消耗了大量的內(nèi)存帶寬。而RDMA技術(shù)為以上存在的問題提出了新的解決方案。RDMA(Remote Direct Memory Access)全名是遠(yuǎn)程直接數(shù)據(jù)存取,RDMA讓計算機可以直接讀寫其它計算機的內(nèi)存,而不需要經(jīng)過處理器參與耗時的傳輸,避免了數(shù)據(jù)在內(nèi)核內(nèi)存與用戶內(nèi)存之間的多次拷貝,從而有效地騰出了系統(tǒng)總線和CPU周期,改善了應(yīng)用系統(tǒng)的性能。目前隨著高性能計算與應(yīng)用服務(wù)的發(fā)展,更多的高性能存儲區(qū)域網(wǎng)絡(luò)開始利用高速網(wǎng)絡(luò)與專有協(xié)議來構(gòu)建。這主要包括基于以太網(wǎng)與iSCSI協(xié)議的IP-SAN、基于 Infiniband(IB)的IB-SAN,以及基于光纖通道和FCP協(xié)議的FC-SAN。IP-SAN可以利用目前廣泛使用的以太網(wǎng),成本較低,但是其網(wǎng)絡(luò)處理協(xié)議需要占用較多的主機CPU時間,針對此問題,RDMA通過在網(wǎng)卡上將可靠傳輸協(xié)議固化于硬件,以及支持零拷貝技術(shù)和內(nèi)核內(nèi)存旁路技術(shù)這兩種途徑來達(dá)到提高性能的目的。IB網(wǎng)絡(luò)利用RDMA機制和HCA的專用協(xié)議卸載引擎可以有效降低主機處理網(wǎng)絡(luò)協(xié)議的開銷,在IB-SAN中廣泛使用的基于RDMA的協(xié)議有 SRP (SCSI RDMA PR0T0CAL)和 iSER(Iscsi extensions for RDMA)。FC-SAN 物理上需要基于光纖通道網(wǎng)絡(luò),光纖通道技術(shù)所具有的高速、高可靠性以及穩(wěn)定安全性傳輸特點,使其在SAN中得到了廣泛應(yīng)用,目前FC中支持RDMA的協(xié)議主要是FC-AE-RDMA(Fibre Channel SCSI_3Remote Direct Memory Access),F(xiàn)C-AE-RDMA 協(xié)議是光纖通道為了應(yīng)用于航空電子環(huán)境提供了一套FC-AE(Fibre Channel Avionics Environment)的協(xié)議子集,在 FC-AE-RDMA協(xié)議中制定了在實現(xiàn)實時光纖通道網(wǎng)絡(luò)時所遵循的規(guī)定,它是基于SCSI-3的輕量級、低延遲、低開銷通信協(xié)議,用于航電系統(tǒng)中各部件之間的通信,該協(xié)議的關(guān)鍵是通信雙方的發(fā)起端anitiator)在對遠(yuǎn)程目標(biāo)端(Target)進行讀寫數(shù)據(jù)時可以直接訪問其 RDMA內(nèi)存,而不必經(jīng)過處理器耗時的傳輸以及避免內(nèi)核內(nèi)存和應(yīng)用內(nèi)存之間數(shù)據(jù)的拷貝所造成的開銷,這對存儲性能的提升具有很重要的意義。此前,國外對FC的研究及應(yīng)用大多集中在存儲區(qū)域網(wǎng)(SAN)方面,如FCP協(xié)議,而對FC-AE-RDMA的研究非常少。相對于FCP 協(xié)議,F(xiàn)C-AE-RDMA協(xié)議針對其作了某些限制,不僅支持對遠(yuǎn)端結(jié)點的內(nèi)存空間的直接訪問, 同時還調(diào)整了 FCP寫事務(wù)的處理流程,以更好的支持低延遲實時服務(wù)。
發(fā)明內(nèi)容
本發(fā)明提出一種在光纖通道環(huán)境中利用RDMA技術(shù)存取數(shù)據(jù)的方法,解決FC-SAN 存儲環(huán)境下存取數(shù)據(jù)時,數(shù)據(jù)在核態(tài)緩沖區(qū)與用戶緩沖區(qū)之間相互拷貝而導(dǎo)致存儲性能低下的問題。在Linux系統(tǒng)下,由于權(quán)限保護的因素,用戶態(tài)應(yīng)用程序不能直接訪問系統(tǒng)內(nèi)核。 用戶態(tài)應(yīng)用程序可以通過系統(tǒng)調(diào)用方式訪問系統(tǒng)內(nèi)核,內(nèi)核態(tài)下的設(shè)備驅(qū)動模塊可以看成系統(tǒng)內(nèi)核和硬件設(shè)備之間的接口,整個系統(tǒng)內(nèi)核和其上層的應(yīng)用程序要想使用硬件的話都要通過驅(qū)動程序訪問硬件。設(shè)備驅(qū)動程序?qū)?yīng)用程序屏蔽了底層硬件在實現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣操作外部設(shè)備。應(yīng)用程序可以使用標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成打開、讀寫、I/O控制、關(guān)閉等操作,而設(shè)備驅(qū)動程序就是要實現(xiàn)這些系統(tǒng)調(diào)用的函數(shù)。本發(fā)明中整個方法的步驟包括內(nèi)存注冊、零拷貝設(shè)置、發(fā)起端發(fā)送讀寫請求、目標(biāo)端接收請求并處理、發(fā)起端接收狀態(tài)幀、發(fā)起端讀取所請求數(shù)據(jù),具體如下(1)內(nèi)存注冊發(fā)起端與目標(biāo)端在進行數(shù)據(jù)傳輸之前,兩端分別要進行內(nèi)存注冊,將要使用的用戶空間的數(shù)據(jù)緩沖區(qū)鎖定在內(nèi)核空間內(nèi)存中,防止數(shù)據(jù)在RDMA操作過程中被系統(tǒng)內(nèi)核交換出去。內(nèi)存注冊的步驟為(1. 1)在內(nèi)核空間中通過get_free_pages函數(shù)調(diào)用申請到一片內(nèi)核內(nèi)存。(1. 2)通過virt_t0_page函數(shù)調(diào)用逐次獲得申請的這片內(nèi)核內(nèi)存的struct page 結(jié)構(gòu),并通過^tPageReserved函數(shù)調(diào)用設(shè)置page結(jié)構(gòu)的flag標(biāo)志為PG_reserved。(2)零拷貝設(shè)置本發(fā)明中采用Linux中的內(nèi)存映射機制mmap方法,在不需要內(nèi)存復(fù)制的情況下, 應(yīng)用程序可以直接使用mmap系統(tǒng)調(diào)用返回的虛擬地址來讀寫數(shù)據(jù)。內(nèi)核空間則需要實現(xiàn) file_operations的.mmap函數(shù),將(1)中注冊過的內(nèi)核物理內(nèi)存映射到用戶空間,使內(nèi)核空間和用戶空間訪問的是同一片數(shù)據(jù)緩沖區(qū),這樣數(shù)據(jù)在內(nèi)核空間和用戶空間就無須跨層拷貝,提高了數(shù)據(jù)傳輸效率。本發(fā)明中,通過在光纖適配器驅(qū)動模塊中實現(xiàn)filejperations的.mmap函數(shù)。用戶空間應(yīng)用程序和光纖適配器驅(qū)動模塊的設(shè)置分別為(2. 1)用戶空間應(yīng)用程序零拷貝的設(shè)置用戶空間應(yīng)用程序只需要調(diào)用mmap即可,其系統(tǒng)調(diào)用原型為mmap (caddr_t addr,size_t len,int prot,int flags,int fd,off—t offset)(2. 2)光纖適配器驅(qū)動模塊中零拷貝的設(shè)置光纖適配器驅(qū)動模塊中需要實現(xiàn)filejperations中的.mmap函數(shù),本實施例中的.mmap的實現(xiàn)例程為ml505_mmap,該例程中的最重要的實現(xiàn)映射的機制是remap_pfn_ range函數(shù)調(diào)用,它將(1)中注冊過的內(nèi)存做了對應(yīng)的映射,從而使得用戶空間的應(yīng)用程序和內(nèi)核空間所注冊過的內(nèi)存共享同一片物理內(nèi)存,進而實現(xiàn)了零拷貝設(shè)置。(3)發(fā)起端發(fā)起讀寫請求(3. 1)用戶空間應(yīng)用程序通過read/write系統(tǒng)調(diào)用向系統(tǒng)內(nèi)核發(fā)送讀寫請求;
(3. 2)通過虛擬字符設(shè)備接口,讀寫請求傳遞到內(nèi)核空間的光纖適配器驅(qū)動模塊,該光纖適配器驅(qū)動模塊根據(jù)read/write系統(tǒng)調(diào)用的讀寫首地址和讀寫長度,依照 FC-AE-RDMA協(xié)議的規(guī)程將其封裝為FCP_CMND協(xié)議幀;(3. 3)在光纖適配器驅(qū)動模塊中設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的DMA功能,將FCP_CMND協(xié)議幀從核態(tài)內(nèi)存發(fā)送到光纖適配器硬件緩存中。(3. 4)在光纖適配器驅(qū)動模塊中設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的發(fā)送功能,將FCP_CMND協(xié)議幀從光纖適配器硬件緩存發(fā)送到光纖通道鏈路上,并傳送到到目標(biāo)端。(4)目標(biāo)端接收請求并處理(4. 1)目標(biāo)端的光纖適配器驅(qū)動模塊中,設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的接收功能,將光纖通道鏈路上的FCP_CMND協(xié)議幀接收到光纖適配器硬件緩存中。(4. 2)目標(biāo)端的光纖適配器驅(qū)動模塊中,設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的 DMA功能,將光纖適配器硬件緩存中的FCP_CMND協(xié)議幀存放到內(nèi)核內(nèi)存中。。(4. 3))目標(biāo)端的光纖適配器驅(qū)動模塊解析收到的FCP_CMND協(xié)議幀并處理。如果是讀請求,則目標(biāo)端根據(jù)要讀取的塊設(shè)備、讀取首地址、讀取長度,發(fā)起讀盤操作,將結(jié)果數(shù)據(jù)從塊設(shè)備讀到目標(biāo)端注冊過的內(nèi)存區(qū)域,并將結(jié)果數(shù)據(jù)封裝為FCP_DATA 協(xié)議幀,然后將封裝好的FCP_DATA協(xié)議幀寫到發(fā)起端,發(fā)起端接收到FCP-DATA協(xié)議幀,解析該幀,即去掉幀頭幀尾,得到有效數(shù)據(jù)部分,然后將有效數(shù)據(jù)存放到發(fā)起端中所注冊過的內(nèi)存區(qū)域中。; 如果是寫請求,發(fā)起端將待寫數(shù)據(jù)封裝為FCP_DATA協(xié)議幀,然后由光纖適配器驅(qū)動模塊將FCP_DATA協(xié)議幀發(fā)送給目標(biāo)端,目標(biāo)端的光纖適配器模塊接收此FCP_DATA協(xié)議幀,解析后將有效數(shù)據(jù)直接發(fā)送到目標(biāo)端注冊過的內(nèi)存域中,目標(biāo)端此后等待合適的時機, 將目標(biāo)端注冊過的內(nèi)存域中的數(shù)據(jù)回寫到目標(biāo)端的磁盤上。(4.4)數(shù)據(jù)讀寫操作結(jié)束后,根據(jù)FC-AE-RDMA協(xié)議的規(guī)程,目標(biāo)端要返回給發(fā)起端FCP_RSP狀態(tài)幀。(5)發(fā)起端接收狀態(tài)幀發(fā)起端接收到FCP_RSP狀態(tài)幀,然后對其解析,將該FCP_RSP狀態(tài)幀的結(jié)果字段 (result)提取出來,并通過異步信號中斷的方式告訴用戶態(tài)應(yīng)用程序,用戶空間應(yīng)用程序通過結(jié)果字段(result)判斷讀寫過程是否正確,若正確,則進一步從發(fā)起端注冊過的內(nèi)存域中讀取所請求的數(shù)據(jù)。如果是讀請求,本發(fā)明還包括發(fā)起端讀取所請求數(shù)據(jù)的步驟對于步驟(5)中描述的從注冊過的內(nèi)存中讀取所請求的數(shù)據(jù),用戶空間應(yīng)用程序的做法很簡單,只需要從 mmap系統(tǒng)調(diào)用返回的地址處,開始讀寫即可,讀寫長度為發(fā)起端該讀寫請求設(shè)定的長度。本發(fā)明的在光纖通道環(huán)境中利用RDMA存取數(shù)據(jù)的方法,不同于傳統(tǒng)的數(shù)據(jù)存取方式。RDMA技術(shù)可以將用戶空間應(yīng)用程序要傳輸?shù)臄?shù)據(jù)直接發(fā)送到物理光纖適配器上,而不需要像傳統(tǒng)方式那樣使得數(shù)據(jù)在用戶內(nèi)存和核態(tài)內(nèi)存之間的相互拷貝。將RDMA技術(shù)應(yīng)用于光纖通道環(huán)境中,尤其是在FC-SAN存儲網(wǎng)絡(luò)中,可以有效地降低數(shù)據(jù)存取時對系統(tǒng)內(nèi)存帶寬和處理器的開銷,對數(shù)據(jù)存儲性能有很大程度的提升。
圖1為本發(fā)明的流程示意2為內(nèi)存注冊的示意圖。圖3為零拷貝設(shè)置的示意圖。圖4為發(fā)起端發(fā)送讀寫請求的示意圖。圖5為目標(biāo)端接收請求并處理的示意圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明進一步詳細(xì)說明。本發(fā)明的一種在光纖通道環(huán)境中利用RDMA存取數(shù)據(jù)的方法,其步驟包括內(nèi)存注冊、零拷貝設(shè)置、發(fā)起端發(fā)送讀寫請求、目標(biāo)端接收請求并處理、發(fā)起端接收狀態(tài)幀、發(fā)起端讀取所請求數(shù)據(jù),如圖1所示,下面具體介紹各步驟的實施方式(1)內(nèi)存注冊步驟,如圖2所示發(fā)起端與目標(biāo)端在進行數(shù)據(jù)傳輸之前,兩端分別要進行內(nèi)存注冊,將要使用的用戶空間的數(shù)據(jù)緩沖區(qū)鎖定在內(nèi)核空間內(nèi)存中,防止數(shù)據(jù)在RDMA操作過程中被系統(tǒng)內(nèi)核交換出去。內(nèi)存注冊的步驟為(1. 1)申請核態(tài)內(nèi)存用戶空間應(yīng)用程序在調(diào)用open系統(tǒng)調(diào)用時,通過虛擬字符設(shè)備接口,會對應(yīng)到內(nèi)核空間的光纖適配器驅(qū)動模塊的ml505_open函數(shù),在該函數(shù)中通過get_free_pages函數(shù)調(diào)用申請一片內(nèi)核內(nèi)存,所申請的內(nèi)存大小根據(jù)用戶應(yīng)用程序的需求而定。(1. 2)設(shè)置保留標(biāo)志通過virt_t0_page函數(shù)調(diào)用逐次獲得(1. 1)中所申請的這片內(nèi)核內(nèi)存的struct page結(jié)構(gòu),并通過ktPageReserved函數(shù)調(diào)用設(shè)置page結(jié)構(gòu)的flag標(biāo)志為PG_reserved。(2)零拷貝設(shè)置步驟,如圖3所示在一般情況下,Linux用戶空間是不能直接訪問內(nèi)核空間的,用戶空間應(yīng)用程序的數(shù)據(jù)要想通過底層硬件設(shè)備發(fā)送到網(wǎng)絡(luò)上,必須經(jīng)過跨層的拷貝首先拷貝給內(nèi)核空間的驅(qū)動程序,然后才能發(fā)送到硬件設(shè)備上。當(dāng)要傳輸?shù)臄?shù)據(jù)量很大時,用戶空間應(yīng)用程序和內(nèi)核空間驅(qū)動程序的相互拷貝耗費大量CPU時間和內(nèi)存帶寬,嚴(yán)重影響系統(tǒng)的性能。為了克服這一弊端,本發(fā)明中采用Linux中的內(nèi)存映射機制mmap方法,在不需要內(nèi)存復(fù)制的情況下,應(yīng)用程序可以直接使用mmap系統(tǒng)調(diào)用返回的地址來讀寫數(shù)據(jù),同時在內(nèi)核空間的光纖適配器驅(qū)動模塊中通過虛擬字符設(shè)備接口對應(yīng)的實現(xiàn)file_0perati0ns 的.mmap函數(shù),即能將內(nèi)核空間申請的物理內(nèi)存映射到用戶空間,這樣內(nèi)核空間和用戶空間訪問的是同一片數(shù)據(jù)緩沖區(qū),數(shù)據(jù)在內(nèi)核空間和用戶空間就無須跨層的拷貝,提高了數(shù)據(jù)傳輸效率。用戶空間應(yīng)用程序和光纖適配器驅(qū)動模塊的設(shè)置分別為(2. 1)用戶空間應(yīng)用程序零拷貝的設(shè)置用戶空間應(yīng)用程序只需要調(diào)用mmap即可,其系統(tǒng)調(diào)用原型為mmap (caddr_t addr,size_t len,int prot,int flags,int fd,off—t offset)(2. 2)光纖適配器驅(qū)動模塊中零拷貝的設(shè)置
對應(yīng)的光纖適配器驅(qū)動模塊中需要實現(xiàn)filejperations中的.mmap函數(shù),本實施例中的.mmap的實現(xiàn)例程為ml505_mmap,該例程中的最重要的實現(xiàn)映射的機制是remap_ pfn_range函數(shù)調(diào)用,它將(1)中注冊過的內(nèi)存建立了新的頁表,從而將內(nèi)核空間所注冊過的內(nèi)存映射到了用戶空間應(yīng)用程序,使得用戶空間應(yīng)用程序和內(nèi)核空間所注冊過的內(nèi)存共享同一片物理內(nèi)存,進而實現(xiàn)了零拷貝設(shè)置。mmap系統(tǒng)調(diào)用的實現(xiàn)過程為(2. 1. 1)先通過文件系統(tǒng)定位要映射的文件;(2. 1. 2)權(quán)限檢查,映射的權(quán)限不會超過文件打開的方式,也就是說如果文件是以只讀方式打開的話,那么則不允許建立一個可寫映射;(2. 1. 3)從進程虛擬地址空間中獲得一個未使用的VMA對象,并對之進行初始化;(2. 1. 4)調(diào)用映射文件的mmap函數(shù),其主要工作是給vm_ops向量表賦值;(2. 1. 5)把該vma鏈入該進程的vma鏈中,如果可以和前后的vma合并則合并;(3)發(fā)起端發(fā)起讀寫請求,如圖4所示(3. 1)用戶空間應(yīng)用程序通過read/write系統(tǒng)調(diào)用發(fā)送讀寫請求;(3. 2)通過虛擬字符設(shè)備接口,讀寫請求傳遞到內(nèi)核態(tài)的光纖適配器驅(qū)動模塊,光纖適配器驅(qū)動模塊根據(jù)read/write系統(tǒng)調(diào)用的讀寫首地址和讀寫長度,依照FC-AE-RDMA 協(xié)議的規(guī)程將其封裝為FCP_CMND協(xié)議幀;(3. 3)在光纖適配器驅(qū)動模塊中設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的DMA功能,將FCP_CMND協(xié)議幀從核態(tài)內(nèi)存發(fā)送到光纖適配器硬件緩存中。(3. 4)在光纖適配器驅(qū)動模塊中設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的發(fā)送功能,將FCP_CMND協(xié)議幀從光纖適配器硬件緩存發(fā)送到光纖通道鏈路上,并發(fā)送到目標(biāo)端。(4)目標(biāo)端接收請求并處理,如圖5所示(4. 1)目標(biāo)端的光纖適配器驅(qū)動模塊中,,設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的接收幀功能,將光纖通道鏈路上的FCP_CMND協(xié)議幀接收到光纖適配器硬件緩存中。(4. 2)目標(biāo)端的光纖適配器驅(qū)動模塊中,設(shè)置相關(guān)硬件寄存器,觸發(fā)光纖適配器的 DMA功能,將光纖適配器硬件緩存中的FCP_CMND協(xié)議幀存放到內(nèi)核內(nèi)存中。(4. 3)目標(biāo)端的光纖適配器驅(qū)動模塊解析收到的FCP_CMND協(xié)議幀并處理。如果是讀請求,則目標(biāo)端根據(jù)要讀取的塊設(shè)備、讀取首地址、讀取長度,發(fā)起讀盤操作,將結(jié)果數(shù)據(jù)從塊設(shè)備讀到目標(biāo)端注冊過的內(nèi)存區(qū)域,并將結(jié)果數(shù)據(jù)封裝為FCP_DATA 協(xié)議幀,然后將封裝好的FCP_DATA協(xié)議幀寫到發(fā)起端,發(fā)起端接收到FCP-DATA協(xié)議幀,解析該幀,即去掉幀頭幀尾,得到有效數(shù)據(jù)部分,然后將有效數(shù)據(jù)存放到發(fā)起端中所注冊過的內(nèi)存區(qū)域中。如果是寫請求,發(fā)起端將待寫數(shù)據(jù)封裝為FCP_DATA協(xié)議幀,然后由光纖適配器驅(qū)動模塊將FCP_DATA協(xié)議幀發(fā)送給目標(biāo)端,目標(biāo)端的光纖適配器模塊接收此FCP_DATA協(xié)議幀,解析后將有效數(shù)據(jù)直接發(fā)送到目標(biāo)端注冊過的內(nèi)存域中,目標(biāo)端此后等待合適的時機, 將目標(biāo)端注冊過的內(nèi)存域中的數(shù)據(jù)回寫到本端的磁盤上。(4. 4)數(shù)據(jù)讀寫操作結(jié)束后,根據(jù)FC-AE-RDMA協(xié)議的規(guī)程,目標(biāo)端發(fā)送FCP_RSP狀態(tài)幀到發(fā)起端。(5)發(fā)起端接收狀態(tài)幀
7
發(fā)起端接收到FCP_RSP狀態(tài)幀,然后對其解析,將該FCP_RSP狀態(tài)幀的結(jié)果字段 (result)提取出來,并通過異步信號中斷的方式告訴用戶空間應(yīng)用程序,用戶空間應(yīng)用程序通過結(jié)果字段(result)判斷讀寫過程是否正確,若正確,則進一步從發(fā)起端注冊過的內(nèi)存域中讀取所請求的數(shù)據(jù)。(6)發(fā)起端讀取所請求數(shù)據(jù)對于步驟(5)中描述的從發(fā)起端注冊過的內(nèi)存中讀取所請求的數(shù)據(jù),用戶態(tài)應(yīng)用程序的做法很簡單,只需要從mmap系統(tǒng)調(diào)用返回的地址處,開始讀寫即可,讀寫長度為發(fā)起端該讀寫請求設(shè)定的長度。
權(quán)利要求
1.一種在光纖通道中利用RDMA存取數(shù)據(jù)的方法,具體包括如下步驟(1)對發(fā)起端與目標(biāo)端進行內(nèi)存注冊,即將發(fā)起端和目標(biāo)端中的用戶空間的數(shù)據(jù)緩沖區(qū)分別鎖定在各自的內(nèi)核空間內(nèi)存中;(2)發(fā)起端發(fā)起讀寫請求,具體過程為(2. 1)發(fā)起端的用戶空間應(yīng)用程序發(fā)送讀寫請求;(2. 2)將讀寫請求按照FC-AE-RDMA協(xié)議封裝為FCP_CMND協(xié)議幀;(2. 3)將FCP_CMND協(xié)議幀通過光纖通道發(fā)送到目標(biāo)端;(3)目標(biāo)端接收讀寫請求并處理,具體為首先,目標(biāo)端接收發(fā)送的FCP_CMND協(xié)議幀;其次,按照FC-AE-RDMA協(xié)議將接收的FCP_ CMND協(xié)議幀解析,獲得讀寫信息,包括讀寫塊設(shè)備、讀寫首地址以及讀寫長度;然后,根據(jù)所述讀寫信息進行讀寫操作;最后,數(shù)據(jù)讀寫操作結(jié)束后,目標(biāo)端返回給發(fā)起端結(jié)果狀態(tài)幀;其中,根據(jù)所述讀寫信息進行讀寫操作的具體過程為如果是讀請求,則目標(biāo)端根據(jù)要讀取的塊設(shè)備、讀取首地址和讀取長度,發(fā)起讀盤操作,將待讀取數(shù)據(jù)從目標(biāo)端的塊設(shè)備讀到目標(biāo)端注冊過的內(nèi)存區(qū)域,然后將其封裝為 FCP-DATA數(shù)據(jù)幀通過光纖通道發(fā)送到發(fā)起端;如果是寫請求,發(fā)起端將待寫數(shù)據(jù)直接發(fā)送到目標(biāo)端注冊過的內(nèi)存區(qū)域中,目標(biāo)端將目標(biāo)端注冊過的內(nèi)存區(qū)域中的數(shù)據(jù)回寫到本端的磁盤上。(4)發(fā)起端接收狀態(tài)幀,完成數(shù)據(jù)存取。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C3)中,如果是讀請求,發(fā)起端還需接收目標(biāo)端發(fā)送過來的FCP-DATA數(shù)據(jù)幀,其具體過程為首先,發(fā)起端解析FCP-DATA數(shù)據(jù)幀,即去掉幀頭幀尾,得到有效數(shù)據(jù)部分,然后,將所述有效數(shù)據(jù)存放到發(fā)起端中所注冊過的內(nèi)存區(qū)域中。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述的發(fā)起端中所注冊過的內(nèi)存區(qū)域需進行零拷貝設(shè)置,即將所注冊過的內(nèi)核空間內(nèi)存區(qū)域映射到用戶空間應(yīng)用程序內(nèi)存中, 使內(nèi)核空間和用戶空間應(yīng)用程序共享一片物理內(nèi)存。
4.根據(jù)權(quán)利要求1-3之一所述的方法,其特征在于,所述步驟中發(fā)起端接收狀態(tài)幀的具體過程為首先,解析狀態(tài)幀,提取狀態(tài)幀中的結(jié)果字段,然后并通過異步信號中斷的方式通知用戶空間應(yīng)用程序;用戶空間應(yīng)用程序可根據(jù)該結(jié)果字段判斷讀寫過程的正確性。
5.根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述用戶空間應(yīng)用程序通過mmap系統(tǒng)調(diào)用,獲取所注冊過的內(nèi)核內(nèi)存的虛擬地址,從而建立內(nèi)核空間內(nèi)存區(qū)域到用戶空間應(yīng)用程序內(nèi)存的映射關(guān)系。
6.根據(jù)權(quán)利要求1-5之一所述的方法,其特征在于,所述步驟(1)中,內(nèi)存注冊的具體步驟為(1.1)在內(nèi)核空間中申請一片內(nèi)核內(nèi)存;(1. 2)逐次獲得申請的該片內(nèi)核內(nèi)存的struct page結(jié)構(gòu),并設(shè)置該結(jié)構(gòu)的flag標(biāo)志為PG_reSerVed,即完成內(nèi)存注冊。
全文摘要
本發(fā)明公開了一種在光纖通道中利用RDMA存取數(shù)據(jù)的方法,具體包括如下步驟(1)對發(fā)起端與目標(biāo)端進行內(nèi)存注冊,即將發(fā)起端和目標(biāo)端中的用戶空間的數(shù)據(jù)緩沖區(qū)分別鎖定在各自的內(nèi)核空間內(nèi)存中;(2)發(fā)起端發(fā)起讀寫請求;(3)目標(biāo)端接收讀寫請求并處理目標(biāo)端接收發(fā)送的FCP_CMND協(xié)議幀;將接收的FCP_CMND協(xié)議幀解析,獲得讀寫信息,包括讀寫塊設(shè)備、讀寫首地址以及讀寫長度;然后,根據(jù)所述讀寫信息進行讀寫操作;最后,數(shù)據(jù)讀寫操作結(jié)束后,目標(biāo)端返回給發(fā)起端結(jié)果狀態(tài)幀;(4)發(fā)起端接收狀態(tài)幀,完成數(shù)據(jù)存取。本發(fā)明將RDMA技術(shù)應(yīng)用于光纖通道環(huán)境中,可以有效地降低數(shù)據(jù)存取時對系統(tǒng)內(nèi)存帶寬和處理器的開銷,對數(shù)據(jù)存儲性能有很大程度的提升。
文檔編號H04L29/08GK102571925SQ20111042487
公開日2012年7月11日 申請日期2011年12月19日 優(yōu)先權(quán)日2011年12月19日
發(fā)明者任佳, 馮丹, 劉景寧, 吳龍飛, 王曉靜, 童薇, 袁小燕 申請人:華中科技大學(xué)