摘要:配置管理模塊為用戶提供多種靈活的配置方式,供用戶對磁盤陣列的具體參數(shù)進(jìn)行設(shè)置。單一的配置方式無法適應(yīng)用戶多樣性需求。詳細(xì)介紹了一種可同時(shí)支持多種終端配置的配置管理模塊的功能、設(shè)計(jì)與實(shí)現(xiàn)。
關(guān)鍵詞:磁盤陣列; 配置終端; 配置管理模塊
中圖分類號:TP393文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2008)04-1268-03
磁盤陣列采用條帶化技術(shù)將數(shù)據(jù)分布到多個(gè)硬盤,擴(kuò)充了系統(tǒng)存儲容量;采用多硬盤并行存取的方式優(yōu)化了系統(tǒng)性能;通過引入冗余機(jī)制有效提高了系統(tǒng)可靠性[1,2]。目前磁盤陣列已成為構(gòu)建大型存儲系統(tǒng)的關(guān)鍵基礎(chǔ)設(shè)備。與傳統(tǒng)硬盤內(nèi)置使用方式不同,磁盤陣列獨(dú)立于主機(jī),通過特定的主機(jī)通道(fiber channel、SCSI、Ethernet等)與主機(jī)相連,其存在大量復(fù)雜的參數(shù)需要設(shè)置,如陣列級別、邏輯卷管理、通道管理、磁盤管理、cache策略、機(jī)箱管理等,作為獨(dú)立的存儲設(shè)備磁盤陣列必須向用戶提供特定的管理配置接口,以方便用戶進(jìn)行設(shè)置。
目前較為常用的配置管理手段主要有四種終端方式:a)串口管理。用戶使用超級終端等串口通信工具登錄系統(tǒng),通過字符終端界面對磁盤陣列系統(tǒng)進(jìn)行配置。b)網(wǎng)絡(luò)管理。用戶通過Web、其他網(wǎng)絡(luò)客戶端圖形界面、telnet字符終端界面對系統(tǒng)進(jìn)行配置。c)LCD面板管理。通過LCD面板的按鍵實(shí)現(xiàn)對陣列的快速配置。d)主機(jī)通道帶內(nèi)管理。在主機(jī)端利用客戶端軟件通過主機(jī)通道對系統(tǒng)進(jìn)行配置,此種方式中命令和數(shù)據(jù)占用同一通道。單一的存儲配置管理方式無法適應(yīng)用戶多樣化的需求,本文結(jié)合具體磁盤陣列設(shè)計(jì)實(shí)例,介紹一種可同時(shí)支持多種終端配置的終端配置模塊的具體設(shè)計(jì)與實(shí)現(xiàn)。
1磁盤陣列內(nèi)部軟件結(jié)構(gòu)化模型
本文設(shè)計(jì)的磁盤陣列內(nèi)部軟件結(jié)構(gòu)化模型如圖1所示。該系統(tǒng)運(yùn)行在arm Linux系統(tǒng)下,共包括七個(gè)模塊:a)目標(biāo)器模塊(SI)。它負(fù)責(zé)接收主機(jī)端發(fā)送給磁盤陣列的讀寫及控制命令并進(jìn)行處理,讀寫命令發(fā)送給cache管理模塊。b)cache管理模塊(CM)。實(shí)現(xiàn)高速緩存功能,用于優(yōu)化I/O性能。c)RAID核心模塊(RK)。接收CM下發(fā)送的讀寫請求,并根據(jù)不同的RAID級別發(fā)往I/O調(diào)度模塊。d)I/O調(diào)度模塊(IS)。接收RK層發(fā)送給磁盤的I/O請求,對I/O請求進(jìn)行有效的調(diào)度。e)啟動器模塊(SI)。響應(yīng)來自I/O調(diào)度模塊的請求,完成對實(shí)際物理磁盤的讀寫。f)全局配置模塊(GC)[3]。實(shí)現(xiàn)對整個(gè)RAID 系統(tǒng)的管理功能,包括各業(yè)務(wù)模塊的啟動注冊、運(yùn)行過程中對全局配置信息的更新、與配置管理模塊的通信等。g)配置終端模塊(CT)。負(fù)責(zé)與GC模塊通信,CT為用戶直接提供配置界面,提供多種配置方式。
其中:ST、CM、RK、IS、SI五個(gè)模塊為磁盤陣列核心業(yè)務(wù)模塊,主要負(fù)責(zé)接收主機(jī)端發(fā)送給磁盤陣列的讀寫命令,并對這些讀寫命令進(jìn)行分析;然后根據(jù)相應(yīng)算法進(jìn)行數(shù)據(jù)分布處理和容錯處理;最后按照一定的調(diào)度策略實(shí)現(xiàn)對硬盤的讀寫。GC模塊保存磁盤陣列系統(tǒng)全局配置信息;CT模塊通過網(wǎng)絡(luò)通信機(jī)制從GC模塊獲取最新的全局配置信息,通過適當(dāng)?shù)挠脩艚缑娉尸F(xiàn)給用戶;用戶配置磁盤陣列后CT模塊再將配置命令傳遞給GC模塊,GC模塊對磁盤陣列核心模塊進(jìn)行配置后將結(jié)果反饋給CT模塊,這就是磁盤陣列配置的基本過程。
2設(shè)計(jì)思想
圖2為配置終端模塊(CT)劃分圖。它描述了CT模塊內(nèi)部子模塊的劃分、各子模塊外部的接口以及各子模塊之間的接口。CT模塊可分為GCU 和GUI兩個(gè)大的子模塊,而GCU又分解為九個(gè)子模塊:超級終端傳輸控制子模塊、telnet終端傳輸控制子模塊、LCD液晶傳輸控制子模塊、ANSI字符控制設(shè)置子模塊、字符終端菜單控制及菜單響應(yīng)子模塊、Java agent子模塊、Web agent子模塊、多種配置方式互斥子模塊、全局網(wǎng)絡(luò)通信處理子模塊。
CT模塊提供多種配置方式對磁盤陣列進(jìn)行配置管理,分別是超級終端配置方式、telnet端配置方式、LCD面板控制方式、Java GUI配置方式以及Web管理方式。前三種方式均為字符終端控制界面,共用一套文本菜單界面,合并起來構(gòu)成字符終端界面控制模塊;后兩種方式采用圖形控制界面。超級終端與LCD面板分別使用系統(tǒng)COM1、COM2與GCU模塊通信,telnet客戶端、Java GUI客戶端、Web分別從不同網(wǎng)絡(luò)端口與GCU模塊通信。系統(tǒng)提供上述多種配置方式供用戶選擇,但任一時(shí)刻僅允許一種方式對磁盤陣列系統(tǒng)進(jìn)行配置。無論用戶選擇哪種配置方式,都可以在使用該配置方式一段時(shí)間后,再選擇其他方式進(jìn)行配置。為避免出現(xiàn)配置沖突,系統(tǒng)不允許同時(shí)使用兩種相同或不同的方式對系統(tǒng)進(jìn)行配置,也即任何時(shí)刻,只允許一種方式對系統(tǒng)進(jìn)行配置。基于這個(gè)原理,在全局網(wǎng)絡(luò)通信子模塊之上設(shè)置多種配置方式互斥機(jī)制,用于控制和切換當(dāng)前的配置方式,并處理超時(shí)或連接斷掉的異常事件。
CT模塊各子模塊動態(tài)運(yùn)行順序如下:a)GCU模塊開啟用戶態(tài)服務(wù)器端,等待作為客戶端的GC模塊加載;GC模塊加載后,GC與GCU建立雙向連接,一方面可接收GC模塊傳遞來的最新配置信息,一方面可傳送配置命令給GC模塊; b)GCU全局網(wǎng)絡(luò)通信模塊開啟GCU_MainRecv線程,負(fù)責(zé)接收GC模塊發(fā)送的信息;每次GC處理完命令,若發(fā)現(xiàn)全局配置信息變更,則立即將變更的配置信息發(fā)送給GCU,GCU_MainRecv線程收到后隨即更新本模塊保存的全局配置信息;GCU發(fā)給GC的命令僅包括設(shè)置類命令,查看類命令的響應(yīng)由CT模塊保存的與GC模塊同步更新的全局配置信息提供,即查看命令并不發(fā)往GC模塊;c)開啟字符終端界面控制線程,負(fù)責(zé)系統(tǒng)文本界面的維護(hù)和控制;d)開啟Javaagent線程,負(fù)責(zé)與Java GUI界面通信;e)開啟Web agent線程,該線程通過socket與CGI程序進(jìn)行通信,獲取CGI程序發(fā)送過來的配置命令,并與Web界面交互。
3關(guān)鍵技術(shù)
3.1與GC的通信
在對磁盤陣列進(jìn)行配置時(shí),用戶將以某種配置方式從配置管理終端向陣列發(fā)送配置管理命令。因此CT模塊與GC模塊的命令交互是非常頻繁的。GC模塊工作在內(nèi)核態(tài)模式,而CT模塊工作在用戶態(tài)模式,兩者具有不同的地址空間,必須采用特殊的機(jī)制才能進(jìn)行通信。目前Linux系統(tǒng)中內(nèi)核態(tài)用戶態(tài)通信主要有系統(tǒng)調(diào)用、socket網(wǎng)絡(luò)連接、sysfs等多種方式。為了保證兩者之間有效地雙向通信,此處采用socket通信方式來實(shí)現(xiàn)。此方法可實(shí)現(xiàn)兩者雙向通信,且傳輸效率較高,調(diào)用方式簡單。
因?yàn)閟ocket系統(tǒng)調(diào)用針對操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)、網(wǎng)絡(luò)通信客戶端與服務(wù)器端,以及同步通信和異步通信都有不同的應(yīng)用形式,為了簡化調(diào)用, 筆者對Linux 環(huán)境下各種形式的socket 通信均作了封裝。對配置終端發(fā)送的每條配置管理命令構(gòu)造一個(gè)相應(yīng)的命令結(jié)構(gòu)體,該命令結(jié)構(gòu)體包括命令I(lǐng)D、命令序列號和一個(gè)或多個(gè)命令參數(shù);同樣,也為全局配置端的每條響應(yīng)命令構(gòu)造一個(gè)響應(yīng)結(jié)構(gòu)體,該響應(yīng)結(jié)構(gòu)體由命令I(lǐng)D、命令序列號和響應(yīng)結(jié)果組成。為方便起見,采用聯(lián)合這種數(shù)據(jù)結(jié)構(gòu),讓通信雙方都發(fā)送和接收固定大小的數(shù)據(jù)包,發(fā)送之前,組織封裝好需發(fā)送的結(jié)構(gòu)體,調(diào)用send 函數(shù)即可;收到數(shù)據(jù)包之后,首先識別該數(shù)據(jù)包中的第一項(xiàng)即命令I(lǐng)D,然后將收到的聯(lián)合類型的數(shù)據(jù)轉(zhuǎn)換成該命令I(lǐng)D 對應(yīng)的結(jié)構(gòu)體即達(dá)到命令解析的目的。
3.2互斥機(jī)制
系統(tǒng)中五種配置方式并存,同時(shí)使用不同的配置方式會出現(xiàn)數(shù)據(jù)不一致性,從而導(dǎo)致系統(tǒng)紊亂,所以系統(tǒng)同一時(shí)刻僅允許一種配置方式一個(gè)客戶端進(jìn)行配置,系統(tǒng)中必須設(shè)置相應(yīng)互斥機(jī)制才能保證系統(tǒng)配置時(shí)的一致性。
本系統(tǒng)開啟了三類不同的界面控制線程:a)字符終端界面控制線程;b)Java agent線程;c)Web agent線程。對于同時(shí)運(yùn)行的不同界面控制線程,系統(tǒng)引入了相應(yīng)的控制鎖,每一類界面控制線程進(jìn)入控制之前,必須進(jìn)行加鎖操作,從而避免其他配置方式的進(jìn)入,保證系統(tǒng)配置的數(shù)據(jù)一致性,用戶配置完畢時(shí)要進(jìn)行解鎖操作,釋放控制權(quán),使得用戶可以使用其他配置方式。對于字符終端界面控制線程內(nèi)的三種不同控制方式有超級終端;telnet;LCD面板。本系統(tǒng)采用輪詢方式進(jìn)行配置方式探測,輪詢時(shí)分別查詢相關(guān)串口緩沖區(qū)是否有輸入數(shù)據(jù),相關(guān)網(wǎng)絡(luò)連接是否有用戶接入,從而決定系統(tǒng)進(jìn)入何種配置界面。輪詢方式是輸入/輸出原理中效率最低的一種方式。為了避免對磁盤陣列系統(tǒng)性能的影響,系統(tǒng)每次輪詢完三種配置方式后,休眠一段時(shí)間,避免系統(tǒng)重復(fù)輪詢對CPU時(shí)間的占用。
系統(tǒng)輪詢時(shí)一旦探測到用戶的具體配置方式,即切換到該配置方式。一旦用戶進(jìn)入某種配置方式后,不可能無限期地占用配置資源,必須為不同的配置方式設(shè)置超時(shí)機(jī)制,某種配置方式一旦空閑超過一定時(shí)間后,必須釋放控制權(quán),進(jìn)入系統(tǒng)輪詢模式,從而保證系統(tǒng)的正常運(yùn)行。圖3為字符終端界面控制線程流程圖。
3.3多模塊復(fù)用
本系統(tǒng)共支持五種控制方式。其中:Java GUI配置方式需要在客戶端安裝客戶端軟件,客戶端軟件通過網(wǎng)絡(luò)與Java ag-ent端通信完成配置;系統(tǒng)自帶嵌入式Web服務(wù)器,可以通過Web圖形界面完成對磁盤陣列系統(tǒng)的配置。五種配置方式中前三種配置方式均使用文本界面進(jìn)行控制。采用字符終端界面控制的超級終端及telnet均遵循相關(guān)字符終端標(biāo)準(zhǔn)協(xié)議,如VT-100協(xié)議,字符終端可與磁盤陣列進(jìn)行遠(yuǎn)程交互,用戶可以通過按鍵向磁盤陣列發(fā)出命令,主機(jī)端則通過輸出ANSI字符集給字符終端顯示輸出信息。LCD面板與ANSI終端區(qū)別僅僅在于其顯示窗口的大小以及按鍵的數(shù)目,其核心控制原理與前兩者相同。
為了減少代碼量,便于系統(tǒng)維護(hù),本系統(tǒng)為三種配置方式設(shè)計(jì)了一套可復(fù)用的文本菜單系統(tǒng)。菜單響應(yīng)及控制子模塊負(fù)責(zé)超級終端、telnet以及LCD模塊共用一套菜單系統(tǒng),維護(hù)界面并響應(yīng)鍵盤(字符終端)或按鍵(LCD面板)動作。三種配置方式中界面維護(hù)及響應(yīng)均由CT模塊負(fù)責(zé),不同的配置方式區(qū)別僅僅在于傳輸介質(zhì)不同,前者采用RS-232接口與磁盤陣列進(jìn)行通信,后者通過網(wǎng)絡(luò)連接與磁盤陣列進(jìn)行通信,不同的傳輸介質(zhì)可以設(shè)計(jì)不同的傳輸控制模塊,菜單界面顯示和響應(yīng)時(shí)根據(jù)全局配置方式標(biāo)志分支進(jìn)入不同的傳輸層控制,界面顯示以及按鍵響應(yīng)部分可以為三種配置方式完全復(fù)用。
另外,對于字符終端界面配置方式設(shè)計(jì)了一個(gè)共用的ANSI字符集控制模塊。該模塊將標(biāo)準(zhǔn)ASCII字符串轉(zhuǎn)換為符合VT100標(biāo)準(zhǔn)的具有坐標(biāo)定位、前景色、背景色、高亮、下畫線、閃爍、清除屏幕等屬性的ANSI字符串,并負(fù)責(zé)輸出到串口或網(wǎng)絡(luò)以便顯示給超級終端和telnet客戶端;文本界面的多模塊復(fù)用大大簡化了系統(tǒng)設(shè)計(jì),減少了軟件代碼量,使得系統(tǒng)維護(hù)更加方便,一套系統(tǒng)支持了三種不同的文本配置界面。
3.4多級文本菜單
針對字符終端控制界面,本系統(tǒng)設(shè)計(jì)了一套多級文本菜單系統(tǒng),具體如圖4所示。為了提高系統(tǒng)可復(fù)用性,筆者還封裝了如密碼框、確認(rèn)框、編輯框、狀態(tài)輸出框等其他文本界面控件,便于系統(tǒng)調(diào)用。
文本菜單系統(tǒng)封裝如下,該對象包括了菜單基本信息,如菜單子項(xiàng)、顯示位置、寬度高度、色彩等;另外系統(tǒng)中菜單實(shí)現(xiàn)的是一個(gè)多級菜單系統(tǒng),所以菜單對象中既包括上級菜單選項(xiàng),也包括下級菜單項(xiàng),系統(tǒng)初始化時(shí),按照事先設(shè)計(jì)要求將多個(gè)菜單串接起來,這樣菜單項(xiàng)就可以方便地向下擴(kuò)展或回退。菜單對象封裝中最重要的方法是菜單顯示以及菜單鍵盤響應(yīng),菜單顯示部分將不同的菜單顯示字符信息傳遞給不同的傳輸層,最終在不同的終端顯示。在菜單鍵盤響應(yīng)中系統(tǒng)接收不同傳輸層傳遞過來的鍵盤輸入,根據(jù)不同的命令進(jìn)入不同的處理。
4結(jié)束語
本文詳細(xì)介紹了RAID系統(tǒng)中多終端配置管理模塊的功能與設(shè)計(jì),并探討了該模塊實(shí)現(xiàn)過程中的若干關(guān)鍵技術(shù)。本文所設(shè)計(jì)的存儲系統(tǒng)配置終端模塊,同時(shí)也適用于其他類型的獨(dú)立硬件設(shè)備的配置,具有一定的參考意義。在以后的發(fā)展過程中,該系統(tǒng)可以進(jìn)一步考慮存儲管理標(biāo)準(zhǔn)遵從的問題,如SNIA組織近期頒布的SMI-S[4,5]標(biāo)準(zhǔn)。
參考文獻(xiàn):
[1]CHEN P M, LEE E K, GIBSON G A, et al. RAID: high-performance,reliable secondary storage[J]. ACM Computing Surveys, 1994, 26: 145-188.
[2]PATTERSON D A, GIBSON G A,KATZ R H. A case for redundant arrays of inexpensive disks (RAID)[C]//Proc of ACM SIGMOD International Conference on Management of Data.Chicago, Illinois:[s.n.],1988: 109-116.
[3]賀黎,劉瑞芳. RAID 控制器系統(tǒng)中全局配置模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2006,28(2).
[4]SNIA. SNIA storage management initiative specification ver 1.0.2(FINAL)[EB/OL]. [2006-01]. http://www.snia.org/smi/tech_activities/smi_spec_pr/spec/SMIS_1_0_2_final.pdf.
[5]王恒,舒繼武,溫冬嬋,等.基于海量存儲網(wǎng)絡(luò)系統(tǒng)的管理軟件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 小型微型計(jì)算機(jī)系統(tǒng), 2004, 25(11):1959-1964.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”