專利名稱:基于硬件支持的虛擬接口結(jié)構(gòu)用戶層網(wǎng)絡(luò)通信系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于用戶層網(wǎng)絡(luò)與虛擬接口結(jié)構(gòu)協(xié)議的應(yīng)用技術(shù)領(lǐng)域,特別涉及基于虛擬接口結(jié)構(gòu)的千兆網(wǎng)絡(luò)通信系統(tǒng)的實(shí)現(xiàn)技術(shù)。
背景技術(shù):
用戶層網(wǎng)絡(luò)(User Level Network-ULN)是相對(duì)于傳統(tǒng)的通信關(guān)鍵路徑必須經(jīng)過操作系統(tǒng)的核心層網(wǎng)絡(luò)(Kernel Level Network-KLN)而提出的。隨著通信網(wǎng)絡(luò)硬件性能的迅速提高(通信帶寬從十兆、百兆乃至現(xiàn)在的千兆、萬兆網(wǎng);網(wǎng)絡(luò)通信的可靠性也大幅度提高),傳統(tǒng)的核心層網(wǎng)絡(luò)雖然可以對(duì)長(zhǎng)消息型應(yīng)用問題在一定程度上利用不斷增長(zhǎng)的硬件網(wǎng)絡(luò)通信帶寬,但是對(duì)于大量的短消息型應(yīng)用問題,其性能提高并不明顯。由于這類問題主要對(duì)通信延遲十分敏感,而核心層網(wǎng)絡(luò)無法降低在通信開銷中相對(duì)比例越來越大的軟件部分的開銷,軟件開銷甚至成為通信延遲的主要組成部分,致使網(wǎng)絡(luò)硬件的通信性能不能得到充分發(fā)揮,直接影響了高速通信系統(tǒng)與網(wǎng)絡(luò)的性能。而用戶層網(wǎng)絡(luò)在通信的關(guān)鍵路徑上避免了操作系統(tǒng)的介入,使上層的應(yīng)用程序可以直接訪問高效的通信硬件資源,充分利用迅速增長(zhǎng)的通信硬件的性能,精簡(jiǎn)通信協(xié)議,大幅度降低通信的軟件開銷,為上層應(yīng)用直接提供低延遲、高帶寬、高可靠的通信支持。
已有的用戶層網(wǎng)絡(luò)研究成果表明,利用用戶層網(wǎng)絡(luò)可以以很低的成本快速研制出超級(jí)計(jì)算機(jī)與超級(jí)服務(wù)器,提供高效的通信支持,用戶層網(wǎng)絡(luò)技術(shù)有助于打破通信與輸入輸出(Input/Output-I/O)瓶頸,提高服務(wù)器系統(tǒng)對(duì)大容量事務(wù)處理問題的解決能力,對(duì)相關(guān)領(lǐng)域的研究也有重要的促進(jìn)作用和參考價(jià)值。由于用戶層網(wǎng)絡(luò)對(duì)于提高SAN(System/Storage/Server Area Network)計(jì)算和應(yīng)用具有不可替代的作用,因此用戶層網(wǎng)絡(luò)的研究不僅對(duì)學(xué)術(shù)界有重要的影響,而且吸引了工業(yè)界的加盟。在Intel,Compaq,Microsoft的積極推動(dòng)下,在數(shù)百家來自學(xué)術(shù)界和工業(yè)界研究團(tuán)體與個(gè)人的共同努力下,于1997年12月推出了用戶層網(wǎng)絡(luò)協(xié)議的工業(yè)標(biāo)準(zhǔn)虛擬接口結(jié)構(gòu)協(xié)議(Virtual Interface Architecture-VIA)。
VIA協(xié)議以虛擬接口(Virtual Interface,VI)為基本單元,為用戶提供面向連接的、受保護(hù)的通信,而且具有流控、差錯(cuò)檢測(cè)與糾正以及避免死鎖等機(jī)制,保證消息的有序發(fā)送與可靠傳遞。VIA協(xié)議是一個(gè)開放的、可擴(kuò)展的、獨(dú)立于具體平臺(tái)與實(shí)現(xiàn)、具有良好移植性的用戶層網(wǎng)絡(luò)協(xié)議標(biāo)準(zhǔn),它的提出,可以深化用戶層網(wǎng)絡(luò)的研究并擴(kuò)大其應(yīng)用范圍,是目前用戶層網(wǎng)絡(luò)研究的核心內(nèi)容。
自從VIA協(xié)議提出以后,許多學(xué)者和研究單位對(duì)它的不同側(cè)面進(jìn)行了研究,例如關(guān)于擴(kuò)展性問題、關(guān)于演化問題,以及如何充分利用其性能等等,這些研究推動(dòng)了以VIA協(xié)議為代表的用戶層網(wǎng)絡(luò)技術(shù)的發(fā)展。另一方面,基于VIA協(xié)議的應(yīng)用已廣泛展開,比如基于VIA協(xié)議實(shí)現(xiàn)對(duì)消息傳遞通信標(biāo)準(zhǔn)(Message Passing Interface-MPI)的支持、對(duì)通信套接字(Socket)應(yīng)用的支持,對(duì)數(shù)據(jù)庫應(yīng)用的支持,對(duì)因特網(wǎng)服務(wù)器的支持等等。借助于VIA協(xié)議,在不同程度上都提高了這些應(yīng)用或者系統(tǒng)的性能。
目前已經(jīng)有了不少實(shí)現(xiàn)VIA協(xié)議的具體應(yīng)用,概括起來一共有三種第一種是以軟件模擬的方法來支持VIA協(xié)議通信,具有代表性的是美國國家能源科學(xué)計(jì)算中心(National Energy Research Scientific Computing-NERSC)的M-VIA(Modular VIA)項(xiàng)目,它通過軟件模擬的方法,提供對(duì)VIA協(xié)議通信接口的支持,測(cè)試結(jié)果表明,即使沒有特殊硬件的支持,軟件模擬VIA協(xié)議通信機(jī)制也比核心層網(wǎng)絡(luò)通信機(jī)制的效率有較大提高。M-VIA雖然還不是真正支持VIA協(xié)議的系統(tǒng),但是它對(duì)于加深對(duì)VIA協(xié)議的研究,推廣VIA協(xié)議通信模式有重要的意義。
第二種是通過固件模擬的方法來支持VIA協(xié)議通信,和第一種相比,固件實(shí)現(xiàn)在性能上較軟件實(shí)現(xiàn)有了很大的提高,而且更接近于真正的VIA協(xié)議通信。具有代表性的是伯克利(Berkeley)大學(xué)的B-VIA項(xiàng)目,它通過對(duì)Myrinet網(wǎng)卡上的LANai芯片進(jìn)行編程,實(shí)現(xiàn)對(duì)VIA協(xié)議的支持。但是由于網(wǎng)卡芯片性能有限,因此一般在功能劃分上盡量不讓網(wǎng)卡承擔(dān)過多的任務(wù),以避免網(wǎng)卡負(fù)擔(dān)過重導(dǎo)致對(duì)通信性能的影響,這就不得不在一定程度上加重主機(jī)的負(fù)擔(dān),增加軟件通信部分的開銷。目前國外在虛擬接口結(jié)構(gòu)方面的研究大多使用這種方法。
第三種是網(wǎng)卡硬件直接支持的VIA協(xié)議通信。通過硬件門鈴機(jī)制以加快消息的響應(yīng)時(shí)間,硬件實(shí)現(xiàn)虛擬到物理地址的轉(zhuǎn)換和通過網(wǎng)卡對(duì)主機(jī)內(nèi)存的直接內(nèi)存讀寫(Direct Memory Access-DMA)操作以加快消息的傳輸速率,硬件自動(dòng)實(shí)現(xiàn)避免通信死鎖,流控與錯(cuò)誤重傳機(jī)制,計(jì)算與通信的重疊等等,這是實(shí)現(xiàn)VIA協(xié)議最終期待的方法。目前只有很少的研究機(jī)構(gòu)有能力實(shí)現(xiàn)。
總之,用戶層網(wǎng)絡(luò)與VIA協(xié)議的研究處于快速發(fā)展的階段,但還存在下列問題(1)研究用戶層網(wǎng)絡(luò)協(xié)議的應(yīng)用技術(shù)大多只是著重于特定的一個(gè)或者幾個(gè)方面,沒有將軟件、硬件以及協(xié)議實(shí)現(xiàn)進(jìn)行整體的優(yōu)化組合與匹配,即沒有以系統(tǒng)論的觀點(diǎn)來進(jìn)行統(tǒng)一考慮,因此難免顧此失彼。
(2)VIA協(xié)議的實(shí)現(xiàn)模型還主要停留在軟件和固件模擬的層次上。VIA協(xié)議是一個(gè)基于硬件支持的標(biāo)準(zhǔn)與規(guī)范,基于模擬的方法無法開發(fā)通信硬件的全部性能,硬件支持是虛擬接口結(jié)構(gòu)的基本核心技術(shù),但是由于其研究和實(shí)現(xiàn)技術(shù)難度大,目前開展這方面研究的機(jī)構(gòu)和組織卻非常少。
(3)大量非標(biāo)準(zhǔn)化的用戶層網(wǎng)絡(luò)協(xié)議研究與標(biāo)準(zhǔn)化的VIA協(xié)議研究同時(shí)存在,不利于高效的用戶層通信模式的推廣與普及,其原因在于VIA協(xié)議還有一些基礎(chǔ)性的關(guān)鍵技術(shù)沒有得到圓滿解決(比如軟硬件功能的劃分模型與算法,大規(guī)模擴(kuò)展性問題,完善功能與性能下降的矛盾,對(duì)高層通信的有效支持模型等等),致使出現(xiàn)了一些針對(duì)特定領(lǐng)域的非標(biāo)準(zhǔn)的實(shí)現(xiàn)用戶層網(wǎng)絡(luò)協(xié)議的應(yīng)用。
(4)由于VIA協(xié)議是一個(gè)相對(duì)底層的通信協(xié)議,不利于也不方便高層用戶的直接使用,因此如何用VIA協(xié)議支持已有的已被廣泛接受的高層通信協(xié)議與系統(tǒng),是VIA協(xié)議面臨的另外一個(gè)重要問題,而該問題的解決是以VIA協(xié)議自身的完善和提高為基礎(chǔ)的。
發(fā)明內(nèi)容
本發(fā)明的目的是為克服已有技術(shù)的不足之處,提出一種能夠直接以硬件支持VIA通訊協(xié)議的千兆網(wǎng)絡(luò)通信系統(tǒng),以解決VIA硬件和軟件系統(tǒng)的優(yōu)化組合與匹配,以及為VIA完善和廣泛應(yīng)用提供基礎(chǔ)的問題。實(shí)現(xiàn)可移植、低延遲、高帶寬、高可靠的通信平臺(tái)。
本發(fā)明提出的基于硬件支持的虛擬接口結(jié)構(gòu)用戶層網(wǎng)絡(luò)通信系統(tǒng),包括多臺(tái)具有Linux操作系統(tǒng)的計(jì)算機(jī)主機(jī)(HOST),安裝在該主機(jī)中的網(wǎng)絡(luò)接口卡(NetworkCard-NC,下簡(jiǎn)稱網(wǎng)卡),該網(wǎng)絡(luò)接口卡通過PCI總線與主機(jī)進(jìn)行交互,以及連接各網(wǎng)絡(luò)接口卡的交叉開關(guān)(Switch-SW),該網(wǎng)絡(luò)接口卡與交叉開關(guān)相互通過物理鏈路連接成一個(gè)通信網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);還包括設(shè)置在各臺(tái)主機(jī)中由用戶代理模塊(User Agent-UA,在VIA協(xié)議中稱為VI Programming Library-VIPL)和核心代理模塊(KernelAgent-KA,在VIA協(xié)議中稱為VI Protocol Kernel-VIPK)構(gòu)成的實(shí)現(xiàn)VIA協(xié)議規(guī)定的功能的通信接口單元和驅(qū)動(dòng)各網(wǎng)絡(luò)接口卡完成具體通訊功能的驅(qū)動(dòng)模塊(Driver)。
上述的每臺(tái)交叉開關(guān)可以同時(shí)連接多塊網(wǎng)絡(luò)接口卡,而且交叉開關(guān)之間也可以進(jìn)行連接,從而形成更加復(fù)雜的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
上述交叉開關(guān)主要可由一塊主卡和多塊子卡構(gòu)成。主卡實(shí)現(xiàn)交叉開關(guān)的數(shù)據(jù)通路和路由與仲裁功能。子卡主要由發(fā)送器、接收器(同時(shí)也是物理鏈路的組成部分)以及數(shù)據(jù)先入先出(FIFO)緩沖器件組成。每塊子卡提供一個(gè)對(duì)外的連接端口,這些端口通過子卡和主卡以全連通的方式連接在一起。這些端口既可以連接安裝在主機(jī)中網(wǎng)絡(luò)接口卡,也可以做為級(jí)連端口連接另外的交叉開關(guān)。
上述網(wǎng)卡可為支持VIA功能的虛擬接口網(wǎng)絡(luò)接口卡(Virtual Interface NetworkInterface Card,VI-NIC),在Linux系統(tǒng)中既作為網(wǎng)絡(luò)設(shè)備又作為字符設(shè)備,分別由驅(qū)動(dòng)模塊和核心代理模塊管理;它由控制芯片及其外圍I/O電路構(gòu)成;該控制芯片包括以PCI總線主控方式的PCI總線主控器,用于一次總線地址周期之后連續(xù)多個(gè)總線數(shù)據(jù)周期與主機(jī)的主存儲(chǔ)器交換數(shù)據(jù);與交叉開關(guān)構(gòu)成數(shù)據(jù)鏈路的網(wǎng)絡(luò)控制邏輯模塊,用于進(jìn)行數(shù)據(jù)傳輸和鏈路管理操作;硬件校驗(yàn)邏輯模塊,提供命令控制字的奇偶校驗(yàn),同時(shí)提供數(shù)據(jù)的循環(huán)冗余碼校驗(yàn)(CRC);采用計(jì)數(shù)器方式的VI門鈴寄存器模塊,用于查出當(dāng)前隊(duì)列中等待處理的隊(duì)列項(xiàng);可編程軟件接口模塊,用于寫入網(wǎng)卡初始化控制字和系統(tǒng)分配的網(wǎng)絡(luò)接收緩沖區(qū)指針,在中斷發(fā)生的時(shí)候,讀出中斷狀態(tài);該P(yáng)CI總線控制器模塊和硬件校驗(yàn)邏輯模塊處于外圍,并連接內(nèi)部的網(wǎng)絡(luò)控制邏輯模塊以及可編程軟件接口模塊,操作VI門鈴寄存器模塊。
所述的網(wǎng)卡的外圍I/O電路包括以下功能模塊(1)LVDS發(fā)送器和接收器模塊本模塊同時(shí)也是物理鏈路的組成部分,提供LVDS鏈路信號(hào)的發(fā)送和接收功能。
(2)數(shù)據(jù)FIFO緩存器模塊FIFO緩存位于LVDS接收器后端,用于緩存數(shù)據(jù)和時(shí)鐘匹配。采用FIFO作為數(shù)據(jù)緩存,總線可以隨時(shí)提取數(shù)據(jù),不必等待緩沖區(qū)填滿。FIFO的隊(duì)列入口和出口采用不同的時(shí)鐘,可以匹配發(fā)送方和接收方的時(shí)鐘差異。
(3)可編程EEPROM存儲(chǔ)模塊采用可重復(fù)寫入的EEPROM技術(shù),存儲(chǔ)本網(wǎng)卡的控制程序,控制本網(wǎng)卡的控制芯片和外圍I/O電路進(jìn)行數(shù)據(jù)通訊。如果需要修改相關(guān)的功能,只需將本模塊重新寫入就可以了。
所述的用戶代理模塊,核心代理模塊及驅(qū)動(dòng)模塊三部分是依據(jù)VIA協(xié)議標(biāo)準(zhǔn)的通信流程由一系列的文件形式實(shí)現(xiàn)的模塊,其中該用戶代理模塊為上層應(yīng)用程序提供應(yīng)用程序接口,并以靜態(tài)庫文件的形式在應(yīng)用程序編譯時(shí)進(jìn)行鏈接;該核心代理模塊為主機(jī)Linux操作系統(tǒng)的一種內(nèi)核模塊,并注冊(cè)為網(wǎng)卡的字符設(shè)備訪問入口,截獲用戶程序?qū)υ撟址O(shè)備的訪問,分別實(shí)現(xiàn)IOCTL功能的不同命令以提供給該用戶代理模塊進(jìn)行調(diào)用;該驅(qū)動(dòng)模塊為主機(jī)中的Linux操作系統(tǒng)中的一種驅(qū)動(dòng)模塊,它將網(wǎng)卡注冊(cè)于主機(jī)的操作系統(tǒng)的全局網(wǎng)絡(luò)設(shè)備表,并由操作系統(tǒng)的網(wǎng)絡(luò)子系統(tǒng)分配設(shè)備名,作為網(wǎng)絡(luò)設(shè)備的訪問入口;該驅(qū)動(dòng)模塊對(duì)TCP/IP協(xié)議提供支持,實(shí)現(xiàn)Linux系統(tǒng)核心定義的以太網(wǎng)卡操作接口。
本發(fā)明的特點(diǎn)及技術(shù)效果本發(fā)明的這種能夠直接以硬件支持VIA通訊協(xié)議的千兆網(wǎng)絡(luò)通信系統(tǒng),可以解決VIA硬件和軟件系統(tǒng)的優(yōu)化組合與匹配,以及為VIA完善和廣泛應(yīng)用提供基礎(chǔ)的問題。實(shí)現(xiàn)可移植、低延遲、高帶寬、高可靠的通信平臺(tái)。
本通信系統(tǒng)目前已經(jīng)做到了對(duì)2.2和2.4版本的Linux內(nèi)核的支持。
圖1為本發(fā)明的系統(tǒng)總體結(jié)構(gòu)框圖。
圖2為本發(fā)明中的數(shù)據(jù)單位TCU的結(jié)構(gòu)框3為本發(fā)明的軟件模塊結(jié)構(gòu)框圖。
圖4為本發(fā)明的數(shù)據(jù)傳輸通路結(jié)構(gòu)框5為本發(fā)明實(shí)現(xiàn)數(shù)據(jù)通信的工作流程框圖。
圖6為本發(fā)明的小數(shù)據(jù)量延遲測(cè)試結(jié)果7為本發(fā)明的大數(shù)據(jù)量帶寬測(cè)試結(jié)果8為本發(fā)明的網(wǎng)卡使用的FPGA主芯片的內(nèi)部功能結(jié)構(gòu)框9為本發(fā)明的交叉開關(guān)功能結(jié)構(gòu)框圖
具體實(shí)施例方式
本發(fā)明提出的基于硬件支持的虛擬接口結(jié)構(gòu)用戶層網(wǎng)絡(luò)通信系統(tǒng)結(jié)合附圖及實(shí)施例進(jìn)一步說明如下本發(fā)明提出的基于硬件支持的虛擬接口結(jié)構(gòu)用戶層網(wǎng)絡(luò)通信系統(tǒng),包括多臺(tái)具有Linux操作系統(tǒng)的計(jì)算機(jī)主機(jī)(HOST),安裝在該主機(jī)計(jì)算機(jī)主機(jī)(HOST)中的網(wǎng)絡(luò)接口卡(Network Card-NC),該網(wǎng)絡(luò)接口卡通過PCI總線與主機(jī)進(jìn)行交互,以及連接各網(wǎng)絡(luò)接口卡的交叉開關(guān)(Switch-SW),該網(wǎng)絡(luò)接口卡與交叉開關(guān)相互通過物理鏈路連接成一個(gè)通信網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);還包括設(shè)置在各臺(tái)主機(jī)中由用戶代理模塊(User Agent-UA,在VIA協(xié)議中稱為VI Programming Library-VIPL)和核心代理模塊(Kernel Agent-KA,在VIA協(xié)議中稱為VI Protocol Kernel-VIPK)構(gòu)成的實(shí)現(xiàn)VIA協(xié)議規(guī)定的功能的通信接口單元和驅(qū)動(dòng)各網(wǎng)絡(luò)接口卡完成具體通訊功能的驅(qū)動(dòng)模塊(Driver)。
上述的每臺(tái)交叉開關(guān)可以同時(shí)連接多塊網(wǎng)絡(luò)接口卡,而且交叉開關(guān)之間也可以進(jìn)行連接,從而形成更加復(fù)雜的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。這樣由交叉開關(guān)通過物理鏈路連接安裝在主機(jī)中的網(wǎng)絡(luò)接口卡,組成各種不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),形成網(wǎng)絡(luò)硬件平臺(tái),如圖1所示。
上述硬件平臺(tái)各部件的組成及功能分別說明如下交叉開關(guān)本發(fā)明的交叉開關(guān)主要由一塊主卡和十塊子卡構(gòu)成。主卡的主控芯片采用ALTERA公司第三代現(xiàn)場(chǎng)可編程門陣列(FPGA)中的APEX20K系列的EP20K300EBC652-1芯片,具有30萬等效門,實(shí)現(xiàn)交叉開關(guān)的數(shù)據(jù)通路和路由與仲裁功能。子卡主要由發(fā)送器、接收器(同時(shí)也是物理鏈路的組成部分),以及數(shù)據(jù)先入先出(FIFO)緩沖器件組成。每塊子卡提供一個(gè)對(duì)外的連接端口,這些端口通過子卡和主卡以全連通的方式連接在一起。這樣本交叉開關(guān)共具有10個(gè)全互連的對(duì)外端口,這些端口既可以連接安裝在主機(jī)中網(wǎng)絡(luò)接口卡,也可以做為級(jí)連端口連接另外的交叉開關(guān)。多個(gè)交叉開關(guān)組合可以構(gòu)成多種方式的拓?fù)浣Y(jié)構(gòu),如環(huán)形、二維網(wǎng)格、立方體、超立方體等。本交叉開關(guān)的工作頻率是66MHz,每個(gè)端口的帶寬為32bit,10個(gè)端口的雙向帶寬達(dá)到42.24Gbps。
物理鏈路本發(fā)明的物理鏈路采用低電壓差分信號(hào)傳輸(Low Voltage Differential Signaling,LVDS)技術(shù)進(jìn)行驅(qū)動(dòng)與傳輸。LVDS技術(shù)具有傳輸速率高(一對(duì)物理連線可高達(dá)800Mbps),抗共模干擾能力強(qiáng)等特點(diǎn)。LVDS收發(fā)器采用國家半導(dǎo)體(NationalSemiconductor,NS)公司的Channel Link系列產(chǎn)品,型號(hào)為DS90CR483/DS90CR484。接插件方面,采用50芯的LVDS專用插件以及50芯LVDS專用插頭與電纜,能夠提供18對(duì)LVDS引線,雙向并行54位傳輸,長(zhǎng)度最長(zhǎng)可達(dá)到10米。
主機(jī)網(wǎng)絡(luò)接口卡本發(fā)明的主機(jī)網(wǎng)絡(luò)接口卡(簡(jiǎn)稱本網(wǎng)卡)根據(jù)VIA協(xié)議的相關(guān)定義,屬于支持VIA功能的虛擬接口網(wǎng)絡(luò)接口卡(Virtual Interface Network Interface Card,VI-NIC),在Linux系統(tǒng)中既作為網(wǎng)絡(luò)設(shè)備又作為字符設(shè)備,分別由驅(qū)動(dòng)模塊和核心代理模塊管理;它由控制芯片及其外圍I/O電路構(gòu)成,該兩部分的具體組成及功能分別說明如下外圍I/O電路包括以下功能模塊(1)LVDS發(fā)送器和接收器模塊本模塊采用國家半導(dǎo)體(National Semiconductor,NS)公司的Channel Link系列產(chǎn)品,型號(hào)分別為DS90CR483和DS90CR484。本模塊同時(shí)也是物理鏈路的組成部分,提供LVDS鏈路信號(hào)的發(fā)送和接收功能。
(2)數(shù)據(jù)FIFO緩存器模塊FIFO緩存位于LVDS接收器后端,用于緩存數(shù)據(jù)和時(shí)鐘匹配。采用FIFO作為數(shù)據(jù)緩存,總線可以隨時(shí)提取數(shù)據(jù),不必等待緩沖區(qū)填滿。FIFO的隊(duì)列入口和出口采用不同的時(shí)鐘,可以匹配發(fā)送方和接收方的時(shí)鐘差異。
(3)可編程EEPROM存儲(chǔ)模塊采用可重復(fù)寫入的EEPROM技術(shù),存儲(chǔ)本網(wǎng)卡的控制程序,控制本網(wǎng)卡的控制芯片和外圍I/O電路進(jìn)行數(shù)據(jù)通訊。如果需要修改相關(guān)的功能,只需將本模塊重新寫入就可以了。
本網(wǎng)絡(luò)接口卡的控制芯片,采用ALTERA公司的EPF10K30AQC240-1芯片,具有3萬等效門。它包含了幾下功能模塊(1)PCI總線主控器以PCI總線主控方式(Bus Master)工作,頻率66MHz,帶寬32bit,兼容33MHz/32bit工作方式。支持總線突發(fā)(Burst)訪問方式,即一次總線地址周期之后連續(xù)多個(gè)總線數(shù)據(jù)周期與主機(jī)存儲(chǔ)器交換數(shù)據(jù)。
(2)網(wǎng)絡(luò)控制邏輯模塊與交叉開關(guān)構(gòu)成數(shù)據(jù)鏈路,進(jìn)行數(shù)據(jù)傳輸和鏈路管理等操作。鏈路管理使用自定義的“命令式控制字”鏈路協(xié)議。命令控制字可以形成多種協(xié)議命令,進(jìn)行鏈路的建立、拆除,數(shù)據(jù)的傳輸、重置等操作。命令控制字的傳輸有奇偶校驗(yàn)、接收回應(yīng)和超時(shí)控制機(jī)制的配合,能夠完全避免鏈路的死鎖。鏈路協(xié)議只有交叉開關(guān)和網(wǎng)卡的硬件邏輯是可見的。
(3)硬件校驗(yàn)邏輯模塊提供命令控制字的奇偶校驗(yàn),同時(shí)提供數(shù)據(jù)的CRC校驗(yàn),采用標(biāo)準(zhǔn)的CRC-32多項(xiàng)式發(fā)生器邏輯。CRC的編碼生成和解碼校驗(yàn)是網(wǎng)卡在數(shù)據(jù)發(fā)送和接收過程中實(shí)時(shí)進(jìn)行的。
(4)VI門鈴寄存器模塊這里實(shí)現(xiàn)的門鈴修改并簡(jiǎn)化了VIA規(guī)范中的門鈴示例,采用計(jì)數(shù)器方式。門鈴寫0則計(jì)數(shù)增1,表示投遞了新的描述符(VIA協(xié)議中規(guī)定的數(shù)據(jù)單位),門鈴寫1表示重置,門鈴讀操作可以查出當(dāng)前隊(duì)列中等待處理的隊(duì)列項(xiàng)。
由于受到裝填的限制,本網(wǎng)卡提供256個(gè)門鈴(依次編號(hào)為第0號(hào)到第255號(hào)),對(duì)應(yīng)256個(gè)傳輸控制單元(Transfer Control Unit,TCU)隊(duì)列,每個(gè)隊(duì)列最多容納256個(gè)描述符。這些門鈴都是發(fā)送門鈴。在實(shí)際工作過程中,這些門鈴構(gòu)成了一種發(fā)送結(jié)構(gòu),是位于主存中的一段連續(xù)區(qū)域。該結(jié)構(gòu)由256個(gè)發(fā)送隊(duì)列組成,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)發(fā)送門鈴,隊(duì)列的元素是網(wǎng)卡發(fā)送的描述符。描述符和隊(duì)列的大小都是固定的。網(wǎng)卡根據(jù)隊(duì)列號(hào)和隊(duì)列的下標(biāo)計(jì)算出描述符偏移量,再由發(fā)送結(jié)構(gòu)指針做基地址就可以尋找到當(dāng)前的描述符地址。
(5)可編程軟件接口模塊可編程接口模塊包括可讀寫的控制(狀態(tài))寄存器和VI門鈴寄存器。其中的控制(狀態(tài))寄存器在寫入網(wǎng)卡初始化控制字和操作系統(tǒng)分析的網(wǎng)絡(luò)接收緩沖區(qū)指針時(shí),稱為控制寄存器。具體來說,接收緩沖區(qū)位于主機(jī)的內(nèi)存中,網(wǎng)卡將接收到的數(shù)據(jù)完全寫入緩沖區(qū)并且在校驗(yàn)正確以后才能觸發(fā)中斷。中斷以后指針值失效,驅(qū)動(dòng)模塊需要再次寫入,才能使網(wǎng)卡的接收邏輯處于就位狀態(tài)。而在在中斷發(fā)生的時(shí)候,通過該寄存器又可以讀出中斷狀態(tài),此時(shí)稱為狀態(tài)寄存器。
上述這些寄存器,包括VI門鈴寄存器,以及控制(狀態(tài))寄存器,在網(wǎng)卡啟動(dòng)的時(shí)候由相關(guān)的驅(qū)動(dòng)模塊接管并初始化之,之后把映射的內(nèi)存地址傳遞給核心代理模塊,核心代理模塊再把門鈴寄存器映射到用戶層以供使用。關(guān)于上述寄存器的具體信息以及在發(fā)送接收過程中的實(shí)際應(yīng)用,在后面對(duì)網(wǎng)卡詳細(xì)說明部分有詳細(xì)的描述。
本發(fā)明門鈴的工作過程進(jìn)一步說明如下本發(fā)明的網(wǎng)絡(luò)接口卡工作的驅(qū)動(dòng)源是門鈴和VI描述符。門鈴實(shí)際上是網(wǎng)卡上的計(jì)數(shù)器,初始值可以通過給門鈴地址寫1,使得計(jì)數(shù)器變零;應(yīng)用程序按門鈴的操作是對(duì)門鈴的一個(gè)寫0動(dòng)作。門鈴接收到寫0命令就會(huì)增1,網(wǎng)卡對(duì)非零的計(jì)數(shù)值就執(zhí)行其相應(yīng)隊(duì)列上的發(fā)送。如果多個(gè)隊(duì)列上都有發(fā)送請(qǐng)求,網(wǎng)卡將按照輪循優(yōu)先級(jí)執(zhí)行每個(gè)隊(duì)列上的發(fā)送操作。
VI描述符是連接的雙方進(jìn)行數(shù)據(jù)傳輸?shù)目刂谱?。VI的發(fā)送隊(duì)列和接收隊(duì)列都由描述符組成,VIA規(guī)范1.0也給出了推薦的描述符格式,本發(fā)明的軟件模塊提供的庫函數(shù)也完全按照該格式提供VI的發(fā)送和接收描述符。但是對(duì)于鏈路傳輸來說,需要的信息并不多,于是本發(fā)明把發(fā)送描述符分開處理,其一作為網(wǎng)卡專用的發(fā)送描述符填寫在發(fā)送結(jié)構(gòu)隊(duì)列中,由網(wǎng)卡解讀并執(zhí)行相應(yīng)操作;另一部分稱為協(xié)議頭,裝載了主要的描述符信息。協(xié)議頭長(zhǎng)度是固定的,對(duì)網(wǎng)卡來說它就是立即數(shù)。網(wǎng)卡目前只處理最多一個(gè)數(shù)據(jù)段,這一段數(shù)據(jù)必須是物理地址連續(xù)的,其最大長(zhǎng)度為16K字節(jié)。發(fā)送描述符的分解由本發(fā)明的驅(qū)動(dòng)模塊完成,接收描述符的數(shù)據(jù)填寫也由驅(qū)動(dòng)模塊完成。本發(fā)明自定義的描述符結(jié)構(gòu)如圖2所示,也稱為傳輸控制單元(TCU,TransferControl Unit),圖2中,每一行的數(shù)據(jù)寬度是32位,則TCU的長(zhǎng)度為32字節(jié),一共8行,包括網(wǎng)卡控制字(1行)、協(xié)議頭(3行)和數(shù)據(jù)段(4行)三部分內(nèi)容,其中,網(wǎng)卡控制字包括目標(biāo)節(jié)點(diǎn)、V、T、保留、網(wǎng)卡立即數(shù)長(zhǎng)度;協(xié)議頭包括目的VI和源VI兩部分;目的VI分為分包計(jì)數(shù)、目的端口及數(shù)據(jù)長(zhǎng)度;源VI分為源端口及立即數(shù)長(zhǎng)度、包類型及分包順序號(hào)。雖然本發(fā)明并沒有按照VIA規(guī)范1.0的建議實(shí)現(xiàn)VI描述符,但它的庫所提供的API是完全符合VIA規(guī)范的。
最后,在總體上,PCI總線控制器模塊和硬件校驗(yàn)邏輯模塊處于外圍,然后再連接著內(nèi)部的網(wǎng)絡(luò)控制邏輯模塊以及可編程軟件接口模塊,操作VI門鈴寄存器模塊。
本發(fā)明的用戶代理模塊VIPL,核心代理模塊VIPK及驅(qū)動(dòng)模塊三部分是依據(jù)VIA協(xié)議標(biāo)準(zhǔn)的通信流程實(shí)現(xiàn)的軟件模塊,在軟件層次上,其均由一系列的文件組成。其中組成用戶代理模塊的每一個(gè)文件對(duì)應(yīng)了VIA協(xié)議中規(guī)定的一類功能,每個(gè)文件中包含了在這一功能下的若干個(gè)應(yīng)用程序接口(Application Program Interface-API),供上層應(yīng)用程序調(diào)用。而具體的實(shí)現(xiàn)則主要由核心代理模塊實(shí)現(xiàn),組成核心代理的每一個(gè)文件對(duì)應(yīng)了VIA協(xié)議中規(guī)定的一類功能的具體實(shí)現(xiàn)。最后通過驅(qū)動(dòng)模塊操作網(wǎng)絡(luò)接口卡來完成,組成驅(qū)動(dòng)模塊的每一個(gè)文件中則包含著相關(guān)硬件操作的具體實(shí)現(xiàn)。按照VIA協(xié)議的相關(guān)定義,上層應(yīng)用程序?yàn)樘摂M接口VI的消費(fèi)方,而VIPL/VIPK及驅(qū)動(dòng)模塊以及網(wǎng)絡(luò)接口卡為虛擬接口VI的提供方,如圖3所示。
核心代理模塊VIPK以設(shè)置在主機(jī)中的Linux中的一個(gè)可加載內(nèi)核模塊來運(yùn)行,驅(qū)動(dòng)模塊以設(shè)置在主機(jī)中的Linux中的一個(gè)驅(qū)動(dòng)程序來運(yùn)行,而用戶代理模塊VIPL以靜態(tài)庫文件的形式在應(yīng)用程序編譯的時(shí)候進(jìn)行鏈接。本網(wǎng)卡在Linux系統(tǒng)中既作為網(wǎng)絡(luò)設(shè)備又作為字符設(shè)備,分別由驅(qū)動(dòng)模塊和核心代理模塊管理。驅(qū)動(dòng)模塊將網(wǎng)卡注冊(cè)于主機(jī)的操作系統(tǒng)的全局網(wǎng)絡(luò)設(shè)備表,并由該操作系統(tǒng)的網(wǎng)絡(luò)子系統(tǒng)分配設(shè)備名,如eth1,作為網(wǎng)絡(luò)設(shè)備的訪問入口。所有對(duì)網(wǎng)卡的TCP/IP協(xié)議訪問都?xì)w結(jié)為對(duì)該網(wǎng)絡(luò)設(shè)備的訪問。核心代理模塊將自己注冊(cè)為網(wǎng)卡的字符設(shè)備訪問入口,用戶程序?qū)υ撟址O(shè)備的訪問都被核心代理模塊所截獲。核心代理模塊實(shí)現(xiàn)該字符設(shè)備的OPEN,CLOSE,IOCTL和MMAP方法,不實(shí)現(xiàn)READ和WRITE方法。MMAP將允許用戶訪問的資源映射到用戶進(jìn)程空間,由VIPL的庫函數(shù)直接操作,如PostSend,PostRecv,SendDone,RecvDone等。而諸如VI管理,連接管理等需要核心代理模塊干預(yù)的操作,核心代理分別實(shí)現(xiàn)IOCTL方法的不同命令以提供給VIPL進(jìn)行調(diào)用。所有應(yīng)用VIA協(xié)議的用戶程序,都是通過該字符設(shè)備對(duì)網(wǎng)卡進(jìn)行訪問的。
本發(fā)明的核心代理模塊實(shí)現(xiàn)內(nèi)存區(qū)域注冊(cè)與內(nèi)存保護(hù),以及虛擬地址到物理地址的轉(zhuǎn)換等內(nèi)存管理功能。當(dāng)用戶程序通過庫函數(shù)注冊(cè)內(nèi)存區(qū)域或者建立VI的時(shí)候,由核心代理模塊提供內(nèi)存保護(hù)屬性或者VI屬性并返回。地址轉(zhuǎn)換也在核心代理模塊實(shí)現(xiàn),即頁表完全由核心代理模塊維護(hù)。
盡管以上這些工作都由核心代理模塊在系統(tǒng)核心完成,但是注冊(cè)的內(nèi)存區(qū)域和創(chuàng)建的VI在整個(gè)生存期內(nèi)(所謂VI的生存期是指創(chuàng)建一個(gè)VI到銷毀這個(gè)VI的整個(gè)過程就不會(huì)再改變其屬性,同樣,內(nèi)存區(qū)域的生存期是指從注冊(cè)該區(qū)域開始直到注銷的整個(gè)過程)虛擬內(nèi)存地址到物理地址的對(duì)應(yīng)也不會(huì)改變,因而以后對(duì)相關(guān)內(nèi)存地址的操作就不需要經(jīng)過核心代理模塊而完全是用戶層的。VI的通信首先需要向遠(yuǎn)程建立連接,通信結(jié)束之后要釋放連接,但是不必銷毀VI,這意味著可以利用該VI再次創(chuàng)建連接進(jìn)行通信,從而實(shí)現(xiàn)“一次創(chuàng)建、多次使用”,減小VI資源管理的軟件開銷。注冊(cè)的內(nèi)存區(qū)域是用來作為用戶程序的數(shù)據(jù)區(qū)的,每次通信任務(wù)完成之后這些數(shù)據(jù)就過期了,而該區(qū)域依然可以再次使用,同樣做到“一次注冊(cè)、多次使用”。因此,這種實(shí)現(xiàn)方式所增加的平均軟件開銷并不大。
另外,TCP/IP是傳統(tǒng)的通用的網(wǎng)絡(luò)協(xié)議,本發(fā)明的驅(qū)動(dòng)模塊對(duì)其提供了支持。驅(qū)動(dòng)模塊使用VI資源中的0號(hào)VI,該VI的門鈴和TCU隊(duì)列不會(huì)被映射到用戶空間,而是系統(tǒng)專用。驅(qū)動(dòng)模塊使用0號(hào)VI進(jìn)行VIA用戶數(shù)據(jù)之外的其它所有數(shù)據(jù)的通信通道,包括VIPK的控制包,路由信息包,IP類型包等。驅(qū)動(dòng)模塊實(shí)現(xiàn)了若干Linux系統(tǒng)核心定義的以太網(wǎng)卡操作接口。由于Linux的網(wǎng)絡(luò)子系統(tǒng)使用了Socket Buffer(套接字緩沖區(qū))結(jié)構(gòu),傳遞給驅(qū)動(dòng)模塊的緩沖區(qū)內(nèi)容就是直接可以發(fā)送的幀結(jié)構(gòu),驅(qū)動(dòng)模塊只要把該幀結(jié)構(gòu)像普通用戶數(shù)據(jù)一樣對(duì)待,對(duì)它進(jìn)行封裝——即生成協(xié)議頭和填寫網(wǎng)卡發(fā)送描述符,并在接收的時(shí)候解封裝,就實(shí)現(xiàn)了TCP/IP的支持。對(duì)于地址解析(Address Resolution Protocol,ARP)協(xié)議使用的MAC地址,本發(fā)明中用每個(gè)網(wǎng)卡在本系統(tǒng)中唯一的交叉開關(guān)端口號(hào)來表示。
本發(fā)明的用戶層發(fā)送實(shí)現(xiàn)了真正的零拷貝。網(wǎng)卡會(huì)根據(jù)發(fā)送描述符直接尋址到用戶進(jìn)程存儲(chǔ)空間的數(shù)據(jù),然后以PCI突發(fā)(Burst)方式取數(shù)據(jù)并執(zhí)行發(fā)送。發(fā)送過程是流水執(zhí)行的,即一次Burst啟動(dòng)以后,每個(gè)總線周期都可以讀出32位(總線寬度)的數(shù)據(jù)。其間沒有任何內(nèi)存數(shù)據(jù)拷貝。但是,網(wǎng)卡的接收過程仍然通過中斷觸發(fā),即本發(fā)明所實(shí)現(xiàn)的用戶層通信從嚴(yán)格意義上說是半用戶層通信。中斷接收的時(shí)候,由于數(shù)據(jù)在接收緩沖區(qū)中之后網(wǎng)卡才觸發(fā)中斷,因此需要做一次數(shù)據(jù)拷貝,由驅(qū)動(dòng)模塊把提取接收數(shù)據(jù)并寫到相應(yīng)的用戶數(shù)據(jù)區(qū)。這一次拷貝是必需的,因?yàn)榫W(wǎng)卡不解析接收描述符或者協(xié)議頭,這一任務(wù)交給驅(qū)動(dòng)模塊完成,它必須有可操作的內(nèi)存區(qū)域。圖4顯示了這一數(shù)據(jù)傳輸通路結(jié)構(gòu),即網(wǎng)卡從網(wǎng)絡(luò)中獲得數(shù)據(jù)經(jīng)FIFO緩存送給接收邏輯模塊,再傳輸給主機(jī),經(jīng)主機(jī)的接收緩沖區(qū)送入用戶數(shù)據(jù)區(qū);用戶數(shù)據(jù)區(qū)中的要發(fā)送的數(shù)據(jù)經(jīng)網(wǎng)卡的發(fā)送邏輯模塊傳輸?shù)骄W(wǎng)絡(luò)中。其中,數(shù)據(jù)經(jīng)過FIFO占用的時(shí)間是忽略不計(jì)的,這是FIFO的特性決定的。
本通信系統(tǒng)目前已經(jīng)做到了對(duì)2.2和2.4版本的Linux內(nèi)核的支持。
本通信系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)通信的工作流程如圖5所示,包括以下步驟①根據(jù)用戶頁表,將發(fā)送緩沖區(qū)的虛擬地址轉(zhuǎn)換為DMA物理地址。這一步是由驅(qū)動(dòng)模塊完成的。這之前的相關(guān)工作則由用戶代理和核心代理依次完成。
②將發(fā)送控制信息,推入VI對(duì)應(yīng)通信隊(duì)列中,訪問門鈴寄存器。這一步驅(qū)動(dòng)模塊操作NC完成。
③根據(jù)門鈴查詢對(duì)應(yīng)VI的發(fā)送隊(duì)列,獲取相應(yīng)的發(fā)送信息。這一步由NC完成。
④啟動(dòng)DMA,將消息數(shù)據(jù)字節(jié)從發(fā)送方緩沖區(qū)發(fā)送到由多個(gè)網(wǎng)絡(luò)接口卡、交叉開關(guān)和物理鏈路組成的的網(wǎng)絡(luò)。這一步由NC完成。
⑤發(fā)送完畢,在發(fā)送信息的相應(yīng)位置設(shè)置完成標(biāo)志。這一步由NC完成。
⑥根據(jù)VI號(hào)查詢相應(yīng)的接收隊(duì)列,分析數(shù)據(jù)包頭,檢查傳輸?shù)恼_性。這一步由NC完成。
⑦獲取接收方的目的緩沖區(qū)信息。然后直接將數(shù)據(jù)從網(wǎng)絡(luò)傳輸?shù)浇邮辗降木彌_區(qū)中,設(shè)完成標(biāo)志。這一步由NC完成。
⑧查詢VI的接收隊(duì)列標(biāo)志,判斷數(shù)據(jù)是否到達(dá),否則繼續(xù)等待、查詢,是則將數(shù)據(jù)交由核心代理和用戶代理模塊依次進(jìn)行解析,去除通信附加的內(nèi)容,恢復(fù)成原始數(shù)據(jù),交由上層應(yīng)用使用。這一步由驅(qū)動(dòng)模塊完成。然后交由核心代理和用戶代理模塊依次處理。
其中步驟①到⑤是發(fā)送過程,而步驟⑥到⑧是接收過程。其中①②和⑧這三步是在上層應(yīng)用完成的,此時(shí)主機(jī)的CPU要處理相應(yīng)的通信操作,不能從事其它工作。而③到⑦這幾步則由網(wǎng)絡(luò)接口卡來完成,此時(shí)CPU就可以進(jìn)行如計(jì)算之類的其它工作,從而達(dá)到計(jì)算與通信并行的效果。從①到⑧一個(gè)完整過程所消耗的時(shí)間就是傳遞一個(gè)消息的延遲。
測(cè)試表明,本發(fā)明系統(tǒng)的運(yùn)行是穩(wěn)定的。圖6和圖7分別顯示了在測(cè)試得到的小數(shù)據(jù)量的通信延遲和大數(shù)據(jù)量的通信帶寬。小數(shù)據(jù)量的延遲測(cè)試,數(shù)據(jù)大小從4字節(jié)到1024字節(jié),當(dāng)數(shù)據(jù)長(zhǎng)度小于64字節(jié)時(shí),通信延遲都在10ns之內(nèi),此后延遲隨數(shù)據(jù)長(zhǎng)度的增加而相應(yīng)增大。大數(shù)據(jù)量的帶寬測(cè)試,數(shù)據(jù)大小從1K字節(jié)到64K字節(jié)(64K字節(jié)是目前允許的最大數(shù)據(jù)傳出長(zhǎng)度),當(dāng)數(shù)據(jù)長(zhǎng)度達(dá)到8K字節(jié)以后,帶寬的增加值趨于平緩,此時(shí)的通信帶寬已經(jīng)達(dá)到90MB以上。數(shù)據(jù)長(zhǎng)度為32K時(shí),帶寬超過100MB,這個(gè)數(shù)值已經(jīng)接近32位/33M的PCI總線132MB的理論帶寬的80%。
本系統(tǒng)支持TCP/IP協(xié)議,可以運(yùn)行基于操作系統(tǒng)IP網(wǎng)絡(luò)協(xié)議棧的任何應(yīng)用程序。IP協(xié)議的測(cè)試選擇了ping、telnet、rsh、ftp等程序進(jìn)行,對(duì)TCP協(xié)議沒有進(jìn)行特別的參數(shù)設(shè)定,使用操作系統(tǒng)的默認(rèn)值。PING程序和FTP程序顯示的延遲和帶寬都明顯優(yōu)于1000M以太網(wǎng)卡,但是比VIA協(xié)議的測(cè)試數(shù)值還是有明顯的差距的。這也說明通信的瓶頸已經(jīng)轉(zhuǎn)移到通信軟件,因此用戶層通信優(yōu)勢(shì)明顯。
下面對(duì)各組成部分的實(shí)施例進(jìn)一步詳細(xì)說明。
網(wǎng)絡(luò)接口卡的組成及特點(diǎn)本實(shí)施例采用3萬門FPGA,提供PCI接口及通訊節(jié)點(diǎn)控制器功能;全雙工48位66MHz LVDS節(jié)點(diǎn)之間信號(hào)通訊方式;National Semiconductor 48位LVDS發(fā)送和接收器,66MHz工作時(shí)鐘;AMP專用LVDS傳輸線及接插件,可靠抗干擾,最長(zhǎng)可達(dá)10米;抗扭曲(DESKEW)技術(shù),數(shù)據(jù)位之間長(zhǎng)線傳輸相位延遲自動(dòng)修正;Cypress 4K×36位先進(jìn)先出(FIFO)緩存芯片,66MHz工作頻率;FIFO保證發(fā)送和接收時(shí)鐘完全獨(dú)立,數(shù)據(jù)不丟失;帶奇偶校驗(yàn)檢測(cè)的命令同步機(jī)制,保證通訊鏈路的暢通與非死鎖;循環(huán)校碼(CRC)數(shù)據(jù)幀檢測(cè),傳輸出錯(cuò)時(shí)硬件自動(dòng)重發(fā)修正,數(shù)據(jù)通訊高速可靠;多至256個(gè)發(fā)送隊(duì)列,可進(jìn)行多進(jìn)程發(fā)送,提供硬件VIA支持;存儲(chǔ)器編址寄存器訪問機(jī)制,允許用戶層直接編程,減少系統(tǒng)開銷;接收完成中斷方式,可以使接收和數(shù)據(jù)處理完全并行;聯(lián)合測(cè)試行動(dòng)小組(Joint Test Action Group-JTAG)或電可擦除可編程只讀存儲(chǔ)器(E2PROM)的FPGA動(dòng)態(tài)加載邏輯,方便軟硬件升級(jí);66MHz(兼容33MHz)PCI總線時(shí)鐘控制,自適應(yīng)5V或3.3V信號(hào)電平,3.3V工作電壓;PCI主控操作(Master)突發(fā)(Burst)32位傳輸,最高266MB/S傳輸率;3.3V或5V PCI通用插卡,66MHz(兼容33MHz)32位PCI2.2版接口;發(fā)光二極管鏈路和通訊狀態(tài)指示;采用4層印刷電路板(PCB)的PCI卡優(yōu)化設(shè)計(jì),降低成本。
圖8是該FPGA芯片的內(nèi)部功能結(jié)構(gòu)框圖,該FPGA芯片可以劃分為PCI總線主控器、硬件校驗(yàn)邏輯模塊、網(wǎng)絡(luò)控制邏輯模塊、可編程軟件接口模塊和VI門鈴寄存器模塊這幾個(gè)部分。其中PCI總線主控器由PCI配置寄存器堆,總線譯碼器,MASTER狀態(tài)機(jī),TARGET狀態(tài)機(jī)和發(fā)送仲裁這幾個(gè)部分組成,對(duì)PCI總線進(jìn)行控制和驅(qū)動(dòng);硬件校驗(yàn)邏輯模塊則由奇偶校驗(yàn)部分組成;網(wǎng)絡(luò)控制邏輯模塊包括命令譯碼器,命令編碼器和通訊狀態(tài)機(jī)幾部分組成;可編程軟件接口模塊主要由編程寄存器構(gòu)成;而VI門鈴寄存器模塊由通用寄存器構(gòu)成。在總體上,PCI總線控制器模塊和硬件校驗(yàn)邏輯模塊處于外圍,然后再連接著內(nèi)部的網(wǎng)絡(luò)控制邏輯模塊以及可編程軟件接口模塊,操作VI門鈴寄存器模塊。
本網(wǎng)卡相關(guān)參數(shù)PCI配置參數(shù)用于網(wǎng)卡識(shí)別及狀態(tài)描述,如表1所述。
表1
本網(wǎng)卡在實(shí)際使用中占用的資源如下設(shè)備訪問端口網(wǎng)卡設(shè)備訪問端口申請(qǐng)占用PCI(CPU)存儲(chǔ)空間(4K字節(jié)),作為網(wǎng)卡的編程地址。系統(tǒng)啟動(dòng)時(shí),分配的設(shè)備端口存儲(chǔ)空間基地址被寫到PCI配置空間的基地址寄存器(Base Address Registers)0(PCI配置空間位置10H),讀取該配置空間的內(nèi)容可得到網(wǎng)卡設(shè)備訪問端口的基地址。
設(shè)備中斷端口網(wǎng)卡需要申請(qǐng)占用PCI(CPU)一個(gè)中斷線,用于數(shù)據(jù)接受及異常處理。系統(tǒng)啟動(dòng)時(shí)中斷號(hào)被分配到PCI配置空間的中斷線(Interrupt Line)(PCI配置空間位置3CH),讀取該配置空間的內(nèi)容可得到網(wǎng)卡的中斷號(hào)。
設(shè)備訪問端口參數(shù)網(wǎng)卡申請(qǐng)的用于設(shè)備訪問端口的PCI(CPU)存儲(chǔ)空間,從基地址開始使用了4K字節(jié)的編址,用于對(duì)網(wǎng)卡的編程,如表2所示(為了擴(kuò)展和兼容,編程端口所有未指定或保留的位,都要求寫入為0。另外,表2中的訪問單位必須是整體操作,例如雙字訪問不能通過兩次短字操作來實(shí)現(xiàn))。
表2
發(fā)送結(jié)構(gòu)緩沖區(qū)發(fā)送結(jié)構(gòu)緩沖區(qū)用于存放發(fā)送數(shù)據(jù)的結(jié)構(gòu)描述,它是系統(tǒng)中一塊物理地址連續(xù)的內(nèi)存,由軟件啟動(dòng)時(shí)申請(qǐng)得到后,通過端口(SNDP)寫入網(wǎng)卡。
緩沖區(qū)大小緩沖區(qū)大小可由以下公式得出發(fā)送隊(duì)列個(gè)數(shù)×每個(gè)隊(duì)列的項(xiàng)數(shù)×每項(xiàng)目的字?jǐn)?shù)×4(每字的字節(jié)數(shù))目前網(wǎng)卡的相關(guān)參數(shù)為發(fā)送隊(duì)列個(gè)數(shù)256,每個(gè)隊(duì)列的項(xiàng)數(shù)256,每項(xiàng)目的字?jǐn)?shù)32最后緩沖區(qū)的大小2MB緩沖區(qū)位置緩沖區(qū)必須是物理地址連續(xù)的一塊內(nèi)存(2M),網(wǎng)卡對(duì)緩沖區(qū)尋址時(shí)要求它的低位地址全為0,即要求緩沖區(qū)必須以它的大小(2M)對(duì)齊。
緩沖區(qū)結(jié)構(gòu)2M的發(fā)送緩沖區(qū)依隊(duì)列號(hào)順序連續(xù)存放,每個(gè)隊(duì)列中各項(xiàng)也按項(xiàng)目次序連續(xù)存放,如表3所示。
表3
偏移1FFFFCH每一個(gè)發(fā)送請(qǐng)求由發(fā)送緩沖區(qū)的一個(gè)項(xiàng)目來描述,每個(gè)項(xiàng)目的描述內(nèi)容由連續(xù)的8個(gè)雙字(32個(gè)字節(jié))組成,如表4所示。表中從右到左代表一個(gè)雙字的從低到高32位。
表4
地址0004H08H0cH10H14H18H1cH(a).第一個(gè)雙字是項(xiàng)目的控制字,其中TN位31-24)8位發(fā)送終點(diǎn)的目標(biāo)節(jié)點(diǎn)編號(hào)。這個(gè)編號(hào)將直接對(duì)應(yīng)SWITCH的物理端口號(hào),最多256個(gè)。
T(位22)發(fā)送任務(wù)未完成標(biāo)志,當(dāng)T=0時(shí)表示發(fā)送任務(wù)已完成。
IML(位12-2)緩沖區(qū)項(xiàng)目?jī)?nèi)部需要發(fā)送的立即數(shù)個(gè)數(shù),1≤個(gè)數(shù)≤7。存放在IML中的值應(yīng)該是立即數(shù)個(gè)數(shù)-1,即0≤IML≤6,它與控制字的低兩位合并代表立即數(shù)個(gè)數(shù)的字節(jié)數(shù)-4。
(位21-14)附加發(fā)送緩沖區(qū)指針的高位(39-32)。如果發(fā)送緩沖區(qū)是64位的地址,就要設(shè)置這個(gè)高位指針。
V(位23)附加緩沖區(qū)發(fā)送請(qǐng)求標(biāo)志。當(dāng)V=1時(shí)除了立即數(shù)發(fā)送以外,還要求一個(gè)附加的緩沖區(qū)緊隨立即數(shù)后發(fā)送。
(b).第二個(gè)雙字開始是要發(fā)送的立即數(shù)內(nèi)容(立即數(shù)0、立即數(shù)2、立即數(shù)3、……),長(zhǎng)度由控制字中的IML給出。
(c).如果控制字中的V=1,緊跟立即數(shù)后是兩個(gè)雙字的附加緩沖區(qū)描述,此時(shí)可發(fā)送的立即數(shù)最大個(gè)數(shù)應(yīng)減少2個(gè)。
(d).附加緩沖區(qū)描述第一個(gè)雙字是發(fā)送緩沖區(qū)長(zhǎng)度,格式如下
ABL(位12-2)附加緩沖區(qū)中需要發(fā)送的數(shù)據(jù)(雙字)個(gè)數(shù)。ABL的值應(yīng)該是發(fā)送數(shù)據(jù)個(gè)數(shù)-1,它與控制字的低兩位合并代表立即數(shù)個(gè)數(shù)的字節(jié)數(shù)-4。
附加緩沖區(qū)描述第一個(gè)雙字是發(fā)送緩沖區(qū)指針,格式如下
ABP(位31-0)附加緩沖區(qū)的指針。附加緩沖區(qū)要求是雙字對(duì)齊,即ABP的最低兩位為0(e).項(xiàng)目中未定義的數(shù)據(jù)位清0。
如何對(duì)網(wǎng)卡資源進(jìn)行調(diào)用初始化過程通過BIOS(或操作系統(tǒng)調(diào)用)檢測(cè)網(wǎng)卡是否存在,用商家標(biāo)識(shí)(Vendor ID)(5448H)和設(shè)備標(biāo)識(shí)(Device ID)(4E43H)搜索網(wǎng)卡。
讀取已分配的網(wǎng)卡設(shè)備端口基地址(BAR0)和中斷號(hào)(Interrupt Line-PCI配置空間3CH位置)。
對(duì)所有的發(fā)送隊(duì)列(0-255)進(jìn)行初始化,即對(duì)SQPi端口寫1。
申請(qǐng)2MB發(fā)送結(jié)構(gòu)緩沖區(qū),要求緩沖區(qū)是物理地址連續(xù)且2MB對(duì)齊。
發(fā)送結(jié)構(gòu)緩沖區(qū)指針寫入到網(wǎng)卡的SNDP端口(基地址+4),同時(shí)網(wǎng)卡初始化。
根據(jù)中斷號(hào)設(shè)置中斷向量,指向中斷處理程序,修改8259中斷屏蔽位(或由操作系統(tǒng)完成)。
數(shù)據(jù)發(fā)送過程確定發(fā)送隊(duì)列號(hào)i(i=0,..,255),讀取該隊(duì)列的隊(duì)列長(zhǎng)度,直到隊(duì)列不滿(<255)。
根據(jù)發(fā)送隊(duì)列i隊(duì)列參數(shù),得到隊(duì)尾緩沖區(qū)項(xiàng)目的指針。
填寫緩沖區(qū)項(xiàng)目?jī)?nèi)容(緩沖區(qū)內(nèi)容不能發(fā)生錯(cuò)誤,嚴(yán)重時(shí)會(huì)使整個(gè)機(jī)器癱瘓),如需要附加緩沖區(qū),則添入附加緩沖區(qū)的長(zhǎng)度及附加緩沖區(qū)指針。
對(duì)SQPi端口(基地址+800H+i)進(jìn)行一次寫0,使該發(fā)送隊(duì)列長(zhǎng)度+1,通知網(wǎng)卡有新的隊(duì)列發(fā)送要求。
修改發(fā)送隊(duì)列i的隊(duì)列參數(shù)。
數(shù)據(jù)接收過程申請(qǐng)1-N個(gè)接收緩沖區(qū),要求接收緩沖區(qū)是物理地址連續(xù)且雙字對(duì)齊(接收緩沖區(qū)的大小不得小于最大發(fā)送數(shù)據(jù)+2(雙字),否則會(huì)破壞系統(tǒng)的內(nèi)存)。
為使網(wǎng)卡能夠接收數(shù)據(jù),首先把(任意一個(gè))接收緩沖區(qū)指針寫入到RCVP端口(基地址+0)數(shù)據(jù)接收這一過程由網(wǎng)卡硬件中斷啟動(dòng),中斷處理程序(由初始化進(jìn)程設(shè)定)包含以下內(nèi)容讀取網(wǎng)卡狀態(tài)(STATUS)(基地址+4)(網(wǎng)卡狀態(tài)讀取后即被復(fù)位,因此只能讀取一次,多次使用時(shí)要用軟件保存。),確定中斷來源是數(shù)據(jù)接受中斷。
把另一個(gè)空的接收緩沖區(qū)指針寫入到RCVP端口,以便網(wǎng)卡能立即接收下一個(gè)數(shù)據(jù)包(多個(gè)接收緩沖區(qū)的管理可以使CPU對(duì)緩沖區(qū)的處理與接收數(shù)據(jù)過程完全并行,但這種管理需要妥善處理緩沖區(qū)之間的關(guān)系,以免出現(xiàn)沖突甚至死鎖)。
啟動(dòng)數(shù)據(jù)包接收處理進(jìn)程,或設(shè)置標(biāo)志在中斷處理程序結(jié)束后啟動(dòng)這個(gè)進(jìn)程。
向8259發(fā)中斷結(jié)束(EOI)后(或由操作系統(tǒng)完成),退出中斷。
數(shù)據(jù)包接收處理進(jìn)程由中斷處理程序啟動(dòng),處理本次接收緩沖區(qū)的內(nèi)容。
交叉開關(guān)組成及特點(diǎn)自主設(shè)計(jì)采用30萬門FPGA,10通道全互聯(lián)交叉開關(guān);全雙工48位66MHz LVDS節(jié)點(diǎn)之間信號(hào)通訊方式;National Semiconductor 48位LVDS發(fā)送和接收器,66MHz工作時(shí)鐘;AMP專用LVDS傳輸線及接插件,可靠抗干擾,最長(zhǎng)可達(dá)10米;抗扭曲(DESKEW)技術(shù),數(shù)據(jù)位之間長(zhǎng)線傳輸相位延遲自動(dòng)修正;Cypress 4K×36位FIFO,66MHz工作頻率FIFO保證發(fā)送和接收時(shí)鐘完全獨(dú)立,數(shù)據(jù)不丟失帶奇偶校驗(yàn)檢測(cè)的命令同步機(jī)制,保證通訊鏈路的暢通與非死鎖CRC數(shù)據(jù)幀檢測(cè),傳輸出錯(cuò)時(shí)硬件自動(dòng)重發(fā)修正,數(shù)據(jù)通訊高速可靠JTAG或E2PROM的FPGA動(dòng)態(tài)加載邏輯,方便軟硬件升級(jí)2Mb的EPC2系統(tǒng)更新和重配置USB接口方式的主控通道擴(kuò)展,便于系統(tǒng)重配置構(gòu)造發(fā)光二極管鏈路和通訊狀態(tài)指示子母板分離式設(shè)計(jì),減小連線長(zhǎng)度和設(shè)備體積,速度更高更可靠。
采用6層PCB短PCI卡優(yōu)化設(shè)計(jì),以降低成本圖9就是該交叉開關(guān)與網(wǎng)卡連接在一起時(shí)的內(nèi)部功能結(jié)構(gòu)框圖。該交叉開關(guān)要實(shí)現(xiàn)數(shù)據(jù)的通路和路由與仲裁功能。因此對(duì)交叉開關(guān)使用的FPGA,主要構(gòu)成是一個(gè)全連通的開關(guān)通路,然后該芯片同時(shí)連接多個(gè)端口,從每個(gè)端口的角度來說,都包括了通端與端控制兩部分,這里的“通端”即指LVDS收發(fā)器和FIFO緩沖這些器件,是安裝在交叉開關(guān)內(nèi)部的子卡上的,而端控制指包括在FPGA內(nèi)部的相關(guān)邏輯模塊。然后每個(gè)端口通過物理鏈路與安裝在主機(jī)上的網(wǎng)卡(網(wǎng)絡(luò)適配器)的通端(同樣由網(wǎng)卡上的LVDS收發(fā)器和FIFO緩沖構(gòu)成)連接。然后網(wǎng)卡通過其FPGA內(nèi)部的PCI總控模塊利用PCI總線進(jìn)行通信。
以下對(duì)本發(fā)明的用戶代理模塊,核心代理模塊及驅(qū)動(dòng)模塊三部分的具體實(shí)現(xiàn)從VIA協(xié)議的角度進(jìn)行詳細(xì)的說明用戶代理模塊VIPLVIPL全稱是Virtual Interface Programming Layer,是VIA標(biāo)準(zhǔn)里的用戶代理UA(User Agent),主要的功能是實(shí)現(xiàn)VIA標(biāo)準(zhǔn)里規(guī)定的API函數(shù)。在使用VIA編程的時(shí)候調(diào)用這些API函數(shù),其組成是
此外還有以下一些頭文件,以及一些輔助的內(nèi)容
總之,VIPL的功能是利用linux系統(tǒng)提供的ioctl機(jī)制,將相關(guān)參數(shù)傳遞到VIPK。以VipRegisterMem函數(shù)為例,它是VIPL的一個(gè)API,應(yīng)用程序基于VIA編程時(shí)就會(huì)調(diào)用它,會(huì)向它提供若干個(gè)輸入?yún)?shù)以表明要注冊(cè)的內(nèi)存的性質(zhì)。它把這些內(nèi)容填入ARG結(jié)構(gòu)中(這是所有的ioctl函數(shù)都有的兩個(gè)參數(shù)之一,一個(gè)是操作類型CMD,另一個(gè)就是操作參數(shù)ARG),同時(shí)聲明使用的命令是VIP_REGISTER_MEM,這樣就把這些參數(shù)傳遞給了VIPK的相關(guān)函數(shù)進(jìn)行處理。處理的結(jié)果在ARG結(jié)構(gòu)中,正確的話就能得到內(nèi)存句柄,錯(cuò)誤的話會(huì)返回錯(cuò)誤狀態(tài)。在這一層的絕大多數(shù)API都是這樣實(shí)現(xiàn)的。這些API的相關(guān)定義在VIA標(biāo)準(zhǔn)1.0中有詳細(xì)描述。
核心代理模塊VIPKVIPK全稱是Virtual Interface Protocol Kernel Agent,該模塊主要功能是實(shí)現(xiàn)上層API的功能,并與驅(qū)動(dòng)模塊建立聯(lián)系。下面是它的組成
在具體的功能實(shí)現(xiàn)上,以EQ(錯(cuò)誤隊(duì)列),CQM(完成隊(duì)列管理),RMM(注冊(cè)內(nèi)存管理)這些基本的功能為基礎(chǔ),OPS(相關(guān)操作)和其它往往是調(diào)用這些函數(shù)提供的功能進(jìn)行組合。
同時(shí),基于ioctl機(jī)制,每個(gè)VIPL的API函數(shù)在VIPK都有對(duì)應(yīng),這些對(duì)應(yīng)的VIPK的API的實(shí)現(xiàn)方法依照接收參數(shù)→相關(guān)檢驗(yàn)→調(diào)用基本資源函數(shù)或系統(tǒng)調(diào)用→返回句柄這樣的結(jié)構(gòu)進(jìn)行。即根據(jù)需要對(duì)相關(guān)的資源進(jìn)行組合。
除此之外,由于這一模塊已經(jīng)要面對(duì)硬件完成一些最基本的功能,例如完成發(fā)送/接收一個(gè)數(shù)據(jù)包。和這一層直接關(guān)聯(lián)的有VIPK的CM(連接管理)模塊。
驅(qū)動(dòng)模塊VIPK_DEVS該模塊的主要功能是硬件驅(qū)動(dòng),使得本發(fā)明的網(wǎng)卡硬件可以被操作系統(tǒng)正常的識(shí)別和加載,生成相關(guān)的設(shè)備文件,同時(shí)獲得相應(yīng)的資源例如中斷,MAC端口等。并且負(fù)責(zé)實(shí)際數(shù)據(jù)包的發(fā)送與接收。
下面是它的功能分布
這模塊的API組成是thnc2.c中
thnc_rx.c中
權(quán)利要求
1.一種基于硬件支持的虛擬接口結(jié)構(gòu)用戶層網(wǎng)絡(luò)通信系統(tǒng),包括多臺(tái)具有Linux操作系統(tǒng)的計(jì)算機(jī)主機(jī),安裝在該各主機(jī)中的網(wǎng)絡(luò)接口卡,該網(wǎng)絡(luò)接口卡通過PCI總線與主機(jī)進(jìn)行交互,以及連接各網(wǎng)絡(luò)接口卡的交叉開關(guān),該網(wǎng)絡(luò)接口卡與交叉開關(guān)相互通過物理鏈路連接成一個(gè)通信網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);還包括設(shè)置在各臺(tái)主機(jī)中由用戶代理模塊和核心代理模塊構(gòu)成的實(shí)現(xiàn)VIA協(xié)議規(guī)定的功能的通信接口單元和驅(qū)動(dòng)各網(wǎng)絡(luò)接口卡完成具體通訊功能的驅(qū)動(dòng)模塊。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述的每臺(tái)交叉開關(guān)由一塊主卡和多塊子卡構(gòu)成,與多塊網(wǎng)絡(luò)接口卡同時(shí)連接,且該各交叉開關(guān)之間也進(jìn)行連接,以形成復(fù)雜的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
3.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述交叉開關(guān)的主卡用于實(shí)現(xiàn)交叉開關(guān)的數(shù)據(jù)通路和路由與仲裁功能;所述交叉開關(guān)的子卡主要由發(fā)送器、接收器以及數(shù)據(jù)先入先出緩沖器件組成。
4.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述的網(wǎng)絡(luò)接口卡為支持VIA功能的虛擬接口網(wǎng)絡(luò)接口卡,在該主機(jī)的Linux系統(tǒng)中既作為網(wǎng)絡(luò)設(shè)備又作為字符設(shè)備,分別由所述驅(qū)動(dòng)模塊和核心代理模塊管理;該網(wǎng)絡(luò)接口卡由控制芯片及其外圍I/O電路構(gòu)成;該控制芯片包括以PCI總線主控方式的PCI總線主控器,用于一次總線地址周期之后連續(xù)多個(gè)總線數(shù)據(jù)周期與主機(jī)的主存儲(chǔ)器交換數(shù)據(jù);與交叉開關(guān)構(gòu)成數(shù)據(jù)鏈路的網(wǎng)絡(luò)控制邏輯模塊,用于進(jìn)行數(shù)據(jù)傳輸和鏈路管理操作;硬件校驗(yàn)邏輯模塊,提供命令控制字的奇偶校驗(yàn),同時(shí)提供數(shù)據(jù)的循環(huán)冗余碼校驗(yàn);采用計(jì)數(shù)器方式的VI門鈴寄存器模塊,用于查出當(dāng)前隊(duì)列中等待處理的隊(duì)列項(xiàng);可編程軟件接口模塊,用于寫入網(wǎng)絡(luò)接口卡初始化控制字和系統(tǒng)分配的網(wǎng)絡(luò)接收緩沖區(qū)指針,在中斷發(fā)生的時(shí)候,讀出中斷狀態(tài);該P(yáng)CI總線控制器模塊和硬件校驗(yàn)邏輯模塊處于外圍,并連接內(nèi)部的網(wǎng)絡(luò)控制邏輯模塊以及可編程軟件接口模塊,操作VI門鈴寄存器模塊。
5.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述的外圍I/O電路包括物理鏈路的LVDS發(fā)送器和接收器模塊,用于提供LVDS鏈路信號(hào)的發(fā)送和接收功能,位于LVDS接收器后端的數(shù)據(jù)先入先出緩存器模塊,用于緩存數(shù)據(jù)和時(shí)鐘匹配;可編程EEPROM存儲(chǔ)模塊,用于存儲(chǔ)網(wǎng)絡(luò)接口卡的控制模塊,控制網(wǎng)絡(luò)接口卡的控制芯片和外圍I/O電路進(jìn)行數(shù)據(jù)通訊。
6.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述的用戶代理模塊,核心代理模塊及驅(qū)動(dòng)模塊三部分是依據(jù)VIA協(xié)議標(biāo)準(zhǔn)的通信流程由一系列的文件形式實(shí)現(xiàn)的模塊,其中該用戶代理模塊為上層應(yīng)用程序提供應(yīng)用程序接口,并以靜態(tài)庫文件的形式在應(yīng)用程序編譯時(shí)進(jìn)行鏈接,并利用該linux系統(tǒng)提供的ioctl機(jī)制,將相關(guān)參數(shù)傳遞到核心代理模塊;該核心代理模塊為主機(jī)的Linux操作系統(tǒng)的一種內(nèi)核模塊,并注冊(cè)為網(wǎng)卡的字符設(shè)備訪問入口,截獲用戶程序?qū)υ撟址O(shè)備的訪問,分別實(shí)現(xiàn)IOCTL功能的不同命令以提供給該用戶代理模塊進(jìn)行調(diào)用,并與驅(qū)動(dòng)模塊建立聯(lián)系;該驅(qū)動(dòng)模塊為主機(jī)中的Linux操作系統(tǒng)中的一種驅(qū)動(dòng)模塊,使該網(wǎng)絡(luò)接口卡被操作系統(tǒng)正常的識(shí)別和加載,它將網(wǎng)絡(luò)接口卡注冊(cè)于主機(jī)的操作系統(tǒng)的全局網(wǎng)絡(luò)設(shè)備表,并由該操作系統(tǒng)的網(wǎng)絡(luò)子系統(tǒng)分配設(shè)備名,作為網(wǎng)絡(luò)設(shè)備的訪問入口;該驅(qū)動(dòng)模塊對(duì)TCP/IP協(xié)議提供支持,實(shí)現(xiàn)Linux系統(tǒng)核心定義的以太網(wǎng)卡操作接口。
7.一種采用如權(quán)利要求1所述通信系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)通信的方法,其特征在于,由發(fā)送過程和接收過程組成,其中,該發(fā)送過程包括以下步驟①驅(qū)動(dòng)模塊根據(jù)用戶頁表,將發(fā)送方的發(fā)送緩沖區(qū)的虛擬地址轉(zhuǎn)換為DMA物理地址;②該驅(qū)動(dòng)模塊將發(fā)送控制信息,推入VI對(duì)應(yīng)通信隊(duì)列中,訪問網(wǎng)絡(luò)接口卡的門鈴寄存器;③網(wǎng)絡(luò)接口卡根據(jù)門鈴查詢對(duì)應(yīng)VI的發(fā)送隊(duì)列,獲取相應(yīng)的發(fā)送信息;④網(wǎng)絡(luò)接口卡啟動(dòng)DMA,將消息數(shù)據(jù)字節(jié)從發(fā)送方緩沖區(qū)發(fā)送到由多個(gè)網(wǎng)絡(luò)接口卡、交叉開關(guān)和物理鏈路組成的網(wǎng)絡(luò)中;⑤發(fā)送完畢,網(wǎng)絡(luò)接口卡在發(fā)送信息的相應(yīng)位置設(shè)置完成標(biāo)志;該接收過程包括以下步驟⑥網(wǎng)絡(luò)接口卡根據(jù)VI號(hào)查詢相應(yīng)的接收隊(duì)列,分析數(shù)據(jù)包頭,檢查傳輸?shù)恼_性;⑦網(wǎng)絡(luò)接口卡獲取接收方的目的緩沖區(qū)信息。然后直接將數(shù)據(jù)從網(wǎng)絡(luò)傳輸?shù)浇邮辗降慕邮站彌_區(qū)中,設(shè)完成標(biāo)志;⑧驅(qū)動(dòng)模塊查詢VI的接收隊(duì)列標(biāo)志,判斷數(shù)據(jù)是否到達(dá),否則繼續(xù)等待、查詢,是則將數(shù)據(jù)交由核心代理和用戶代理模塊依次進(jìn)行解析,去除通信附加的內(nèi)容,恢復(fù)成原始數(shù)據(jù),交由上層應(yīng)用使用。
全文摘要
本發(fā)明涉及基于硬件支持的虛擬接口結(jié)構(gòu)用戶層網(wǎng)絡(luò)通信系統(tǒng),屬于用戶層網(wǎng)絡(luò)與虛擬接口結(jié)構(gòu)協(xié)議的應(yīng)用技術(shù)領(lǐng)域,本系統(tǒng)包括安裝在多臺(tái)計(jì)算機(jī)主機(jī)中的網(wǎng)絡(luò)接口卡,該網(wǎng)絡(luò)接口卡通過PCI總線與主機(jī)進(jìn)行交互,以及連接各網(wǎng)絡(luò)接口卡的交叉開關(guān),該網(wǎng)絡(luò)接口卡與交叉開關(guān)相互通過物理鏈路連接成一個(gè)通信網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu);還包括設(shè)置在各臺(tái)主機(jī)中由用戶代理模塊和核心代理模塊構(gòu)成的實(shí)現(xiàn)VIA協(xié)議規(guī)定的功能的通信接口單元和驅(qū)動(dòng)各網(wǎng)絡(luò)接口卡完成具體通訊功能的驅(qū)動(dòng)模塊。本發(fā)明可以解決VIA硬件和軟件系統(tǒng)的優(yōu)化組合與匹配,以及為VIA完善和廣泛應(yīng)用提供基礎(chǔ)的問題。實(shí)現(xiàn)可移植、低延遲、高帶寬、高可靠的通信平臺(tái)。
文檔編號(hào)H04L29/06GK1633130SQ20051000211
公開日2005年6月29日 申請(qǐng)日期2005年1月14日 優(yōu)先權(quán)日2005年1月14日
發(fā)明者唐瑞春, 都志輝, 馬群生, 朱子玉, 楊豐 申請(qǐng)人:清華大學(xué)