亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

智能網(wǎng)絡(luò)存儲接口系統(tǒng)和裝置的制作方法

文檔序號:6474259閱讀:342來源:國知局
專利名稱:智能網(wǎng)絡(luò)存儲接口系統(tǒng)和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)通信和存儲。
背景技術(shù)
在過去十年,網(wǎng)絡(luò)計算的優(yōu)勢和進展促進了計算機網(wǎng)絡(luò)的極大增長,反過來又激勵更多的進展、增長和優(yōu)勢。隨著計算機網(wǎng)絡(luò)的增長,在利用傳統(tǒng)網(wǎng)絡(luò)裝置方面出現(xiàn)了混亂和瓶頸現(xiàn)象。例如,連接網(wǎng)絡(luò)的計算機CPU也許花費成比例增加的處理網(wǎng)絡(luò)通信的時間,導致減少可用于其它工作的時間。特別是,在網(wǎng)絡(luò)與計算機的存儲單元之間傳送文件數(shù)據(jù)的需求已經(jīng)加快。上述數(shù)據(jù)通常被分成在網(wǎng)絡(luò)上進行傳送的分組,每個分組在控制信息的諸多層上封裝,接收計算機的CPU每次處理一層的控制信息。盡管CPU的速度不斷增加,但是如文件傳遞的網(wǎng)絡(luò)消息的協(xié)議處理可能消耗最快速度的商用CPU的大部分有效處理能力。
這種情況對于網(wǎng)絡(luò)文件服務(wù)器可能更具有挑戰(zhàn)性,這種網(wǎng)絡(luò)文件服務(wù)器的主要功能是通過網(wǎng)上傳遞文件數(shù)據(jù)在附屬盤或者磁帶驅(qū)動器上存儲和檢索文件。由于網(wǎng)絡(luò)和數(shù)據(jù)庫發(fā)展,存儲在這種服務(wù)器上的信息量已經(jīng)是爆炸性的,從而使這種服務(wù)器附屬的存儲器顯露出局限性。除了上述的主機CPU處理的協(xié)議問題之外,諸如傳統(tǒng)的小型計算機系統(tǒng)接口(SCSI)的并行數(shù)據(jù)通道的局限,隨存儲需要的增加而變得愈加明顯。例如,并行SCSI接口限制了可以附加到服務(wù)器上的存儲單元的數(shù)量,以及限制了存儲單元與服務(wù)器之間的距離。
如Tom Clark所著的名為“Designing Storage Area Networks”(版權(quán)1999)一書所述,服務(wù)器附屬的平行SCSI存儲單元局限的一種解決方案包括把其它文件服務(wù)器附加到網(wǎng)絡(luò)服務(wù)器前端的一個現(xiàn)有局域網(wǎng)(LAN)上。該附屬網(wǎng)絡(luò)的存儲(NAS)允許其它服務(wù)器和客戶網(wǎng)上訪問該NAS文件服務(wù)器,但不會增加專用于原網(wǎng)絡(luò)服務(wù)器的存儲容量。相反,NAS可能增加最初的網(wǎng)絡(luò)服務(wù)器所需的協(xié)議處理,因為該服務(wù)器也許需要與各種NAS文件服務(wù)器進行通信。此外,每個NAS文件服務(wù)器同樣受到協(xié)議處理的壓力和存儲接口的限制。
存儲區(qū)網(wǎng)絡(luò)(SAN)向網(wǎng)上文件傳遞和存儲的增長需要提供了另一種解決方案,該解決方案是用連接在服務(wù)器之后的存儲單元的網(wǎng)絡(luò)替代菊鏈式SCSI存儲單元。SAN配置了一個稱之為光纖信道(FC)的新興網(wǎng)絡(luò)標準,而不是傳統(tǒng)的諸如以太網(wǎng)或者快速以太網(wǎng)的網(wǎng)絡(luò)標準。然而,由于該FC最近才被采用,因此許多市場上可以得到的FC裝置彼此不兼容。此外,F(xiàn)C網(wǎng)絡(luò)可能專門提供網(wǎng)上兩點之間(比如服務(wù)器與存儲單元之間)通信的帶寬,因此,當各點不進行通信時,該帶寬將被浪費。
當今已知的NAS和SAN可以根據(jù)傳遞和存儲數(shù)據(jù)的格式來區(qū)別。NAS裝置傳送來自其它文件服務(wù)器或者客戶的數(shù)據(jù)文件,和把文件數(shù)據(jù)傳送給所述其它文件服務(wù)器或者客戶,而設(shè)備級的數(shù)據(jù)塊可以在SAN上傳送。由于該原因,NAS裝置通常包括用于文件與用于存儲的數(shù)據(jù)塊之間進行轉(zhuǎn)換的文件系統(tǒng),而SAN可以包括不具備這樣一個文件系統(tǒng)的存儲單元。
另一方面,NAS文件服務(wù)器可以被附加到專用于一個服務(wù)器的基于以太網(wǎng)的網(wǎng)絡(luò)上,以作為以太網(wǎng)SAN的部分。Marc Farley在“構(gòu)建存儲網(wǎng)絡(luò)”(版權(quán)2000)一書中進一步指出,在以太網(wǎng)上運行存儲協(xié)議是可行的,這可以避免光纖信道不兼容問題。然而,利用諸如SAN布局增加連接到服務(wù)器的存儲單元的數(shù)量,將增加服務(wù)器必須執(zhí)行的協(xié)議處理量。如上所述,這種協(xié)議處理已經(jīng)加重了大部分先進服務(wù)器的負擔。
網(wǎng)絡(luò)消息如文件傳送的傳統(tǒng)處理的一個實例說明了放慢網(wǎng)絡(luò)數(shù)據(jù)存儲的一些處理步驟。網(wǎng)絡(luò)接口卡(NIC)通常提供主機與網(wǎng)絡(luò)或者網(wǎng)絡(luò)之間的物理連接,并且提供了允許主機訪問網(wǎng)絡(luò)或者多個網(wǎng)絡(luò)的媒體訪問控制(MAC)功能。當發(fā)送到主機的一個網(wǎng)絡(luò)消息分組到達時,處理分組的MAC層報頭和分組在NIC中經(jīng)歷循環(huán)冗余校驗(CRC)。然后,經(jīng)由輸入/輸出(I/O)總線,比如外設(shè)部件互連(PCI)總線將分組發(fā)送到主機,并存儲到主機存儲器中。CPU隨后通過運行來自協(xié)議堆棧的指令順序地處理分組的每個報頭層。這需要經(jīng)由最初用于存儲分組的主機存儲器總線的行程和經(jīng)由用于順序處理每個報頭層的主機存儲器總線的后續(xù)行程。在處理了分組的所有報頭層之后,來自分組的有效載荷數(shù)據(jù)在一個文件高速緩存器中與其它經(jīng)過相似處理的消息的有效載荷數(shù)據(jù)成組。CPU根據(jù)文件系統(tǒng)將所述數(shù)據(jù)重新組裝為用于在一個盤或者多個盤上存儲的文件塊。在處理了所有分組以及在文件高速緩存器中將消息重新組裝成文件塊之后,以數(shù)據(jù)塊(每個由一些有效載荷分組構(gòu)成)形式將文件通過主機存儲器總線和I/O總線回送到主機存儲器,以便在一個盤中長期存儲,該文件回送通常還要經(jīng)由被橋接到I/O總線上的SCSI總線。
另一方面,為了在SAN上存儲文件,將文件高速緩存器中重新組裝的文件經(jīng)由主機存儲器總線和I/O總線按照數(shù)據(jù)塊形式回送到SAN所配置的I/O控制器。對于SAN是FC網(wǎng)絡(luò)的情況,提供一個專用FC控制器,該控制器可以根據(jù)光纖信道協(xié)議(FCP)向SAN上的存儲單元發(fā)送文件塊。對于文件將被存儲在NAS裝置上的情況,文件直接或者改道傳送到NAS裝置,該NAS裝置基本上按上述方式處理分組,但是使用了NAS裝置的CPU、協(xié)議堆棧和文件系統(tǒng),并且把文件塊存儲到NAS裝置的存儲單元中。
因而,從用于SAN存儲或者連接到主機的NAS存儲的網(wǎng)絡(luò)發(fā)送到主機的文件通常需要經(jīng)過用于文件每個消息分組的I/O總線的兩個行程。此外,每個分組的報頭層的控制信息每次被單層存儲和處理時,也許要重復兩次來回經(jīng)過主機存儲器,然后被回送給I/O總線。響應(yīng)來自客戶的請求從SAN的存儲器恢復這樣一個文件通常也需要由CPU和文件系統(tǒng)進行大量處理。

發(fā)明內(nèi)容
本發(fā)明公開了一種接口裝置,如用于本地主機的智能網(wǎng)絡(luò)接口卡(INIC),該接口裝置設(shè)有加速網(wǎng)絡(luò)與存儲單元之間數(shù)據(jù)傳送的硬件和處理機構(gòu),而數(shù)據(jù)傳送的控制由主機保留。接口裝置包括處理網(wǎng)絡(luò)分組報頭的硬件電路,并且可以使用網(wǎng)絡(luò)與存儲單元之間的數(shù)據(jù)快速路徑,該快速路徑由主機建立。主機CPU和協(xié)議堆棧免除了經(jīng)由快速路徑的數(shù)據(jù)傳送的協(xié)議處理,并且將主機總線帶寬從網(wǎng)絡(luò)和存儲子系統(tǒng)眾多需求中釋放出來。所述存儲單元包括獨立磁盤的冗余陣列(RAID)或者其他多個驅(qū)動的配置。存儲單元通過諸如SCSI的并行信道或者通過諸如以太網(wǎng)或者光纖信道的串行信道連接到接口裝置。接口裝置可以通過諸如PCI總線的I/O總線連接本地主機。附加存儲單元可以通過諸如SCSI的并行接口加到本地主機上。
文件高速緩存器被設(shè)置在可以繞開主機的用于存儲數(shù)據(jù)的接口裝置上,在接口裝置文件高速緩存器中具有由主機的文件系統(tǒng)控制的數(shù)據(jù)安排。借助該安排,遠端主機與該存儲單元之間的數(shù)據(jù)傳送可以通過接口裝置快速路徑進行處理,而且數(shù)據(jù)不需要經(jīng)由I/O總線在接口裝置與本地主機之間進行傳送。此外,與傳統(tǒng)通信協(xié)議處理對比,快速路徑數(shù)據(jù)的控制信息不經(jīng)由用于暫時存儲然后再由CPU每次單層進行處理的主機存儲器總線來重復傳送。因此,主機可以從受主機控制的存儲單元的文件讀寫的大多數(shù)數(shù)據(jù)業(yè)務(wù)的繁雜事務(wù)中解放出來。
附加接口裝置可以經(jīng)由I/O總線連接到主機上,使每個附加接口裝置具有受主機文件系統(tǒng)控制的文件高速緩存器,并且提供了附加網(wǎng)絡(luò)連接和/或?qū)Ω郊哟鎯卧倪B接。借助連接到單個主機的多個接口裝置,主機可以控制多個存儲網(wǎng)絡(luò),使大多數(shù)數(shù)據(jù)流向受主機控制的旁路主機協(xié)議處理網(wǎng)絡(luò)以及使大多數(shù)數(shù)據(jù)從該網(wǎng)絡(luò)流出、經(jīng)由I/O總線傳送數(shù)據(jù)、經(jīng)由主機總線傳送數(shù)據(jù)以及將數(shù)據(jù)存儲到主機存儲器中。在一個實例中,存儲單元可以通過一個千兆比特以太網(wǎng)連接這樣一種接口裝置,提供沒有缺陷的光纖信道的速度和帶寬,并且受益于大規(guī)模安裝的基礎(chǔ)設(shè)施以及基于以太網(wǎng)網(wǎng)絡(luò)的兼容性。


