摘要:介紹了基于SRP的IB-SAN的整體結(jié)構(gòu),分析了SCSI read/write命令處理過程中的兩個關(guān)鍵問題,即數(shù)據(jù)緩沖區(qū)的內(nèi)存注冊/注銷方法和RDMA操作的執(zhí)行者獲取對方數(shù)據(jù)緩沖區(qū)信息的方式。實驗結(jié)果表明,SRP能夠使InfiniBand網(wǎng)絡(luò)性能得到充分發(fā)揮,系統(tǒng)的總體I/O性能明顯優(yōu)于基于iSCSI協(xié)議的IB-SAN。
關(guān)鍵詞:網(wǎng)絡(luò)存儲; 存儲區(qū)域網(wǎng)絡(luò); 小型機系統(tǒng)接口遠(yuǎn)程直接內(nèi)存存取協(xié)議; 遠(yuǎn)程直接內(nèi)存存取;InfiniBand
中圖分類號:TP393文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2008)04-1167-04
隨著高性能計算與應(yīng)用服務(wù)的發(fā)展,更多的高性能存儲區(qū)域網(wǎng)絡(luò)開始利用高速網(wǎng)絡(luò)與專有協(xié)議來構(gòu)建。這主要包括基于光纖通道與FCP協(xié)議的FC-SAN、基于以太網(wǎng)與iSCSI協(xié)議的IP-SAN以及基于InfiniBand(簡稱IB)[1]的IB-SAN。FC-SAN需要專門的光纖通道網(wǎng)絡(luò),因此價格昂貴;IP-SAN可以利用目前廣泛使用的以太網(wǎng),成本較低,然而網(wǎng)絡(luò)協(xié)議處理需要占用較多的主機CPU時間,嚴(yán)重影響系統(tǒng)的總體性能;IB網(wǎng)絡(luò)具有高帶寬和低延遲的特點,利用RDMA(remote direct memory access)機制和HCA(host channel adapter)的專用協(xié)議卸載引擎可以有效降低主機處理網(wǎng)絡(luò)協(xié)議的開銷,在高性能計算與數(shù)據(jù)庫系統(tǒng)中得到日益廣泛的應(yīng)用[2,3]。在這些應(yīng)用環(huán)境中,利用已經(jīng)存在的IB網(wǎng)絡(luò)構(gòu)建SAN系統(tǒng)既能獲得較高的系統(tǒng)性能,又能保持網(wǎng)絡(luò)的簡單性。
IB-SAN可以基于多種協(xié)議來構(gòu)建,如iSCSI、SRP[4]和iSER(iSCSI extensions for RDMA)[5]。基于不同協(xié)議的IB-SAN具有不同的特點,而且具體的設(shè)計與實現(xiàn)方法直接影響著IB網(wǎng)絡(luò)性能的發(fā)揮和系統(tǒng)的總體性能。例如,利用IB的RDMA或者發(fā)送/接收方式傳輸數(shù)據(jù)前,數(shù)據(jù)緩沖區(qū)需要進行內(nèi)存注冊;傳輸數(shù)據(jù)時,RDMA操作的執(zhí)行者需要事先獲取對方數(shù)據(jù)緩沖區(qū)的地址、長度和訪問授權(quán)信息。如何減小或者消除這些過程的時間開銷,避免其成為系統(tǒng)瓶頸,是非常關(guān)鍵的問題。
1IB-SAN的構(gòu)建方法
IB-SAN可以基于iSCSI協(xié)議來構(gòu)建。具體實現(xiàn)時,底層傳輸協(xié)議可以使用TCP/IPoIB(IP over IB)[6]或SDP(socket direct protocol)。其中,IPoIB協(xié)議將IB網(wǎng)絡(luò)模擬成IP網(wǎng)絡(luò),因此在利用TCP/IPoIB協(xié)議構(gòu)建IB-SAN系統(tǒng)時,傳統(tǒng)的基于TCP/IP層的iSCSI協(xié)議與軟件無須作任何改動,但是這種方法不能利用RDMA機制的優(yōu)勢;SDP是IB結(jié)構(gòu)中一種輕量級通信協(xié)議,保持了TCP/IP上的SOCK_STREAM套接字語法,因此在使用SDP構(gòu)建IB-SAN系統(tǒng)時,只需在socket調(diào)用中改用SDP地址簇,通過很小的改動就能利用IB網(wǎng)絡(luò)的RDMA機制,取得更優(yōu)的系統(tǒng)性能。然而,與TCP的兼容也帶來了額外的協(xié)議開銷,IB網(wǎng)絡(luò)性能沒有得到充分發(fā)揮。
基于RDMA實現(xiàn)SCSI協(xié)議則能避免上述弊端。目前被廣泛使用的包括SRP和iSER。SRP是由ANSI T10委員會制定的標(biāo)準(zhǔn),iSER協(xié)議是IETF制定的草案,它們都支持以RDMA的方式傳輸SCSI數(shù)據(jù)。關(guān)于這兩種協(xié)議的優(yōu)劣目前依然存在許多爭論,不過通常認(rèn)為iSER在與iSCSI協(xié)議的兼容上具有優(yōu)勢,而SRP則因?qū)CSI協(xié)議直接映射到IB的傳輸層而更具性能優(yōu)勢。雖然本文介紹的是SRP,但因為兩種協(xié)議在傳輸?shù)膶崿F(xiàn)方法上非常近似,所以對于iSER協(xié)議的實現(xiàn)同樣具有參考價值。
2系統(tǒng)整體結(jié)構(gòu)
基于SRP的IB-SAN由兩部分組成,即SRP initiator和SRP target,其整體結(jié)構(gòu)如圖1所示。在initiator端,SCSI disk driver、SCSI unifying layer和SRP initiator driver分別對應(yīng)Linux SCSI子系統(tǒng)的upper、mid和lower三個層次。其中,SCSI disk driver向上層SCSI應(yīng)用提供通用的塊設(shè)備接口,接收read/write請求并將其轉(zhuǎn)換為SCSI請求;SCSI unifying layer將SCSI請求轉(zhuǎn)換為SCSI命令和數(shù)據(jù)傳輸序列交給底層執(zhí)行,并根據(jù)底層返回的SCSI響應(yīng)設(shè)置SCSI請求的完成狀態(tài);SRP initiator driver屬于一種特殊的SCSI設(shè)備,它通過IB driver提供的傳輸接口以SRP命令和響應(yīng)的形式向target分發(fā)SCSI命令,從target接收SCSI響應(yīng)并返回給上層,同時與target之間傳輸數(shù)據(jù)。三個層次中,只需SRP initiator driver,其余兩者完全利用Linux內(nèi)核已有組件,這使得initiator的設(shè)計與實現(xiàn)變得簡單。
在target端,SRP target driver由STML和FETD組成。其中,F(xiàn)ETD負(fù)責(zé)完成所有與SRP相關(guān)的工作,即通過IB driver提供的傳輸接口以SRP命令和響應(yīng)的形式從initiator接收SCSI命令,向initiator返回SCSI響應(yīng),同時與initiator之間交互數(shù)據(jù);STML則完全獨立于SRP,只負(fù)責(zé)處理SCSI命令,在本地設(shè)備存取數(shù)據(jù)并生成SCSI響應(yīng),再由FETD返回給initiator。另外,STML也負(fù)責(zé)SCSI錯誤處理以及SCSI狀態(tài)信息的維護。STML利用本地SCSI子系統(tǒng)完成上述工作,即將SCSI命令轉(zhuǎn)換為SCSI請求交給本地SCSI子系統(tǒng)。后者執(zhí)行實際的數(shù)據(jù)存取操作,根據(jù)操作結(jié)果生成SCSI響應(yīng)并將SCSI請求的完成狀態(tài)信息返回給STML。這種設(shè)計中FETD具有很好的通用性,不同方法實現(xiàn)的STML均可以與其協(xié)調(diào)工作。
STML可由不同的方法實現(xiàn):上述基于本地SCSI/SATA磁盤的實現(xiàn)稱為DISKIO模式。另外一種基于本地內(nèi)存的實現(xiàn),稱為MEMORYIO模式。在這種模式下,target并不提供持久的數(shù)據(jù)存儲空間,STML處理SCSI read命令時返回給initiator的數(shù)據(jù)就是內(nèi)存中的隨機數(shù)據(jù),處理SCSI write命令時收到的數(shù)據(jù)則直接丟棄。DISKIO模式用于實際應(yīng)用系統(tǒng),而MEMORYIO模式可用來對SRP和傳輸網(wǎng)絡(luò)進行性能分析。
3設(shè)計與實現(xiàn)
在SRP中,SCSI命令、響應(yīng)等控制信息由SRP initiator和target雙方執(zhí)行發(fā)送/接收操作傳輸,而數(shù)據(jù)由target執(zhí)行RDMA操作傳輸。執(zhí)行RDMA或發(fā)送/接收操作前,雙方的數(shù)據(jù)緩沖區(qū)必須進行內(nèi)存注冊,注冊后的數(shù)據(jù)緩沖區(qū)最終還需要注銷。內(nèi)存注冊/注銷開銷較大,如何減小其對系統(tǒng)性能的影響是系統(tǒng)設(shè)計與實現(xiàn)中一個非常關(guān)鍵的問題。另外,target執(zhí)行RDMA操作時需要事先獲取initiator端數(shù)據(jù)緩沖區(qū)的I/O虛擬地址、長度和訪問授權(quán)信息,稱為內(nèi)存描述符(memory descriptor,MD)。雖然SRP規(guī)定了獲取MD的多種方法,但是在特定情況下可以設(shè)計開銷更小的傳輸方法,從而獲得更好的系統(tǒng)性能。
3.1SCSI read/write命令處理過程
一個SCSI read命令的處理過程如圖2(a)所示:a)SRP initiator以發(fā)送/接收方式向target發(fā)送包含SCSI read命令等信息的SRP命令;b)Target執(zhí)行SCSI read命令,從本地存儲設(shè)備讀取相關(guān)數(shù)據(jù);c)Target以RDMA write方式將數(shù)據(jù)傳輸?shù)絠nitiator;d)Target以發(fā)送/接收方式向initiator發(fā)送包含SCSI響應(yīng)等狀態(tài)信息的SRP響應(yīng)。SCSI write命令的處理過程與此類似,如圖2(b)所示,不同之處在于步驟b)和c):Target先以RDMA read方式從initiator獲取數(shù)據(jù),然后執(zhí)行SCSI write命令保存數(shù)據(jù)到本地存儲設(shè)備。
3.2內(nèi)存注冊/注銷方法
利用RDMA或發(fā)送/接收方式傳輸數(shù)據(jù)前,雙方的數(shù)據(jù)緩沖區(qū)必須進行內(nèi)存注冊。內(nèi)存注冊包括pin-down和向HCA注冊兩個步驟。a)Pin-down即將數(shù)據(jù)緩沖區(qū)映射到HCA可以訪問的物理內(nèi)存,并且在傳輸數(shù)據(jù)期間維持映射關(guān)系不變,以確保HCA能夠安全訪問;b)向HCA注冊,包括在HCA上分配資源(如內(nèi)存保護表和內(nèi)存轉(zhuǎn)換表)和設(shè)置內(nèi)存保護及轉(zhuǎn)換關(guān)系并獲得訪問授權(quán)信息,這樣在使用I/O虛擬地址并且擁有訪問授權(quán)信息時,就能訪問該緩沖區(qū)。
SRP initiator和target均在Linux內(nèi)核空間實現(xiàn),使用的數(shù)據(jù)緩沖區(qū)都已經(jīng)映射到主機的物理內(nèi)存。此時有三種注冊方式,即PMR(physical memory region)、FMR(fast memory region)和DMAMR(DMA memory region)。經(jīng)過注冊的數(shù)據(jù)緩沖區(qū)最終需要注銷,上述三種注冊方式分別對應(yīng)各自的注銷方式。內(nèi)存注冊/注銷過程需要一定的時間開銷。如圖3所示,對于不同長度的數(shù)據(jù)緩沖區(qū),在PMR與DMAMR兩種方式中,注冊/注銷的時間開銷基本相同。不過兩種方式相比,前者要高出后者三個數(shù)量級;FMR注冊方式的時間開銷隨緩沖區(qū)長度的增大而增加,為DMAMR注冊方式的4.6~10.7倍,而FMR注銷方式的時間開銷在各種內(nèi)存段長度下基本相同,為DMAMR注銷方式的1.2~1.8倍。
FMR和DMAMR兩種方式的注冊時間開銷較小,原因是:a)FMR方式預(yù)先分配了若干內(nèi)存注冊所需的資源,待到執(zhí)行注冊請求時,只需設(shè)置內(nèi)存保護和地址轉(zhuǎn)換關(guān)系并獲得訪問授權(quán)信息;b)對于DMAMR方式,IB驅(qū)動已經(jīng)將可訪問的物理內(nèi)存進行統(tǒng)一注冊,注冊某一特定緩沖區(qū)時只需將其內(nèi)核邏輯地址轉(zhuǎn)換為物理地址,注冊過程更簡單。此外,注冊過程的簡化使得注銷過程也隨之簡化。
不過,F(xiàn)MR和DMAMR兩種方式也有局限性。其中,在FMR方式中,由于預(yù)先分配的資源有限,注冊過程可能會失敗;在DMAMR方式中,對于物理地址不連續(xù)的多段內(nèi)存,只能對每一段分別注冊,導(dǎo)致target需要進行多次RDMA操作,時間開銷會高于只執(zhí)行一次的情況[2]。另外,從設(shè)計與實現(xiàn)的難度來看,使用這兩種方式不如使用PMR方式簡單。
RDMA或發(fā)送/接收方式的使用者必須盡可能地減小或者消除內(nèi)存注冊/注銷的時間開銷,避免其成為系統(tǒng)瓶頸。這需要考慮分配和使用數(shù)據(jù)緩沖區(qū)的具體方法。在target端,數(shù)據(jù)緩沖區(qū)的分配、注冊和使用都由STML完成,因此可以通過預(yù)先注冊的方法來消除關(guān)鍵路徑中內(nèi)存注冊/注銷的時間開銷。具體方法是:STML在初始化過程中預(yù)先分配并注冊一定量的數(shù)據(jù)緩沖區(qū),在退出過程中注銷并釋放;在工作過程中,每次選取一段預(yù)先分配并注冊的數(shù)據(jù)緩沖區(qū)用于存放數(shù)據(jù),數(shù)據(jù)傳輸前后無須注冊/注銷,從而避免了相應(yīng)的時間開銷。因此,可以使用時間開銷較大但用法簡單的PMR方式。由于使用了預(yù)先注冊機制,其不會影響系統(tǒng)性能。
在initiator端,每個SCSI read/write命令涉及的數(shù)據(jù)緩沖區(qū)由上層SCSI應(yīng)用分配,然后由SRP initiator driver進行內(nèi)存注冊。由于緩沖區(qū)需要被頻繁地注冊與注銷,無法使用預(yù)先注冊機制,需要采用開銷較小的FMR和DMAMR方式相結(jié)合的機制。在處理一個SCSI read/write命令時,注冊過程如圖4所示。首先確定數(shù)據(jù)緩沖區(qū)映射到一段還是多段物理內(nèi)存。若為一段,則進行一次DMAMR注冊;否則,進行一次FMR注冊。但是FMR注冊可能失敗,這時需要對每段物理內(nèi)存進行一次DMAMR注冊。這里首先嘗試FMR注冊,目的是盡量只得到一個MD,以減小隨后向target傳輸MD的開銷,并且使得target處理該命令時只需進行一次RDMA操作,從而進一步提高系統(tǒng)性能。
3.3RDMA數(shù)據(jù)緩沖區(qū)信息獲取方式
SRP target執(zhí)行RDMA操作時需要事先獲取initiator端數(shù)據(jù)緩沖區(qū)的I/O虛擬地址、長度和訪問授權(quán)信息。在initiator端,每個SCSI read/write命令涉及的數(shù)據(jù)緩沖區(qū)在內(nèi)存注冊后對應(yīng)到一段或多段I/O虛擬地址空間,從而擁有一個或多個MD。MD的數(shù)目不同時,向target傳遞的方式也不同:a)單一的MD直接隨對應(yīng)的SCSI命令以發(fā)送/接收方式傳遞。b)多個MD則需間接傳遞,首先將多個MD連續(xù)存放于另外一個內(nèi)存段中,組成一個間接表(indirect table),并建立一個間接表內(nèi)存描述符(indirect table memory descriptor,ITMD)與之對應(yīng);然后,ITMD隨對應(yīng)的SCSI命令以發(fā)送/接收方式傳遞到target,最后target再根據(jù)ITMD以RDMA read方式獲取間接表的內(nèi)容,從而得到所有MD。c)傳遞多個MD的另一種方式是,ITMD以及間接表中的部分或所有MD隨對應(yīng)的SCSI命令以發(fā)送/接收方式傳遞,之后target以RDMA read方式讀取剩余MD。如圖5所示的例子中,SRP命令同時攜帶了間接表的前兩項MD1和MD2,因此,隨后target只需以RDMA read方式讀取MD3。
在設(shè)計與實現(xiàn)中,傳遞多個MD采取方式c)并對其進行了改進:Initiator為該SRP命令分配足夠的空間以攜帶所有MD,從而避免了隨后target讀取剩余MD的RDMA read操作,有利于獲得更好的系統(tǒng)性能。
4性能測試及分析
通過實驗將基于SRP的IB-SAN與基于iSCSI協(xié)議的IB-SAN(包括底層傳輸協(xié)議分別使用TCP/IPoIB和SDP兩種情況)以及傳統(tǒng)的IP-SAN在I/O性能方面進行比較和分析。
4.1實驗環(huán)境及測試方法
SRP initiator和target均使用相同的硬件配置:一個P4 2.80 GHz處理器(1 MB L2 cache),2 GB主存,一塊IB HCA(型號為Mellanox MT25204,單口20 Gbps);兩個HCA通過IB交換機(型號為Mellanox MT47396)相連。軟件配置為:SRP initiator運行Linux-2.6.16.13-4,IB HCA驅(qū)動和SRP initiator軟件來自O(shè)penFabrics OFED-1.1[7];SRP target運行Linux-2.4.21-4.EL,使用Mellanox IBGD-1.8.0 HCA驅(qū)動和Mellanox SRP target軟件[8]。為了進行比較和分析,基于iSCSI協(xié)議構(gòu)建IB-SAN(分別使用TCP/IPoIB和SDP作為底層傳輸協(xié)議),基于千兆以太網(wǎng)和iSCSI協(xié)議構(gòu)建傳統(tǒng)的IP-SAN。iSCSI軟件使用UNH iSCSI-1.7.00[9]。
測試工具使用dd-5.93。首先,把塊設(shè)備綁定為字符設(shè)備,然后對該字符設(shè)備進行性能測試,從而獲得塊設(shè)備的Raw I/O性能;另外,SRP target和iSCSI target均運行MEMORYIO模式,不存在從本地存取數(shù)據(jù)的開銷。上述測試方法使得測試結(jié)果能夠更準(zhǔn)確地反映存儲協(xié)議及其底層傳輸網(wǎng)絡(luò)對網(wǎng)絡(luò)存儲系統(tǒng)I/O性能的影響。
4.2性能測試及分析
實驗結(jié)果表明,SRP能夠使InfiniBand網(wǎng)絡(luò)性能得到充分發(fā)揮,系統(tǒng)的總體I/O性能明顯優(yōu)于其他SAN系統(tǒng)。讀帶寬如圖6(a)所示。在各種請求大小的情況下,基于SRP的IB-SAN的讀帶寬都高于其他SAN系統(tǒng),而且隨著請求的增加,其讀帶寬顯著增大,而其他SAN系統(tǒng)的增加趨勢比較緩慢。寫帶寬如圖6(b)所示,情況與讀類似。實際上,相對于基于iSCSI協(xié)議的IB-SAN,基于SRP的IB-SAN的帶寬提高程度最低為15%,最高為6.9倍。
對于基于iSCSI協(xié)議的IB-SAN,底層傳輸協(xié)議使用TCP/IPoIB時,雖然IB網(wǎng)絡(luò)具有較高的性能,但處理TCP/IPoIB協(xié)議所需的CPU開銷以及數(shù)據(jù)在IB網(wǎng)絡(luò)傳輸層和SCSI應(yīng)用層之間的內(nèi)存拷貝的開銷,限制了系統(tǒng)的總體性能,IB網(wǎng)絡(luò)的優(yōu)勢未能充分發(fā)揮;使用SDP時,與TCP的兼容也帶來了額外的協(xié)議開銷。相比之下,SRP由于其協(xié)議本身比較簡單,而且利用了高效的RDMA傳輸方式,能夠顯著提高系統(tǒng)的總體性能。
5結(jié)束語
本文首先介紹了IB-SAN的多種構(gòu)建方法并分析了各自的特點;然后給出了基于SRP的IB-SAN的整體結(jié)構(gòu);接著詳細(xì)分析了SCSI read/write命令及相關(guān)數(shù)據(jù)的傳輸過程中的兩個關(guān)鍵問題,包括數(shù)據(jù)緩沖區(qū)的內(nèi)存注冊/注銷方法和RDMA操作的執(zhí)行者獲取對方數(shù)據(jù)緩沖區(qū)信息的方式;最后通過實驗與基于iSCSI協(xié)議的IB-SAN以及基于千兆以太網(wǎng)和iSCSI協(xié)議的IP-SAN進行了比較和分析。實驗結(jié)果表明,SRP能夠使InfiniBand網(wǎng)絡(luò)性能得到充分發(fā)揮,系統(tǒng)的總體I/O性能明顯優(yōu)于基于iSCSI協(xié)議的IB-SAN。
參考文獻(xiàn):
[1]InfiniBand Trade Association. InfiniBand architecture specification volume 1, 2 (release 1.2)[EB/OL].(2004). http://www.infinibandta.org/specs/register/publicspec/vol1r1_2.zip.
[2]LIU Jiu-xing, WU Jie-sheng, PANDA D K. High performance RDMA-based MPI implementation over InfiniBand[J]. International Journal of Parallel Programming, 2004, 32(3):167-198.
[3]Oracle. Achieving mainframe-class performance on Intel servers using InfiniBand building blocks[R/OL].(2003). http://www.oracle.com/technology/deploy/availability/pdf/oracle_IB.pdf.
[4]SIMPSON C. SCSI RDMA protocol-2 (SRP-2)[EB/OL].(2003). http://www.t10.org/ftp/t10/drafts/srp2/srp2r00a.pdf.
[5]KO M, CHADALAPAKA M, ELZUR U,et al. iSCSI extensions for RDMA specification [EB/OL]. (2006).http://tools.ietf.org/html/draft-ietf-ips-iser-06.txt.
[6]CHU J. Transmission of IP over InfiniBand[EB/OL].(2005). http://www3.ietf.org/proceedings/05mar/IDs/draft-ietf-ipoib-ip-over-infiniband-09.txt.
[7]OpenFabrics Alliance. OpenFabrics enterprise distribution 1.1 release[CP/OL].(2006). http://svn.openfabrics.org/svn/openib/gen2/branches/1.1/ofed/releases/OFED-1.1.tgz.
[8]Mellanox. Gen1 InfiniBand software stack solution for Linux[EB/OL].[2006]. http://docs.mellanox.com/dm/archive/ibgold_SRPT_1_8_2/ReadMe.html.
[9]DONNELLY J, RUSSELL B. UNH-iSCSI initiator and target for Linux[CP/OL].(2006).http://downloads.sourceforge.net/unh-iscsi/unh_iscsi-1.7.00.tar.gz?use_mirror=jaist.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”