摘要:采用Intel的IQ80321嵌入式平臺設計實現(xiàn)了一個iSCSIHBA設備,實驗證明該設備不僅能有效地緩解主機CPU的負載,而且能取得較好的性能。
關鍵詞:主機總線適配器;嵌入式Linux;iSCSI;交叉編譯;智能I/O;消息單元
中圖法分類號:TP302文獻標識碼:A
文章編號:1001-3695(2006)09-0182-03
iSCSI[1,2]是由IETF批準的一種基于存儲網絡的新的Internet協(xié)議,iSCSI的原理是將SCSI命令通過IP網絡傳輸,這樣就可以使在網絡上傳送數據更加便利,而且可以實現(xiàn)遠程存儲管理。iSCSI協(xié)議是推動存儲區(qū)域網絡(SAN)技術快速發(fā)展的關鍵技術之一,因為它使數據存儲的傳送更加快捷。由于IP網絡的靈活性,iSCSI可以在局域網(LANs)、廣域網(WANs)或Internet上傳輸數據。
iSCSI技術的實現(xiàn)主要有三種方式:
(1)純軟件方式
服務器采用普通以太網卡來進行網絡連接,通過運行上層軟件來實現(xiàn)iSCSI和TCP/IP協(xié)議棧功能層。
這種方式由于采用標準網卡,無須額外配置適配器,因此硬件成本最低。但是在這種方式中,服務器在完成自身工作的同時,還要兼顧網絡連接,造成主機運行時間加長,系統(tǒng)性能下降。這種方式比較適合于預算較少,并且服務器負擔不是很大的用戶。
(2)智能iSCSI網卡實現(xiàn)方式
在這種方式中,服務器采用特定的智能網卡來連接網絡,TCP/IP協(xié)議棧功能由智能網卡完成,而iSCSI層的功能仍然由主機來完成。這種方式較第一種方式部分提高了服務器的性能。
(3)iSCSIHBA卡實現(xiàn)方式
使用iSCSI存儲適配器來完成服務器中的iSCSI層和TCP/IP協(xié)議棧功能。這種方式使得服務器CPU無須考慮iSCSI以及網絡配置,對服務器而言,iSCSI存儲器適配器是一個HBA(存儲主機主線適配器)設備,與服務器采用何種操作系統(tǒng)無關。該方式性能最好。
雖然采用HBA卡的方式在前期投入可能會比較大,但一旦我們借助開發(fā)板做成產品,就可以對其進行重新制版,從而實現(xiàn)批量生產,這樣可明顯降低成本,獲得較好的性價比。
1硬件結構介紹
如圖1所示,我們所選用的開發(fā)板為Intel的IQ80321[3,4],其內部采用Intel80321的I/O處理器,該處理器具有以下特點:
(1)內部集成IntelXscale核心,支持ARMV5T指令集及擴展指令集V5EDSP。
(2)PCI局部總線規(guī)范2.2及PCI局部總線PCIX附加規(guī)范1.0a兼容PCI/PCIX總線接口。可工作于64bits/66MHz(PCI模式)或64bits/133MHz(PCIX位模式)。
(3)內存控制器支持PC200DDRSDRAM,最大支持1GB64bitsDDRSDRAM或512MB32bitsDDRSDRAM,并具有ECC功能。
(4)兩個獨立的DMA通道,基于描述符工作,支持數據的收集/發(fā)散功能。
(5)應用加速單元以及性能監(jiān)控單元分別提供對于特定應用的硬件加速功能和對于性能監(jiān)控的硬件支持。
因此,Intel80321I/O處理器特別適用于網絡存儲應用,其中包括RAID(獨立磁盤冗余陣列)適配器卡、ROMB(主板集成RAID)和其他存儲應用。它小巧的封裝尺寸、較高的數據吞吐量和內置AAU/XOR,為這些存儲應用提供最優(yōu)化的解決方案。此外,IOP321也是在高度集成的環(huán)境中需要高性能I/O子系統(tǒng)的應用之理想選擇。
2嵌入式Linux操作系統(tǒng)平臺的搭建
為了讓我們的Initiator端代碼能夠在我們的嵌入式平臺上運行,我們首先需要在主機上創(chuàng)建一個基于ARM的交叉編譯開發(fā)環(huán)境[5],用于編譯我們需要裝載在板卡上運行的所有程序,然后還需要在嵌入式平臺上搭建一個嵌入式操作系統(tǒng),由于考慮到成本及Initiator端代碼的移植問題,我們選擇了開源的Linux操作系統(tǒng)。
2.1交叉編譯開發(fā)環(huán)境的創(chuàng)建
通常,程序是在一臺計算機上編譯,然后再分布到將要使用的其他計算機上。當主機系統(tǒng)(運行編譯器的系統(tǒng))和目標系統(tǒng)(產生的程序將在其上運行的系統(tǒng))不兼容時,該過程就叫做交叉編譯。
除了兼容性這個明顯的好處之外,交叉編譯還由于以下兩個原因而非常重要:①當目標系統(tǒng)對其可用的編譯工具沒有本地設置時;②當主機系統(tǒng)比目標系統(tǒng)要快得多,或者具有多得多的可用資源時。
當提到交叉編譯器時,我們不僅僅是指將一種編程語言的代碼轉換成對象代碼的軟件,還指其他必要的開發(fā)工具:
(1)一個匯編器,它是編譯器工具鏈后端的一部分。
(2)一個鏈接器,它是編譯器工具鏈后端的另一部分。
(3)用于處理可執(zhí)行程序和庫的一些基本工具。
在此,我們依次編譯安裝了針對ARM的Binutils,GCC,Glibc,G++等工具,安裝成功后,我們的交叉編譯環(huán)境的目錄下面會生成armlinuxgcc,armlinuxg++,armlinuxas,armlinuxld,armlinuxobjcopy,armlinuxobjdump等可執(zhí)行命令,同時還產生libc,libm,ld等靜態(tài)、共享和動態(tài)庫。
2.2嵌入式Linux內核及根文件系統(tǒng)的制作
搭建好交叉編譯開發(fā)環(huán)境之后,我們就可以用其來編譯生成我們所需的Linux內核。有了內核之后,還必須有根文件系統(tǒng)才能使一個Linux系統(tǒng)正常運行。根文件系統(tǒng)用于存放系統(tǒng)運行期間所需的應用程序、腳本、配置文件等,在這里我們要重點提到BusyBox工具。
BusyBox實現(xiàn)了幾乎所有常用、必需的應用程序(如ls,reboot,fdisk,vi,insmod,cp等),而這些應用程序均以符號鏈接的形式存在。對用戶來說,執(zhí)行命令的方法并沒有改變,命令行調用會作為一個參數傳給BusyBox,即可完成相應的功能。使用BusyBox大大簡化了根文件系統(tǒng)的制作。
根文件系統(tǒng)所需的配置文件和腳本則可以具體參考RedHatLinux,我們僅需提供少數幾個必要的文件即可使系統(tǒng)正常運行。將其制作成一個JFFS2文件系統(tǒng)映像后,一個簡單的根文件系統(tǒng)基本上就做好了。
最后,我們用串口將做好的內核和根文件系統(tǒng)映像依次刷入IQ80321的Flash中,在Redboot下用相應的命令腳本讓其自動加載我們的嵌入式Linux系統(tǒng)。至此,整個嵌入式的操作平臺也就創(chuàng)建成功了。
3嵌入式Linux環(huán)境下的iSCSIHBA的設計
為了將IQ80321做成一個真正的HBA設備,我們將Initiator端代碼用交叉編譯環(huán)境編譯成功后放到根文件系統(tǒng)中,同時還為其編寫了一個設備驅動程序。我們的設計采用了I2O規(guī)范(智能化輸入/輸出規(guī)范)[6]。
3.1I2O規(guī)范簡介
I2O規(guī)范(智能化輸入/輸出規(guī)范)的基本目標是開發(fā)一種設備驅動程序體系結構,這種體系結構既與被控制的專門設備無關,也與具體的主機操作系統(tǒng)無關。這些無關性是通過邏輯上把驅動程序中用于管理設備的部分與驅動程序中與特定操作系統(tǒng)相關的具體實現(xiàn)細節(jié)部分分開而實現(xiàn)的。這樣的驅動程序體系結構使得我們可以在不同操作系統(tǒng)間移植驅動程序中用于管理設備的部分。I2O還能隱藏各種機制之間的通信本質,從而提供處理器獨立性和總線技術獨立性。
I2O模式為創(chuàng)建具有跨多種操作系統(tǒng)、主機平臺的可移植性的設備驅動程序提供了一個理想的環(huán)境。I2O設備驅動程序被分為以下兩個部分:
(1)操作系統(tǒng)服務模塊(OSM),該模塊與主機操作系統(tǒng)接口交互。
(2)硬件設備模塊(HDM),該模塊與驅動程序必須管理的特定設備、媒體或服務器接口交互,如圖2所示。
這兩個模塊通過一個兩層次通信系統(tǒng)進行交互。這兩個層次一個是消息層,為兩個模塊創(chuàng)建通信過程;另一個是傳輸層,定義兩個模塊間怎樣共享消息。與標準通信協(xié)議十分相似的是,消息層駐留在傳輸層之上。
I2O體系結構的通信模式是一個消息傳遞系統(tǒng),這個通信模式與面向連接的通信協(xié)議或OSI層次模式很相似。在這些協(xié)議、模式中,欲交換消息的雙方通過消息層建立連接,并通過這個連接交換數據和控制。
當OSM接收到主機操作系統(tǒng)發(fā)來的請求后,它把該請求翻譯轉換成I2O的消息形式,并把消息送到合適的HDM進行處理。完成了消息處理后,HDM通過I2O消息層發(fā)出消息,從而把處理結果送回操作系統(tǒng)模塊。從主機操作系統(tǒng)的角度來看,OSM就如同其他任何設備驅動程序一樣。
I2O規(guī)范的潛在意義是為產品的快速開發(fā)和構建具有可移植性、高性能和智能化的輸入/輸出系統(tǒng)提供一個框架,也指明了從現(xiàn)有驅動模型向廣泛使用智能輸入/輸出過渡的明確方向。
3.2配置信息的圖形界面設計
為了使用戶更容易地操作HBA,我們還為用戶設計了一個圖形界面。該界面主要是用來配置iSCSITarget端,如用戶希望連接的Target端的IP地址、端口號、名稱、帶內安全認證協(xié)議(CHAP,SRP)等信息,如圖3所示。當用戶將所有的信息填寫完成并確定后,驅動程序會將這些配置信息全部寫到板卡上供其Initiator端代碼調用。
圖3Target端圖形配置界面
4iSCSIHBA的性能分析與比較
下面我們將按上述思路設計成功的HBA卡和Intel公司生產的Pro/1000TIP存儲適配器以及微軟實現(xiàn)的MicrosoftiSCSIInitiator端程序依次連接相應的Target端,同時用著名的硬盤評測工具Iometer對其性能進行了測試,我們所采用的測試環(huán)境如表1所示。
表1測試平臺
主機CPU內存網卡SCSI設備操作系統(tǒng)
主機1AMDXP2000+512MB1000MbpsRedhatLinux9.0/Windows2000
主機2IntelXeon2.0GHz512MB1000Mbps
1.AdaptecAIC7889SCSI卡
2.SeagateST8406LW7200RPM18GBSCSI硬盤四塊
RedhatLinux9.0
Iometer工具設置如下:采用100%順序寫,I/O并發(fā)數為16,傳輸數據塊大小為64KB,
我們將所做的HBA卡插在主機1的PCI插槽上,并讓主機1進入Linux操作系統(tǒng),在成功加載該HBA卡的驅動模塊后,讓其連接我們的主機2(即我們的Target端)的某塊SCSI盤,連接成功后即可對其讀寫性能和CPU占用率進行測試,測試數據如圖4和圖5的系列1所示。
類似地,我們將Intel公司生產的Pro/1000TIP存儲適配器同樣插在主機1的PCI插槽上,并安裝Intel公司提供的Linux操作系統(tǒng)下的驅動后,讓其連接主機2的同一塊盤作測試,其測試數據如圖4和圖5的系列2所示。
最后,我們進入主機的Windows2000操作系統(tǒng),用微軟的MicrosoftiSCSIInitiator軟件連接主機2的同一塊SCSI盤,經Iometer測試后的數據如圖4和圖5的系列3所示。
由圖4比較得知,我們所做的HBA卡與Intel的Pro/1000TIP存儲適配器在讀寫性能方面相當,而采用微軟的MicrosoftiSCSIInitiator軟件時測出的讀寫性能要稍微優(yōu)越一些。之所以這樣有兩方面的原因,一是嵌入式系統(tǒng)由于考慮到功耗其采用的處理器主頻一般不會太高,像我們的80321I/O處理器的主頻只有600MHz,而這在嵌入式處理器中已經算是高頻了;二是我們的Initiator端代碼還不夠優(yōu)化,這是我們今后需要繼續(xù)研究的方向。
從圖5可以看出,采用純軟件方式如MicrosoftiSCSIIni-tiator來進行iSCSI協(xié)議的處理時主機的CPU占用率會達到25%左右,而采用iSCSIHBA卡這種純硬件方式相應的主機CPU占用率僅為16%左右。因此,采用嵌入式I/O處理器的方式來實現(xiàn)iSCSI協(xié)議和TCP/IP協(xié)議棧的處理,可以有效地緩解主機處理器的繁重負擔。
5總結
借助嵌入式平臺采用純硬件的方式來實現(xiàn)iSCSIInitiator的功能,可以將TCP/IP協(xié)議棧及iSCSI協(xié)議棧卸載到嵌入式處理器上,從而將iSCSI協(xié)議的封包、解包及傳輸處理操作全部交由專用的處理器來進行,有效地緩解了主機CPU的負擔,使主機可以更加專注于應用服務,同時也不會成為性能瓶頸。我們后面要做的工作主要是Initiator端代碼的優(yōu)化以及HBA卡在Windows操作系統(tǒng)下驅動的編寫。
參考文獻:
[1]PalekarAA,RussellRD.DesignandImplementationofaSCSITargetforStorageAreaNetwork[EB/OL].http://www.cs.uml.edu/~mbrown/iSCSI/,2001.
[2]JulianS.IETFDraft[EB/OL].http://www.ietf.org/internetdrafts/draftietfipsiscsi20,2003.
[3]IntelCorp.Intel80321I/OProcessorDeveloper’sManual[DB/OL].http://support.intel.com,2002.
[4]IntelCorp.IOP321IOProcessorProductBrief[DB/OL].http://support.intel.com,2001.
[5]KarimYaghmour.BuildingEmbeddedLinuxSystems[M].KarimYaghmour,O’Reilly,2003.
[6]I2OSpecialInterestGroup.IntelligentI/O(I2O)ArchitectureSpecification[S].1997.
作者簡介:
周敬利,女,教授,博導,主要研究方向為計算機網絡存儲、多媒體網絡通信、高性能網絡接口;劉湛,男,碩士研究生,主要研究方向為計算機網絡存儲、嵌入式系統(tǒng)設計;余勝生,男,教授,博導,主要研究方向為高性能網絡接口、網絡存儲、數字信號處理;曾東,博士研究生,主要研究方向為計算機網絡存儲、嵌入式系統(tǒng)設計。