圖1是一個網(wǎng)絡(luò)存儲系統(tǒng)的平面視圖,該系統(tǒng)包括一個通過智能網(wǎng)絡(luò)接口卡(INIC)連接到多個網(wǎng)絡(luò)的主計算機,和一個附屬于INIC的用于存儲單元的文件高速緩存器,所述INIC具有一個I/O控制器;圖2是本發(fā)明的在多個網(wǎng)絡(luò)間傳送數(shù)據(jù)的INIC和主計算機的功能平面圖;圖3是一個描述步驟序列的流程圖,這些步驟涉及由圖1的系統(tǒng)從網(wǎng)絡(luò)接收一個消息分組;圖4是一個描述步驟序列的流程圖,這些步驟涉及由圖1的系統(tǒng)響應(yīng)來自一個網(wǎng)絡(luò)的請求向該網(wǎng)絡(luò)發(fā)送消息分組;圖5是一個網(wǎng)絡(luò)存儲系統(tǒng)的平面視圖,該網(wǎng)絡(luò)存儲系統(tǒng)包括通過多個由主計算機管理的INIC連接到多個網(wǎng)絡(luò)和多個存儲單元的一個主計算機;圖6是一個網(wǎng)絡(luò)存儲系統(tǒng)的平面視圖,該網(wǎng)絡(luò)存儲系統(tǒng)包括通過一個智能網(wǎng)絡(luò)接口卡(INIC)連接到多個LAN和多個SAN的一個主計算機,所述智能網(wǎng)絡(luò)接口卡沒有I/O控制器;圖7是圖6所示的一個SAN的平面視圖,包括連接在網(wǎng)絡(luò)線路與存儲單元之間的以太網(wǎng)SCSI適配器;圖8是圖6的以太網(wǎng)SCSI適配器的平面視圖;
圖9是一個網(wǎng)絡(luò)存儲系統(tǒng)的平面視圖,該網(wǎng)絡(luò)存儲系統(tǒng)包括一個通過多個由主計算機管理的INIC連接到多個LAN和多個SAN的主計算機;圖10是圖1所示INIC實施例的硬件邏輯圖,包括一個分組控制定序器和一個快速定序器;圖11是圖10的快速定序器的示意圖,該定序器分析由INIC接收的報頭字節(jié);圖12是圖1的專用主機協(xié)議堆棧的示意圖,用于建立和控制快速路徑的通信控制塊以及用于處理慢速路徑中的分組;圖13是為NetBios通信配置的MicrosoftTCP/IP堆棧和Alacritech命令驅(qū)動器的示意圖;圖14是客戶與具有網(wǎng)絡(luò)存儲單元的服務(wù)器之間的NetBios通信交換的示意圖;圖15是可以在客戶與圖14的服務(wù)器之間傳送音頻或者視頻數(shù)據(jù)的用戶數(shù)據(jù)報協(xié)議(UDP)交換的示意圖;圖16是包含在圖1中的INIC中的硬件功能的示意圖;圖17是包含在圖16中的INIC中的三階段流水線式微處理器組的示意圖,包括三個階段,每個階段有一個處理器;圖18A是圖17的流水線式微處理器的第一階段的示意圖;圖18B是圖17的流水線式微處理器的第二階段的示意圖;圖18C是圖17的流水線式微處理器的第三階段的示意圖;圖19是與圖17的微處理器相互作用并包括SRAM和DRAM的多個隊列存儲單元的示意圖;圖20是用于圖19的隊列存儲單元的一組狀態(tài)寄存器的示意圖;圖21是與圖19和圖20的隊列存儲單元及狀態(tài)寄存器相互作用的隊列管理器的示意圖;圖22A-D是用來分配高速緩存器的最后使用的寄存器的各個分階段的示意圖;圖23是用來操作圖22A-D的最后使用的寄存器的裝置的示意圖;
圖24是圖16的INIC的另一個示意圖;圖25是圖24的接收定序器2105的詳細示意圖;圖26是一個用于在文件高速緩存器中獲得一個目的地的機構(gòu)的示意圖,所述文件高速緩存器用于從網(wǎng)絡(luò)中接收的數(shù)據(jù)。
具體實施例方式
圖1示出了本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)通信系統(tǒng)的概觀。主計算機20連接一個接口裝置,如智能網(wǎng)絡(luò)接口卡(INIC)22,該INIC22可以有一個或者多個端口,以連接如局域網(wǎng)或者廣域網(wǎng)25或者互聯(lián)網(wǎng)28的網(wǎng)絡(luò)。主機20包含一個通過主機總線35連接諸如中央處理單元(CPU)30的處理器。主機20借助駐留在主機存儲器33中的操作系統(tǒng)(未示出)監(jiān)視各種任務(wù)和裝置,包括監(jiān)視文件系統(tǒng)23。主機存儲器33中存儲的其它內(nèi)容是用于處理網(wǎng)絡(luò)通信和INIC驅(qū)動器39的指令的協(xié)議堆棧38。該INIC驅(qū)動器39在INIC22與協(xié)議堆棧38之間進行通信。高速緩存器管理器26在文件系統(tǒng)23和任選的存儲器管理器27(如WindowsNT或2000的虛擬存儲器管理器)的控制下運行,以便在主機文件高速緩存器24上存儲和檢索文件段和所謂的文件流。
主機20通過I/O總線40(比如PCI總線)連接到INIC22,該I/O總線40通過主機I/O橋42連接主機總線35。INIC包括經(jīng)由INIC總線48互連的一個接口處理器44和存儲器46。INIC總線48通過INIC I/O橋50連接到I/O總線40。連接到INIC總線48的其它部件是一組硬件定序器52,該硬件定序器52提供網(wǎng)絡(luò)信息的上層處理。對LAN/WAN25以及互聯(lián)網(wǎng)28的物理連接由傳統(tǒng)物理層硬件PHY58提供。PHY58單元的每一個連接到媒體訪問控制(MAC)60的一個對應(yīng)單元,每個MAC單元在INIC與一個網(wǎng)絡(luò)之間提供一傳統(tǒng)的數(shù)據(jù)鏈路層連接。
主機存儲單元66(比如硬盤驅(qū)動器或者硬盤驅(qū)動器和對應(yīng)控制器的集合)可以通過一個傳統(tǒng)的I/O控制器64(如一個SCSI適配器)連接到I/O總線40。并行數(shù)據(jù)通道62將控制器64連接到主機存儲單元66。作為選擇,主機存儲單元66可以是獨立磁盤的冗余陣列(RAID),I/O控制器64可以是RAID控制器。根據(jù)文件系統(tǒng)23的命令操作的I/O驅(qū)動器67(例如,SCSI驅(qū)動器模塊)在與控制器64的互相作用下,在主機存儲單元66上讀寫數(shù)據(jù)。主機存儲單元66最好包含用于主機20的操作系統(tǒng)碼,包括文件系統(tǒng)23,這些操作系統(tǒng)碼可以在貯藏在主機存儲器33中。
INIC存儲單元70(比如硬盤驅(qū)動器或者硬盤驅(qū)動器與相應(yīng)的控制器的集合)經(jīng)由匹配接口控制器、INIC I/O控制器72連接到INIC總線48,INIC I/O控制器72又通過并行數(shù)據(jù)通道75連接到INIC存儲單元。INIC I/O控制器72可以是通過并行數(shù)據(jù)通道75連接到INIC存儲單元70的SCSI控制器。作為選擇,INIC存儲單元70也可以是RAID系統(tǒng),以及I/O控制器72可以是RAID控制器,具有多個或者分支數(shù)據(jù)通道75。同樣,I/O控制器72可以是一個SCSI控制器,該控制器連接到一個用于INIC存儲單元70的RAID控制器。在另一個實施例中,INIC存儲單元70附屬于光纖通道(FC)網(wǎng)絡(luò)75,以及I/O控制器72是一個FC控制器。盡管INIC I/O控制器72被顯示為連接到INIC總線48,但是I/O控制器72可以改為連接到I/O總線40。INIC存儲單元70可以隨意地包含主機20的引導磁盤,據(jù)此加載操作系統(tǒng)的內(nèi)核程序。INIC存儲器46包含幀緩沖器77,用于臨時存儲從諸如LAN/WAN25的一個網(wǎng)絡(luò)接收的分組或者臨時存儲發(fā)送到該網(wǎng)絡(luò)的分組。INIC存儲器46還包括一個接口文件高速緩存器、INIC文件高速緩存器80,用于臨時存儲從INIC存儲單元70檢索的或者在其上存儲的數(shù)據(jù)。盡管INIC存儲器46在圖1中為清楚起見被明確顯示為一個單部件,但是存儲器46可以由設(shè)置在INIC22不同位置上的分離單元構(gòu)成,并且可以由動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM)、只讀存儲器(ROM)和其它形式存儲器組成。
文件系統(tǒng)23是一個高級軟件實體,該實體包含存儲單元66和70以及文件高速緩存器24和80上的信息的組織的常識,并且提供了實現(xiàn)存儲結(jié)構(gòu)的性質(zhì)和性能的算法。文件系統(tǒng)23把存儲單元66和70、各文件高速緩存器24和80上存儲的信息在邏輯上組織成文件分級結(jié)構(gòu),盡管這樣一種邏輯文件在物理上位于存儲單元66或者70不同磁盤的不同塊上。文件系統(tǒng)23還管理存儲單元66和70以及文件高速緩存器24和80上的文件數(shù)據(jù)的存儲和檢索。I/O驅(qū)動器67軟件依據(jù)文件系統(tǒng)操作主機20,該軟件與用于各自存儲單元66和70的控制器64及72相互作用,以管理數(shù)據(jù)塊,即從這些存儲單元中讀出數(shù)據(jù)塊或者把數(shù)據(jù)塊寫入這些存儲單元。主機文件高速緩存器24和INIC文件高速緩存器80為從存儲單元66和70讀出或者寫入的數(shù)據(jù)提供存儲空間,所述數(shù)據(jù)由文件系統(tǒng)在存儲單元66和70的物理塊格式與用來應(yīng)用的邏輯文件格式之間安排。與一個文件關(guān)聯(lián)并存儲在主機文件高速緩存器24和INIC文件高速緩存器80中的字節(jié)線性流被稱作文件流。主機文件高速緩存器24和INIC文件高速緩存器80的每一個包含一個索引,用于列出保存在各個高速緩存器中的文件流。
文件系統(tǒng)23包括用于確定存儲單元66和70上的文件塊地址的元數(shù)據(jù),具有指向最新訪問的緩存在元數(shù)據(jù)高速緩存器中的文件塊的多個指針。當例如由LAN/WAN25上的一個遠端主機請求訪問一個文件塊時,開始引用主機文件高速緩存器24和INIC文件高速緩存器80索引,以查看對應(yīng)于該文件塊的文件流是否存儲在它們各自的高速緩存器中。如果未在文件高速緩存器24或80中發(fā)現(xiàn)文件數(shù)據(jù)流,那么向元數(shù)據(jù)所指的適當存儲單元地址發(fā)送一個該文件塊的請求。用于文件高速緩存器24和80的高速緩存器管理器26使用一個或者多個傳統(tǒng)高速緩存算法,以便當高速緩存器充滿又需要緩存新數(shù)據(jù)時選擇丟棄哪一個數(shù)據(jù)。INIC文件高速緩存器80的高速緩存文件流極大地減少了用于存儲在INIC存儲單元70上的文件塊的I/O總線40和數(shù)據(jù)通道75上的通信量。
當直達主機20的一個網(wǎng)絡(luò)分組到達INIC22時,該分組的報頭由定序器52處理,以確認該分組并建立該分組的概述或者描述符,該概述專用于所述分組并存儲在幀緩沖器77中,并且在一個隊列中存儲該分組的指針。該概述是描述分組報頭的協(xié)議類型以及校驗和的結(jié)果的一個狀態(tài)字(或者多個字)。該字中所包含的是一個所述幀是否為快速路徑數(shù)據(jù)流的候選者的指示。與現(xiàn)有技術(shù)方案不同,包含協(xié)議信息(包括傳送和會話層信息)的上層報頭由定序器52的硬件邏輯處理,從而建立概述。定序器的專用邏輯電路允許分組報頭在該分組從網(wǎng)絡(luò)到達時被有效處理。
INIC接下來選擇是把該分組發(fā)送到由運行協(xié)議堆棧38的CPU30進行報頭“慢速路徑”處理的主機存儲器33,還是把分組數(shù)據(jù)直接發(fā)送給“快速路徑”的INIC文件高速緩存器80或主機文件高速緩存器24。對于每個消息具有多個分組的大多數(shù)數(shù)據(jù)通信量,可以選擇快速路徑,該快速路徑免除了CPU用于每個分組的協(xié)議處理的時間,比如免除重復復制數(shù)據(jù)和重復往返主機存儲器總線35行程的時間。對于直接把分組傳送給INIC文件高速緩存器80的快速路徑的情況,還可以避免往返主機總線35和I/O總線40的附加行程。慢速路徑處理允許任何一個不便于通過INIC22快速路徑傳送的分組,由主機20按傳統(tǒng)方式處理。
為了提供主機20上的快速路徑能力,首先與遠端主機建立一個連接,也許包括信號交換、驗證和其它連接初始化過程。在用于基于連接的消息的連接初始化過程期間,由協(xié)議堆棧38建立一個通信控制塊(CCB),比如,該通信控制塊由TCP/IP或者SPX/IPX協(xié)議代表。CCB包括連接信息,比如源和目的地地址和端口。對于TCP連接,CCB包括源和目的地媒體訪問控制(MAC)地址、源和目的地IP地址、源和目的地TCP端口和TCP變量,比如用于滑動窗口協(xié)議的計時器以及接收和發(fā)送窗口。在建立連接之后,INIC驅(qū)動器39將CCB從主機傳遞到INIC存儲器46,把CCB寫入存儲器46中的命令寄存器,其中,可以將該CCB與其它CCB一同存儲在CCB高速緩存器74中。INIC還建立與被高速緩存的CCB對應(yīng)的散列表,用于加速CCB與分組概述的匹配。
當一個消息,比如一個文件寫入時(相當于INIC收到CCB時),該消息的初始分組的報頭部分被發(fā)送到主機20,由CPU30和協(xié)議堆棧38進行處理。發(fā)送到主機的報頭部分包含消息的一個會話層報頭(被認為開始于分組的某一分支),并隨意地包含來自分組的某些數(shù)據(jù)。協(xié)議堆棧38的會話層對會話層報頭的處理把所述數(shù)據(jù)識別為屬于該文件,并指示消息的大小,然后,由文件系統(tǒng)根據(jù)該消息的大小信息確定是把消息數(shù)據(jù)高速緩存到主機文件高速緩存器24中還是INIC文件高速緩存器80中,并且在所選擇的高速緩存器中保留數(shù)據(jù)的目的地。如果在發(fā)送到主機的報頭部分中包含任何數(shù)據(jù),那么則將它們存儲在目的地中。所選擇的文件高速緩存儲器中目的地的緩存器地址的列表被發(fā)送給INIC22并被存儲,或者與CCB一同被存儲。CCB還保持關(guān)于該消息的狀態(tài)信息,比如消息的長度以及已經(jīng)處理的分組的數(shù)目和順序,提供協(xié)議和關(guān)于每個協(xié)議層的狀態(tài)信息,包括涉及哪個用戶以及總傳送信息的存儲空間。
一旦CCB指示出目的地,就可以得到對應(yīng)于CCB的分組的快速路徑處理。在定序器52對連續(xù)接收的分組的進行上述處理以生成分組概述之后,將分組概述的散列與散列表進行比較,并且,必要時,與CCB高速緩存器74中存儲的CCB進行比較,以確定該分組是否屬于已經(jīng)建立快速路徑連接的消息。當分組概述與CCB匹配時,則假定不存在異常情況,此時,沒有網(wǎng)絡(luò)或者傳送層報頭,直接存儲器存取(DMA)單元68向CCB所指示的文件高速緩存器80或者文件高速緩存器24的目的地發(fā)送分組數(shù)據(jù)。
在來自消息的所有數(shù)據(jù)已經(jīng)被高速緩存為INIC文件高速緩存器80或者主機文件高速緩存器24中的文件流之后的某些點上,數(shù)據(jù)的文件流在文件系統(tǒng)的控制下,由文件系統(tǒng)23控制的DMA單元68將其從文件高速緩存器發(fā)送到INIC存儲單元70或者主機存儲單元66。通常,高速緩存在主機文件高速緩存器24中的文件流被存儲在INIC存儲單元66中,而高速緩存在INIC文件高速緩存器80中的文件流被存儲在INIC存儲單元70中,但是這種安排不是必須的。文件傳送的后續(xù)請求可以由同一CCB處理,如果該請求涉及相同的源和目的地IP地址和端口,則由主機CPU處理一個寫請求的初始分組,以在主機文件高速緩存器24或者INIC文件高速緩存器80中確定用于存儲該消息的位置。還能夠使文件系統(tǒng)配置成將INIC存儲單元70或者主機存儲單元66的一個位置標注為用于存儲從遠端主機接收的一個消息的數(shù)據(jù)目的地,從而繞開文件高速緩存器。
圖2有助于大體理解本發(fā)明,它通過顯示每個路徑信息的基本類型,分離出圖1的網(wǎng)絡(luò)數(shù)據(jù)存儲系統(tǒng)的信息流的主路徑。圖2用細箭頭顯示了主要由控制信息組成的信息流路徑,用粗白色箭頭表示了主要由數(shù)據(jù)組成的信息流路徑,用粗黑色箭頭表示了主要由數(shù)據(jù)和控制信息一起組成的信息流路徑。需要注意的是,主機20主要涉及控制信息流,而INIC存儲單元70主要涉及數(shù)據(jù)傳遞。
在諸如LAN/WAN25的一個網(wǎng)絡(luò)與INIC22之間的信息流可以包括控制信息和數(shù)據(jù),如粗黑色箭頭85所示。在諸如LAN/WAN25的一個網(wǎng)絡(luò)與INIC22之間的信息流81的一個實例包括控制信息,比如連接初始對話和確認,以及文件讀或?qū)?它作為包含封裝在控制信息中的文件數(shù)據(jù)的分組發(fā)送)。定序器52處理來自文件寫的控制信息,并傳送來自和到達INIC幀緩存器77的數(shù)據(jù)及控制信息,所以這些傳送用粗黑箭頭88表示。關(guān)于幀緩存器77中存儲的數(shù)據(jù)的控制信息由處理器44操作,如細箭頭90所示;諸如網(wǎng)絡(luò)連接初始化分組和會話層報頭的控制信息被發(fā)送到協(xié)議堆棧38,如細箭頭92所示。當主機建立一個連接時,可以在主機協(xié)議堆棧38與INIC存儲器46之間傳送關(guān)于諸如CCB那樣的連接的控制信息,如細箭頭94所示。從INIC存儲單元70讀出或者寫入該單元的數(shù)據(jù)的臨時存儲由INIC文件高速緩存器80和幀緩存器77提供,如粗白色箭頭96和98所示。存儲在INIC文件高速緩存器80上的所有文件流的控制和知識由文件系統(tǒng)23提供,如細箭頭91所示。在主機存儲單元66不存儲網(wǎng)絡(luò)可訪問數(shù)據(jù)的一個實施例中,文件系統(tǒng)信息在主機文件高速緩存器24與主機存儲單元66之間傳遞,如箭頭81所示。另一個實施例(圖中未示出)可以不包含主機存儲單元,或者作為選擇,可以使用主機存儲單元和主要用于網(wǎng)絡(luò)文件傳遞的主機文件高速緩存器。
從圖2可以看到,網(wǎng)絡(luò)文件讀或?qū)懙臄?shù)據(jù)主要經(jīng)過INIC22并避免經(jīng)過主機20,而控制信息主要在主機和INIC之間傳遞。對于網(wǎng)絡(luò)與存儲器之間文件傳遞,控制信息與數(shù)據(jù)的分離允許主機管理流經(jīng)網(wǎng)絡(luò)與存儲器之間的INIC的文件傳遞,同時INIC為這些文件傳遞提供了快速路徑,從而加速數(shù)據(jù)通過量。INIC數(shù)據(jù)快速路徑提供的增加的通過量允許主機和INIC除了充當一個文件服務(wù)器外,還充當(例如)用于高帶寬應(yīng)用(如視頻)的一個數(shù)據(jù)庫服務(wù)器。
圖3示出了圖1的系統(tǒng)為存儲從網(wǎng)絡(luò)接收的消息而執(zhí)行的某些步驟。PHY單元58首先在INIC22上接收100來自如LAN/WAN25的一個網(wǎng)絡(luò)的分組,MAC單元60執(zhí)行鏈接層處理,比如驗證分組對主機20尋址。然后,定序器52處理102該分組的網(wǎng)絡(luò)、傳送和任選的會話層報頭,確認該分組并建立這些報頭的概述。然后,將概述加到該分組上并存入104幀緩存器77中。接著,通過檢驗分組概述,處理器44確定106該分組是否為快速路徑處理的候選者??山柚攀鏊傅脑摲纸M的協(xié)議簡單地確定該分組是否為快速路徑候選者。對于分組不是快速路徑候選者的情況,經(jīng)由I/O總線40將分組發(fā)送到108主機存儲器33,由運行來自協(xié)議堆棧38的指令的CPU30處理該分組的報頭。
對于分組是快速路徑候選者的情況,將分組概述與卡所處理的一組快速路徑連接進行比較110,通過將概述與CCB散列和CCB高速緩存器匹配,將每個連接表示為一個CCB。如果分組不能與INIC存儲器中保存的一個CCB匹配,則把該分組發(fā)送給主機存儲器,由運行來自協(xié)議堆棧的指令的CPU處理該分組的報頭。對于分組是連接初始化對話的部分的情況,該分組可以用來建立115用于消息的一個CCB。反之,如果分組概述與INIC存儲器中保存的一個CCB匹配,則處理器檢查114也許包含例如片段或者無序分組的異常情況,如果發(fā)現(xiàn)這樣一個異常情況,則將CCB和該分組涌到主機協(xié)議堆棧38進行協(xié)議處理。對于分組概述匹配一個CCB,但該分組目的地未指示給CCB的情況,將分組的會話層報頭發(fā)送到主機協(xié)議堆棧38,根據(jù)文件系統(tǒng)確定122主機文件高速緩存器或者INIC文件高速緩存儲器中的一個目的地,該目的地的高速緩存器地址的列表與該CCB一起被存儲在INIC中。對于將造成CCB涌入主機116以及把分組發(fā)送到主機由協(xié)議堆棧處理的異常情況,INIC還檢查114分組概述。
對于分組概述匹配一個CCB、并且該分組的一個目的地與CCB一起被存儲、以及不存在異常情況的情況下,DMA將來自分組的數(shù)據(jù)發(fā)送125到由CCB指定的主機文件高速緩存器或者INIC文件高速緩存儲器中的目的地。該情況下的消息分組繞過由主機協(xié)議處理堆棧進行的報頭處理,提供快速路徑數(shù)據(jù)傳送。快速路徑發(fā)送到INIC文件高速緩存器和INIC存儲器的情況,該分組不僅免于主機的協(xié)議處理,而且還不往返于I/O總線或者主機存儲器總線,從而與傳統(tǒng)網(wǎng)絡(luò)存儲相比,節(jié)省了大量的時間、CPU處理和總線通信量。
圖4顯示了圖1的系統(tǒng)執(zhí)行的某些步驟,這些步驟用于響應(yīng)來自如LAN/WAN25的一個網(wǎng)絡(luò)的請求200,從主機存儲單元66或者INIC存儲單元70中檢索一個文件或者一個文件的部分。首先,由協(xié)議堆棧處理請求分組,將該請求直接送入文件系統(tǒng)。文件系統(tǒng)查找202該請求指示的文件位置,包括確定對應(yīng)于該文件的文件流是否被高速緩存在INIC文件高速緩存器或者主機文件高速緩存器中,如果文件流不在其中一個高速緩存器中,則確認對應(yīng)于該文件的塊或多個塊是否被存儲在主機存儲單元或者INIC存儲單元中。假定該文件流未位于其中一個高速緩存器中,則把文件塊讀入主機高速緩存器204或者讀入INIC文件高速緩存器206。大多數(shù)情況下,主機存儲單元上存儲的文件塊將被讀入主機文件高速緩存器中,INIC存儲單元上存儲的文件塊將被讀入INIC文件高速緩存器中,但這種對應(yīng)不是必須的。例如,把主機存儲單元上存儲的文件塊讀入INIC文件高速緩存器也許是理想的,以便減少主機存儲器總線上的通信量。
對于文件塊被高速緩存在主機文件高速緩存器中的情況,主機通過發(fā)現(xiàn)對應(yīng)于請求的一個CCB是否由INIC保存,來確定210是否通過快速路徑處理發(fā)送該文件。如果主機選擇不使用快速路徑而是經(jīng)由慢速路徑發(fā)送來自主機的文件,則CPU運行協(xié)議堆棧以建立主機文件高速緩存器中保存的數(shù)據(jù)的報頭,然后把報頭和校驗和附加到數(shù)據(jù)上,如傳統(tǒng)方式一樣,建立通過INIC經(jīng)由網(wǎng)絡(luò)傳輸?shù)木W(wǎng)絡(luò)幀212。INIC然后使用DMA從主機214中獲得諸多幀,然后,INIC發(fā)送幀208到網(wǎng)絡(luò)上。相反,如果是通過快速路徑發(fā)送文件,則INIC處理器使用CCB建立報頭以及校驗和,并且建立來自主機文件高速緩存器的DMA幀長的多個數(shù)據(jù)段,然后將報頭和校驗和預(yù)先規(guī)劃到諸多數(shù)據(jù)段上,以建立網(wǎng)絡(luò)幀218,從而免除主機的協(xié)議處理。
同樣,如果文件塊被高速緩存在INIC文件高速緩存器中,則主機通過發(fā)現(xiàn)一個CCB是否由INIC保存,來確定220是否通過快速路徑處理發(fā)送該文件。如果主機未選擇使用快速路徑22,則主機CPU準備用于文件塊數(shù)據(jù)的報頭和校驗和,把報頭存儲到主機存儲器中。然后,主機指令I(lǐng)NIC通過把來自主機存儲器的報頭預(yù)先規(guī)劃到INIC存儲器中的數(shù)據(jù)上,來集合網(wǎng)絡(luò)幀,并建立隨后由INIC在網(wǎng)上發(fā)送的消息幀。即使對于該非快速路徑情況,數(shù)據(jù)也不經(jīng)過I/O總線移動到主機以及返回到INIC,與傳統(tǒng)的通過I/O總線或者網(wǎng)絡(luò)連接到主機的存儲單元上的文件塊傳送相比,減少了I/O通信量。如果選擇225了快速路徑,則INIC處理器建立對應(yīng)于CCB的報頭及校驗和,并且把報頭及校驗和預(yù)先規(guī)劃到來自INIC文件高速緩存器的數(shù)據(jù)段上,以建立網(wǎng)絡(luò)幀,然后通過INIC在網(wǎng)絡(luò)上發(fā)送208網(wǎng)絡(luò)幀。在該快速路徑情況下,主機免除了協(xié)議處理和主機存儲器總線通信量,以及免除了I/O總線通信量。
圖5示出了主機經(jīng)由I/O總線40連接到若干I/O INIC(包括第一INIC22)的一個網(wǎng)絡(luò)存儲系統(tǒng)。該實施例中的每個INIC至少連接一個網(wǎng)絡(luò)和至少具有一個附屬的存儲單元。這樣,第二INIC303連接到I/O總線40,并且向主機提供一個到第二網(wǎng)絡(luò)305的接口。第一INIC22可以如上所述,實際上具有連接到幾個網(wǎng)絡(luò)的幾個網(wǎng)絡(luò)端口,第二INIC303也可以連接一個以上的網(wǎng)絡(luò)305,但是為了清楚起見,在圖中每個INIC只顯示了單個網(wǎng)絡(luò)連接。第二INIC303包含一個如SCSI適配器那樣的I/O控制器,它連接到第二INIC存儲單元308上。作為選擇,第二INIC存儲單元308可以是RAID系統(tǒng),第二INIC303可以包含一個RAID控制器或者與其連接。在另一個實施例中,第二INIC303包含一個FC控制器,該控制器通過一個FC網(wǎng)絡(luò)環(huán)路或FC適配器以及網(wǎng)絡(luò)線路連接到第二INIC存儲單元308。N個INIC可以經(jīng)由I/O總線連接到主機20,如圖表示為第N個INIC310。第N個INIC310包含提供一個網(wǎng)絡(luò)接口和一個存儲接口的電路和指令,這兩個接口分別與第N個網(wǎng)絡(luò)313和第N個存儲單元315連接。第N個INIC310可以有幾個連接幾個網(wǎng)絡(luò)的網(wǎng)絡(luò)端口,第二第N個INIC310也可以連接一個以上網(wǎng)絡(luò)。第N個INIC310的存儲接口電路和控制指令可以包含SCSI控制器,該控制器通過SCSI電纜連接第N個INIC存儲單元315。作為選擇,第N個INIC存儲單元315可以是RAID系統(tǒng),第N個INIC310包含一個通過FC適配器和FC網(wǎng)絡(luò)線路連接到第N個INIC存儲單元315的FC控制器。
文件系統(tǒng)可以被安排成使網(wǎng)絡(luò)可訪問文件被存儲在網(wǎng)絡(luò)存儲單元66、305或者315之一上,而不是存儲在主機存儲單元66上,主機存儲單元66主要存放文件系統(tǒng)碼和協(xié)議堆棧,其拷貝高速緩存在主機中。借助該結(jié)構(gòu),主機20控制網(wǎng)絡(luò)文件傳遞,但是這些文件的大多數(shù)數(shù)據(jù)可以經(jīng)由INIC22、303或310通過快速路徑傳遞,而不進入主機。對于文件塊在連接到同一INIC的網(wǎng)絡(luò)和存儲單元之間傳遞的情況,文件數(shù)據(jù)不會往返于I/O總線或者主機存儲器總線。對于文件在連接到不同INIC的網(wǎng)絡(luò)和存儲單元之間傳遞的情況,文件塊可以經(jīng)由I/O總線通過DMA向或者從連接到存儲單元的INIC上的一個文件高速緩存器發(fā)送,也免用了主機存儲器總線。在通常避免的最壞情況下,數(shù)據(jù)可以從一個INIC傳送到另一個INIC,其單向使用I/O總線傳送,從而避免了主機存儲器總線,而不是雙向I/O總線傳送從而重復傳統(tǒng)的主機存儲器總線訪問。
圖6顯示了包括一個INIC400的網(wǎng)絡(luò)存儲系統(tǒng),該INIC400提供了網(wǎng)絡(luò)通信連接及網(wǎng)絡(luò)存儲連接,而不需要上述的INIC I/O控制器72。為了簡明,主機20和有關(guān)元件被顯示為與圖1相同,盡管這不是必須的情況。該實例中的INIC具有連接到第一LAN414、第二LAN416、第一SAN418和第二SAN420的網(wǎng)絡(luò)連接或者端口。網(wǎng)絡(luò)414、416、418和420的任何一個或者全部可以根據(jù)以太網(wǎng)、快速以太網(wǎng)或者千兆以太網(wǎng)標準操作。千兆以太網(wǎng)(802.3z和802.3ab標準描述的例子)可以提供1Gb/秒或者10Gb/秒的數(shù)據(jù)傳送速率,或者將來可能的更快速率。SAN418和420可以運行一個存儲協(xié)議,比如TCP/IP上的SCSI或者SCSI封裝協(xié)議。如J.Satran等人在名為“iSCSI(互聯(lián)網(wǎng)SCSI)”的互聯(lián)網(wǎng)工程任務(wù)組(IETF)的互聯(lián)網(wǎng)設(shè)計(2000年6月)中描述了一種這樣的存儲協(xié)議,其較早版本名為“SCSI/TCP(TCP上的SCSI)”的互聯(lián)網(wǎng)設(shè)計(2000年2月)。另外類似的協(xié)議,名為以太存儲,已經(jīng)被建議在會話層利用SCSI封裝協(xié)議(SEP),在傳輸層利用TCP或者SAN傳輸協(xié)議(STP);如數(shù)據(jù)是在WAN或互聯(lián)網(wǎng)上傳輸,則使用TCP;如數(shù)據(jù)是在LAN或SAN上傳輸,則使用STP。
主機20通過I/O總線40,如PCI總線,連接到INIC400,該I/O總線40通過諸如PCI總線接口這樣的INIC I/O橋406連接INIC總線404。INIC400包括一個通過I/O總線40連接到INIC存儲器410的專用處理器408。INIC存儲器410包括幀緩存器430和一個INIC文件高速緩存器433。連接到INIC總線404的還有一組提供網(wǎng)絡(luò)消息處理的硬件定序器412,所述處理包括網(wǎng)絡(luò)、傳輸和會話層處理。傳統(tǒng)的物理層硬件PHY 422提供了對LAN414和416以及SAN418和420的物理連接。每個PHY422單元連接到媒體訪問控制(MAC)424的一個對應(yīng)單元,每個MAC單元在INIC400與一個網(wǎng)絡(luò)之間提供一數(shù)據(jù)鏈路層連接。
圖7顯示SAN418包括一個千兆以太網(wǎng)線路450,以太網(wǎng)線路450被連接在INIC400與第一以太網(wǎng)SCSI適配器452、第二以太網(wǎng)SCSI適配器454、第三以太網(wǎng)SCSI適配器456之間。以太網(wǎng)SCSI適配器452、454和456可以建立或斷開TCP連接,發(fā)送SCSI命令到INIC400或者從INIC400接收SCSI命令,以及經(jīng)由線路450發(fā)送數(shù)據(jù)到INIC400或者從INIC400接收數(shù)據(jù)。第一存儲單元462通過第一SCSI電纜458連接到第一以太網(wǎng)SCSI適配器452。同樣,第二存儲單元464通過第二SCSI電纜459連接到第二以太網(wǎng)SCSI適配器454;第三存儲單元466通過第三SCSI電纜460連接到第三以太網(wǎng)SCSI適配器456。存儲單元462、464和466由各自的適配器452、454和456根據(jù)SCSI標準進行操作。每個存儲單元可以包含多個磁盤驅(qū)動器,它們被菊鏈到各自的適配器上。
圖8顯示了第一以太網(wǎng)SCSI適配器452的細節(jié),在該實施例中,該適配器是一個類似于圖1所示的INIC。適配器452具有一個單網(wǎng)絡(luò)端口,該端口通過傳統(tǒng)的PHY472提供到網(wǎng)絡(luò)線路450的物理層連接,并且通過傳統(tǒng)的MAC472提供媒體訪問。包括上層處理的網(wǎng)絡(luò)消息分組報頭的處理由定序器475提供,該定序器475經(jīng)由適配器總線477連接到處理器480和適配器存儲器482。適配器存儲器482包括幀緩存器484和一個文件高速緩存器486。連接到適配器總線477的還有一個SCSI控制器,它通過SCSI通道458連接到第一存儲單元462。
適配器452與INIC20之間的一個差別是其不必需連接到具有處理慢速路徑消息的CPU和協(xié)議堆棧的主機。在此情況下,連接建立可由適配器452處置,例如,在連接初始化對話期間,由INIC400發(fā)送一個初始分組給適配器452,該分組由定序器475處理,然后發(fā)送給處理器480以建立一個CCB。需要由運行軟件協(xié)議堆棧的CPU進行慢速路徑處理的某些情況在適配器452與INIC400之間的通信環(huán)境中可能很少發(fā)生。適配器452與INIC400之間發(fā)送的消息根據(jù)協(xié)議層(比如SCSI/TCP和簡單網(wǎng)絡(luò)管理協(xié)議(SNMP))的單集或者有限集來構(gòu)造,并且發(fā)送到或者從單一源發(fā)送到單個或者有限數(shù)目的目的地。減少造成傳統(tǒng)通信網(wǎng)絡(luò)復雜化的許多變量導致使用快速路徑處理的增加,從而減少了適配器452上差錯處理的需要。適配器452可以在IP和TCP上具有處理一些類型存儲協(xié)議的能力,為此適配器452可以連接到使用這些網(wǎng)絡(luò)存儲協(xié)議之一的主機而不是連接到INIC400。對于網(wǎng)絡(luò)450不是專用于存儲傳遞而是還處理通信業(yè)務(wù)的一個SAN的情況,可以使用一INIC連接到主機(具有一個運行用于慢速路徑分組的協(xié)議堆棧的CPU),而不使用適配器452。
如圖9所示,可以經(jīng)由I/O總線40把類似于INIC400的附加的INIC連接到主機20,每個附加INIC提供附加的LAN連接和/或被連接到附加SAN上。多個INIC由第N個INIC490表示,第N個INIC490連接到第N個SAN492和第N個LAN494。對于附屬主機20的多個INIC,主機可以控制多個存儲網(wǎng)絡(luò);對于大多數(shù)流入并流出繞開主機協(xié)議處理的由主機控制的網(wǎng)絡(luò)的數(shù)據(jù),經(jīng)由I/O總線傳輸,經(jīng)由主機總線傳輸,并且存儲在主機存儲器中。
圖10更詳細地顯示了圖1的INIC22從諸如網(wǎng)絡(luò)25的一個網(wǎng)絡(luò)接收的消息分組的處理。所接收的消息分組首先進入媒體訪問控制器60,該控制器60控制INIC訪問網(wǎng)絡(luò)和接收分組,并且可以提供網(wǎng)絡(luò)協(xié)議管理的統(tǒng)計信息。來自控制器60的數(shù)據(jù)每次一字節(jié)流入?yún)R編寄存器500,在該實例中匯編寄存器為128比特寬度。數(shù)據(jù)由快速(fly-by)定序器502分類(下面將結(jié)合圖11進行詳細解釋),該定序器502快速檢查分組字節(jié),并因此生成將用來概述分組的狀態(tài)。多路復用器505將如此建立的狀態(tài)與數(shù)據(jù)合并,并且將合成的數(shù)據(jù)存儲在SRAM508中。分組控制定序器510監(jiān)視快速定序器502,檢查來自媒體訪問控制器60的信息,對數(shù)據(jù)的字節(jié)計數(shù),生成地址,傳送狀態(tài)并且管理數(shù)據(jù)從匯編寄存器500到SRAM508最終到達DRAM512的傳送。分組控制定序器510經(jīng)由SRAM控制器515管理SRAM508中的緩存器,并且,當數(shù)據(jù)需要從SRAM508傳送到DRAM512的緩存器時還向DRAM控制器518指示。一旦分組的數(shù)據(jù)傳送已經(jīng)完成以及所有數(shù)據(jù)已經(jīng)被傳送到DRAM512的緩存器中,分組控制定序器510就將在快速定序器502中生成的狀態(tài)移出到SRAM508和DRAM512緩存器的開頭,以預(yù)先規(guī)劃分組數(shù)據(jù)。分組控制定序器510請求一個隊列管理器520把一個接收緩存器描述符輸入到一個接收隊列上,向處理器44通知所述分組已經(jīng)被硬件邏輯處理和其狀態(tài)已經(jīng)進行了概述。
圖11顯示了快速定序器502具有若干層,每個層通常集中在分組報頭的一個特定部分上,因而是集中在一個特定協(xié)議層上,用于生成屬于該層的狀態(tài)。本實施例中的快速定序器502包括一個媒體訪問控制定序器540,一個網(wǎng)絡(luò)定序器542,一個傳輸定序器546和會話定序器548??梢粤硗馓峁儆谳^高協(xié)議層的定序器。快速定序器502由分組控制定序器510復位,由分組控制定序器給定的指針告訴快速定序器一個給定字節(jié)是否可以從匯編寄存器500處得到。媒體訪問控制定序器540通過查看字節(jié)0-5確定分組到達主機20而不是另一個主機。分組的分支12和13也由媒體訪問控制定序器540處理,以確定類型字段,例如,確定分組是以太網(wǎng)或者802.3。如果類型字段是以太網(wǎng),則這些字節(jié)還告訴媒體訪問控制定序器540該分組的網(wǎng)絡(luò)協(xié)議類型。對于802.3,這些字節(jié)改為指示整個幀的長度,并且媒體訪問控制定序器540將檢查進一步進入分組的八個字節(jié),以確定網(wǎng)絡(luò)層類型。
對于大多數(shù)分組,網(wǎng)絡(luò)定序器542檢驗所接收的報頭長度具有恰當長度,并且對網(wǎng)絡(luò)層報頭求校驗和。對于快速路徑候選者,依據(jù)媒體訪問控制定序器540所作的分析來得知網(wǎng)絡(luò)層報頭是IP或者IPX。假定類型字段是802.3并且網(wǎng)絡(luò)協(xié)議是IP,則網(wǎng)絡(luò)定序器542分析從字節(jié)22開始的網(wǎng)絡(luò)層報頭的第一字節(jié),以便確定IP類型。IP報頭的第一字節(jié)將由網(wǎng)絡(luò)定序器542處理,以確定分組包含什么IP類型。當確定分組包含例如IP版本4時,由網(wǎng)絡(luò)定序器542指導進一步的處理,該網(wǎng)絡(luò)定序器542還查看將10個字節(jié)定位到IP報頭中的協(xié)議類型,該報頭用于顯示分組的傳輸報頭協(xié)議。例如,對于以太網(wǎng)IP,IP報頭從分支14開始,并且協(xié)議類型字節(jié)是分支23,網(wǎng)絡(luò)邏輯將對它們進行處理,以確定傳輸層協(xié)議,例如,是否為TCP。網(wǎng)絡(luò)定序器542依據(jù)網(wǎng)絡(luò)層報頭(通常是20-40字節(jié))確定驗證傳輸層報頭的分組傳輸層報頭的起始處。傳輸定序器546可以生成傳輸層報頭和數(shù)據(jù)的校驗和,在TCP情況下該校驗和至少包括來自IP報頭的信息。
繼續(xù)一個TCP分組的例子,傳輸定序器546還分析報頭的傳輸層部分最初的幾個字節(jié),從而部分地確定消息的TCP源和目的地端口,比如分組是NetBios還是其它協(xié)議。TCP報頭的字節(jié)12由傳輸定序器546處理,以確定和驗證TCP報頭長度。TCP報頭的字節(jié)13包含一些標志,除了詢問標志和推(push)標志外,其它標志可以指示意外選項,比如復位和散熱(fin),這些意外選項可能導致處理器把該分組歸為意外情況。TCP分支字節(jié)16和17是校驗和,由硬件邏輯取出和存儲該校驗和,同時對照該校驗和檢驗幀的剩余部分。
會話定序器548確定會話層報頭的長度,在NetBios情況下,所述長度僅為4字節(jié),其中的2字節(jié)告知NetBios有效載荷數(shù)據(jù),但是對于其它協(xié)議可能大的多。會話定序器548也可以用來例如把消息類型分類為讀或者寫,由此對快速路徑可能是特別有利的。分組控制定序器510和快速定序器502的硬件邏輯基于消息類型進一步執(zhí)行上層邏輯處理。這樣,定序器52通過分類從字節(jié)的單向流選用的字節(jié),借助依據(jù)快速確定的分類建立的分組狀態(tài)智能地指導報頭硬件處理。一旦分組控制定序器510檢測到快速定序器502已經(jīng)處理了所有分組,分組控制定序器510就添加由快速定序器502生成的狀態(tài)信息以及由分組控制定序器510生成的任何狀態(tài)信息,并把狀態(tài)信息預(yù)先規(guī)劃分組上(加到前面),以方便處理器44處理分組。分組控制定序器510生成的附加狀態(tài)信息包括媒體訪問控制器60的狀態(tài)信息和所發(fā)現(xiàn)的任何錯誤,或者匯編寄存器或DRAM緩存器中的數(shù)據(jù)溢出,或者關(guān)于分組的其它雜項信息。分組控制定序器510還經(jīng)由隊列管理器520把一些項目存儲到接收緩存器隊列和接收統(tǒng)計隊列中。
分組硬件邏輯處理一個分組的優(yōu)點是,與傳統(tǒng)的序列軟件協(xié)議處理相比,不需要從處理每個協(xié)議層報頭的存儲器進行存儲、移動、復制或者取出的處理,使處理效率明顯增加,并且節(jié)省了每個分組的處理時間??梢园凑諒木W(wǎng)絡(luò)接收比特的速率處理分組,例如,對于100baseT連接達到100兆比特/秒的速率。分類按此速率接收并具有60字節(jié)長度的一個分組的時間約為5微妙。硬件邏輯處理該分組以及經(jīng)快速路徑發(fā)送分組數(shù)據(jù)到主機的總時間小于利用傳統(tǒng)的序列軟件協(xié)議處理的一個傳統(tǒng)CPU所需的數(shù)量級,這里甚至不考慮因減少CPU中斷和節(jié)約主機總線帶寬而節(jié)約的額外的時間。對于目的地駐留在INIC高速緩存器中的情況,實現(xiàn)了主機總線35和I/O總線40的附加帶寬節(jié)省。
對于保存在幀緩存器77中的每個所接收的消息分組,處理器44決定該分組是否為快速路徑的候選者,如果是,則檢查看是否已經(jīng)建立了該分組適于連接的快速路徑。為此,處理器44首先檢查報頭狀態(tài)概述,以確定分組報頭是定義快速路徑候選者的協(xié)議的報頭。如果不是,處理器44則命令I(lǐng)NIC22中的DMA控制器發(fā)送該分組給用于慢速路徑處理的主機。即使對于一個消息的慢速路徑處理,INIC22也這樣執(zhí)行起始過程,比如消息類型的驗證和確定,并且至少把驗證后的消息傳送到主機的數(shù)據(jù)鏈路層。
對于快速路徑候選者,處理器44查看報頭狀態(tài)是否與INIC中所保存的一個CCB匹配。如果是,則沿著快速路徑將分組的數(shù)據(jù)發(fā)送到主機中的目的地168。如果快速路徑候選者的分組概述不匹配INIC中所保存的CCB,則可以把分組發(fā)送到用于慢速路徑處理的主機,以建立消息的CCB。對于破碎的消息或者其它復雜情況,則不使用快速路徑。然而對于大多數(shù)消息,INIC快速路徑可以極大地加快消息處理。因此,INIC22根據(jù)快速收集的信息,提供決定是否直接發(fā)送數(shù)據(jù)給其目的地的單一狀態(tài)機構(gòu)處理器44,這與傳統(tǒng)的如確定一個給定分組的命運在一些協(xié)議層之每個協(xié)議層中均使用一個狀態(tài)機構(gòu)的情況不同。
在INIC的散列表中高速緩存的CCB提供了與概述輸入分組的字的快速比較,以確定是否可以經(jīng)由快速路徑處理所述分組,同時還將全部CCB保存在用于處理的INIC中。加快該比較的其它方式包括軟件處理,比如B-tree或者諸如內(nèi)容可尋址存儲器(CAM)的硬件幫助。當INIC微碼或者比較器電路檢測到一個與CCB匹配,則DMA控制器把分組的數(shù)據(jù)放入主機存儲器33或者INIC文件高速緩存器80中的目的地,而不需要CPU的任何中斷、協(xié)議處理或者復制。根據(jù)所接收的消息類型,數(shù)據(jù)目的地可以是主機20、主機文件高速緩存器24或者INIC文件高速緩存器80中的會話層、表示層或者應(yīng)用層。
傳遞大消息(如文件)的最常用的網(wǎng)絡(luò)協(xié)議之一是TCP/IP上的服務(wù)器消息塊(SMB)。SMB可以結(jié)合轉(zhuǎn)向器軟件操作,所述轉(zhuǎn)向器軟件確定特定操作的所需資源(比如,在其上寫入文件的打印機或者磁盤)是否存在于主機(主機產(chǎn)生所述操作)上或者與其相關(guān)聯(lián)或者定位在連接到網(wǎng)絡(luò)的另一個主機(比如,文件服務(wù)器)上。SMB和服務(wù)器/轉(zhuǎn)向器通常由傳輸層服務(wù);在本發(fā)明中,SMB和轉(zhuǎn)向器可以改為由INIC服務(wù)。在此情況下,在接收大SMB傳送時,由DMA控制器發(fā)送來自INIC緩存器的數(shù)據(jù)可以極大地減少主機必須實行的中斷。此外,該DMA通常傳送數(shù)據(jù)到主機文件高速緩存器24或者INIC文件高速緩存器80中的目的地,由此按塊將所述數(shù)據(jù)分別涌入主機存儲單元66或者INIC存儲單元70。
SMB快速路徑傳送通常與上述的SMB快速路徑接收相反,從主機存儲單元66或者INIC存儲單元70讀出的數(shù)據(jù)塊分別送到主機文件高速緩存器24或者INIC文件高速緩存器80,同時由INIC將有關(guān)協(xié)議報頭預(yù)先規(guī)劃到所述數(shù)據(jù)上,用于經(jīng)由網(wǎng)絡(luò)線路傳送到遠端主機。由多分組、多TCP、IP、NetBios和SMB協(xié)議層的INIC經(jīng)由用戶硬件并且不重復主機中斷的處理可以極大地增加發(fā)送一個SMB消息到一個網(wǎng)絡(luò)線路的速度。如結(jié)合圖4所述的那樣,對于所發(fā)送的文件塊被存儲在INIC存儲單元70上的情況,可以實現(xiàn)主機總線35帶寬和I/O總線帶寬40的附加節(jié)約。
圖12顯示了用于處理網(wǎng)絡(luò)消息的由與INIC連接的主機(都未示出)使用的Alacritech協(xié)議堆棧38。INIC裝置驅(qū)動器560將INIC鏈接到主機的操作系統(tǒng),并能在INIC和協(xié)議堆棧38之間傳遞通信。本實施例中的協(xié)議堆棧38包括數(shù)據(jù)鏈路層562、網(wǎng)絡(luò)層564、傳輸層566、上層接口568和上層570。上層570可以代表依賴于所使用的特定協(xié)議和所傳遞的消息的一個會話層、表示層和/或應(yīng)用層。協(xié)議堆棧38處理慢速路徑中的分組報頭,建立和斷開連接,把用于快速路徑連接的CCB交給INIC,并接收從INIC涌入到主機20的快速路徑連接的CCB。上層接口568通常負責集合CCB,它基于數(shù)據(jù)鏈接層562、網(wǎng)絡(luò)層564和傳輸層566所建立的連接和狀態(tài)信息,并且經(jīng)由INIC裝置驅(qū)動器560把CCB交給INIC,或者經(jīng)由INIC裝置驅(qū)動器560接收從INIC涌入的CCB。
圖13顯示了Alacritech協(xié)議堆棧38的另一個實施例,該協(xié)議堆棧38包括與Microsoft操作系統(tǒng)一起處理網(wǎng)絡(luò)通信的多個協(xié)議堆棧。傳統(tǒng)的微軟TCP/IP協(xié)議堆棧580包括MAC層582、IP層584和TCP層586。命令驅(qū)動器590與主機堆棧580合作處理網(wǎng)絡(luò)消息。命令驅(qū)動器590包括MAC層592、IP層594和Alacritech TCP(ATCP)層596。傳統(tǒng)堆棧580和命令驅(qū)動器590共享網(wǎng)絡(luò)驅(qū)動接口規(guī)范(NDIS)層598,該NDIS層598與INIC裝置驅(qū)動器570相互作用。INIC裝置驅(qū)動器570分類由傳統(tǒng)主機堆棧580或者ATCP驅(qū)動器590處理的接收指示。TDI濾波器驅(qū)動器和上層接口572相似地確定從TDI用戶575發(fā)送到網(wǎng)絡(luò)的消息是轉(zhuǎn)送到命令驅(qū)動器,或許轉(zhuǎn)送到INIC的快速路徑,還是由主機堆棧處理。
圖14示出了在具有INIC的服務(wù)器600與客戶機602之間的SMB交換,每個INIC保存定義它的連接和在網(wǎng)絡(luò)604上數(shù)據(jù)的快速路徑傳輸狀態(tài)的CCB,所述網(wǎng)絡(luò)604可以是千兆以太網(wǎng)順從網(wǎng)絡(luò)??蛻魴C602包括INIC606,802.3順從數(shù)據(jù)鏈路層608,IP層610,TCP層611,ATCP層612,NetBios層630,SMB層632。服務(wù)器配屬存儲單元634經(jīng)并行通道638(比如SCSI通道)連接到服務(wù)器600,并行通道638連接I/O總線639,總線639還連接到INIC622。網(wǎng)絡(luò)存儲單元640經(jīng)由網(wǎng)絡(luò)線路644連接到INIC622,以及NAS存儲單元642連接到同樣的可以是順從千兆以太網(wǎng)的網(wǎng)絡(luò)644。服務(wù)器600具有用于通信處理的慢速路徑646和快速路徑648,所述通信處理經(jīng)由I/O總線638在INIC622與文件高速緩存器之間傳送(圖中未示出)。
INIC622在服務(wù)器控制下提供存儲快速路徑,用于在網(wǎng)絡(luò)存儲單元640或者642與不經(jīng)過I/O總線的客戶機602之間傳遞的數(shù)據(jù)。在INIC622與網(wǎng)絡(luò)存儲單元640之間根據(jù)塊格式比如SCSI/TCP或者ISCSI進行數(shù)據(jù)通信,而在INIC622與NAS存儲單元642之間根據(jù)文件格式比如TCP/NetBios/SMB傳遞數(shù)據(jù)。對于存儲快速路徑,INIC622可以保存確定與存儲單元640或者642連接的另一個CCB。為了下面的討論簡便,由INIC606保存的確定經(jīng)由網(wǎng)絡(luò)604連接服務(wù)器600的CCB被稱之為客戶機CCB。由INIC622保存的確定經(jīng)由網(wǎng)絡(luò)604連接客戶機602的CCB被稱作服務(wù)器CCB。由INIC622保存的確定經(jīng)由網(wǎng)絡(luò)644連接網(wǎng)絡(luò)存儲單元640的CCB被稱之為SAN CCB。由INIC622保存的確定經(jīng)由網(wǎng)絡(luò)644連接NAS存儲單元642的CCB被稱作NAS CCB。附加網(wǎng)絡(luò)線路650和652可以連接到其它通信和/或存儲網(wǎng)絡(luò)。
假如客戶機602希望在服務(wù)器600上讀取以塊形式存儲在網(wǎng)絡(luò)存儲單元640中的100KB文件,那么客戶機經(jīng)由網(wǎng)絡(luò)604首先發(fā)送一個SMB讀請求,請求服務(wù)器上該文件的第一64KB。該請求(例如)可能僅是76字節(jié),服務(wù)器上的INIC622確認消息類型(SMB)和較小的消息大小,并直接向ATCP濾波層628發(fā)送該76個字節(jié),將所述請求發(fā)送到服務(wù)器的NetBios 630。NetBios 630把會話報頭傳送到SMB632,SMB處理讀請求并確定所請求的數(shù)據(jù)是存儲在主機中還是存儲在INIC文件高速緩存器中。如果所請求的數(shù)據(jù)不是存儲在文件高速緩存器中,SMB向文件系統(tǒng)發(fā)出一個讀請求從網(wǎng)絡(luò)存儲單元640讀出數(shù)據(jù)到INIC622文件高速緩存器。
為了執(zhí)行該讀取,文件系統(tǒng)指令I(lǐng)NIC622從網(wǎng)絡(luò)存儲單元640中提取數(shù)據(jù)的64KB并送入INIC622文件高速緩存器。INIC622隨后經(jīng)由網(wǎng)絡(luò)644向網(wǎng)絡(luò)存儲單元640發(fā)送一數(shù)據(jù)請求。根據(jù)ISCSI或者相似的協(xié)議,請求可以采取給存儲單元640一個或多個SCSI命令的形式以讀取數(shù)據(jù)塊,該命令附加在TCP/IP報頭上。存儲單元640上的控制器通過從它的一個或多個磁盤驅(qū)動器讀取所請求的塊來響應(yīng)該命令,把ISCSI或者類似的協(xié)議報頭添加到數(shù)據(jù)塊或者數(shù)據(jù)塊的幀大小的部分上,并且經(jīng)由網(wǎng)絡(luò)644把合成幀發(fā)送到INIC622。所述幀由INIC622接收,由INIC622定序器處理,與存儲CCB匹配,并且在INIC622文件高速存儲器中重新集合為64KB文件流,形成所請求的100KB文件的一部分。一旦文件流被存儲到INIC622文件高速緩存器上,SMB就構(gòu)成一個讀答復并向INIC622發(fā)送一個表示該文件流的分散-聚集列表,并且發(fā)送該答復給INIC622,以便根據(jù)服務(wù)器CCB經(jīng)由網(wǎng)絡(luò)發(fā)送數(shù)據(jù)。INIC622利用分散-聚集列表從它的文件高速緩存器中讀取數(shù)據(jù)分組,所述分組用IP/TCP/NetBios/SMB報頭預(yù)先規(guī)劃,所述報頭由INIC根據(jù)服務(wù)器CCB建立,然后把合成幀送入網(wǎng)絡(luò)604上。文件的剩余36KB通過相似方式發(fā)送。在此方式中,網(wǎng)絡(luò)存儲單元上的文件可以在服務(wù)器控制下傳遞,而且來自文件的任何數(shù)據(jù)不會經(jīng)過I/O總線或者服務(wù)器協(xié)議堆棧。
對于在NAS存儲單元642上存儲的由客戶機602請求的數(shù)據(jù)的情況,該請求可以從服務(wù)器600傳送到存儲單元642,存儲單元642通過發(fā)送具有對客戶機602尋址的報頭的數(shù)據(jù)進行答復,這樣服務(wù)器600充當了一個路由器。對于服務(wù)器600被實施為一個代理服務(wù)器或者萬維網(wǎng)高速緩存服務(wù)器的實施例,來自NAS存儲單元642的數(shù)據(jù)可以改為發(fā)送到服務(wù)器600,服務(wù)器600在它的文件高速緩存器中存儲數(shù)據(jù),以提供對該數(shù)據(jù)將來請求的快速響應(yīng)。在該實施例中,服務(wù)器600上的文件系統(tǒng)指導INIC622請求NAS存儲單元642上的文件數(shù)據(jù),存儲單元642通過發(fā)送一組包含文件數(shù)據(jù)的第一64KB的大約1.5KB的分組來答復。包含文件數(shù)據(jù)的多個分組由INIC622接收,由INIC接收定序器分類,并且與NAS CCB匹配,并且由主機堆棧處理來自初始分組的會話層報頭,從文件系統(tǒng)中獲得INIC622文件高速緩存器中的地址分散-聚集列表,以存儲來自分組的數(shù)據(jù)。分散-聚集列表由主機堆棧發(fā)送到INIC622并與NAS CCB一起存儲,INIC622從累積分組和對應(yīng)于NAS CCB的后續(xù)分組中形成DMA數(shù)據(jù),將其送入INIC622文件高速緩存器中,以作為符合分散-聚集列表的文件流。主機文件系統(tǒng)隨后指導INIC622根據(jù)客戶CCB建立報頭,并把報頭預(yù)先規(guī)劃到從文件流讀出的數(shù)據(jù)分組上,用于發(fā)送該數(shù)據(jù)到客戶機602。文件的剩余36KB按照相同方式發(fā)送,并且可以被高速緩存到INIC622文件高速緩存器上,以作為另一個文件流。借助INIC622文件高速緩存器中保存的文件流,可以更快地處理來自如客戶機606的客戶機的文件后續(xù)請求。
對于客戶機602請求的文件未呈現(xiàn)在一個高速緩存器上,而是在服務(wù)器所附屬的存儲單元634上被存儲為文件塊的情況,服務(wù)器622文件系統(tǒng)指令一個主機SCSI驅(qū)動器從服務(wù)器配屬存儲單元634中提取數(shù)據(jù)的100KB并送入服務(wù)器600文件高速緩存器(假定文件系統(tǒng)不希望把數(shù)據(jù)高速緩存在INIC622文件高速緩存器中)中。主機SCSI驅(qū)動器隨后經(jīng)由SCSI通道638向服務(wù)器配屬的存儲單元634發(fā)送一個數(shù)據(jù)的SCSI請求。服務(wù)器配屬存儲單元634的控制器通過從它的一個或多個磁盤驅(qū)動器讀取所請求的數(shù)據(jù)塊并經(jīng)由SCSI通道向SCSI驅(qū)動器發(fā)送該數(shù)據(jù)塊來響應(yīng)該命令。該SCSI驅(qū)動器在文件系統(tǒng)控制下與高速緩存器相互作用,以把數(shù)據(jù)塊存儲為服務(wù)器600文件高速緩存器中的文件流。系統(tǒng)轉(zhuǎn)向器隨后指導SMB向INIC622發(fā)送文件流的分散-聚集列表,INIC622使用該列表從服務(wù)器600文件流中讀取數(shù)據(jù)分組。INIC622用基于服務(wù)器CCB建立的報頭預(yù)先規(guī)劃數(shù)據(jù)分組,并發(fā)送合成幀到網(wǎng)絡(luò)604上。
由于有了在該答復到達時在客戶機602上操作的INIC606,因此,INIC606依據(jù)所接收的第一幀確認該連接正在接收快速路徑620處理(TCP/IP、NetBios,匹配一個CCB),SMB616可以使用該第一幀獲得消息的緩存器空間。通過經(jīng)由直達客戶機NetBios的ATCP快速路徑620傳送包括NetBios/SMB報頭的幀的第一192字節(jié),可以提供緩存器的分配。所述客戶機NetBios 614給予NetBios/SMB合適的報頭。NetBios/SMB將分析這些報頭,通過用請求ID進行匹配來識別這些報頭,這是對原始讀取連接的一個答復,并且給予ATCP命令驅(qū)動器一個放入數(shù)據(jù)的客戶機高速緩存器中多個緩存器的64K列表。在此階段,只有一幀已經(jīng)到達,盡管在該處理發(fā)生的同時可能有更多幀到達。當給予ATCP命令驅(qū)動器628所述客戶緩存器列表時,就把該傳遞信息傳送到INIC606,然后INIC606開始發(fā)送已經(jīng)由DMA累積到這些緩存器中的任何幀數(shù)據(jù)。
如果客戶機602希望把SMB文件寫到服務(wù)器600上,則經(jīng)由網(wǎng)絡(luò)604發(fā)送一個寫請求,它可以與INIC622所保存的CCB相匹配。來自文件寫的初始分組的會話層報頭由服務(wù)器SMB632處理,以把一些緩存器分配到服務(wù)器600或者INIC622文件高速緩存器中;如果快速路徑處理是合適的,這些緩存器的地址的分散-聚集列表被返回到INIC622。包含SMB文件數(shù)據(jù)的分組由INIC622接收,由INIC接收定序器分類,并且按一個隊列放置。INIC622處理器根據(jù)分散-聚集列表確認分組對應(yīng)于服務(wù)器CCB和DMA分組數(shù)據(jù),該分組數(shù)據(jù)進入INIC622或者服務(wù)器600文件高速緩存器。
文件系統(tǒng)隨后協(xié)調(diào)向服務(wù)器存儲單元634、網(wǎng)絡(luò)存儲單元640或者NAS存儲單元642發(fā)送文件流。為了向服務(wù)器存儲單元634發(fā)送文件流,文件系統(tǒng)命令服務(wù)器600中的SCSI驅(qū)動器向存儲單元634按文件塊發(fā)送文件流。為了向網(wǎng)絡(luò)存儲單元640發(fā)送文件流,文件系統(tǒng)指導INIC基于SAN CCB建立ISCSI或者類似報頭,根據(jù)分散-聚集列表把這些報頭預(yù)先規(guī)劃到從文件系統(tǒng)讀出的分組上,經(jīng)由網(wǎng)絡(luò)644向存儲單元640發(fā)送合成幀。為了向NAS存儲單元642發(fā)送文件流(例如,在分布式文件高速緩存器或者代理服務(wù)器實施中也許是有用的),文件系統(tǒng)轉(zhuǎn)向器預(yù)先規(guī)劃NetBios/SMB報頭,并且指導INIC根據(jù)NASCCB建立IP/TCP報頭,以及根據(jù)分散-聚集列表把這些報頭預(yù)先規(guī)劃到從文件流讀出的分組上,經(jīng)由網(wǎng)絡(luò)644向存儲單元642發(fā)送合成幀。
圖15示出了類似于圖14所述的一個系統(tǒng),但是圖15針對的是本發(fā)明的用戶數(shù)據(jù)報協(xié)議(UDP)實施,特別是音頻和視頻通信的上下文,可能包含實時傳輸協(xié)議(RTP)和實時傳輸控制協(xié)議(RTCP)。服務(wù)器600除了包括圖14所示的協(xié)議層外,還包括一個UDP層654,一個AUDP層655,一個RTP/RTCP層656和一個應(yīng)用層657。同樣,客戶機602除了包括圖14所示的協(xié)議層外,還包括一個UDP層660,一個AUDP層661,一個RTP/RTCP層662和一個應(yīng)用層663。盡管圖15顯示了RTP/RTCP層656和662,可以在UDP上使用其它會話和應(yīng)用層協(xié)議,比如會話起始協(xié)議(SIP)或者媒體網(wǎng)關(guān)控制協(xié)議(MGCP)。
音頻/視頻接口(AVI)666或者類似的外圍裝置連接到服務(wù)器600的I/O總線639上,連接AVI666的有一個揚聲器668、一個麥克風670,一個顯示器672和一個相機674(可以是攝像機)。盡管為了清楚起見,AVI666被顯示為一個單接口,但是也可以換成包括分離的接口,比如一個聲卡和一個顯卡,其每個連接I/O總線639。在另一個實施例中,AVI接口連接一個主機,而不是連接一個I/O總線,并且可以同存儲器控制器或者主機CPU的I/O控制器集成在一起。AVI666可以包括一個存儲器,充當音頻或者視頻數(shù)據(jù)的臨時存儲單元??蛻魴C602還具有一個I/O總線675,它與AVI677相連接。連接AVI677的是一個揚聲器678,一個麥克風680,一個顯示器682和一個相機684(可以是一個攝像機)。盡管為了清楚起見AVI666被顯示為一個單接口,但是也可以換成包括分離的接口,比如一個聲卡和一個顯卡,其每個連接I/O總線675。
不同于TCP,UDP不提供一個可依賴的連接。而是,盡力而為地發(fā)送UDP分組,并且不重發(fā)出錯的或者損壞的分組,除非UDP上的一個層提供了這樣的服務(wù)。UDP提供了一種不必建立連接而經(jīng)由IP發(fā)送數(shù)據(jù)的應(yīng)用方式。然而,UDP或者其它協(xié)議,比如網(wǎng)絡(luò)文件系統(tǒng)(NFS)、TCP、RTCP、SIP或者MGCP,響應(yīng)一個請求最初指定一個套接字,該套接字分配一個能夠接受由UDP發(fā)送的消息的接收裝置的端口。
為了經(jīng)由UDP按傳統(tǒng)方式發(fā)送通信,主計算機借助一個UDP報頭預(yù)先規(guī)劃多達64KB的數(shù)據(jù)報并傳遞給IP層,所述數(shù)據(jù)報可以包括會話或者應(yīng)用層報頭并且通常是多達8KB的NFS默認長度數(shù)據(jù)報。UDP報頭包括源和目的地端口以及一個選項校驗和。對于以太網(wǎng)傳輸,UDP數(shù)據(jù)報在必要的時候,由IP層分成近似1.5KB的片段,用IP報頭預(yù)先規(guī)劃,并且給出用以太網(wǎng)報頭和報尾封裝的MAC層,然后發(fā)送到網(wǎng)絡(luò)上。IP報頭包括一個UDP數(shù)據(jù)報才有的IP標識字段(IP ID);一個指示該數(shù)據(jù)報的更多片段是否跟隨的標志字段;和指示數(shù)據(jù)報的1.5KB片段被附加到IP報頭上的片段分支字段,用于以正確順序重新集合這些片段。
對于從客戶機602到服務(wù)器600的快速路徑UDP數(shù)據(jù)傳遞,例如,來自客戶應(yīng)用663或者音頻/視頻接口677的數(shù)據(jù)的文件流可以在文件系統(tǒng)的控制下,存儲到INIC606的存儲器上。應(yīng)用663可以安排所述文件流,使其包含例如約8KB,可以包括INIC606在應(yīng)用663指導下獲得的上層報頭,INIC606用已經(jīng)指定的套接字相符的UDP報頭預(yù)先規(guī)劃由INIC606接收的每個文件流,建立UDP數(shù)據(jù)報。UDP數(shù)據(jù)報被INIC606劃分成6個1.5KB消息片段,每個消息片段用IP和MAC層報頭預(yù)先規(guī)劃,以建立在網(wǎng)絡(luò)上傳輸?shù)腎P分組。
INIC622從網(wǎng)絡(luò)604接收由INIC606發(fā)送的以太網(wǎng)幀,對報頭求校驗和并進行處理,以確定所含有的協(xié)議,并且向ADUP層655發(fā)送UDP和上層報頭,以獲得UDP數(shù)據(jù)報的分組數(shù)據(jù)的目的地地址的列表。在來自UDP數(shù)據(jù)報的6個分組的一個分組中,包含UDP和上層報頭,該分組通常在數(shù)據(jù)報的其它分組之前被接收。在分組無序到達的情況下,INIC在一個重新匯編緩存器中將來自UDP數(shù)據(jù)報的6個分組進行排隊。根據(jù)分組的IP ID識別對應(yīng)于UDP數(shù)據(jù)報的分組,并且根據(jù)片段分支鏈接這些分組。在處理包含UDP和上層報頭的分組以獲得目的地地址之后,將已排隊的數(shù)據(jù)寫入這些地址。為了解決UDP數(shù)據(jù)報的所有分組未到達的可能情況,INIC622可以使用一個定時器觸發(fā)丟棄所接收的數(shù)據(jù)。
對于實時音頻或者視頻通信,最初在服務(wù)器600與客戶機602之間建立電信連接。對于根據(jù)國際電信聯(lián)盟(ITU)H.323標準的通信,借助一個TCP對話執(zhí)行電信連接的建立,該TCP對話使用RTP指定數(shù)據(jù)流的源和目的地UDP端口。電信連接建立的另一個TCP對話使用RTCP指定監(jiān)視數(shù)據(jù)流的源和目的地UDP端口。在指定了UDP套接字之后,可以開始本發(fā)明的從服務(wù)器600到客戶機602的聲頻或者視頻數(shù)據(jù)的傳輸。
例如,音頻/視頻接口666可以把來自麥克風670和攝像機674的聲音和圖像轉(zhuǎn)換成對INIC622有效的音頻/視頻(AV)數(shù)據(jù)。在服務(wù)器600文件系統(tǒng)指導下,INIC622可以獲得包含RTP報頭的AV數(shù)據(jù)的8KB文件流并把數(shù)據(jù)存儲在一個INIC文件高速緩存器。根據(jù)電信連接,INIC622可以把UDP報頭預(yù)先規(guī)劃到每個文件流上,然后分段成1.5KB片段,每個片段用IP和以太網(wǎng)報頭預(yù)先規(guī)劃并在網(wǎng)絡(luò)604上傳送。作為選擇,INIC622可以從INIC存儲器中存儲的AV數(shù)據(jù)中建立1.5KB UDP數(shù)據(jù)報,避免分段,并允許相應(yīng)于該電信連接從INIC622保存的一個模板中同時建立UDP、IP和MAC層報頭。它還能夠用AV數(shù)據(jù)建立大于8KB的UDP數(shù)據(jù)報,從而建立了附加片段,然而卻可以在每個數(shù)據(jù)段傳遞更大的數(shù)據(jù)塊。RTP報頭包含一個時標,以指示由音頻/視頻接口666對AV數(shù)據(jù)分組的有關(guān)時間。
與主機CPU進行的傳統(tǒng)AV數(shù)據(jù)的協(xié)議處理相比,INIC622可以卸載UDP報頭建立、IP分段和IP報頭建立的任務(wù),節(jié)省了主機CPU多處理周期、多中斷并極大地減少了主機總線通信量。此外,INIC622通過同時預(yù)先規(guī)劃多個報頭,可以更有效地執(zhí)行報頭建立任務(wù)。此外,AV數(shù)據(jù)可以有INIC622在I/O總線639上直接訪問,而不是首先經(jīng)由I/O總線向協(xié)議處理堆棧發(fā)送數(shù)據(jù),然后經(jīng)由I/O總線639回送作為RTP/UDP/IP分組的數(shù)據(jù)。與傳統(tǒng)協(xié)議處理相比,這些效率優(yōu)點還可以極大地減少傳送AV數(shù)據(jù)的延遲。
實時話音和視頻通信的一個目的是使經(jīng)由系統(tǒng)的個人通信基本上感覺不到延遲和抖動。抖動是接收分組時延遲的變化造成的,與記錄聲音和圖像的節(jié)奏相比,抖動導致顯示聲音和圖像的節(jié)奏發(fā)生變化。傳送分組的話音和/或視頻時減少延遲的上述優(yōu)點還可以用來減少也在接收裝置上經(jīng)歷緩存的抖動,因為減少延遲能夠增加接收裝置平滑抖動的時間。為了在傳遞AV數(shù)據(jù)時進一步減少延遲和抖動,INIC622預(yù)先規(guī)劃到UDP數(shù)據(jù)報片段上的IP或者MAC層報頭在其服務(wù)類型字段中包括一個高服務(wù)質(zhì)量(QOS)指示。例如,通過優(yōu)先分配帶寬和對高QOS幀排隊,網(wǎng)絡(luò)604使用該指示加速高QOS幀的傳輸。
當INIC606接收含有AV數(shù)據(jù)的幀時,INIC606接收邏輯給QOS指示加標簽并且按照INIC606的一個高優(yōu)先接收隊列緩存這些分組。與IP/UDP報頭的傳統(tǒng)處理相比,INIC606的硬件邏輯對分組報頭分類和確認減少了接收AV數(shù)據(jù)的延遲。每個數(shù)據(jù)報的UDP報頭可以被發(fā)送到AUDP層,該AUDP層處理報頭并且把所含有的套接字指向所述應(yīng)用。所述應(yīng)用指導INIC606向音頻/視頻接口677的目的地發(fā)送對應(yīng)于該UDP報頭的數(shù)據(jù)。作為選擇,在對應(yīng)于UDP數(shù)據(jù)報的所有片段連接以接收隊列之后,按照一個文件流寫入數(shù)據(jù)報,而不需要把UDP報頭送入對應(yīng)于套接字的音頻/視頻接口677中的目的地。最初可以把UDP數(shù)據(jù)報隨意地存入INIC存儲器的其它段中。然后把AV數(shù)據(jù)和RTP報頭發(fā)送到音頻/視頻接口677,進行解碼,然后在揚聲器678和顯示器682上播放。
需要注意的是,整個AV數(shù)據(jù)流以及所接收IP/UDP分組的大多數(shù)協(xié)議處理可以由INIC606處置,從而節(jié)省了客戶機602的CPU多處理周期并減少了主機總線通信量和中斷。此外,INIC606的專用硬件邏輯可以比通用CPU更有效地分類報頭。INIC602還可以經(jīng)由I/O總線675直接向音頻/視頻接口677提供AV數(shù)據(jù),而不是,首先經(jīng)由I/O總線675向協(xié)議處理堆棧發(fā)送,然后經(jīng)由I/O總線返回到音頻/視頻接口677。
圖16提供了INIC22的示意圖,該INIC22把網(wǎng)絡(luò)接口、存儲控制器和協(xié)議處理器合并到一個單一ASIC芯片700中。本實施例中的INIC22提供了一個全雙工、四通道、10/100Mb/秒(Mbps)智能網(wǎng)絡(luò)接口控制器,是為服務(wù)器的高速協(xié)議處理和網(wǎng)絡(luò)存儲應(yīng)用設(shè)計的。INIC22還可以在利用TCP/IP、TTCP/IP、SPX/IPX協(xié)議的任何地方連接個人計算機、工作站、路由器或者主機。本申請開頭部分所列出的相關(guān)應(yīng)用中還提供了這樣一個INIC的說明。
INIC22由網(wǎng)絡(luò)連接器連接到四個網(wǎng)絡(luò)線路702、704、706和708上,這樣可以沿著多個不同線路(比如雙絞線、同軸電纜、光纜)傳輸數(shù)據(jù),每一個連接經(jīng)由商用物理層芯片712、714、716和718(比如模塊80220/80221以太網(wǎng)媒體接口適配器,產(chǎn)自SEEQ TechnologyIncorporated,47200 Bayside Parkway,F(xiàn)remont,CA94538)提供一個媒體獨立接口(MII)。線路最好符合802.3標準,在此方面,INIC構(gòu)成四個完整的以太網(wǎng)節(jié)點,該INIC支持10Base-T、10Base-T2、100Base-TX、100Base-FX和100Base-T4以及未來接口標準。物理層標識和初始化通過主機驅(qū)動器初始化程序?qū)崿F(xiàn)。網(wǎng)絡(luò)線路702、704、706、708與INIC22之間的連接由MAC單元MAC-A 722、MAC-B 724、MAC-C 726和MAC-D 728控制,這些MAC單元包含執(zhí)行MAC子層基本功能的邏輯電路,主要是在INIC訪問網(wǎng)絡(luò)線路702、704、706和708時進行控制。MAC單元722、724、726、728可以以雜亂、多點傳送、單點傳送方式運作,允許INIC充當一個網(wǎng)絡(luò)監(jiān)視器、接收廣播和多點傳送分組并實施每個節(jié)點的多MAC尋址。MAC單元722、724、726和728還提供用于簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)的統(tǒng)計信息。
MAC單元722、724、726和728中的每一個均連接到發(fā)送和接收定序器,XMT&RCV-A 732、XMT&RCV-B 734、XMT&RCV-C 736和XMT&RCV-D738。每個發(fā)送和接收定序器在消息幀通過該定序器時可以快速執(zhí)行一些協(xié)議處理步驟。與MAC單元結(jié)合,發(fā)送和接收定序器732、734、736和738可以在硬件中編制數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層和(如果適當)表示層以及應(yīng)用層協(xié)議的分組狀態(tài),與傳統(tǒng)序列軟件引擎相比,極大地減少了執(zhí)行這種協(xié)議處理的時間。發(fā)送和接收定序器732、734、736和738連接到SRAM和DMA控制器740,包括DMA控制器742和SRAM控制器744,用于控制靜態(tài)隨機存取存儲器(SRAM)緩存器748。SRAM和DMA控制器740與外部存儲器控制器750相互作用,以經(jīng)由外部存儲器總線向動態(tài)隨機存取存儲器(DRAM)緩存器755發(fā)送幀以及從緩存器755接收幀,緩存器755位于IC芯片700附近。DRAM緩存器755可以被配置為4MB、8MB、16MB或者32MB,并且可以隨意地設(shè)置在芯片上。SRAM和DMA控制器740連接I/O橋,在此情況下,該I/O橋是PCI總線接口單元(BIU)756,它管理INIC22與PCI接口總線757之間的接口。64-比特的被多路復用的BIU756向主從功能的PCI總線757提供一個直接接口。INIC22能夠在64-比特或者32比特PCI環(huán)境下操作,同時支持任何一種配置的64比特尋址。
微處理器780連接到SRAM和DMA控制器740以及連接到PCI BIU756。微處理器780指令和注冊文件駐留在芯片控制存儲器781中,存儲器781包括SRAM的片內(nèi)可寫控制存儲器(WCS)和一個只讀存儲器(ROM)。微處理器780提供了一個可編程狀態(tài)機,它能夠處理輸入幀,處理主機命令,指導網(wǎng)絡(luò)通信和指導PCI總線通信。三個處理器采用三級流水線式結(jié)構(gòu)的共享硬件實現(xiàn),所述的三級流水線式結(jié)構(gòu)每時鐘周期發(fā)射和完成一個單指令。接收處理器782主要用于接收通信,而發(fā)射處理器784主要用于發(fā)送通信,以便于全雙工通信;應(yīng)用處理器786提供各種功能,包括監(jiān)視和控制PCI寄存器訪問。
由于處理器782、784和786的指令駐留在片內(nèi)控制存儲器781中,因此可以容易地重新定義三個處理器的功能,使微處理器780可以適用于給定的環(huán)境。例如,接收功能所需的處理量可以多于發(fā)射或者應(yīng)用功能所需的處理量。在此情況下,某些接收功能可以由發(fā)射處理器784和/或應(yīng)用處理器786執(zhí)行。另一方面,可以建立流水線式處理的一個附加層,以產(chǎn)生4個或更多虛擬處理器(而不是三個),該附加層專用于接收功能。
該實施例中的INIC22可以支持保存在DRAM755的一個表中的256個CCB。然而,這還是一種節(jié)省順序搜索的SRAM748中的散列順序的CCB索引。一旦產(chǎn)生一個散列,就在SRAM中高速緩存該CCB,在本實施例中,SRAM中有多達16個高速緩存的CCB。SRAM中高速緩存的16個CCB的分配由下面將要說明的最新使用的寄存器操作。這些高速緩存器位置在發(fā)送784處理器與接收786處理器之間共享,所以較重負載的處理器能夠使用更多的高速緩存器。這里還有在定序器之間共享的8個報頭緩存器和8個命令緩存器。當鏈接是每幀動態(tài)變化時,給定的報頭或者命令緩存器不靜態(tài)鏈接到特定CCB緩存器上。
圖17顯示了流水線式處理器780的概要,其中接收、發(fā)送和應(yīng)用處理器的指令在與時鐘增加I、II、III相應(yīng)的三個交替階段運行,這些階段位對應(yīng)于流水線的每一階段。每個階段負責不同的功能,并且,三個處理器中的每一個在每個時鐘增加期間占據(jù)一個不同階段。每個處理器通常根據(jù)來自控制存儲器781的一個不同指令流操作,并且承載它自己的程序計數(shù)器以及經(jīng)過每個階段的狀態(tài)。
通常,流水線式微處理器組的第一指令階段800完成一個指令并存儲目的地操作數(shù)的結(jié)果,取回一個指令,并把下一個指令存儲到一個指令寄存器中。第一寄存器集790提供包括指令寄存器的多個寄存器,第一寄存器集的一組控制792向第一寄存器集提供用于存儲的控制。某些項目通過第一階段時不會被控制792修改,而是被簡單地復制到第一寄存器集790或者RAM文件寄存器833中。第二指令階段860具有一個指令解碼器及操作數(shù)多路復用器798,它通常對存儲在第一寄存器集790的指令寄存器中的指令進行解碼并收集已經(jīng)生成的任何操作數(shù),然后存儲到第二寄存器集796的解碼寄存器中。第一寄存器集790、第二寄存器集796和在第三指令階段900中使用的第三寄存器集801包括許多相同的寄存器,這可以從圖18A-C的更詳細視圖中看到。指令解碼器和操作數(shù)多路復用器798可以從RAM文件寄存器833的兩個地址及數(shù)據(jù)端口選讀,該RAM文件寄存器833在第一階段800和第二階段860中操作。處理器780的第三階段900具有一個算術(shù)邏輯單元(ALU)902,它通常對來自第二寄存器集的操作數(shù)進行任何一種ALU運算,將運算結(jié)果存儲到第三寄存器集801所包含的一個結(jié)果寄存器中。堆棧交換器808可以重新排序寄存器堆棧,排隊管理器803可以安排處理器780的隊列,將結(jié)果存儲到第三寄存器集中。
指令從第三階段繼續(xù)到第一階段,如環(huán)行流水線805所示。需要注意的是,各種功能已經(jīng)被分布在指令運行的三個階段上,以便使任何一個給定階段內(nèi)的組合延遲最小化。由于該實施例中的頻率為66MHz,因此每個時鐘增量需用15納秒完成,總共需用45納秒時間來完成三個處理器之每個的一個指令。圖18A-C中更詳細地示出了旋轉(zhuǎn)指令階段,其中每個階段被顯示在不同的圖中。
具體說,圖18A顯示了第一階段的某些特殊硬件功能,第一階段通常包括第一寄存器集790和相關(guān)控制792。第一寄存器集的控制792包括一個SRAM控制802,它是一個把地址和寫數(shù)據(jù)加載到SRAM地址和數(shù)據(jù)寄存器820中的邏輯控制。因而,SRAM控制802把第三階段900的ALU902的輸出放置到SRAM地址和數(shù)據(jù)寄存器820的地址寄存器或者數(shù)據(jù)寄存器中。加載控制804相似地提供把文件上下文寫入文件上下文寄存器822的控制,另一個加載控制806提供把各種雜項數(shù)據(jù)存儲到觸發(fā)式寄存器825中的控制。ALU條件碼,比如是否設(shè)置一個承載比特,定時送入ALU條件碼寄存器828,而沒有在第一階段800中執(zhí)行的操作。標志解碼器808可以執(zhí)行各種功能,比如設(shè)置鎖定,將其存入標志寄存器830中。
RAM文件寄存器833具有一個地址及數(shù)據(jù)的單寫入口和兩個地址及數(shù)據(jù)的讀取口,所以可以同時讀取一個以上的寄存器。如上所述,RAM文件寄存器833實質(zhì)上橫跨第一和第二階段,因為它在第一階段800寫入,在第二階段860讀取。控制存儲指令810允許在新數(shù)據(jù)從控制存儲781寫入時對處理器重新編程(未在圖中示出),該指令被存入指令寄存器835中。為此,在確定取出哪一個地址的取出控制寄存器811中生成地址,并存入取出地址寄存器838中。加載控制815提供程序計數(shù)器840的指令,進行大量的類似于取出控制存儲地址的操作。三個寄存器的后進先出堆棧844連接第一寄存器集,在該階段不經(jīng)歷其它操作。最后,可以隨意包括一個排錯地址848的加載控制817,它允許糾正可能發(fā)生的錯誤。
圖18B示出了第二微處理器階段860,包括從RAM文件寄存器833讀出地址和數(shù)據(jù)。來自第一寄存器集的SRAM地址及數(shù)據(jù)寄存器820的地址和數(shù)據(jù)寫入擦除SRAM865,它包括一個寄存器,用于通過將在第三階段加一的最初的兩個階段。擦除SRAM865由指令解碼器及操作數(shù)多路復用器798讀取,在此案中,所讀出的大多數(shù)指令來自第一寄存器集的多個寄存器,包括來自上述的排錯地址寄存器848和SRAM地址及數(shù)據(jù)寄存器的指令,但堆棧844除外。指令解碼器和操作數(shù)多路復用器798查看寄存器集790的各個寄存器以及SRAM865,解碼所述指令并收集下一個階段進行操作的操作數(shù),特別是確定提供給后面的ALU902的操作數(shù)。指令解碼器和操作數(shù)多路復用器798的輸出被存儲到第二寄存器集796的多個寄存器上,這些寄存器包括ALU操作數(shù)寄存器879和882;ALU條件碼寄存器880;和隊列通道和命令887寄存器,在本實施例中,它可以控制32個隊列。寄存器集796的若干寄存器直接從指令寄存器835適當加載,而不由解碼器798實際解碼,上述若干寄存器包括程序控制890、文字字段889、測試選擇884和標志選擇885等寄存器。第一階段800的其它寄存器,比如文件上下文寄存器822的數(shù)據(jù)總是存儲在第二階段860的文件上下文寄存器877中,不過也可以把它視為由多路復用器872收集的操作數(shù)。在堆棧寄存器894中僅僅復制堆棧寄存器844的內(nèi)容。程序計數(shù)器840在本階段計數(shù)增加868并存入寄存器892。此外,對選項排錯地址848遞增870,此時可以從流水線805饋入加載控制875,以允許每個階段中的差錯控制,其結(jié)果被存入排錯地址寄存器898中。
圖18C示出了第三微處理器階段900,包括ALU和排隊操作。ALU902包括一個加法器、優(yōu)先權(quán)編碼器和其它標準邏輯功能。ALU的結(jié)果被存入ALU輸出918、ALU條件碼920和目的地操作數(shù)結(jié)果922等寄存器中。文件上下文寄存器916、標志選擇寄存器926和文字字段寄存器930僅僅是從前階段860復制。測試多路復用器904被提供來確定一個條件跳變是否導致一個跳變,并且將結(jié)果存入測試結(jié)果寄存器924中。測試多路復用器904的功能可以改為在第一階段中與諸如取出控制811的類似判斷功能一起執(zhí)行。堆棧交換器908通過從堆棧794中取出一個程序計數(shù)或者把一個程序計數(shù)放入堆棧,來上移或者下移一個堆棧,并且將結(jié)果存入程序控制934、程序計數(shù)938和堆棧940寄存器中??梢栽谠撾A段900中隨意地實施SRAM地址的處理。此時從流水線805施加另一個排錯地址942的另一個加載控制910,以便允許該階段中的差錯控制。QRAM和QALU906(在圖中被顯示在一起)從隊列通道和命令寄存器887讀取數(shù)據(jù),將其存入SRAM和重新排序隊列中,從而增加和移出管理數(shù)據(jù)隊列所需的數(shù)據(jù)和指針,并向測試多路復用器904和隊列標志及隊列地址寄存器928發(fā)送其結(jié)果。因此,QRAM和QALU906承擔了管理三個處理器隊列的職責,這是一個通常由CPU的硬件順序執(zhí)行的任務(wù),該隊列管理器906改為提供加速和實際上并行的硬件排隊。
圖19示出了由隊列管理器906管理的32個硬件隊列的兩個隊列,每個隊列具有一個SRAM報頭,一個SRAM報尾以及DRAM本體的隊列信息的能力,還允許每個隊列擴充和單獨配置。因此,F(xiàn)IFO1000具有SRAM存儲單元1005、1007、1009和1011,其每個包含用于總數(shù)為32個字節(jié)的8個字節(jié),當然這些單元的數(shù)目和容量可以在其它實施例中變化。同樣,F(xiàn)IFO1002具有SRAM存儲單元1013、1015、1017和1019。SRAM單元1005和1007是FIFO1000的頭部,單元1009和1011是該FIFO的尾部,而單元1013和1015是FIFO1002的頭部,單元1017和1019是該FIFO的尾部??梢詫IFO1000的信息寫入頭部單元1005或者1007(如箭頭1022所示),并且從單元1011或者1009中讀出(如箭頭1025所示)。然而,特定項目可以寫入頭部單元1005或者1007和從該頭部單元中讀出,或者可以寫入尾部單元1009或者1011和從該尾部單元讀出,以使數(shù)據(jù)運動和等待時間最小化。同樣,F(xiàn)IFO1002的信息通常被寫入頭部單元1013或者1015(如箭頭1033所示),并且從尾部單元1017或者1019讀出(如箭頭1039所示),但是也可以改為從寫入所述信息的相同頭部單元或者尾部單元讀出。
SRAM FIFO1000和1002連接DRAM755,以允許這些FIFO的幾乎無限擴展管理SRAM頭部和尾部充滿的情況。例如,32個隊列的第1隊列(加Q-zero標簽)可以排序DRAM755中的項目(如箭頭1027所示),這由隊列管理器指導下操作的DMA執(zhí)行,而不是在FIFO700的頭部或者尾部中進行排隊。DRAM755中存儲的項目返回到SRAM單元1009,如箭頭1030所示,從而擴展了該FIFO的長度和中止時間。從SRAM轉(zhuǎn)到DRAM通常在SRAM充滿時進行預(yù)備,因為DRAM較慢以及DMA運動造成附加等待時間。這樣,Q-zero可以包括FIFO1000和DRAM755的隊列管理器803存儲的項目。同樣,用于FIFO1002的信息(可對應(yīng)于Q-twenty-seven),例如,可以由DMA移動到DRAM755中,如箭頭1035所示。在成效盡管較慢的DRAM803中排隊的容量可在初始化期間由用戶定義,允許根據(jù)需要改變隊列長度。在DRAM755中排隊的信息被返回到SRAM單元1017,如箭頭1037所示。
32個硬件隊列的每一個的狀態(tài)按傳統(tǒng)方式保存在四個32比特寄存器的寄存器集1040中,并從該寄存器集存取,如圖20所示。其中每個寄存器中的特定比特對應(yīng)于一個特定隊列。這些寄存器被標注為Q-out_Ready 1045,Q-In_Ready 1050,Q-Empty 1055,Q-Full 1060。如果一個特定比特被設(shè)置在Q-In_Ready 1050中,則對應(yīng)于該比特的隊列包含準備讀出的信息,而在Q-In_Ready 1052寄存器中相同比特的設(shè)置意味著準備寫入隊列。類似地,Q-Empty 1055中的一個特定比特的正設(shè)置意味著對應(yīng)于該比特的隊列被排空,而Q-Full寄存器1060中的特定比特的正設(shè)置意味著對應(yīng)于該比特的隊列被充滿。因此,Q-Out_Ready 1045包含比特零1046至三十一1048,其中包括比特二十七1052、二十八1054、二十九1056和三十1058。Q-In_Ready1050包含比特零1062至三十一1064,其中包括比特二十七1066、二十八1068、二十九1070和三十1072。Q-Empty 1055包含比特零1074至三十一1076,其中包括比特二十七1078、二十八1080、二十九1082和三十1084。Q-full 1060包含比特零1086至三十一1088,其中包括比特二十七1090、二十八1092、二十九1094和三十1096。
對應(yīng)于FIFO1000的Q-zero是一個自由緩存器隊列,保存有所有有效緩存器的地址列表。當微處理器或者其它裝置需要一個自由緩存器地址時,對該隊列尋址,所以通常包括可感知的DRAM755。因此,需要自由緩存器地址的裝置同Q-zero核對,以獲得該地址。Q_twenty_seven,對應(yīng)于FIFO1002,是一個接收緩存描述符。在接收定序器處理接收幀之后,該定序器希望在隊列二十七中存儲幀的描述符。如果這樣一個描述符的位置可以立即在SRAM中得到,將設(shè)置Q-In_Ready 1050的比特二十七1066。如果不能得到,定序器則必須等待隊列管理器啟動從SRAM到DRAM的一個DMA運動,從而釋放存儲接收描述符的空間。
圖21中詳細顯示了隊列管理器的操作,該隊列管理器管理SRAM與DRAM之間、發(fā)射與接收定序器之間以及SRAM與DRAM之間的隊列項目的移動。利用隊列的請求包括定序器請求1102、發(fā)射定序器請求1104、接收定序器請求1106。隊列的其它請求是DRAM對SRAM請求1108和SRAM對DRAM請求1110,所述請求以隊列管理器名義運行,在隊列的DRAM與SRAM頭部或者尾部之間移動數(shù)據(jù)。確定這些不同隊列的哪個隊列在下一個周期使用隊列管理器由在前邏輯判定器1115處理。為了啟動高頻操作,將隊列管理器流水線化,寄存器A 1118和寄存器B 1120提供臨時存儲,而狀態(tài)寄存器1122保持狀態(tài),直至下一次更新。隊列管理器保存DMA的偶數(shù)循環(huán)、接收和發(fā)送定序器請求、處理器請求的奇數(shù)循環(huán)。雙端口的QRAM1125存儲關(guān)于每個隊列的變量,用于每個隊列的變量包括一個對應(yīng)于隊列的SRAM條件的頭部寫指針、頭部讀指針、尾部寫指針和尾部讀指針,以及對應(yīng)于隊列DRAM條件和隊列長度的本體寫指針和本體讀指針。
判定器1115選擇將要執(zhí)行的下一個操作之后,根據(jù)QALU1128的選用操作取出和修改QRAM825的變量,并且可以生成SRAM讀請求1130或者SRAM寫請求1140。變量被更新,并把更新的狀態(tài)存儲到狀態(tài)寄存器1122以及QRAM1125中。該狀態(tài)還被反饋給判定器1115以發(fā)送已經(jīng)履行在前請求的操作的信號,從而抑制請求的重復。狀態(tài)寄存器1122更新四個隊列寄存器Q-Qut_Ready1045、Q-In_Ready1050、Q-Empty1055和Q-Full1060以反映訪問的隊列的新狀態(tài)。SRAM地址1133、本體寫請求1135和本體讀請求寄存器1138進行類似更新,以便經(jīng)由DMA存取該隊列的SRAM頭部和尾部。另一方面,各種處理也許希望寫一個隊列,如Q寫數(shù)據(jù)1144所示,多路復用器1146選取該Q寫數(shù)據(jù)1144,并沿著流水線送入SRAM寫請求1140。SRAM控制器通過寫所存取的隊列的尾部或者讀它的頭部并返回一個確認,來服務(wù)于讀和寫請求。以此方式利用各種隊列并更新它們的狀態(tài)。
圖22A-D顯示了最近最少使用的寄存器1200,該寄存器被用來選定那些上下文或者CCB保存在INIC高速緩存器。該實施例中的INIC可以在一個給定時間將十六個CCB高速緩存到SRAM中,所以當高速緩存一個新CCB時,必須經(jīng)常丟棄一個舊的CCB,通常根據(jù)該寄存器1200選定的被丟棄的CCB將是最近最少使用的CCB。在該實施例中,達到256個CCB的一個散列表也被保存在SRAM中,而256個全CCB被保存在DRAM中。最近最少使用的寄存器1200包含16個被標注為R0-R15的四比特塊,每個塊對應(yīng)于SRAM高速緩存單元。初始化時,這些塊被標為編號0-15,塊中隨意存儲的編號0代表最近最少使用的(LRU)高速緩存單元,塊中存儲的編號15代表最近使用(MRU)高速緩存單元。圖22A顯示了當LRU塊R0保存編號9以及MRU塊R15保存編號6時的任一時刻的寄存器1200。當與當前保存在SRAM中的CCB不同的一個CCB將被高速緩存時,閱讀LRU塊R0(在圖22A中,該塊保存編號9),然后把新的CCB存儲到對應(yīng)于編號9的SRAM高速緩存單元中。由于對應(yīng)于編號9的新的CCB現(xiàn)在是最新使用的CCB,因此編號9被存儲在MRU塊中,如圖22B所示。其它編號全部向左移動一個寄存器塊,使編號1離開LRU塊。先前已經(jīng)存儲在對應(yīng)于編號9的SRAM單元中的CCB已經(jīng)被移動到較慢但成本低的DRAM中。
圖22C顯示了所使用的下一個CCB已經(jīng)被高速緩存在SRAM中的結(jié)果。在該實例中,CCB被高速緩存到對應(yīng)于編號10的SRAM單元中,所以,在利用CCB之后,編號10被存儲到MRU塊中。只有那些比編號10更最近在先使用的編號(寄存器塊R9-R15)被左移,使編號1離開LRU塊。這樣,INIC在SRAM高速緩存器中保存了最有效的CCB。
在大多數(shù)情況下,正在使用的CCB是不值得保存在有限高速緩存器中的CCB。例如,最好不高速緩存認為將停止的上下文的CCB,以便其它高速緩存的CCB可以保存在SRAM中更久。在此情況下,代表保存不可高速緩存的CCB的高速緩存單元的編號被存儲在LRU塊R0中,而不是MRU塊R15中,所以,一旦使用對應(yīng)于LRU塊R0所保存編號的SRAM單元中高速緩存的一個新CCB,就將立即取代不可高速緩存的CCB。圖22D顯示了編號8(它存在于圖22C的塊R9中)對應(yīng)于將被使用然后停止的一個CCB的情況。在這種情況下,編號8已經(jīng)從塊R9中移出,并存入LRU塊R0中。然后,將事先存儲到塊R9以左(R1-R8)的所有編號右移一個塊。
圖23顯示了用來操作最近最少使用的寄存器1200的操作的某些邏輯單元。一個陣列具有饋入最近最少使用寄存器1200的對應(yīng)的十六個塊的輸出,該陣列具有十六個多路復用器,但為了簡明僅示出了多路復用器MUX0、MUX7、MUX8、MUX9、MUX15,所述多路復用器是三或四輸入多路復用器1210。例如,MUX0的輸出被存入塊R0中,MUX7的輸出被存入塊R7中,等等。每個寄存器塊的值被接入它的對應(yīng)的多路復用器的輸入,并且還送入兩個相鄰多路復用器的輸入,以供移位塊編號使用。例如,R8中存儲的編號被饋入MUX7、MUX8和MUX9的輸入。MUX0、MUX15每一個僅具有一個相鄰塊,這些多路復用器的額外輸入分別用來選擇LRU和MRU塊。MUX15被顯示為一個四輸入多路復用器,具有輸入1215以提供存儲在R0上的編號。
該邏輯單元包括一個具有十六個比較器1220的陣列,每個比較器接收存儲在最近最少使用寄存器1200的對應(yīng)塊中的值。每個比較器還經(jīng)由線路1235接收來自處理器470的信號,使具有匹配處理器470發(fā)送信號的編號的寄存器塊對于邏輯電路1230輸出是真的,而其它十五個比較器輸出是虛假的。邏輯電路1230控制多個通向每個多路復用器的成對選擇線,用于選擇對多路復用器的輸出,從而控制寄存器塊編號的位移。這樣,選擇線1239控制MUX0,選擇線1244控制MUX7,選擇線1249控制MUX8,選擇線1254控制MUX9,選擇線1259控制MUX15。
當CCB將要被存儲時,處理器470查看CCB是否與十六個高速緩存單元之一中當前保存的一個CCB相匹配。如果發(fā)現(xiàn)一個匹配,處理器經(jīng)由線路1235發(fā)送一個信號及對應(yīng)于高速緩存單元的塊編號,例如編號12。比較器1220將來自線路1235的信號與塊編號相比較,比較器C8提供一個匹配該信號的塊R8的真實輸出,而其它所有比較器輸出是虛假的。處理器470控制下的邏輯電路1230使用選擇線從線路1235選擇用于MUX15的輸入,把編號12存入MRU塊R15中。邏輯電路1230經(jīng)由用于MUX8和較高多路復用器(但MUX15除外)的一對選擇線發(fā)送信號,以便通過把已經(jīng)存儲在寄存器塊(R9-R15)中的值選作對多路復用器MUX8和更高多路復用器的輸入,使它們輸出的輸出左移一個塊。在MUX8左面的多路復用器的輸出被選擇為一個常數(shù)。
另一方面,如果處理器470未在十六個高速緩存單元中發(fā)現(xiàn)CCB的匹配,則處理器經(jīng)由線路1266選讀LRU塊R0,以識別對應(yīng)于LRU塊的高速緩存器,并且把高速緩存器中存儲的數(shù)據(jù)存入DRAM中。存儲在R0中的編號(在此情況下是編號3)通過選擇線1259選取,以作為對MRU塊R15存儲的MUX15的輸入1215。其它十五個多路復用器向它們的相應(yīng)寄存器塊輸出已經(jīng)存儲在位于緊靠右邊的每個寄存器中的編號。
對于處理器希望從使用后的高速緩存器中移出CCB的情況,選擇LRU塊R0而不是MRU塊R15,用于置放對應(yīng)于保存CCB的高速緩存單元的編號。處理器470經(jīng)由線路1235發(fā)送對應(yīng)于將從SRAM移出放入LRU塊R0中的CCB的編號(例如,塊R9中保存的編號1)。處理器指令邏輯電路1230向R0輸入編號1,這是通過用選擇線1239選擇對MUX0的輸入1235實現(xiàn)的。對MUX9的選擇線把寄存器塊R8中保存的編號選作輸入,所以來自R8的編號被存儲在R9中。其它寄存器R0與R9保存的編號采用類似方式左移,而R9右邊的寄存器塊的編號是left常數(shù)。這樣就使容量不足的高速緩存器不需要對停用的CCB保持許多周期,而它們的識別號經(jīng)由寄存器從MRU移動到LRU塊。
圖24示出了INIC22的附加細節(jié),本說明的重點是單網(wǎng)絡(luò)連接。INIC22包括PHY芯片712、ASIC芯片700和DRAM755。PHY芯片712使INIC卡22經(jīng)由網(wǎng)絡(luò)連接器2101連接網(wǎng)絡(luò)線2105。INIC22經(jīng)由卡式插件連接器2107和PCI總線757連接到主機的CPU(例如,圖1的主機20的CPU30)上。ASIC芯片700包括一個媒體存取控制(MAC)單元722,一個定序器塊732,一個SRAM控制744,一個SRAM748,一個DRAM控制742,一個隊列管理器803,一個處理器780和一個PCI總線接口單元756。定序器塊732包括一個發(fā)送定序器2104,一個接收定序器2105和配置寄存器2106。MAC目的地地址被存入配置寄存器2106中。處理器780運行的程序碼的部分被包含在ROM(未示出)中,部分被定位在可寫控制存儲SRAM中(未示出)。在依據(jù)主機20初始化時,程序可以被下載到可寫控制存儲SRAM中。
圖25是圖24的接收定序器2105的更詳細的附圖。接收定序器2105包括一個數(shù)據(jù)同步緩存器2200,一個分組同步定序器2201,一個數(shù)據(jù)匯編寄存器2202,一個協(xié)議分析器2203,一個分組處理定序器2204,一個隊列管理接口2205,和一個直接存儲器存取(DMA)控制塊2206。分組同步定序器2201和數(shù)據(jù)同步緩存器2200利用MAC722的網(wǎng)絡(luò)同步時鐘,接收定序器2105的余部則利用一個固定頻率時鐘。虛線2221指示時鐘域邊界。
下面說明圖24和圖25的接收定序器2105的操作,該操作與在INIC22上接收來自網(wǎng)絡(luò)線702的TCP/IP分組有關(guān)。在初始化的時候,處理器780把DRAM755劃分成多個緩存器。接收定序器2105使用DRAM755的存儲到達的網(wǎng)絡(luò)分組數(shù)據(jù)以及分組的狀態(tài)信息。處理器780為每個緩存器建立32比特緩存器描述符。緩存器描述符指示與其相關(guān)聯(lián)的緩存器的DRAM中的大小和位置。處理器780通過把這些緩存器描述符寫入隊列管理器803,來把這些描述符放置到一個“自由緩存器隊列”2108上。隊列管理器803保持多個隊列,其中包括“自由緩存器隊列”2108。在該實施中,各個隊列的頭部和尾部被定位在SRAM748中,而這些隊列的中間部分被定位在DRAM755中。
線路2229包括一個請求機構(gòu),包含一個請求線和一個地址線。類似地,線路2230包括一個請求機構(gòu),包含一個請求線和一個地址線。隊列管理器803使用線路2229和2230發(fā)出將隊列從DRAM發(fā)送到SRAM或者從SRAM發(fā)送到DRAM的請求。
接收定序器的隊列管理器接口2205總是試圖保存供分組處理定序器2204使用的自由緩存器描述符2207。比特2208是一個就緒比特,它指示自由緩存器描述符2207可以由分組處理定序器2204加以利用。如果隊列管理器接口2205沒有自由緩存器描述符(未設(shè)置比特2208),那么隊列管理器接口2205經(jīng)由請求線2209向隊列管理器803請求該描述符。(請求線2209實際上是一條總線,如果操作是寫隊列,則傳遞請求、隊列ID、讀/寫信號和數(shù)據(jù)。)在響應(yīng)時,隊列管理器803從“自由緩存器隊列”2108的尾部檢索一個自由緩存器描述符,然后經(jīng)由確認線2210上的確認信號通知隊列管理器接口2205。當隊列管理器接口2205收到確認信號時,隊列管理器接口2205加載自由緩存器描述符2207并設(shè)置就緒比特2208。由于自由緩存器描述符位于SRAM748的自由緩存器隊列的尾部,因此隊列管理器接口2205實際上從SRAM控制塊744的讀數(shù)據(jù)總線2228接收自由緩存器描述符2207。分組處理定序器2204經(jīng)由請求線2211請求自由緩存器描述符2207。當隊列管理器接口2205檢索自由緩存器描述符2207并且該自由緩存器描述符2207可由分組處理定序器加以利用時,隊列管理器接口2205經(jīng)由確認線2212通知分組處理定序器2204。通過該處理,自由緩存器描述符可以由分組處理定序器2204加以利用,并且接收定序器2105準備處理輸入的分組。
然后,經(jīng)由經(jīng)由網(wǎng)絡(luò)連接器2101和物理層接口(PHY)712從網(wǎng)絡(luò)線2105接收TCP/IP分組。PHY712經(jīng)由媒體獨立接口(MII)并行總線2109將該分組供應(yīng)給MAC722。MAC722開始處理該分組,并在線路2213上發(fā)布一個“分組開始”信號,以表明正在開始接收分組。當分組字節(jié)在MAC中接收并且可在MAC輸出2215上得到時,MAC722在線路2214上發(fā)布一個“數(shù)據(jù)有效”信號。當收到“數(shù)據(jù)有效”信號時,分組同步定序器2201經(jīng)由加載信號線2222指令數(shù)據(jù)同步緩存器2200加載來自數(shù)據(jù)線2215的接收字節(jié)。數(shù)據(jù)同步緩存器2200是四字節(jié)深度。然后分組同步定序器2201將數(shù)據(jù)同步緩存器寫指針遞增1。該數(shù)據(jù)同步緩存器寫指針可經(jīng)由線路2216用于分組處理定序器2204。以這種方式,將來自數(shù)據(jù)線2215的連續(xù)數(shù)據(jù)字節(jié)鐘控送入數(shù)據(jù)同步緩存器2200。
在線路2219上得到的數(shù)據(jù)同步緩存器讀指針由分組處理定序器2204保存。分組處理定序器2204通過將數(shù)據(jù)同步緩存器寫指針與線路2219上的數(shù)據(jù)同步緩存器讀指針進行比較,確定數(shù)據(jù)在數(shù)據(jù)同步緩存器2200中有效。
數(shù)據(jù)匯編寄存器2202包含一個十六字節(jié)長的移位寄存器2217。該寄存器2217每次被串行加載一個單字節(jié)并且并行卸載。當數(shù)據(jù)被加載到寄存器2217時,將一個寫指針遞增1。該寫指針可經(jīng)由線路2218用于分組處理定序器2204。類似地,當數(shù)據(jù)從寄存器2217卸載時,分組處理定序器2204所保持的一個讀指針被遞增1。該讀指針經(jīng)由線路2220用于數(shù)據(jù)匯編寄存器2202。所以,分組處理定序器2204可以通過將線路2218上的寫指針與線路2220上的讀指針進行比較,確定寄存器2217中是否有有效空間。
如果分組處理定序器2204確定寄存器2217中有有效空間,那么分組處理定序器2204指令匯編寄存器2202加載來自數(shù)據(jù)同步緩存器2200的數(shù)據(jù)字節(jié)。數(shù)據(jù)匯編寄存器2202將線路2218上的數(shù)據(jù)匯編寄存器寫指針遞增1,并且分組處理定序器2204將線路2219上的數(shù)據(jù)同步緩存器讀指針遞增1。檢驗校驗和的協(xié)議分析器2203在寄存器輸出檢查移位到寄存器2217中的數(shù)據(jù),并生成“狀態(tài)”信息2223。
DMA控制塊2206負責經(jīng)由64字節(jié)接收FIFO2110將信息從寄存器2217移動到緩存器2114。DMA控制塊2206使用SRAM748的64字節(jié)把接收FIFO2110實施為兩個32字節(jié)的往復式緩存器。DMA控制塊2206使用一個寫指針和一個讀指針實施接收FIFO。當將要傳遞的數(shù)據(jù)在寄存器2217中有效以及FIFO2110中有有效空間時,DMA控制塊2206經(jīng)由線路2225向SRAM控制器744發(fā)布一個SRAM寫請求。SRAM控制器744將數(shù)據(jù)從寄存器2217移動到FIFO2110,并且經(jīng)由線路2225把確認信號返回到DMA控制塊。DMA控制塊2206隨后將接收FIFO寫指針遞增1,并且使數(shù)據(jù)匯編寄存器讀指針遞增1。
當數(shù)據(jù)的32個字節(jié)已經(jīng)被存放到接收FIFO2110上時,DMA控制塊2206經(jīng)由線路2226把DRAM寫請求呈現(xiàn)給DRAM控制器742。這一寫請求包括自由緩存器描述符22070Red,具有用于DRAM請求地址的“緩存器加載計數(shù)”;和用于SRAM讀地址的接收FIFO讀指針。通過使用接收FIFO讀指針,DRAM控制器742向SRAM控制器744發(fā)送一個讀請求。SRAM控制器744響應(yīng)該DRAM控制器742,從SRAM748的接收FIFO2110返回指示的數(shù)據(jù)并發(fā)布確認信號。DRAM控制器742將數(shù)據(jù)存入DRAM寫數(shù)據(jù)寄存器,存入一個DRAM請求地址到DRAM地址寄存器中,并向DMA控制塊2206發(fā)送一確認。DMA控制塊2206隨后將接收FIFO讀指針遞減1。然后,DRAM控制器742將數(shù)據(jù)從DRAM寫數(shù)據(jù)寄存器移動到緩存器2114,這樣,當數(shù)據(jù)的連續(xù)32個字節(jié)組塊被存儲到SRAM748中時,DRAM控制塊2206將這些數(shù)據(jù)32字節(jié)組塊從SRAM748向DRAM755中的緩存器2214每次移動一個組塊。以這種方式向DRAM755傳送32字節(jié)組塊,允許使用DRAM的相關(guān)有效脈沖串模式將數(shù)據(jù)寫入DRAM中。
分組數(shù)據(jù)從網(wǎng)絡(luò)線2105連續(xù)流入緩存器2114,直至接收到所有分組數(shù)據(jù)。MAC722隨后通過在線路2227上發(fā)布“幀尾”信號以及將最終分組狀態(tài)(MAC分組狀態(tài))呈現(xiàn)給分組同步定序器2204,來表示已經(jīng)完成該輸入分組。分組處理定序器2204隨后將狀態(tài)2223(也稱作“協(xié)議分析器狀態(tài)”)和MAC分組狀態(tài)移動到寄存器2217,最終傳遞到緩存器2114。當所有分組數(shù)據(jù)已經(jīng)被放入緩存器2214時,狀態(tài)2223和MAC分組狀態(tài)傳遞到緩存器2214,以便在該緩存器中存儲,使其預(yù)先規(guī)劃到圖23所示的相關(guān)聯(lián)數(shù)據(jù)上。
當所有數(shù)據(jù)和狀態(tài)已經(jīng)被傳遞到緩存器2114時,分組處理定序器2204通過鏈接自由緩存器描述符2207、緩存器加載計數(shù)、MAC ID和狀態(tài)比特(也稱作“注意(attention)比特”)建立概述2224(也稱作“接收分組描述符”)。如果注意比特是1,那么該分組不是“快速路徑候選者”;如果注意比特是0,則該分組是“快速路徑”候選者。注意比特的值代表處理器780將另外必需確定分組是否為“快速路徑候選者”的巨量處理的結(jié)果。例如,為0的注意比特指示分組利用TCP協(xié)議和IP協(xié)議。通過在硬件中預(yù)先執(zhí)行該巨量處理然后對注意比特的結(jié)果編碼,可以加速處理器780執(zhí)行的關(guān)于分組是否為一個實際“快速路徑分組”的后續(xù)判定。
分組處理定序器2204設(shè)置一個與概述2224關(guān)聯(lián)的就緒比特(未示出)并且把概述2224送給隊列管理器接口2205。隊列管理器接口2205隨后一個對“概述隊列”2112(也稱作“接收描述符隊列”)的頭部的寫入。隊列管理器803接收該請求,把概述2224寫入概述隊列2212的頭部,并且經(jīng)由線路2210向隊列管理器接口反送一個確認信號。當隊列管理器接口2205接收一個確認時,隊列管理器接口2205通過釋放與概述關(guān)聯(lián)的就緒比特,通知分組處理定序器2204概述2224位于概述隊列2212中。通過鏈接MAC分組狀態(tài)和MAC ID,分組處理定序器2204還生成用于該分組的附加狀態(tài)信息(也稱作“矢量”)。分組處理定序器2204設(shè)置與該矢量關(guān)聯(lián)的就緒比特(未示出),并把該矢量送給隊列管理接口2205。隊列管理接口2205和隊列管理器803隨后合作,把該矢量寫入“矢量隊列”2113的頭部,其寫入方式類似于上述的把概述2224寫入概述隊列2112的頭部。當分組的矢量已經(jīng)被寫入矢量隊列2113時,隊列管理器接口2205重新設(shè)置與矢量關(guān)聯(lián)的就緒比特。
一旦概述2224(包括指向緩存器2114的一個緩存器描述符)已經(jīng)被放置到概述隊列2112中以及分組數(shù)據(jù)已經(jīng)被放置到緩存器2144中,處理器780可以從概述隊列2112中檢索概述2224并檢查“注意比特”。
如果概述2224的注意比特是編號1,則處理器780確定分組不是“快速路徑候選者”而且處理器780不需要檢查分組報頭。只有來自緩存器2114的狀態(tài)2223(第一16字節(jié))是傳遞到SRAM的DMA,所以處理器780可以檢查它。如果狀態(tài)2223指示該分組是不傳遞到主機的一種分組(例如,主機不寄存接收的廣播幀),那么丟棄該分組(即,不傳送到主機)。如果狀態(tài)2223指示該分組是傳送到主機的一種分組那么整個分組(報頭和數(shù)據(jù))被傳送到主機20,由主機20的協(xié)議堆棧進行“慢速路徑”傳遞和網(wǎng)絡(luò)層處理。
另一方面,如果注意比特是0,那么處理器780確定該分組是一個“快速路徑候選者”。如果處理器780確定該分組是一個“快速路徑候選者”,則處理器780使用來自概述的緩存器描述符將來自緩存器2114的信息的最初大約96字節(jié)從DRAM755按DMA方式傳遞到SRAM748的一部分中,使處理器780可以檢查它。該最初的大約96字節(jié)包含狀態(tài)2223以及IP報頭的IP源地址、IP報頭的IP目的地地址、TCP報頭的TCP源地址、TCP報頭的TCP目的地地址。IP報頭的IP源地址、IP報頭的IP目的地地址、TCP報頭的TCP源地址、TCP報頭的TCP目的地地址一同唯一地定義一個與該分組相關(guān)聯(lián)的單一連接上下文(TCB)。處理器780檢查TCP和IP報頭的這些地址,并確定分組的連接上下文。處理器780隨后檢查INIC22控制下的連接上下文的列表,并且確定分組是否與INIC22控制下的連接上下文(TCB)相關(guān)聯(lián)。
如果連接上下文不在該列表中,則確定“快速路徑候選者”不是一個“快速路徑分組”。在此情況下,整個分組(報頭和數(shù)據(jù))被傳遞到主機20的一個緩存器,有主機20的協(xié)議堆棧進行“慢速路徑”處理。
另一方面,如果連接上下文是在該列表中,則由包括軟件狀態(tài)機2231和2232的處理器780運行的軟件來檢查大量的異常條件之一,并且確定該分組是否為一個“快速路徑分組”。這些異常條件包括1)檢測IP片段;2)檢測IP操作數(shù);3)檢測無用TCP標志(緊急比特組,復位比特組,SYN比特組或者FIN比特組);4)TCP報頭中的ACK字段位于TCP窗口之前,或者TCP報頭中的TCP字段位于TCP窗口之后,或者TCP報頭中的ACK字段縮進TCP窗口;5)TCP報頭中的ACK字段是一個副本ACK以及ACK字段超過副本ACK計數(shù)(副本ACK計數(shù)是一個用戶可設(shè)置值);6)TCP報頭的序號失序(無序接收分組)。如果處理器780運行的軟件檢測到這些異常情況之一,處理器780就確定“快速路徑候選者”不是“快速路徑分組”。在此情況下,分組的連接上下文是“已涌入”(連接上下文被反傳到主機),使連接上下文不再呈現(xiàn)在INIC22控制下的連接上下文的列表中。整個分組(報頭和數(shù)據(jù))被傳送到主機20的一個緩存器中,由主機20的協(xié)議堆棧進行“慢速路徑”傳輸層和網(wǎng)絡(luò)層處理。
另一方面,如果處理器780未發(fā)現(xiàn)這樣的異常條件,則確定“快速路徑候選者”分組是實際的“快速路徑分組”。接收狀態(tài)機2232隨后經(jīng)由TCP處理該分組。然后,另一個DMA控制器(圖21中未示出)將緩存器2114中的分組的數(shù)據(jù)部分從緩存器2114傳送到主機20的存儲器30的主機分配的文件高速緩存器上。在一個實施例中,主機20不進行“快速路徑分組”的TCP和IP報頭的分析?!翱焖俾窂椒纸M”的TCP和IP報頭的所有分析在INIC卡20上進行。
圖26是顯示從INIC22向主機20“發(fā)送快速路徑”的數(shù)據(jù)(一個64K字節(jié)會話層消息2300的分組)的示意圖。虛線230左邊的附圖部分代表INIC22,虛線2301右邊的附圖部分代表主機20。64K字節(jié)會話層消息2300包括大約45個分組,其中的4個在圖24中被標注為(2302、2303、2304和2305)。第一分組2302包括含有傳輸和網(wǎng)絡(luò)層報頭(例如,TCP和IP報頭)的部分2306;含有會話層報頭的部分2307;和含有數(shù)據(jù)的部分2308。在第一步驟中,部分2307來自部分2308的第一少量字節(jié)和分組2300的連接上下文標識符2310從INIC22傳送到主機20的256字節(jié)緩存器2309中。在第二步驟中,主機20檢查該信息并且向INIC22返回數(shù)據(jù)的目的地(例如,存儲器35中的文件高速緩存器2311的位置)。主機20還把來自緩存器2309的第一少量字節(jié)復制到文件高速緩存器2311的第一部分2312的開頭。在第三步驟中,INIC22把來自部分2308的數(shù)據(jù)的余數(shù)傳送到主機20,以便把數(shù)據(jù)的余數(shù)存儲到文件高速緩存器2311第一部分2312的剩余部分中。網(wǎng)絡(luò)、傳輸或者會話層報頭不存儲在文件高速緩存器2311第一部分2312的剩余部分中。接著,把第二分組2303的數(shù)據(jù)部分2313傳送給主機20,從而在文件高速緩存器2311的第二部分2314中存儲第二分組2303的數(shù)據(jù)部分2313。第二分組2303的傳輸層和網(wǎng)絡(luò)層報頭部分2315不傳送到主機20。在第一分組2302的數(shù)據(jù)部分與第二分組2303的數(shù)據(jù)部分之間沒有存儲在文件高速緩存器2311中的網(wǎng)絡(luò)、傳輸或者會話層報頭。類似地,會話層消息的下一個分組2304的數(shù)據(jù)部分2316被傳送到文件高速緩存器2311中,使文件高速緩存器2311中在第二分組2303的數(shù)據(jù)部分與第三分組2304的數(shù)據(jù)部分之間沒有網(wǎng)絡(luò)、傳輸或者會話層報頭。這樣,只有會話層消息的分組的數(shù)據(jù)部分被放置到文件高速緩存器2311中。來自會話層消息2300的數(shù)據(jù)在文件高速緩存器2311中被表現(xiàn)為一個塊,使該塊中不包含網(wǎng)絡(luò)、傳輸或者會話層報頭。
在較短、單一分組會話層消息的情況下,會話層消息的部分2307和2308與連接上下文標識符2310一同被傳送到主機20的256字節(jié)緩存器2309,與上述的較長會話層消息的情況相同。然而,在單一分組會話層消息的情況下,此時完成傳遞。主機20不向INIC22返回一個目的地,以及INIC22不傳送后續(xù)消息到這樣一個目的地。
總之,上述的處理數(shù)據(jù)通信的裝置和系統(tǒng)極大地減少了處理大的基于連接的消息所需的時間以及主機資源。與運行傳統(tǒng)協(xié)議軟件的通用CPU相比,通過含有特殊設(shè)計協(xié)議處理軟件的智能網(wǎng)絡(luò)接口卡(INIC),極大地加快了協(xié)議處理速度和效率,并且相當大地減少了對主機CPU的中斷。這些優(yōu)點可以增強網(wǎng)絡(luò)存儲應(yīng)用,在這樣的情況下,來自文件傳送的數(shù)據(jù)還可以借助主機保存的文件傳送的控制,回避主機存儲器總線和主機I/O總線。
權(quán)利要求書(按照條約第19條的修改)13、一種在網(wǎng)絡(luò)與存儲單元之間傳遞信息的設(shè)備,該設(shè)備包括一個主計算機,具有一個通過主機存儲器總線連接到主機存儲器的處理器,所述主機存儲器包含一個可由處理器操作的協(xié)議堆棧,用于建立一個定義網(wǎng)絡(luò)連接的通信控制塊;和一個連接到所述主計算機并連接在網(wǎng)絡(luò)與存儲單元之間的接口裝置,所述接口裝置包括一個適于存儲所述通信控制塊的接口存儲器;和一個配置成將數(shù)據(jù)與所述通信控制塊相關(guān)聯(lián)的機構(gòu),以使所述數(shù)據(jù)在網(wǎng)絡(luò)與存儲單元之間進行通信,而不遇到所述主計算機。
14、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述主計算機包含一個文件系統(tǒng),所述接口存儲器包括適于存儲所述數(shù)據(jù)的文件高速緩存器,其中所述文件系統(tǒng)管理所述文件高速緩存器中的所述數(shù)據(jù)的存儲。
15、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述數(shù)據(jù)以至少一個包含傳輸層報頭的分組在網(wǎng)上傳送,所述接口裝置包括處理所述報頭的電路。
16、根據(jù)權(quán)利要求15所述的設(shè)備,其中所述傳輸層報頭是TCP報頭。
17、根據(jù)權(quán)利要求15所述的設(shè)備,其中所述傳輸層報頭是UDP報頭。
18、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置通過輸入/輸出總線連接所述主計算機,所述通信控制塊經(jīng)由所述輸入/輸出總線在所述接口裝置與所述主計算機之間傳輸。
19、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置還包括一個連接存儲單元的SCSI控制器。
20、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置還包括一個連接存儲單元的光纖通道控制器。
21、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置還包括一個與存儲單元相連的RAID控制器。
22、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置通過至少一個網(wǎng)絡(luò)端口與存儲單元和網(wǎng)絡(luò)相連。
23、根據(jù)權(quán)利要求13所述的設(shè)備,其中對應(yīng)于所述通信控制塊的在前或者后續(xù)數(shù)據(jù)經(jīng)過所述主計算機。
24、根據(jù)權(quán)利要求13所述的設(shè)備,其中所述主計算機被配置成指定一個可由所述接口裝置訪問的UDP套接字,所述接口裝置被配置成根據(jù)所述UDP套接字對網(wǎng)絡(luò)與文件高速緩存器之間的所述數(shù)據(jù)進行通信。
25、一種可連接到網(wǎng)絡(luò)、計算機和存儲單元的設(shè)備,所述設(shè)備包括一個包括硬件邏輯電路的定序器,所述硬件邏輯電路被配置成處理網(wǎng)絡(luò)分組的傳輸層報頭;一個存儲器,適于存儲關(guān)于由所述裝置管理的網(wǎng)絡(luò)連接的控制信息;和一個將所述分組與所述控制信息相關(guān)聯(lián)的機構(gòu),所述機構(gòu)還選擇是由所述計算機處理所述分組還是將數(shù)據(jù)從所述分組發(fā)送到存儲單元,從而避開計算機。
26、根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元通信的SCSI控制器。
27、根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元及網(wǎng)絡(luò)通信的網(wǎng)絡(luò)端口。
28、根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元通信的光纖通道控制器。
29、根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元通信的RAID控制器。
30、根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個存儲所述數(shù)據(jù)的文件高速緩存器,所述文件高速緩存器由計算機中的文件系統(tǒng)控制。
31、一種在網(wǎng)絡(luò)與存儲單元之間傳遞信息的設(shè)備,所述設(shè)備包括一個主計算機,具有一個對文件系統(tǒng)進行操作的CPU;和一個主機存儲器,通過主機存儲器總線連接所述CPU;和一個連接所述主計算機、網(wǎng)絡(luò)和存儲單元的接口裝置,所述接口裝置包括一個包含有接口文件高速緩存器的接口存儲器,所述接口文件高速緩存器適于在所述文件系統(tǒng)控制下存儲網(wǎng)絡(luò)與存儲單元之間進行通信的數(shù)據(jù);其中,所述主計算機被配置成指定一個可由所述接口裝置訪問的UDP套接字,所述接口裝置被配置成根據(jù)所述UDP套接字對網(wǎng)絡(luò)與文件高速緩存器之間的所述數(shù)據(jù)進行通信。
32、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述主計算機被配置成建立一個可由所述接口裝置訪問的應(yīng)用層報頭,所述接口裝置被配置成把所述應(yīng)用層報頭預(yù)先規(guī)劃到所述數(shù)據(jù)上。
33、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述主計算機被配置成建立一個可由所述接口裝置訪問的實時傳輸協(xié)議報頭,所述接口裝置被配置成把所述實時傳輸協(xié)議報頭預(yù)先規(guī)劃到所述數(shù)據(jù)上。
34、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)與關(guān)聯(lián)的UDP報頭一起存儲,所述接口裝置包括一個被配置成處理所述UDP報頭的機構(gòu)。
35、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述接口裝置用UDP報頭預(yù)先規(guī)劃所述數(shù)據(jù),以建立一個UDP數(shù)據(jù)報,所述接口裝置包括一個被配置成將所述數(shù)據(jù)報劃分成多個片段的機構(gòu)。
36、根據(jù)權(quán)利要求31所述的設(shè)備,其中按多個片段處理所述數(shù)據(jù),所述接口裝置包括一個被配置成根據(jù)UDP報頭鏈接所述片段的機構(gòu)。
37、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)不進入所述主計算機。
38、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)包括音頻數(shù)據(jù)。
39、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)包括視頻數(shù)據(jù)。
40、根據(jù)權(quán)利要求31所述設(shè)備,其中所述數(shù)據(jù)是實時通信的一部分。
41、一種在網(wǎng)絡(luò)與存儲單元之間傳遞信息的設(shè)備,所述設(shè)備包括一個計算機,具有一個操作一個文件系統(tǒng)的CPU;和一個存儲器,通過存儲器總線連接所述CPU;和一個連接所述計算機、網(wǎng)絡(luò)和存儲單元的接口裝置,所述接口裝置包括一個包含接口文件高速緩存器的接口存儲器,所述接口文件高速緩存器存儲網(wǎng)絡(luò)與存儲單元之間進行通信的數(shù)據(jù);其中,所述接口文件高速緩存器由所述文件系統(tǒng)控制,并且在傳遞所述接口裝置與所述存儲單元之間的數(shù)據(jù)期間,用iSCSI報頭預(yù)先規(guī)劃所述數(shù)據(jù)。
42、根據(jù)權(quán)利要求31所述的設(shè)備,其中所述接口裝置通過千兆以太網(wǎng)連接所述存儲單元。
權(quán)利要求
1.一種在網(wǎng)絡(luò)與存儲單元之間傳遞信息的設(shè)備,該設(shè)備包括一個主計算機,具有一個對文件系統(tǒng)進行操作的CPU;和一個主機存儲器,通過主機存儲器總線連接所述CPU;和一個連接所述主計算機、網(wǎng)絡(luò)和存儲單元的接口裝置,所述接口裝置包括一個包含有接口文件高速緩存器的接口存儲器,所述接口文件高速緩存器適合于存儲在網(wǎng)絡(luò)與存儲單元之間進行通信的數(shù)據(jù),其中所述接口文件高速緩存器由所述文件系統(tǒng)控制。
2.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述主計算機被配置成可建立一個通信控制塊,并把所述通信控制塊傳送到所述接口裝置,和所述接口裝置被配置成根據(jù)所述通信控制塊,在網(wǎng)絡(luò)與文件高速緩存器之間進行所述數(shù)據(jù)通信。
3.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述主計算機被配置成建立一個通信控制塊,并把所述通信控制塊傳送到所述接口裝置,和所述接口裝置被配置成根據(jù)所述通信控制塊,在存儲單元與所述文件高速緩存器之間進行數(shù)據(jù)通信。
4.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述數(shù)據(jù)不進入所述主計算機。
5.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述數(shù)據(jù)以文件格式在網(wǎng)絡(luò)與所述接口裝置之間進行通信,和所述數(shù)據(jù)以塊格式在所述接口裝置與存儲單元之間進行通信。
6.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述數(shù)據(jù)被附在包括傳輸層報頭的多個報頭上,所述接口裝置包括一個為處理所述傳輸層報頭而配置的機構(gòu)。
7.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述接口裝置包括一個為進行選擇而配置的機構(gòu),所述機構(gòu)選擇是經(jīng)由包括所述主機的第一路徑還是經(jīng)由不包括所述主機的第二路徑來在網(wǎng)絡(luò)與存儲單元之間傳遞所述數(shù)據(jù)。
8.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述接口裝置包括一個連接存儲單元的SCSI控制器。
9.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述接口裝置包括一個連接存儲單元的光纖通道控制器。
10.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述接口裝置包括一個連接存儲單元的RAID控制器。
11.根據(jù)權(quán)利要求1所述的設(shè)備,其中所述接口裝置包括一個與網(wǎng)絡(luò)和存儲單元中至少一個連接的網(wǎng)絡(luò)端口。
12.根據(jù)權(quán)利要求1所述的設(shè)備,還包括一個連接所述主計算機、網(wǎng)絡(luò)和第二存儲單元的第二接口裝置;所述第二接口裝置包括一個包含第二接口文件高速緩存器的第二接口存儲器,所述第二接口文件高速緩存器適合存儲在網(wǎng)絡(luò)與第二存儲單元之間進行通信的數(shù)據(jù);其中所述第二接口文件高速緩存器由所述文件系統(tǒng)控制。
13.一種在網(wǎng)絡(luò)與存儲單元之間傳遞信息的設(shè)備,該設(shè)備包括一個主計算機,具有一個通過主機存儲器總線連接到主機存儲器的處理器,所述主機存儲器包含一個可由處理器操作的協(xié)議堆棧,用于建立一個定義網(wǎng)絡(luò)連接的通信控制塊;和一個連接到所述主計算機并連接在網(wǎng)絡(luò)與存儲單元之間的接口裝置,所述接口裝置包括一個適于存儲所述通信控制塊的接口存儲器;和一個配置成將數(shù)據(jù)與所述通信控制塊相關(guān)聯(lián)的機構(gòu),以使所述數(shù)據(jù)在網(wǎng)絡(luò)與存儲單元之間進行通信,而不遇到所述主計算機。
14.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述主計算機包含一個文件系統(tǒng),所述接口存儲器包括適于存儲所述數(shù)據(jù)的文件高速緩存器,其中所述文件系統(tǒng)管理所述文件高速緩存器中的所述數(shù)據(jù)的存儲。
15.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述數(shù)據(jù)以至少一個包含傳輸層報頭的分組在網(wǎng)上傳送,所述接口裝置包括處理所述報頭的電路。
16.根據(jù)權(quán)利要求15所述的設(shè)備,其中所述傳輸層報頭是傳輸控制協(xié)議報頭。
17.根據(jù)權(quán)利要求15所述的設(shè)備,其中所述傳輸層報頭是統(tǒng)一數(shù)據(jù)報協(xié)議報頭。
18.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置通過輸入/輸出總線連接所述主計算機,所述通信控制塊經(jīng)由所述輸入/輸出總線在所述接口裝置與所述主計算機之間傳輸。
19.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置還包括一個連接存儲單元的SCSI控制器。
20.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置還包括一個連接存儲單元的光纖通道控制器。
21.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置還包括一個與存儲單元相連的RAID控制器。
22.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述接口裝置通過至少一個網(wǎng)絡(luò)端口與存儲單元和網(wǎng)絡(luò)相連。
23.根據(jù)權(quán)利要求13所述的設(shè)備,其中對應(yīng)于所述通信控制塊的在前或者后續(xù)數(shù)據(jù)經(jīng)過所述主計算機。
24.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述主計算機被配置成指定一個可由所述接口裝置訪問的統(tǒng)一數(shù)據(jù)報協(xié)議套接字,所述接口裝置被配置成根據(jù)所述統(tǒng)一數(shù)據(jù)報協(xié)議套接字對網(wǎng)絡(luò)與文件高速緩存器之間的所述數(shù)據(jù)進行通信。
25.一種可連接到網(wǎng)絡(luò)、計算機和存儲單元的設(shè)備,所述設(shè)備包括一個包括硬件邏輯電路的定序器,所述硬件邏輯電路被配置成處理網(wǎng)絡(luò)分組的傳輸層報頭;一個存儲器,適于存儲關(guān)于由所述裝置管理的網(wǎng)絡(luò)連接的控制信息;和一個將所述分組與所述控制信息相關(guān)聯(lián)的機構(gòu),所述機構(gòu)還選擇是由所述計算機處理所述分組還是將數(shù)據(jù)從所述分組發(fā)送到存儲單元,從而避開計算機。
26.根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元通信的SCSI控制器。
27.根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元及網(wǎng)絡(luò)通信的網(wǎng)絡(luò)端口。
28.根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元通信的光纖通道控制器。
29.根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個適于和存儲單元通信的RAID控制器。
30.根據(jù)權(quán)利要求25所述的設(shè)備,還包括一個存儲所述數(shù)據(jù)的文件高速緩存器,所述文件高速緩存器由計算機中的文件系統(tǒng)控制。
31.一種在網(wǎng)絡(luò)與存儲單元之間傳遞信息的設(shè)備,所述設(shè)備包括一個主計算機,具有一個對文件系統(tǒng)進行操作的CPU;和一個主機存儲器,通過主機存儲器總線連接所述CPU;和一個連接所述主計算機、網(wǎng)絡(luò)和存儲單元的接口裝置,所述接口裝置包括一個包含有接口文件高速緩存器的接口存儲器,所述接口文件高速緩存器適于在所述文件系統(tǒng)控制下存儲網(wǎng)絡(luò)與存儲單元之間進行通信的數(shù)據(jù);其中,所述主計算機被配置成指定一個可由所述接口裝置訪問的統(tǒng)一數(shù)據(jù)報協(xié)議套接字,所述接口裝置被配置成根據(jù)所述統(tǒng)一數(shù)據(jù)報協(xié)議套接字對網(wǎng)絡(luò)與文件高速緩存器之間的所述數(shù)據(jù)進行通信。
32.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述主計算機被配置成建立一個可由所述接口裝置訪問的應(yīng)用層報頭,所述接口裝置被配置成把所述應(yīng)用層報頭預(yù)先規(guī)劃到所述數(shù)據(jù)上。
33.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述主計算機被配置成建立一個可由所述接口裝置訪問的實時傳輸協(xié)議報頭,所述接口裝置被配置成把所述實時傳輸協(xié)議報頭預(yù)先規(guī)劃到所述數(shù)據(jù)上。
34.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)與關(guān)聯(lián)的統(tǒng)一數(shù)據(jù)報協(xié)議報頭一起存儲,所述接口裝置包括一個被配置成處理所述統(tǒng)一數(shù)據(jù)報協(xié)議報頭的機構(gòu)。
35.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述接口裝置用統(tǒng)一數(shù)據(jù)報協(xié)議報頭預(yù)先規(guī)劃所述數(shù)據(jù),以建立一個統(tǒng)一數(shù)據(jù)報協(xié)議數(shù)據(jù)報,所述接口裝置包括一個被配置成將所述數(shù)據(jù)報劃分成多個片段的機構(gòu)。
36.根據(jù)權(quán)利要求31所述的設(shè)備,其中按多個片段處理所述數(shù)據(jù),所述接口裝置包括一個被配置成根據(jù)統(tǒng)一數(shù)據(jù)報協(xié)議報頭鏈接所述片段的機構(gòu)。
37.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)不進入所述主計算機。
38.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)包括音頻數(shù)據(jù)。
39.根據(jù)權(quán)利要求31所述的設(shè)備,其中所述數(shù)據(jù)包括視頻數(shù)據(jù)。
40.根據(jù)權(quán)利要求31所述設(shè)備,其中所述數(shù)據(jù)是實時通信的一部分。
全文摘要
一種接口裝置(22)通過I/O總線(40)連接主計算機(20),并提供加速網(wǎng)絡(luò)(25,28)與存儲單元(66,70)之間數(shù)據(jù)傳遞的硬件和處理機構(gòu),同時由主機(20)控制數(shù)據(jù)傳遞。接口裝置包括處理網(wǎng)絡(luò)分組報頭的硬件電路(52,58,60),并且可以使用一個專用快速路徑用于網(wǎng)絡(luò)(25,28)與存儲單元(66,70)之間的數(shù)據(jù)傳遞,該快速路徑由主機(20)設(shè)置。主機CPU(30)和協(xié)議堆棧(38)避免快速路徑上的數(shù)據(jù)傳遞的協(xié)議處理,從而釋放了主機總線帶寬;并且數(shù)據(jù)不需要經(jīng)過I/O總線(40),從而釋放了I/O總線帶寬。存儲單元(66,70)可以包括RAID或者其他多驅(qū)動配置,并且可以通過諸如SCSI的并行通道或者通過諸如光纖通道的以太網(wǎng)的串行通道來連接接口裝置(22)。接口裝置(22)包含一個文件高速緩存器(80)。文件高速緩存器(80)存儲網(wǎng)絡(luò)與存儲單元之間傳遞的數(shù)據(jù),接口裝置的文件高速緩存器(80)中的數(shù)據(jù)組織由主機上的文件系統(tǒng)(23)控制。附加接口裝置(303,310,420,490)可以經(jīng)由I/O總線(40)連接到主機(20),每個附加接口裝置(303,310,420,490)具有由主機文件系統(tǒng)(23)控制的文件高速緩存器,并且提供了附加網(wǎng)絡(luò)連接(305,313,414,416,418,420,492,494)和/或連接到附加存儲單元(308,315)上。當接口裝置通過音頻/視頻接口(666,677)連接到適當?shù)耐ㄐ叛b置,比如麥克風(670,680)、揚聲器(668,678)、攝像機(674,684)和/或顯示器(672,684)時,還可提供實時音頻和視頻通信。
文檔編號G06F13/10GK1473300SQ01818509
公開日2004年2月4日 申請日期2001年9月24日 優(yōu)先權(quán)日2000年9月29日
發(fā)明者達里爾·D·斯塔爾, 克萊夫·M·菲爾布里克, 勞倫斯·B·鮑徹, B 鮑徹, M 菲爾布里克, 達里爾 D 斯塔爾 申請人:艾拉克瑞技術(shù)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1