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