專利名稱:數(shù)據(jù)處理系統(tǒng)網(wǎng)絡(luò)中從主機(jī)單元分擔(dān)數(shù)據(jù)流的方法及引擎的制作方法
技術(shù)領(lǐng)域:
一般地,本發(fā)明涉及或者計算機(jī)網(wǎng)絡(luò)領(lǐng)域,具體地講,涉及有關(guān)于通過計算機(jī)網(wǎng)絡(luò),尤其是倚賴于如TCP/IP協(xié)議(傳輸控制協(xié)議/因特網(wǎng)協(xié)議)的協(xié)議的網(wǎng)絡(luò),傳送存儲數(shù)據(jù)的方面。
背景技術(shù):
近年來,數(shù)據(jù)處理系統(tǒng)網(wǎng)絡(luò)(此后簡稱為計算機(jī)網(wǎng)絡(luò)),尤其是那些倚賴于TCP/IP協(xié)議的計算機(jī)網(wǎng)絡(luò),已經(jīng)變得非常普遍。
基于TCP/IP協(xié)議的計算機(jī)網(wǎng)絡(luò)的最佳例子之一為以太網(wǎng),由于以太網(wǎng)的簡單性與被減少的實(shí)現(xiàn)成本,其已經(jīng)成為最常見的(例如)LAN(局域網(wǎng))聯(lián)網(wǎng)方案,尤其是在SOHO(小辦公室/家庭辦公室)環(huán)境下。
計算機(jī)網(wǎng)絡(luò)的數(shù)據(jù)傳送速度,尤其是以太網(wǎng)鏈路的數(shù)據(jù)傳送速度,近年來已經(jīng)得到迅猛增長,從10Mbps(每秒兆比特)增長到了10Gbps(每秒吉比特)。
對于通過網(wǎng)絡(luò)的、在數(shù)據(jù)存儲設(shè)備之間的數(shù)據(jù)傳送,是否能夠得到具有高速數(shù)據(jù)傳送速度的網(wǎng)絡(luò)鏈路尤其重要。
在這一情況下,出現(xiàn)了所謂的iSCSI,即表示互連網(wǎng)SCSI(小型計算機(jī)系統(tǒng)接口)的縮寫,作為用來通過TCP/IP網(wǎng)絡(luò)(尤其是以太網(wǎng))在不同數(shù)據(jù)存儲設(shè)備之間高效傳送數(shù)據(jù)的新協(xié)議。通常來說,iSCSI為用來從所謂的SCSI數(shù)據(jù)傳送發(fā)起方(即啟動輸入/輸出——I/O——處理的SCSI設(shè)備,例如應(yīng)用服務(wù)器,或者只是用戶的個人計算機(jī)——PC——或工作站)向SCSI目標(biāo)方(即響應(yīng)于進(jìn)行I/O處理的請求的SCSI設(shè)備,例如存儲設(shè)備)傳送存儲數(shù)據(jù)的端到端協(xié)議,其中SCSI發(fā)起方與SCSI目標(biāo)方兩者都連接到TCP/IP網(wǎng)絡(luò)。人們已經(jīng)借助于兩個被獨(dú)立廣泛使用的協(xié)議建立起iSCSI,一方面為SCSI協(xié)議,其來自計算機(jī)存儲設(shè)備領(lǐng)域(例如硬盤),另一方面為TCP/IP協(xié)議,其廣泛用于計算機(jī)網(wǎng)絡(luò)領(lǐng)域,例如因特網(wǎng)與以太網(wǎng)。
在不涉及過多細(xì)節(jié)的前提下,就其自身而言,iSCSI協(xié)議為利用消息語義以將面向塊的存儲數(shù)據(jù)SCSI協(xié)議映射為TCP/IP協(xié)的SCSI傳送協(xié)議,其采用字節(jié)流的形式,由此可以通過TCP/IP網(wǎng)絡(luò)傳送SCSI命令通用SCSI命令描述塊(CDB)被封裝在iSCSI數(shù)據(jù)單元中,其被稱為數(shù)據(jù)包或者協(xié)議數(shù)據(jù)單元(PDU),然后在通過網(wǎng)絡(luò)將其發(fā)送給所希望的目的SCSI目標(biāo)方之前,將其送往TCP層(并且類似地,來自該SCSI目標(biāo)方的響應(yīng)被封裝在iSCSIPDU中,并且被轉(zhuǎn)發(fā)給TCP層以通過網(wǎng)絡(luò)傳送給發(fā)起方的SCSI發(fā)起者)。
然而,網(wǎng)絡(luò)數(shù)據(jù)傳送速度的快速增長(其已經(jīng)在性能上超過了大部分?jǐn)?shù)據(jù)處理器(中央處理單元——CPU——或微處理器)的處理能力)已經(jīng)開始產(chǎn)生了一些問題。
iSCSI/TCP/IP協(xié)議方面的處理一般由軟件應(yīng)用程序完成,所述軟件應(yīng)用程序在連接到網(wǎng)絡(luò)的PC、工作站、服務(wù)器機(jī)器、或者存儲設(shè)備的中央處理器(CPU)或微處理器上運(yùn)行。對于主機(jī)中央處理器,這不是可以忽略的任務(wù)例如,對于(例如)網(wǎng)絡(luò)應(yīng)用服務(wù)器的2GHz中央處理器,目前相當(dāng)常見的1Gbps網(wǎng)絡(luò)鏈路就可能構(gòu)成繁重的負(fù)擔(dān)在實(shí)際上,該服務(wù)器的CPU可能花費(fèi)了其一半的處理能力來進(jìn)行對于通過網(wǎng)絡(luò)傳送的數(shù)據(jù)的TCP/IP協(xié)議相關(guān)方面的相對較低級的處理,從而相應(yīng)地減少了剩余的、可用于其他正在運(yùn)行的軟件應(yīng)用程序的處理能力。
換而言之,雖然計算機(jī)網(wǎng)絡(luò)的數(shù)據(jù)傳送速度增長顯著,但是采用iSCSI/TCP/IP協(xié)議所需的相對繁重的處理成本構(gòu)成了阻礙高效數(shù)據(jù)傳送以及阻礙進(jìn)一步提高計算機(jī)網(wǎng)絡(luò)上數(shù)據(jù)傳送速度的主要瓶頸之一。這就意味著目前,阻礙提高網(wǎng)絡(luò)數(shù)據(jù)傳送速度的主要障礙不是計算機(jī)網(wǎng)絡(luò)傳送速度,而是這一實(shí)際情況iSCSI/TCP/IP協(xié)議棧以小于網(wǎng)絡(luò)速度的速度(由通過計算機(jī)網(wǎng)絡(luò)交換存儲數(shù)據(jù)的聯(lián)網(wǎng)SCSI設(shè)備的CPU)進(jìn)行處理。在高速網(wǎng)絡(luò)中,可能會發(fā)生以下情況與執(zhí)行其正在運(yùn)行的一或多個軟件應(yīng)用程序相比,SCSI設(shè)備的CPU必須為網(wǎng)絡(luò)流量管理(例如用于重組亂序接收的數(shù)據(jù)包)專門分配更多的處理資源。
人們已經(jīng)提出了至少部分地減少在應(yīng)用服務(wù)器、文件服務(wù)器、PC、工作站、存儲設(shè)備的中央處理器上處理網(wǎng)絡(luò)流量的低級TCP/IP協(xié)議方面的負(fù)擔(dān)的解決方案。某些已知的設(shè)備也被稱為TCP/IP分擔(dān)引擎(TOE)。
基本而論,TOE將對于TCP/IP協(xié)議相關(guān)方面的處理從主機(jī)處理器分擔(dān)給獨(dú)立的硬件,該硬件一般嵌入在(例如)PC或工作站的網(wǎng)絡(luò)接口適配卡(NIC)中,通過NIC可以進(jìn)行到計算機(jī)網(wǎng)絡(luò)的連接。
TOE可以不同方式實(shí)現(xiàn),既可以實(shí)現(xiàn)為具有專用固件的、獨(dú)立的、基于處理器的組件,也可以實(shí)現(xiàn)為基于ASIC的組件,或者實(shí)現(xiàn)為上述兩種解決方案的混合。
通過分擔(dān)TCP/IP協(xié)議處理,至少部分地解除了主機(jī)CPU的計算量較大的協(xié)議棧負(fù)擔(dān),從而主機(jī)CPU可以將其處理資源更集中于所運(yùn)行的應(yīng)用程序。
然而,因?yàn)門CP/IP協(xié)議棧原先是針對軟件應(yīng)用實(shí)施而進(jìn)行定義與開發(fā)的,所以以硬件實(shí)現(xiàn)其處理具有無法忽略的問題,例如如何達(dá)到性能的實(shí)際改進(jìn)、并且避免擴(kuò)展實(shí)現(xiàn)中的附加的新瓶頸,以及如何設(shè)計至上層協(xié)議(ULP)的接口。
iSCSI協(xié)議的采用引入了對于聯(lián)網(wǎng)SCSI設(shè)備的主機(jī)CPU的進(jìn)一步的處理負(fù)擔(dān)。如上所述,iSCSI數(shù)據(jù)單元,即所謂的PDU,每個都包含PDU頭部部分,以及可選地(依賴于PDU類型)PDU有效負(fù)載部分。iSCSI還具有相對于TCP/IP協(xié)議所允許的基本數(shù)據(jù)保護(hù)的、用于改進(jìn)數(shù)據(jù)保護(hù)防止損壞的機(jī)制具體地講,TCP/IP協(xié)議采用簡單校驗(yàn)和來保護(hù)TCP數(shù)據(jù)段;為了實(shí)現(xiàn)數(shù)據(jù)完整性驗(yàn)證,iSCSI協(xié)議允許對于每個PDU采用多達(dá)兩個的摘要或CRC(循環(huán)冗余碼)第一CRC可在PDU中提供,以保護(hù)PDU頭部,而可以提供第二CRC來保護(hù)PDU有效負(fù)載(當(dāng)PDU有效負(fù)載存在時)。
由主機(jī)CPU進(jìn)行對進(jìn)入的(入境的)iSCSI PDU處理是一項繁重的工作,因?yàn)?例如)必須處理來自可能是多個的TCP/IP連接的iSCSI PDU(其具有就主機(jī)CPU進(jìn)行中斷處理而言的固有開銷),以通過進(jìn)行CRC計算確保數(shù)據(jù)完整性驗(yàn)證,將進(jìn)入的數(shù)據(jù)拷貝到目的方SCSI緩沖器中。
由此,如已知TOE所做的那樣,從主機(jī)CPU只分擔(dān)對于TCP/IP協(xié)議相關(guān)方面的處理,可能不足以達(dá)到以下目標(biāo)——顯著減少主機(jī)CPU必須專用于處理通過網(wǎng)絡(luò)的數(shù)據(jù)流量的處理資源iSCSI協(xié)議的某些特有方面可能仍然會造成主機(jī)CPU上的繁重負(fù)擔(dān)。
發(fā)明內(nèi)容
考慮到上面概述的現(xiàn)有技術(shù)狀況,本申請人著手以下問題如何減少(例如)計算機(jī)網(wǎng)絡(luò)的主機(jī)PC、工作站、或者服務(wù)器機(jī)器的數(shù)據(jù)處理單元上的、管理通過該網(wǎng)絡(luò)的數(shù)據(jù)傳送的低級iSCSI/TCP/IP協(xié)議相關(guān)方面的負(fù)擔(dān)。
具體而言,本申請人面對以下問題通過提供一種至少部分地分擔(dān)通過計算機(jī)網(wǎng)絡(luò)的數(shù)據(jù)傳送的iSCSI/TCP/IP協(xié)議相關(guān)方面的任務(wù)處理的TOE,改進(jìn)當(dāng)前已知的TOE。
根據(jù)本發(fā)明的一個方面,提出了一種所附權(quán)利要求1所述的方法,用來從主機(jī)數(shù)據(jù)處理單元分擔(dān)對通過至少一個TCP/IP連接到來的數(shù)據(jù)流的iSCSITCP/IP處理。
該方法包含提供協(xié)議數(shù)據(jù)單元(PDU)頭部隊列,用來存儲通過至少一個TCP/IP連接接收的iSCSI PDU的頭部;監(jiān)控所述至少一個TCP/IP連接,尋找待處理的進(jìn)入的iSCSI PDU;當(dāng)通過所述至少一個TCP/IP連接至少收到iSCSI PDU頭部時,從收到的PDU中抽取該iSCSI PDU頭部,并且將所抽取的iSCSI PDU頭部放入PDU頭部隊列;查看PDU頭部隊列,以確定是否存在待處理的iSCSI PDU,并且根據(jù)在從PDU頭部隊列中檢索的、所抽取的iSCSI PDU頭部中的信息處理進(jìn)入的iSCSI PDU。
本發(fā)明的另一個方面涉及一種權(quán)利要求15所述的iSCSI TCP/IP分擔(dān)引擎,用來從主機(jī)數(shù)據(jù)處理單元分擔(dān)對通過至少一個TCP/IP連接到來的數(shù)據(jù)流的iSCSI TCP/IP處理,該分擔(dān)引擎包含進(jìn)入iSCSI PDU監(jiān)控器,用來監(jiān)控來自至少一個TCP/IP連接的PDU;所有TCP/IP連接公用的PDU頭部隊列;PDU頭部抽取器,用來從進(jìn)入的PDU中抽取PDU頭部,將所抽取的頭部放入所述頭部隊列,并且管理至PDU頭部處理器的、關(guān)于在PDU頭部隊列中存在待處理的PDU頭部的信號指示。
由于根據(jù)本發(fā)明上述方面的方法以及相關(guān)的TCP/IP分擔(dān)引擎,至少部分地解除了網(wǎng)絡(luò)SCSI設(shè)備的主機(jī)處理單元的對于iSCSI/TCP/IP協(xié)議棧的計算繁重的處理。
通過以下對本發(fā)明實(shí)施方式的詳細(xì)描述,可以清楚本發(fā)明的特征與優(yōu)點(diǎn),這些實(shí)施方式只作為非限制性的示例,該描述將參照附圖進(jìn)行,其中
圖1為示例計算機(jī)網(wǎng)絡(luò)、具體為基于TCP/IP的網(wǎng)絡(luò)、以及更具體地為以太網(wǎng)的示意圖;圖2示意顯示圖1的計算機(jī)網(wǎng)絡(luò)的通用計算機(jī)(例如用戶PC或工作站、或者服務(wù)器計算機(jī)(例如應(yīng)用服務(wù)器))的主要功能塊;圖3示意顯示根據(jù)本發(fā)明實(shí)施方式的TCP/IP分擔(dān)引擎(TOE)的主要功能塊;圖4示意顯示通用iSCSI協(xié)議數(shù)據(jù)單元(PDU)的結(jié)構(gòu);圖5非常概略地顯示本發(fā)明的一種實(shí)施方式中的、圖3的TOE的iSCSI輔助單元的結(jié)構(gòu);圖6A到6D為顯示本發(fā)明的一種實(shí)施方式中的、圖5的iSCSI輔助單元的操作的極簡化的流程圖。
具體實(shí)施例方式
參照附圖,尤其是圖1,示意性地顯示了示例計算機(jī)網(wǎng)絡(luò)100。計算機(jī)網(wǎng)絡(luò)100可以是(例如)企業(yè)、銀行、公共管理部分、SOHO環(huán)境等等的LAN,網(wǎng)絡(luò)及其目標(biāo)方的具體類型不是對本發(fā)明的限制。
計算機(jī)網(wǎng)絡(luò)100包含多個網(wǎng)絡(luò)組件105a、105b、105c、…、105n,例如通過圖1中示意性顯示的、其中以標(biāo)號110表示的通信介質(zhì)聯(lián)網(wǎng)在一起的個人計算機(jī)(PC)、工作站、用做文件服務(wù)器的機(jī)器、和/或應(yīng)用服務(wù)器、打印機(jī)、海量存儲設(shè)備等等。
具體而言,計算機(jī)網(wǎng)絡(luò)100為基于TCP/IP的網(wǎng)絡(luò),即依賴于TCP/IP協(xié)議進(jìn)行通信的網(wǎng)絡(luò),例如為以太網(wǎng),其為目前為止LAN最常采用的體系結(jié)構(gòu)。具體而言,并且僅作為實(shí)例,計算機(jī)網(wǎng)絡(luò)100可以為1Gbps或10Gbps以太網(wǎng)。網(wǎng)絡(luò)通信介質(zhì)110可以是有線鏈路、或者紅外線鏈路、或者無線鏈路。
然而,雖然在此后將進(jìn)行的描述中將作為實(shí)例參照以太網(wǎng),但是本意不是將本發(fā)明限制于任何特定的計算機(jī)網(wǎng)絡(luò)配置,本發(fā)明適用于任何計算機(jī)網(wǎng)絡(luò),通過該計算機(jī)網(wǎng)絡(luò)采用iSCSI協(xié)議以在不同網(wǎng)絡(luò)組件之間傳送存儲數(shù)據(jù)。
在下文中,只是作為實(shí)例,將假定計算機(jī)網(wǎng)絡(luò)100在其組件中包含應(yīng)用服務(wù)器計算機(jī),在所示實(shí)例中由網(wǎng)絡(luò)組件105a表示,即計算機(jī)網(wǎng)絡(luò)100中的計算機(jī),其運(yùn)行該計算機(jī)網(wǎng)絡(luò)用戶感興趣的一或多個應(yīng)用程序,所述用戶連接到網(wǎng)絡(luò)100并且通過各個用戶的個人計算機(jī)(PC)和/或工作站105b享受應(yīng)用服務(wù)器105a提供的服務(wù)。還假定計算機(jī)網(wǎng)絡(luò)100包含存儲設(shè)備,例如存儲服務(wù)器或文件服務(wù)器,在所示實(shí)例中由網(wǎng)絡(luò)組件105s表示。網(wǎng)絡(luò)100的其他組件可以包含(例如)網(wǎng)絡(luò)陣列存儲(NAS)。
如圖2示意所示,網(wǎng)絡(luò)100的通用計算機(jī),例如應(yīng)用服務(wù)器計算機(jī)105a,包含并行連接到數(shù)據(jù)通信總線203(例如PCI總線)的幾個功能單元。具體而言,中央處理單元(CPU)205一般包含微處理器,例如RISC處理器(可能的情況是,該CPU可以由幾個獨(dú)立并協(xié)作的CPU構(gòu)成),CPU 205控制應(yīng)用服務(wù)器計算機(jī)105a的運(yùn)行;工作存儲器207一般為RAM(隨機(jī)存取存儲器),直接由CPU 205使用以執(zhí)行程序以及暫時存儲數(shù)據(jù);以及只讀存儲器(ROM)209,存儲基本程序,用于工作服務(wù)器計算機(jī)105a自引導(dǎo)。應(yīng)用服務(wù)器計算機(jī)105a可以(并且一般確實(shí))包含幾個外設(shè)單元,其通過各自接口連接到總線203。具體而言,可以提供允許與人類用戶交互的外設(shè)單元,例如顯示設(shè)備211(例如CRT、LCD或者等離子體監(jiān)視器)、鍵盤213、以及定點(diǎn)設(shè)備215(例如鼠標(biāo)或觸摸板)。應(yīng)用服務(wù)器計算機(jī)105a還包含用于程序(操作系統(tǒng)、應(yīng)用程序、操作系統(tǒng)函數(shù)庫、用戶函數(shù)庫)以及數(shù)據(jù)的本地海量存儲的外設(shè)單元,例如總體標(biāo)記為217的、驅(qū)動磁硬盤的一或多個磁硬盤驅(qū)動器(HDD),以及用于讀取/寫入CD-ROM/DVD的CD-ROM/DVD驅(qū)動器219,或者CD-ROM/DVD播放盒(juke-box)??梢源嬖谄渌庠O(shè)單元,例如用來讀取/寫入軟盤的軟盤驅(qū)動器,用來讀取/寫入存儲卡的存儲卡讀取器,磁帶海量存儲存儲單元等等。
應(yīng)用服務(wù)器計算機(jī)105a還配備有網(wǎng)絡(luò)接口適配(NIA)卡221,用來連接到計算機(jī)網(wǎng)絡(luò)100,具體而言用于以極其物理的級別訪問通信介質(zhì)110。NIA卡221為自身具有數(shù)據(jù)處理能力的硬件外設(shè),在附圖中通過嵌入處理器225示意顯示,其可以(例如)包含與計算機(jī)105a功能單元、尤其與CPU 205通信的微處理器、RAM與ROM。優(yōu)選地,NIA卡221包含DMA引擎227,其用來處理對計算機(jī)105a存儲區(qū)域(例如RAM與本地硬盤等等)的直接訪問,用來在沒有CPU 205干預(yù)的情況下向其/從其寫入/讀取數(shù)據(jù)。
根據(jù)本發(fā)明的實(shí)施方式,TCP/IP分擔(dān)引擎(TOE)223融入NIA卡221,用來至少部分地從應(yīng)用服務(wù)器105a的CPU 205(主機(jī)CPU)分擔(dān)對在應(yīng)用服務(wù)器105a與(例如)存儲服務(wù)器105s或用戶的PC 105b之間交換的數(shù)據(jù)流量的TCP/IP相關(guān)方面的繁重處理。
具體而言,在本發(fā)明的實(shí)施方式中,TOE 223用來使NIA卡221能夠進(jìn)行直至iSCSI層的大部分協(xié)議處理,其以后在本說明書中更詳細(xì)地描述。
網(wǎng)絡(luò)100的任何其他計算機(jī),尤其是存儲服務(wù)器105s,具有圖2所示的一般結(jié)構(gòu),尤其是在具有TOE 223的NIA 221方面。然而需要指出本發(fā)明不限于以下事實(shí)——根據(jù)iSCSI協(xié)議交互存儲數(shù)據(jù)的網(wǎng)絡(luò)組件雙方或者一方為具有圖2所示結(jié)構(gòu)的計算機(jī)iSCSI設(shè)備的具體結(jié)構(gòu)對本發(fā)明不構(gòu)成限定。
圖3為其中包含有TOE 223的NIA卡221內(nèi)部結(jié)構(gòu)的、就有關(guān)于理解此處所述本發(fā)明示范性實(shí)施方式的功能塊的非常概略性的表示。
NIA卡221包含物理級接口設(shè)備301,用來實(shí)現(xiàn)國際標(biāo)準(zhǔn)化組織(ISO)所列的開放系統(tǒng)互連(OSI)“層?!蹦P偷奈锢?PHY)層。PHY層301處理通過網(wǎng)絡(luò)通信介質(zhì)110的通信的基本物理細(xì)節(jié)。在PHY層301之上,介質(zhì)訪問控制(MAC)層接口設(shè)備303實(shí)現(xiàn)MAC層,該層在其他功能之中負(fù)責(zé)控制到網(wǎng)絡(luò)通信介質(zhì)110的訪問。
嵌入NIA221的TOE 223包含用來對TCP/IP數(shù)據(jù)包(具體為通過網(wǎng)絡(luò)通信介質(zhì)110從一或多個TCP連接接收的TCP/IP數(shù)據(jù)包)進(jìn)行TCP/IP處理的設(shè)備305。
TCP/IP數(shù)據(jù)包為在網(wǎng)絡(luò)層協(xié)議(直接在MAC層之上的ISO-OSI層)上符合IP協(xié)議、并且具有作為傳輸層協(xié)議的TCP協(xié)議的數(shù)據(jù)包。
根據(jù)iSCSI協(xié)議,使用特別的消息語義將常規(guī)的SCSI協(xié)議映射到TCP字節(jié)流上。待通過網(wǎng)絡(luò)傳送的數(shù)據(jù)在包數(shù)據(jù)單元或協(xié)議數(shù)據(jù)單元(PDU)中格式化;在圖4中,非常概略地表示了通用iSCSI PDU 400的結(jié)構(gòu)。一般而言,每個PDU 400都包含PDU頭部部分405、以及可選的PDU有效負(fù)載部分410(是否存在PDU有效負(fù)載部分依賴于PDU類型某些iSCSI PDU不承載數(shù)據(jù),只包含頭部部分405)。
PDU 400可以包含兩個數(shù)據(jù)完整性保護(hù)字段,即兩個數(shù)據(jù)摘要或CRC(循環(huán)冗余碼)字段415與420可以提供第一CRC字段415(一般為四字節(jié))以保護(hù)PDU頭部405部分的信息內(nèi)容,而可以提供第二CRC字段420以保護(hù)PDU有效負(fù)載部分425(當(dāng)存在時)的信息內(nèi)容。需要指出這兩個CRC字段415與420都是可選的;具體而言,在那些未承載有效負(fù)載的PDU中,不存在第二CRC字段420。具有多達(dá)兩個CRC字段的可能性實(shí)現(xiàn)了相對于TCP/IP協(xié)議所允許的基本數(shù)據(jù)保護(hù)的、用來改進(jìn)保護(hù)數(shù)據(jù)防止損壞的iSCSI機(jī)制TCP/IP協(xié)議采用了簡單校驗(yàn)和來保護(hù)TCP數(shù)據(jù)段;為了實(shí)現(xiàn)數(shù)據(jù)完整性驗(yàn)證,iSCSI協(xié)議允許采用對于每個PDU多達(dá)兩個的CRC第一CRC保護(hù)PDU頭部,而第二CRC來保護(hù)PDU有效負(fù)載。需要指出頭部CRC 415或有效負(fù)載CRC 420或者兩者都可以被選擇性地使能或禁止;具體地講,在PDU缺少有效負(fù)載部分410的情況下,將禁止有效負(fù)載CRC 420。
PDU 400以基本頭部段(BHS)430開始;BHS 430具有固定恒定大小,具體地講,目前其為48字節(jié)長。雖然其長度固定恒定,但是BHS 430的結(jié)構(gòu)根據(jù)該iSCSI PDU 400為命令PDU還是響應(yīng)PDU而變化。命令PDU為由iSCSI發(fā)起方發(fā)出的、承載iSCSI目標(biāo)方的命令、數(shù)據(jù)、狀態(tài)信息的PDU;相反,響應(yīng)PDU為由iSCSI目標(biāo)方發(fā)出的、響應(yīng)于從iSCSI發(fā)起方接收的命令PDU的PDU。BHS 430包含用來完整描述整個PDU 400的長度的信息;具體地講,在其他字段中,BHS 430包含字段435(TotalPayloadLength,有效負(fù)載總長度),其中包含指明PDU有效負(fù)載410的總長度的信息;以及字段440(AHSlength,ASH長度),其中包含指明可選的附加頭部段(AHS)445的長度的信息。顧名思義,AHS 445為PDU頭部405的可選附加部分,該部分如果存在的話(由字段440包含不同于零的值這一事實(shí)表示的情況),在BHS 430之后,并且允許擴(kuò)展iSCSI PDU頭部405以包含BHS 430所提供的信息之外的附加信息。
仍然依賴于PDU的類型,BHS 430可以進(jìn)一步包含字段445、450、455、460,其承載發(fā)起方任務(wù)標(biāo)記(ITT)、SCSI任務(wù)標(biāo)識符、目標(biāo)方傳送標(biāo)記(TTT——分配給每個由目標(biāo)方發(fā)送給發(fā)起方的、響應(yīng)于由發(fā)起方向目標(biāo)方發(fā)出的寫入請求的“準(zhǔn)備好傳送”請求的標(biāo)記)、邏輯單元號(LUN)、SCSI命令描述符塊(CBD)。
如本說明書技術(shù)背景部分所述,就所需處理能力而言,(例如)由服務(wù)器105a的CPU 205(主機(jī)CPU)以軟件對數(shù)據(jù)流iSCSI/TCP/IP協(xié)議相關(guān)方面進(jìn)行處理是繁重的。
具體地講,由(例如)服務(wù)器105a主機(jī)CPU 205以軟件對進(jìn)入的(入境)iSCSI PDU進(jìn)行處理是一項繁重的任務(wù),尤其是因?yàn)橹鳈C(jī)CPU 205一般必須處理來自多個TCP/IP連接的iSCSI PDU(其具有中斷的固有開銷),通過進(jìn)行CRC計算確保數(shù)據(jù)完整性驗(yàn)證(當(dāng)在該P(yáng)DU中存在一或兩個CRC時),將進(jìn)入的數(shù)據(jù)拷貝到適當(dāng)?shù)哪康姆絊CSI數(shù)據(jù)緩沖器中。發(fā)起方和目標(biāo)方之間的通用iSCSI會話實(shí)際上可包括多于一個的TCP/IP連接,通過TCP/IP連接在例如應(yīng)用服務(wù)器105a的iSCSI發(fā)起方和例如存儲服務(wù)器105s的iSCSI目標(biāo)方之間進(jìn)行通信。例如,應(yīng)用服務(wù)器105a在運(yùn)行期望的應(yīng)用程序的同時,可能需要執(zhí)行自和/或從存儲裝置(例如由存儲服務(wù)器105s支持的本地硬盤)的讀取和/或?qū)懭氩僮魅绻l(fā)生這樣的事情,則應(yīng)用服務(wù)器105a開始iSCSI會話,建立與存儲服務(wù)器105s的一個或多個應(yīng)用服務(wù)器105a。
從僅僅負(fù)責(zé)與TCP/IP協(xié)議有關(guān)方面的主機(jī)CPU的分擔(dān)處理可能不足以顯著地減少計算資源,例如服務(wù)器105a的CPU 205(更一般地,通用iSCSI設(shè)備的處理器)必須投入到通過網(wǎng)絡(luò)交換的存儲數(shù)據(jù)流的處理中。iSCSI協(xié)議的一些特定方面可能仍會使CPU 205的負(fù)擔(dān)過大。
根據(jù)本發(fā)明的實(shí)施例,為了解決這樣的問題,除了分擔(dān)進(jìn)入數(shù)據(jù)流的TCP/CP協(xié)議方面的處理之外,還部分地從主機(jī)CPU 205將進(jìn)入的iSCSIPDU的處理分擔(dān)到其外部設(shè)備,例如NIA 221(但是這不是對本發(fā)明的限制,因?yàn)檫h(yuǎn)端CPU的外設(shè)可提供用于對分擔(dān)進(jìn)入的iSCSI PDU的處理)。
再來參照圖3,標(biāo)號3071、3072、3073表示對應(yīng)于(三個)各個不同TCP連接的多個(實(shí)例中為三個)TCP數(shù)據(jù)流??捎^察到,除了TCP數(shù)據(jù)流,標(biāo)識為3071、3072、3073的元素也可認(rèn)為是TCP數(shù)據(jù)流重組緩沖器,其中只要較低級的TCP/IP層305收到數(shù)據(jù)流量,就重組來自不同TCP連接的iSCSIPDU。
根據(jù)本發(fā)明的實(shí)施方式,將TCP數(shù)據(jù)流(即相應(yīng)地在重組緩沖器中重組的數(shù)據(jù))3071、3072、3073送入iSCSI輔助單元309,以在TOE 223級上處理。
具體地講,iSCSI輔助單元309采用iSCSI頭部隊列311,以及多個(示例中為三個)iSCSI數(shù)據(jù)隊列3131、3132、3133,具體為每個TCP連接一個iSCSI數(shù)據(jù)隊列。
如以下詳述,iSCSI頭部隊列311由iSCSI輔助單元309使用以存儲從通過不同TCP數(shù)據(jù)流3071、3072、3073到達(dá)的、進(jìn)入的iSCSI PDU PDU11、…、PDU32中抽取的頭部部分(簡稱頭部)HDR11、…、HDR32。而iSCSI數(shù)據(jù)隊列3131、3132、3133用來保持用來允許iSCSI輔助單元309在多個SCSI緩沖器中分別識別適當(dāng)SCSI數(shù)據(jù)緩沖器3501、3502、…、350n的信息(例如指針、引用、描述符),這些緩沖器為要拷入從進(jìn)入的PDU PDU11、…、PDU32中抽取的iSCSI PDU有效負(fù)載部分DATA11、…、DATA32(當(dāng)存在有效負(fù)載部分時)的目的方緩沖器。具體地講,在本發(fā)明的實(shí)施方式中,iSCSI輔助單元309利用DMA機(jī)制,具體為NIA 221的DMA引擎227,來直接訪問(例如)應(yīng)用服務(wù)器105a的適當(dāng)存儲區(qū)域,其中定位SCSI數(shù)據(jù)緩沖器3501、3502、...、350n,例如RAM或者本地硬盤的區(qū)域,并且將進(jìn)入的PDU的有效負(fù)載部分從輸入的TCP數(shù)據(jù)流(即從重組緩沖器來的)3071、3072、3073移動到適當(dāng)目的方SCSI數(shù)據(jù)緩沖器3501、3502、…、350n。
應(yīng)該注意可以在NIA 221的內(nèi)部存儲器中定位iSCSI頭部隊列311和/或iSCSI數(shù)據(jù)隊列3131、3132、3133,或者可以在應(yīng)用服務(wù)器105a的系統(tǒng)存儲器中定位它們,例如在RAM中或者本地硬盤上;在第二種情況下,可以利用NIA 221的DMA引擎來寫入/檢索去向/來自iSCSI頭部隊列311和/或iSCSI數(shù)據(jù)隊列3131、3132、3133的數(shù)據(jù)。
iSCSI輔助單元309檢測通過TCP數(shù)據(jù)流3071、3072、3073到達(dá)的入境iSCSI PDU PDU11、…、PDU32(即其在重組緩沖器3071、3072、3073中檢測PDU);具體地講,iSCSI輔助單元309檢測到達(dá)的TCP數(shù)據(jù)流中的iSCSIPDU邊界。當(dāng)在與不同TCP連接相關(guān)聯(lián)的任一重組緩沖器3071、3072、3073中檢測到入境iSCSI PDU時,iSCSI輔助單元309將PDU頭部HDR11、…、HDR32與PDU有效負(fù)載DATA11、…、DATA32分離;所分離的頭部HDR11、…、HDR32累積到iSCSI頭部隊列311中,同時使用從iSCSI數(shù)據(jù)隊列3131、3132、3133檢索的信息,iSCSI輔助單元309指令DMA引擎227直接將PDU有效負(fù)載DATA11、…、DATA32拷貝到適當(dāng)目的方SCSI緩沖器3501、3502、…、350n中。
具體地講,可以將iSCSI頭部隊列311實(shí)現(xiàn)為近似循環(huán)緩沖器,其中存儲所接收的PDU的頭部(按照收到PDU的順序)。
非常概略性地,并且在本發(fā)明的一種示例性實(shí)施方式中,iSCSI頭部隊列311由iSCSI PDU頭部處理器335利用,iSCSI PDU頭部處理器335為入境PDU管理代理330的一部分,(例如)在主機(jī)CPU 205的控制下運(yùn)行(而這不是作為對本發(fā)明的限制,因?yàn)槿刖砅DU管理代理330也可以在NIA 221的處理器225的控制下運(yùn)行,更一般地講,在實(shí)現(xiàn)TOE 223的外設(shè)中嵌入的處理單元的控制下運(yùn)行)。iSCSI PDU頭部處理器335向SCSI目的方緩沖器定位器340提供從iSCSI頭部隊列311獲得的、用于識別不同SCSI目的方緩沖器3501、3502、…、350n的信息;利用該信息,SCSI目的方緩沖器定位器340定位適當(dāng)?shù)哪康姆絊CSI緩沖器,以及該緩沖器內(nèi)需要拷入數(shù)據(jù)的位置,并且向適當(dāng)iSCSI數(shù)據(jù)隊列3131、3132、3133投遞用來允許iSCSI輔助單元309分別識別不同的SCSI目的方緩沖器3501、3502、…、350n的信息,其中需要向該SCSI目的方緩沖器拷貝由入境PDU承載的數(shù)據(jù)。需要指出將入境PDU管理代理330分離為iSCSI PDU頭部處理器335與SCSI目的方緩沖器定位器340只是示例性的,而非限制性的;替換的實(shí)施方式是可能的。
在圖5中,再次示意性地、但稍微詳細(xì)一些地顯示了iSCSI輔助單元309。iSCSI輔助單元309包含PDU頭部抽取器505,其從通過通用TCP數(shù)據(jù)流3071、3072、3073到來的通用入境PDU 400中抽取完整頭部405。PDU頭部抽取器505在仲裁器507的控制下運(yùn)行,仲裁器507保持那些已經(jīng)收到足夠處理的數(shù)據(jù)量的TCP連接的列表;PDU頭部抽取器505將所抽取的頭部405放入iSCSI頭部隊列311。當(dāng)入境PDU由PDU頭部抽取器505處理時,頭部驗(yàn)證器510“即時”(on the fly)驗(yàn)證頭部CRC(當(dāng)其存在于進(jìn)入的PDU中時);具體地講,通過啟動CRC驗(yàn)證器513,即時計算PDU頭部的CRC,并且將所計算的CRC與頭部CRC 415相比較,以驗(yàn)證所接收的iSCSI頭部的完整性;將驗(yàn)證結(jié)果附接在所抽取的PDU頭部405上作為頭部狀態(tài)(例如圖3中的H-STAT11、H-STAT21等等),并且將其放入iSCSI頭部隊列311中。應(yīng)該注意只有對考慮中的TCP連接使能頭部CRC時,頭部驗(yàn)證器510才驗(yàn)證頭部的CRC。
iSCSI輔助單元309還包含有效負(fù)載驗(yàn)證器515,其通過即時計算PDU有效負(fù)載410的CRC(例如利用CRC驗(yàn)證器513的服務(wù)),驗(yàn)證PDU有效負(fù)載的數(shù)據(jù)完整性。將有效負(fù)載驗(yàn)證結(jié)果放入iSCSI頭部隊列311作為數(shù)據(jù)狀態(tài)(例如圖3中的D-STAT11、D-STAT21等等);應(yīng)該注意雖然iSCSI頭部隊列311中的通用的所抽取的PDU頭部后面緊跟著相應(yīng)的頭部狀態(tài)(當(dāng)頭部CRC被使能時),但是對于數(shù)據(jù)狀態(tài)并非如此,這是因?yàn)橹挥性谕瓿蓴?shù)據(jù)移動之后才計算數(shù)據(jù)狀態(tài)并且將其放入iSCSI頭部隊列311中。還應(yīng)該注意也是在這種情況下,只有在存在有效負(fù)載CRC時,即如果進(jìn)入的PDU承載了有效負(fù)載并且對于考慮中的TCP連接使能了有效負(fù)載CRC,有效負(fù)載驗(yàn)證器515才驗(yàn)證有效負(fù)載的CRC。
iSCSI輔助單元309還包含PDU有效負(fù)載移動器520,其與iSCSI數(shù)據(jù)隊列3131、3132、3133以及DMA引擎227交互,以使后者根據(jù)從iSCSI數(shù)據(jù)隊列3131、3132、3133檢索的描述信息與所識別的SCSI數(shù)據(jù)緩沖器,將入境PDU的有效負(fù)載410移動到適當(dāng)?shù)腟CSI數(shù)據(jù)緩沖器3501、3502、…、350n。
此后將參照圖6的簡化示意流程圖描述根據(jù)本發(fā)明實(shí)施方式的iSCSI輔助單元309的運(yùn)行。
假定已經(jīng)在通常的登錄過程之后,在假定為iSCSI發(fā)起方的應(yīng)用服務(wù)器105a與假定為iSCSI目標(biāo)方的文件服務(wù)器105s之間建立了iSCSI會話(然而需要指出這不應(yīng)該被作為對本發(fā)明的限制,這是因?yàn)閕SCSI分擔(dān)同樣適用于iSCSI發(fā)起方與iSCSI目標(biāo)方)。只是作為例子,還假定存在例如三個的多個不同的TCP連接,相應(yīng)于三個TCP數(shù)據(jù)流(相應(yīng)于各自的重組緩沖器,重組緩沖器由較低級TCP/IP層管理)3071、3072、3073。所述多個(在所考慮的例子中為三個)不同的TCP連接可能(例如)屬于同一iSCSI會話,或者屬于不同的iSCSI會話(即可能有多個iSCSI會話存在并且是激活的)。
iSCSI輔助單元309總是尋找準(zhǔn)備好進(jìn)行處理的入境PDU(判定塊605)。具體地講,仲裁器507根據(jù)相應(yīng)的TCP連接狀態(tài),進(jìn)行對不同TCP數(shù)據(jù)流3071、3072、3073的仲裁通用iSCSI會話的通用TCP連接3071、3072、3073實(shí)際上可能處于兩種狀態(tài)之一,即“等待頭部”狀態(tài)或者“等待數(shù)據(jù)”狀態(tài)。
在通用TCP連接3071、3072、3073處于等待頭部狀態(tài)的情況下,仲裁器507通過監(jiān)控相應(yīng)于該TCP連接的重組緩沖器,等待直至從該TCP連接至少收到完整的BHS 430,并且該收到的BHS可在相應(yīng)的重組緩沖器中得到(其中,如上所述,BHS為PDU頭部405總是存在于PDU中的那一部分,并且具有固定的恒定長度,一般為48字節(jié))。當(dāng)仲裁器507檢測到已經(jīng)通過通用TCP連接至少收到了PDU的完整BHS 430時,仲裁器認(rèn)為該TCP連接為準(zhǔn)備好進(jìn)行處理,并且這樣的TCP連接被放入“TCP連接就緒”列表,該列表由仲裁器507管理,以等待由iSCSI輔助單元309進(jìn)一步處理。
如果通用TCP連接3071、3072、3073改為處于等待數(shù)據(jù)狀態(tài),則只有當(dāng)仲裁器507通過監(jiān)控相應(yīng)于該TCP連接的重組緩沖器確定已經(jīng)通過該TCP連接收到了足夠的數(shù)據(jù)量(足夠的數(shù)據(jù)塊,其大小最好可由用戶配置,例如通過配置參數(shù))、并且已經(jīng)(由SCSI目的方緩沖器定位器340)向相應(yīng)于該TCP連接的iSCSI數(shù)據(jù)隊列3131、3132、3133投遞SCSI目的方數(shù)據(jù)緩沖器3501、3502、…、350n之一(已經(jīng)向適當(dāng)?shù)膇SCSI數(shù)據(jù)隊列3131、3132、3133投遞SCSI數(shù)據(jù)緩沖器3501、3502、…、350n就意味著應(yīng)用服務(wù)器105a——具體為入境PDU管理代理330——準(zhǔn)備好了讓進(jìn)入的PDU有效負(fù)載移動到適當(dāng)?shù)腟CSI目的方數(shù)據(jù)緩沖器3501、3502、…、350n)時,仲裁器507才將該TCP連接加入到TCP連接就緒列表。
返回圖6的示意流程圖,在塊605,iSCSI輔助單元309查看TCP連接就緒列表,并且檢查是否有任一TCP連接3071、3072、3073準(zhǔn)備好了處理在否定的情況下(退出分支N),iSCSI輔助單元309繼續(xù)等待TCP連接被放入TCP連接就緒列表,否則(退出分支Y),iSCSI輔助單元309從TCP連接就緒列表中挑選一個TCP連接3071、3072、3073(塊610)以處理第一可用PDU;具體地講,當(dāng)在TCP連接就緒列表中存在多于一個的TCP連接時,iSCSI輔助單元309可根據(jù)“先進(jìn)先出”標(biāo)準(zhǔn)挑選一個TCP連接,即iSCSI輔助單元309挑選位于TCP連接就緒列表頂部(或者底部)的TCP連接。
然后,iSCSI輔助單元309首先檢查從TCP連接就緒列表中挑選的TCP連接的狀態(tài)(塊615)。
如果該TCP連接處于等待頭部狀態(tài)(判定塊620的退出分支Y),則意味著從相應(yīng)重組緩沖器取得的數(shù)據(jù)至少相應(yīng)于完整的PDU BHS 430。如果滿足這一條件,則有三種可能情況正在處理的PDU未承載AHS 445(情況(a));或者PDU承載了AHS 445,其已經(jīng)被完整接收,并且可以在重組緩沖器中得到(情況(b));或者PDU承載了AHS 445,但是還未收到完整的AHS 445(情況(c))。
具體地講,在本發(fā)明的實(shí)施方式中,頭部抽取器505一般在其運(yùn)行開始時假定在PDU中不存在AHS,并且等待在TCP流重組緩沖器中至少具有一個完整的BHS。當(dāng)在重組緩沖器中至少重組了一個完整的BHS時,頭部抽取器505從重組緩沖器中讀取該BHS,并且檢查(通過查看PDU頭部第二數(shù)據(jù)字中的字段440)PDU頭部是否還包含AHS 445。如果結(jié)果為存在AHS 445,則頭部抽取器505等待直至收到全部AHS(在相應(yīng)于該TCP連接的重組緩沖器中);如果還未完全收到ASH,則不將PDU頭部所抽取的部分(BHS)放入iSCSI頭部隊列311,而是保持等待具體地講,頭部抽取器505不等待全部AHS,而是將該TCP連接返回給仲裁器507,并且請求仲裁器當(dāng)至少收到全部ASH時(一旦處理了BHS 430就知道了AHS 445的大小),將該TCP連接返回到TCP連接就緒列表。當(dāng)最終收到了完整AHS 445時,由仲裁器507將該TCP連接帶回TCP連接就緒列表;然后,頭部抽取器505讀取AHS,并且將完整PDU頭部(BHS 430加上AHS 445)放入iSCSI頭部隊列311。
更詳細(xì)地說,在上述情況(a)(判定塊625的退出分支N)中,已經(jīng)收到了完整的PDU頭部,并且其可在相應(yīng)的重組緩沖器中得到。iSCSI輔助單元309(的頭部抽取器505)于從TCP連接就緒列表中挑選的TCP流中抽取完整的iSCSI PDU(BHS)頭部405(塊630)。例如,參照圖3,并且假定從TCP連接就緒列表中挑選出的、要處理的的TCP連接為連接3071,并且還假定等待處理的第一PDU為PDU11,則iSCSI輔助單元309的頭部抽取器505抽取頭部HDR11。頭部抽取器505將所抽取的頭部HDR11放入iSCSI頭部隊列311(塊635)。
iSCSI輔助單元309(的頭部驗(yàn)證器510)“即時”驗(yàn)證所抽取的PDU頭部HDR11的完整性。為此,頭部驗(yàn)證器510即時計算正在處理的PDU的頭部405的CRC(塊640),并且在對于正在處理的TCP連接使能了iSCSI PDU頭部CRC的情況下(判定塊645的退出分支Y),頭部驗(yàn)證器510驗(yàn)證(塊650)(通過查看頭部CRC字段415)頭部CRC。頭部驗(yàn)證器510將頭部驗(yàn)證過程結(jié)果H-STAT11附加在所抽取的PDU頭部HDR11上,由此將PDU頭部HDR11與附加其上的相應(yīng)頭部驗(yàn)證結(jié)果H-STAT11一道放入iSCSI頭部隊列311(塊655)。
然后,iSCSI輔助單元309向主機(jī)CPU 205發(fā)出中斷(圖3中INT),以信號表示在iSCSI頭部隊列311中存在PDU頭部(塊657);具體地講,只有使能了中斷才發(fā)出中斷;實(shí)際上中斷可能被暫時禁止,這是因?yàn)橄鄳?yīng)于先前收到的PDU,主機(jī)CPU已經(jīng)正在服務(wù)先前發(fā)出的中斷。
PDU管理代理330(響應(yīng)于所發(fā)出的中斷,或者因?yàn)槠湟呀?jīng)正在服務(wù)先前發(fā)出的中斷)查看iSCSI頭部隊列311,并且處理PDU頭部;利用從所處理的PDU頭部(其完整描述進(jìn)入的PDU)中檢索的信息,如果確定該P(yáng)DU還承載數(shù)據(jù),PDU管理代理330,則識別適當(dāng)?shù)哪康姆絊CSI數(shù)據(jù)緩沖器3501、3502、…、350n,以及該目的方SCSI數(shù)據(jù)緩沖器內(nèi)待拷貝該數(shù)據(jù)的位置(諸如ITT、TTT、偏移與有效負(fù)載長度等信息可用于此目的);然后,PDU管理代理330向相應(yīng)于該TCP連接的iSCSI數(shù)據(jù)隊列3131、3132、3133投遞所識別的SCSI數(shù)據(jù)緩沖器。一旦處理了PDU頭部,則將其從iSCSI頭部隊列中去除(例如通過PDU管理代理330)。
然后,iSCSI輔助單元309更新TCP連接的狀態(tài),并且將該TCP連接傳遞回仲裁器507,以進(jìn)行再次仲裁。具體地講,通過查看所收到的PDU頭部(具體地為BHS 430),iSCSI輔助單元309能夠確定該P(yáng)DU是否承載了有效負(fù)載,即,該P(yáng)DU是否承載數(shù)據(jù)(塊660)。在肯定的情況下(退出分支Y,)將TCP連接狀態(tài)改變?yōu)榈却龜?shù)據(jù)(塊661),并且將該TCP連接返回仲裁器507(塊663),(如上所述)當(dāng)通過該TCP連接收到足夠數(shù)據(jù)量時,并且在(SCSI目的方緩沖器定位器340)已經(jīng)向相應(yīng)于該TCP連接的iSCSI數(shù)據(jù)隊列3131、3132、3133投遞了SCSI數(shù)據(jù)緩沖器3501、3502、…、350n的情況下,仲裁器507決定是否將該TCP連接放回TCP連接就緒列表。相反,如果PDU未承載數(shù)據(jù)(判定塊660的退出分支N),則將TCP連接狀態(tài)改變?yōu)榈却^部,并且將控制傳遞回仲裁器507;通過這種方式,如果仲裁器507檢測到在該TCP連接上已經(jīng)收到了下一PDU的完整BHS 430、并且其可在相應(yīng)的重組緩沖器中得到,則將該TCP連接保持在TCP連接就緒列表中,并且可以處理下一PDU;否則,從TCP連接就緒列表中去除該TCP連接(并且當(dāng)收到完整BHS 430時將其再次添加到該列表中)。
在上述情況(b)(判定塊625的退出分支Y以及連接符J1)下,即,如果正在處理的PDU還包含AHS 445,則iSCSI輔助單元309檢查是否已經(jīng)收到了完整的AHS 445,并且其是否可在相應(yīng)的重組緩沖器中得到(塊667)。在否定的情況下(判定塊667的退出分支N),iSCSI輔助單元309從TCP連接就緒列表中去除該TCP連接(塊670),并且請求仲裁器507當(dāng)收到了完整的AHS 445、并且其可在相應(yīng)的重組緩沖器中得到時將該TCP連接帶回到TCP連接就緒列表;該TCP連接保持在等待頭部狀態(tài)。
相反,如果收到了完整的AHS 445(判定塊667的退出分支Y),則iSCSI輔助單元309從入境PDU中抽取完整的iSCSI PDU頭部405,將所抽取的頭部放入iSCSI頭部隊列311,并且如果對于該TCP連接使能了頭部CRC、并且在進(jìn)入的PDU中存在頭部CRC,則iSCSI輔助單元309“即時”驗(yàn)證所抽取的PDU頭部的完整性(所有這些動作類似于上述情況(a)中執(zhí)行的那些動作,由單個塊671概括)。操作流以類似于上述情況(a)的方式繼續(xù),通過向主機(jī)CPU 205發(fā)出中斷(如果使能的話),以信號表示在iSCSI頭部隊列311中存在PDU頭部,并且檢查該P(yáng)DU是否承載數(shù)據(jù)(連接符J3,以及隨后的塊657至663)。
返回到判定塊620,如果iSCSI輔助單元309檢測到從TCP連接就緒列表中挑選的TCP連接處于等待數(shù)據(jù)狀態(tài)(判定塊620的退出分支N,以及連接符J4),則意味著從重組緩沖器取得的數(shù)據(jù)為一段預(yù)期的PDU有效負(fù)載。iSCSI輔助單元309即時計算有效負(fù)載CRC(塊675),并且使通過該TCP連接收到的數(shù)據(jù)移動到投遞給相應(yīng)iSCSI數(shù)據(jù)隊列3131、3132、3133的SCSI數(shù)據(jù)緩沖器(塊677)。
然后,iSCSI輔助單元309確定最近收到(并且處理)的數(shù)據(jù)段是否為當(dāng)前PDU(當(dāng)前處理的PDU)的最后一個段(塊679);在肯定的情況下(判定塊679的退出分支Y),驗(yàn)證有效負(fù)載CRC(在假定對于該TCP連接使能了有效負(fù)載CRC的情況下),并且將驗(yàn)證結(jié)果放入iSCSI頭部隊列311(塊681至685)。然后,將TCP連接狀態(tài)改變?yōu)榈却^部(塊687),并且將該TCP連接返回仲裁器507,以進(jìn)行再次仲裁(塊689)。相反,如果最近收到的數(shù)據(jù)段不是當(dāng)前PDU的最后一個段(判定塊679的退出分支N),則該TCP連接保持在等待數(shù)據(jù)狀態(tài),并且將該TCP連接返回仲裁器507,以進(jìn)行再次仲裁。
由此,iSCSI頭部隊列311包含iSCSI PDU頭部,以及可選地有關(guān)于PDU頭部狀態(tài)的信息(即頭部CRC驗(yàn)證過程的結(jié)果,如果有的話),以及有關(guān)于PDU有效負(fù)載狀態(tài)的信息,包含有效負(fù)載CRC驗(yàn)證結(jié)果。這就允許PDU頭部與數(shù)據(jù)部分處理的簡單同步,以及在有效負(fù)載損壞情況下高效實(shí)現(xiàn)iSCSI恢復(fù)。所不同的是,通過利用DMA機(jī)制,PDU有效負(fù)載被直接從相應(yīng)TCP連接的重組緩沖器拷貝到適當(dāng)?shù)腟CSI目的方數(shù)據(jù)緩沖器,而不需要主機(jī)CPU205的任何干預(yù),由此解除了主機(jī)CPU 205繁重的處理負(fù)擔(dān)。
應(yīng)該注意,根據(jù)本發(fā)明的所述實(shí)施方式,雖然提供了相應(yīng)于TCP連接數(shù)目的多個iSCSI數(shù)據(jù)隊列,但是也可以方便地提供單個唯一的iSCSI頭部隊列,以存儲來自所有TCP連接的進(jìn)入PDU的iSCSI PDU頭部。為所有TCP連接提供單個iSCSI頭部隊列允許以高效地實(shí)現(xiàn)(例如)在主機(jī)CPU 205的控制下運(yùn)行的、用來處理進(jìn)入的iSCSI PDU的代理軟件。實(shí)際上,該入境PDU管理軟件代理,以及由此的主機(jī)CPU不需要在不同TCP連接中進(jìn)行仲裁,也不需要管理不同TCP連接的多任務(wù)處理對不同TCP連接的處理被從主機(jī)CPU分擔(dān)給TOE 223。
具體地說,提供單個唯一iSCSI頭部隊列311允許借助單個軟件任務(wù)高效地處理所有不同的TCP連接,該軟件任務(wù)(例如)由主機(jī)CPU 205運(yùn)行(如在此處考慮的示例性實(shí)施方式中),或者可替換地,由實(shí)現(xiàn)TOE 223的外設(shè)(例如NIA 221)的處理器225運(yùn)行。該單個iSCSI頭部隊列311包含處理入境iSCSI PDU所需的所有信息。
根據(jù)本發(fā)明的實(shí)施方式,每當(dāng)將PDU頭部放入iSCSI頭部隊列311時,iSCSI輔助單元309可以向主機(jī)CPU 205發(fā)出中斷(在假定使能了中斷的情況下)。由此,向主機(jī)CPU 205信號表示存在新的iSCSI PDU等待處理。響應(yīng)于所發(fā)出的中斷,iSCSI PDU頭部處理器335處理在iSCSI頭部隊列311中可用的PDU頭部,直至該隊列被清空;此時,再次使能中斷。這樣的中斷通知機(jī)制允許在不同TCP連接之間合并中斷;由此對于多個SCSI請求,所發(fā)起的中斷的數(shù)目被減少到單個中斷。
由于上述方案,由主機(jī)CPU對入境iSCSI PDU進(jìn)行的處理被大大簡化實(shí)際上大部分iSCSI PDU處理由以TOE硬件執(zhí)行,而不是以主機(jī)CPU執(zhí)行;具體地講,解除了主機(jī)CPU檢測來自不同TCP連接的進(jìn)入PDU、檢測PDU邊界、驗(yàn)證數(shù)據(jù)完整性(當(dāng)需要時)、向適當(dāng)?shù)膇SCSI目的方緩沖器拷貝PDU有效負(fù)載的負(fù)擔(dān)。
上述方案允許以硬件實(shí)現(xiàn)基本上完備的TCP終端。
具體地講,主機(jī)CPU不需要在不同TCP連接之間仲裁主機(jī)CPU只查看單個PDU頭部隊列,其中可以找到所有進(jìn)入的iSCSI PDU的頭部,以及有關(guān)于PDU頭部和數(shù)據(jù)完整性的信息。由此,主機(jī)CPU不需要每當(dāng)新PDU到達(dá)時連續(xù)地服務(wù)中斷只有當(dāng)在頭部隊列中有一個頭部時,iSCSI輔助單元才發(fā)出中斷。
雖然通過某些實(shí)施方式公開并描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員顯然清楚在不脫離所附權(quán)利要限定范圍的情況下,能夠?qū)λ鰧?shí)施方式、以及本發(fā)明其他實(shí)施方式進(jìn)行幾種修改。
權(quán)利要求
1.一種從主機(jī)數(shù)據(jù)處理單元(205)分擔(dān)對通過至少一個TCP/IP連接(3071、3072、3073)到來的數(shù)據(jù)流的iSCSI TCP/IP處理的方法,包含提供協(xié)議數(shù)據(jù)單元(PDU)頭部隊列(311),用來存儲通過所述至少一個TCP/IP連接接收的iSCSI PDU的頭部(HDR11、...、HDR32);監(jiān)控所述至少一個TCP/IP連接,尋找待處理的進(jìn)入的iSCSI PDU;當(dāng)通過所述至少一個TCP/IP連接至少收到iSCSI PDU頭部時,從收到的PDU中抽取該iSCSI PDU頭部,并且將所抽取的iSCSI PDU頭部放入PDU頭部隊列;查看PDU頭部隊列,以確定是否存在待處理的iSCSI PDU,并且根據(jù)在從PDU頭部隊列中檢索的、所抽取的iSCSI PDU頭部中的信息處理進(jìn)入的iSCSI PDU。
2.如權(quán)利要求1所述的方法,其中所述查看PDU頭部隊列包含使所述主機(jī)數(shù)據(jù)處理單元被信號指示(INT)在PDU頭部隊列中存在待處理的iSCSIPDU頭部。
3.如權(quán)利要求2所述的方法,其中所述使主機(jī)數(shù)據(jù)處理單元被信號指示包含向所述主機(jī)數(shù)據(jù)處理單元發(fā)出中斷,對于PDU頭部隊列中iSCSI PDU頭部的處理是主機(jī)數(shù)據(jù)處理單元的職責(zé)。
4.如權(quán)利要求3所述的方法,還包含使所述至主機(jī)數(shù)據(jù)處理單元的中斷在其被發(fā)出之后被禁止直至PDU頭部隊列被清空為止。
5.如權(quán)利要求1至4中任一項所述的方法,還包含執(zhí)行所抽取的iSCSI PDU頭部的完整性驗(yàn)證,并且將有關(guān)于該iSCSI PDU頭部完整性驗(yàn)證結(jié)果的信息放入PDU頭部隊列。
6.如權(quán)利要求5所述的方法,其中所述執(zhí)行所抽取的iSCSI PDU頭部的完整性驗(yàn)證包含確定是否使能了iSCSI PDU頭部摘要(415),并且只有使能了iSCSI PDU頭部摘要,才執(zhí)行所述將有關(guān)于該iSCSI PDU頭部完整性驗(yàn)證結(jié)果的信息放入PDU頭部隊列。
7.如上述權(quán)利要求中任一項所述的方法,還包含為所述至少一個TCP/IP連接中的每一個提供iSCSI PDU數(shù)據(jù)隊列(3131、3132、3133),該iSCSI PDU數(shù)據(jù)隊列用來存儲有關(guān)于通過所述至少一個TCP/IP連接接收的iSCSI PDU所承載的數(shù)據(jù)(DATA11、...、DATA32)要向其拷貝的目的方SCSI數(shù)據(jù)緩沖器的信息;識別通過所述至少一個TCP/IP連接接收的iSCSI PDU所承載的數(shù)據(jù)要向其拷貝的目的方SCSI數(shù)據(jù)緩沖器(3501、3502、...、350n),所述識別包含利用從PDU頭部隊列中所抽取的iSCSI PDU頭部中檢索的信息;將目的方SCSI數(shù)據(jù)緩沖器識別信息放入與相應(yīng)的至少一個TCP/IP連接相關(guān)聯(lián)的iSCSI PDU數(shù)據(jù)隊列;以及直接將從所接收的iSCSI PDU中抽取的iSCSI PDU有效負(fù)載(425)拷貝到所識別的目的方SCSI數(shù)據(jù)緩沖器,所述直接拷貝利用放入所述數(shù)據(jù)隊列中的的目的方SCSI數(shù)據(jù)緩沖器識別信息。
8.如權(quán)利要求7所述的方法,其中所述直接拷貝在基本沒有所述主機(jī)數(shù)據(jù)處理單元干預(yù)的情況下,對于所識別的目的方SCSI數(shù)據(jù)緩沖器采用直接存儲器存取(227)。
9.如權(quán)利要求8所述的方法,其中所述直接拷貝包含將來自與所述至少一個TCP/IP連接相關(guān)聯(lián)的重組緩沖器的iSCSI PDU有效負(fù)載拷貝到所識別的目的方SCSI數(shù)據(jù)緩沖器中。
10.如權(quán)利要求7、8或9所述的方法,還包含執(zhí)行iSCSI PDU有效負(fù)載的完整性驗(yàn)證,并且將有關(guān)于該P(yáng)DU有效負(fù)載完整性驗(yàn)證結(jié)果的信息放入所述頭部隊列。
11.如權(quán)利要求10所述的方法,其中所述執(zhí)行iSCSI PDU有效負(fù)載的完整性驗(yàn)證包含確定是否使能了iSCSI PDU有效負(fù)載摘要(420),并且只有使能了iSCSI PDU有效負(fù)載摘要,才執(zhí)行所述將有關(guān)于該iSCSI PDU有效負(fù)載完整性驗(yàn)證結(jié)果的信息放入PDU頭部隊列。
12.如權(quán)利要求7至11中任一項所述的方法,其中所述監(jiān)控至少一個TCP/IP連接還包含等待通過所述至少一個TCP/IP連接收到完整的iSCSI PDU基本頭部段(430);檢查該iSCSI PDU基本頭部段,以確定進(jìn)入的iSCSI PDU是否包含附加頭部段(445),并且在肯定的情況下,在抽取iSCSI PDU頭部之前,等待收到完整的附加頭部段。
13.如權(quán)利要求12所述的方法,其中所述監(jiān)控至少一個TCP/IP連接還包含在抽取了iSCSI PDU頭部之后,等待收到至少部分iSCSI PDU有效負(fù)載,并且在將iSCSI PDU有效負(fù)載收到部分直接拷貝到目的方SCSI數(shù)據(jù)緩沖器之前,等待該目的方SCSI數(shù)據(jù)緩沖器可用。
14.如權(quán)利要求13所述的方法,其中所述等待目的方SCSI數(shù)據(jù)緩沖器可用包含等待該目的方SCSI數(shù)據(jù)緩沖器識別信息放入與該TCP/IP連接相關(guān)聯(lián)的數(shù)據(jù)隊列中。
15.一種iSCSI TCP/IP分擔(dān)引擎,用來從主機(jī)數(shù)據(jù)處理單元(205)分擔(dān)對通過至少一個TCP/IP連接(3071、3072、3073)到來的數(shù)據(jù)流的iSCSI TCP/IP處理,該分擔(dān)引擎包含進(jìn)入iSCSI PDU監(jiān)控器(507),用來監(jiān)控來自所述至少一個TCP/IP連接(3071、3072、3073)的PDU;所有TCP/IP連接公用的PDU頭部隊列(311);PDU頭部抽取器(505),用來從進(jìn)入的PDU中抽取PDU頭部(HDR11、...、HDR32),將所抽取的頭部放入所述頭部隊列,并且管理至PDU頭部處理器(335)的、關(guān)于在PDU頭部隊列中存在待處理的PDU頭部的信號指示(INT)。
16.如權(quán)利要求15所述的iSCSI TCP/IP分擔(dān)引擎,其中所述PDU頭部處理器在所述主機(jī)數(shù)據(jù)處理單元的管理下運(yùn)行,所述PDU頭部抽取器用來向該主機(jī)數(shù)據(jù)處理單元信號指示在PDU頭部隊列中存在待處理的PDU頭部。
17.如權(quán)利要求16所述的iSCSI TCP/IP分擔(dān)引擎,其中所述PDU頭部抽取器用來管理發(fā)出對主機(jī)數(shù)據(jù)處理單元的中斷。
18.如權(quán)利要求15所述的iSCSI TCP/IP分擔(dān)引擎,其中所述PDU頭部處理器在該分擔(dān)引擎的管理下運(yùn)行。
19.如權(quán)利要求15至18中任一項所述的iSCSI TCP/IP分擔(dān)引擎,還包含頭部驗(yàn)證器(510),用來執(zhí)行所抽取的PDU頭部的完整性驗(yàn)證,并且將有關(guān)于該P(yáng)DU頭部完整性驗(yàn)證結(jié)果的信息放入PDU頭部隊列。
20.如權(quán)利要求15至19中任一項所述的iSCSI TCP/IP分擔(dān)引擎,還包含對于所述至少一個TCP/IP連接中每一個的PDU數(shù)據(jù)隊列(3131、3132、3133),該P(yáng)DU數(shù)據(jù)隊列用來存儲有關(guān)于通過所述至少一個TCP/IP連接接收的iSCSI PDU的數(shù)據(jù)(DATA11、...、DATA32)要向其拷貝的目的方SCSI數(shù)據(jù)緩沖器的信息;以及PDU有效負(fù)載移動器(520),用來管理從進(jìn)入的PDU中抽取PDU有效負(fù)載,以及根據(jù)從所述數(shù)據(jù)隊列中檢索的信息將其拷貝到適當(dāng)?shù)哪康姆絊CSI數(shù)據(jù)緩沖器(3501、3502、...、350n)。
21.如權(quán)利要求20所述的iSCSI TCP/IP分擔(dān)引擎,其中所述PDU有效負(fù)載移動器用來利用直接存儲器存取引擎,引起所抽取的PDU有效負(fù)載至適當(dāng)?shù)哪康姆絊CSI數(shù)據(jù)緩沖器的直接拷貝。
22.如權(quán)利要求20或21所述的iSCSI TCP/IP分擔(dān)引擎,還包含有效負(fù)載驗(yàn)證器(515),用來執(zhí)行所抽取的PDU有效負(fù)載的完整性驗(yàn)證,并且將有關(guān)于該P(yáng)DU有效負(fù)載完整性驗(yàn)證結(jié)果的信息放入PDU頭部隊列。
23.如權(quán)利要求15所述的iSCSI TCP/IP分擔(dān)引擎,其中所述監(jiān)控器包含仲裁器,用來管理TCP/IP連接就緒列表。
24.如權(quán)利要求23所述的iSCSI TCP/IP分擔(dān)引擎,其中所述仲裁器用來在已經(jīng)通過TCP/IP連接收到足夠的預(yù)定量數(shù)據(jù)的條件下,將該TCP/IP連接放入TCP/IP連接就緒列表。
全文摘要
一種從主機(jī)數(shù)據(jù)處理單元(205)分擔(dān)對通過至少一個TCP/IP連接(30文檔編號H04L29/06GK1747444SQ20051008137
公開日2006年3月15日 申請日期2005年6月28日 優(yōu)先權(quán)日2004年9月10日
發(fā)明者瓦迪姆·馬克瓦克斯, 喬拉·比蘭, 肖爾·伊夫拉克, 塔爾·索斯泰姆 申請人:國際商業(yè)機(jī)器公司