專利名稱:海量存儲系統中的資源分配方法
技術領域:
海量存儲系統中的資源分配方法屬于存儲區域網絡領域,尤其涉及其中的數據分布與負載平衡領域。
背景技術:
隨著信息技術的飛速發展,人們要處理的數據量不斷增加;這對存儲系統容量和性能提出了巨大需求,并使得傳統的存儲方式已經無法滿足用戶的需要。存儲區域網絡(Storage AreaNetwork,SAN)是一種專門的存儲網絡,它可以把各種存儲設備連接在一起,組成統一管理的存儲資源,而主機可以通過光纖或IP網絡來訪問這些資源。同時,為了支持存儲網絡中不同規格的磁盤及各種異構的前端主機,虛擬化技術被引入到存儲區域網絡中。虛擬化屏蔽存儲設備的物理細節,將它們虛擬為一個巨大的存儲池提供給前端主機。在這種存儲體系結構中,虛擬化的存儲資源通過網絡為前端主機所共享,物理資源配置可以不斷變化,以滿足用戶對存儲容量或性能的需求。
但是隨著存儲網絡規模的不斷增加,單純的虛擬化并不能解決所有問題。首先,在大規模存儲區域網絡中,存儲設備的帶寬、容量以及前端主機對存儲系統容量、帶寬、延時的服務質量(Quality of Service,QoS)要求不盡相同;如何在差異化的存儲設備中為主機分配資源以達到存儲系統性能的最優化并盡量的滿足前端主機的要求是一個重要問題。其次,當存儲系統容量或者前端主機的訪問模式發生改變時,如不進行存儲資源的重新分配,則無法達到存儲系統的性能最優化。同時,雖然目前的SCSI(Small Computer System Interface,小型計算機系統接口)磁盤的平均無故障時間(MTBF)可到達數十萬小時,但在SAN環境中存在成千上萬塊磁盤,平均不到24小時會有一塊磁盤損壞;如何替換出現問題的磁盤而不丟失數據成為一個重要的問題。
發明內容
本發明的目的是設計一種對異構磁盤的基于容量的評價方法,并根據這一評價結果實現存儲資源的隨機分布,即隨機數據分布。通過本方法,存儲資源從傳統的規律的條帶化分布改為按照容量的隨機分布,使得各個存儲設備的資源利用率基本達到平衡且負載更加均衡;同時,當存儲系統的物理布局發生變化時,該方法可以保證遷移最少的數據以達到系統的新的平衡。
本發明構建在存儲虛擬化之上。虛擬化系統能夠把所有的物理磁盤(Physical Disks,簡稱PD)組織成一個統一的存儲池(Source Container,簡稱SC)。存儲管理員可以根據用戶的需要,隨意地從SC中劃分存儲空間,從而形成眾多的虛擬盤(Virtual Disks,簡稱VD),以供前端服務器使用。虛擬化系統接收前端服務器發來的SCSI指令,把邏輯地址轉化為實際的設備物理地址進行讀寫操作并返回結果。這樣,虛擬化系統能夠實現存儲資源的整合。在實現上,系統將物理磁盤按照一個固定大小的單元——SG(Storage Granularity)劃分成若干個塊,并按照地址順序依次編號;同時,VD也按此大小分為若干個SG,并按照地址順序依次編號。我們在實現中取SG為512KB。分別為PD和VD創建資源使用表與資源映射表。資源使用表記錄了該表對應的PD的每個SG是否被某個VD使用以及具體被映射到哪個VD的哪個SG上。創建資源映射表記錄與之對應的VD的SG映射到的某一PD的具體位置。所以,本發明中的資源分配的目的就是填充資源使用表與資源映射表;為VD的每個SG在PD中找到對應的SG。一個VD的SG可以映射到多個PD中。
磁盤評價是資源分布的基礎,它根據物理磁盤的容量(Capacity,簡稱C)產生評價值,分布到該物理磁盤上的數據量由其容量決定。
基于虛擬化的存儲資源分配就是為VD中的SG分配對應PD中的SG以填充資源使用表與資源映射表。一般而言,在以下三種情況下要進行資源分配創建新的VD,在SC中添加新的PD以及從SC中刪除PD,其基本算法如下。
假設系統中有n塊物理磁盤PD1、PD2……PDn,評價值(即容量)分別為C1、C2……Cn。待分布的數據對象集合S={SG1,SG2...SGm},m為集合S的大小。定義PD1的容量區間為(0,C1),PD2的容量區間為(C1,C1+C2),……,PDn的容量區間為 當創建VD或添加PD時,S為SAN中所有的數據對象;當刪除PD時,S為待刪除PD上的數據對象。對于待分布數據對象集合S中的每一個對象SGi,產生一個隨機數r,當r落在PDj的容量區間時,將SGi分布在PDj中。
具體而言,當存儲系統中加入或移除物理磁盤時,必須重新分配各個VD的存儲資源,將部分存儲遷移到新的物理磁盤中,以保證負載平衡。為了保證這種負載平衡,本發明采用了基于概率的隨機方法來進行資源分配。
本發明的特征在于,依次含有以下幾個步驟步驟(1)在所述系統的虛擬化管理節點之上加載一個資源分配與資源配置模塊以及一個中間層命令處理模塊,其中資源分配與配置模塊含有以下數據結構ax_pd_t記錄某一個物理磁盤PD的屬性,包括容量、帶寬、已用空間、可用空間及資源使用表;該資源使用表對應于莫一個PD,記錄了對應PD的每個存儲管理基本單元SG是否被某個虛擬磁盤VD使用以及被映射到哪個VD的哪個SG上;所述PD和VD均被劃分為大小相等的若干個SG;ax_vd_t記錄某一個虛擬磁盤的VD的屬性,包括容量及資源映射表;該資源映射表對應于某一個VD,記錄了對應VD的每個SG映射到的某一PD的具體位置;axum_SC記錄整個系統中所以物理磁盤PD、虛擬磁盤VD的總大小、總可用空間,并包含一個由系統中所有ax_pd_t組成的鏈表及所有ax_vd_t組成的鏈表;所述資源分配與配置模塊按以下方式實現資源分配設定系統中有n塊物理磁盤,用PD1、PD2……PDn表示,用容量表示的評價值分別為C1、C2……Cn;待分布的數據對象集合S={SG1,SG2...SGm},m為集合S的大小;定義PD1的容量區間為(0,C1),PD2的容量區間為(C1,C1+C2),……,PDn的容量區間為 則在創建VD或添加PD時,S為SAN中所有的數據對象;當刪除PD時,S為待刪除PD上的數據對象;對于待分布數據對象集合S中的每一個對象SGi,產生一個隨機數r,當r落在PDj的容量區間時,將SGi分布在PDj中;創建PDn的流程如下步驟(1.0),為PD分配數據結構ax_pd_t,填充包括容量、可用大小的基本屬性,初始化PD的資源分配表;定義變量P并初始化為0;步驟(1.1),將PD加入到虛擬化管理節點中把所有PD虛擬地組織成一個統一的存儲池SC;步驟(1.2),對SC中存在的VD按以下步驟進行資源重分配步驟(1.2.1),對所有已分配的物理磁盤PDi,i=1,2,...,n-1,定義δi=Ci/S′-Ci/S,其中S=Σi=1nCi]]>為包括PDn在內的所有物理磁盤的總容量,S′=Σi=1n-1Ci,]]>為所有已分配資源的物理磁盤的總容量;步驟(1.2.2),對于所有SGi產生(0,1)區間平均分布的隨機數r,所述SGi∈PDi且所有SGi已分配給VD,i=1,2,...,n-1;步驟(1.2.3),對于該SGi所屬的PDi,若r<δi,則該SGi遷移到PDn的第P個SG中,并修改相應的資源分配表與資源映射表,P加1;否則該SGi保持不變;步驟(1.2.4),重復步驟(1.2.3),直到i=n-1結束;刪除PDn的流程如下
步驟(2.0),對于該PDn上所有已分配的SG的集合,產生 區間平均分布的n-1個隨機數r;步驟(2.1),若隨機數ri位于PDi的容量區間上,則該SG遷移到PDi的第Pi個SG上;否則該SG保持不變;Pi為PDi上按地址順序第一個未被分配給VD的SG的位置,i=1,2,...,n-1;步驟(2.2),搜索PDi使得Pi指向PDi下一個未被分配的SG,并修改相應的資源分配表與資源映射表;步驟(2.3),把PDn從SC中刪除;創建VD的流程如下步驟(3.0),計算SC中剩余空間之和是否大于要創建的VD的容量。如果否,則不能創建該VD;否則轉下一步;步驟(3.1),創建VD的數據結構并添加到SC中;步驟(3.2),若要創建的為VDn其步驟如下步驟(3.2.1),對該VDn上所有SG的集合,產生 區間平均分布的n個隨機數r;步驟(3.2.2),如果ri位于PDi的容量區間上,則該SG分配到PDi的第Pi個SG上;Pi為PDi上按地址順序第一個未被分配給VD的SG的位置,i=1,2,...,n;步驟(3.2.3),搜索PDi使得Pi指向PDi下一個未被分配的SG,并修改相應的資源分配表與資源映射表;中間層命令處理模塊,根據ax_vd_t提供的資源映射表進行地址變換并完成所接受的前端主機的命令;步驟(2),所述方法按以下步驟依次進行資源分配在添加PDn時首先,為該PDn分配并初始化ax_pd_t數據結構及資源使用表并把其加入到全局變量axup_SC中;其次,進行資源重分配,重購資源使用表及資源映射表;最后,喚醒后臺線程,該線程根據重購后的資源使用表與資源映射表進行數據拷貝;在刪除PDn時第一步,刪除PDn時需要將其上VD的數據進行轉移,計算刪除PD后是否有足夠的資源供VD使用。如果否,則該PD不能刪除;
第二步,進行資源重分配,重構資源使用表與資源映射表;第三步,喚醒后臺線程,完成重購后的數據拷貝;第四步,從axup_SC中刪除該PD的ax_pd_t結構,釋放其資源使用表;在刪除VD時首先,計算SC中是否有足夠的空間創建該VD;其次,為VD創建并初始化ax_vd_t數據結構及資源分配表,將其加入axup_SC中;最后,為VD分配資源,并更改資源使用表與資源映射表。
通過實驗表明,該方法在實現磁盤利用率均衡的前提下,將磁盤的平均訪問時間減小了14.8%,具有很好的性能。
為了解決海量異構存儲網絡環境中的資源分配問題,我們提出了SAN環境中存儲虛擬化的基于容量的磁盤評價與數據隨機分布方法。它按照容量對SAN環境中的磁盤進行評價,并以此進行資源分配,從而達到資源利用率及性能的優化;同時,支持SAN中磁盤的添加與刪除。該方法具有以下的特點高度的兼容性及靈活性通過磁盤評價,該方法支持各種異構磁盤,這大大提高了SAN的兼容性與靈活性。
高效的資源管理存儲資源的分配可以在各個存儲節點上并行執行,具有很高的性能。
資源管理的代價小由于采用隨機的數據分布,每次資源分配及重分配時移動的數據量達到最優。
高度可擴展性與可靠性通過資源重分布,實現了SAN環境中存儲設備的添加與刪除,大大提高了SAN的可擴展性與可靠性。
圖1.存儲資源層次圖。
圖2.虛擬化海量存儲資源映射圖。
圖3.系統結構圖。
圖4.虛擬化海量存儲模塊結構圖。
圖5.創建PD流程圖。
圖6.刪除PD的流程圖。
圖7.創建VD的流程圖。
具體實施例方式
本發明的核心是通過專用的虛擬化處理節點來維護一套存儲資源配置信息以集中管理存儲網絡中各種不同的存儲設備資源,并進行資源分配。該虛擬化處理節點為一臺運行Linux操作系統的服務器。同時,它通過SCSI中間層進行命令分析處理對前端主機提供完全透明的存儲服務。具體的實現架構包括以下兩個主要部分1.虛擬化處理節點上維護全部存儲設備(包括物理設備和虛擬設備)的配置信息列表對每個PD,記錄其各種屬性及空間列表,即SG表;創建VD、添加刪除PD時進行資源分配,并對每個VD創建一個結構,記錄各種屬性以及空間映射方式。
2.虛擬化處理節點上實現一個支持虛擬化功能的SCSI軟件目標器STML(SCSI TargetMid-level Layer),它的工作是把前端主機對虛擬磁盤邏輯空間的訪問(即虛擬命令)轉化為對實際物理設備的訪問(即物理命令),并把物理設備的數據處理結果反饋給前端主機。
本發明所需的硬件設備包括前端主機、虛擬化管理節點、I/O節點和具有光纖卡接口的磁盤;網絡包括光纖網絡(即SAN網絡)及以太網絡。其中,SAN網絡由光纖交換機連接包括前端主機、I/O節點和光纖卡接口磁盤,進行數據傳輸;以太網絡由以太交換機連接虛擬化管理節點及I/O節點進行配置管理、資源分配。其中,虛擬化管理節點及I/O節點運行Linux操作系統(2.4.18以上內核),前端主機為任何主流操作系統,可以為Linux、Windows、Solaris及OPEN BSD。
定義以下數據結構ax_pd_t記錄某一個物理磁盤的屬性,包括容量、帶寬、已用空間、可用空間及資源使用表;ax_vd_t記錄某一個虛擬磁盤的屬性,包括容量及地址映射表;axum_SC記錄整個系統中所有物理磁盤、虛擬磁盤的總大小、總可用空間,并包含一個由系統中所有ax_pd_t組成的鏈表及所有ax_vd_t組成的鏈表;PD即系統中的物理磁盤;VD即系統中的虛擬盤;1)加載資源分配源與配置模塊(axup.o)該模塊對存儲區域網絡環境中的資源進行虛擬化融合,為前端用戶提供一個同一的資源視圖并隱藏物理實現細節。同時,根據物理磁盤的容量,完成資源分配,并提供磁盤添加及刪除的接口。該模塊按步驟完成以下功能1.在Linux內核注冊一個字符設備。該字符設備名稱為AXUP,它通過主從設備號與管理員通信以響應各種配置與資源分配請求;2.提供一個全局變量axup_SC記錄系統整體資源配置情況;3.提供Linux”/proc”目錄下的內核信息接口,以便用戶或管理軟件對已有資源配置信息進行查詢;4.通過資源搜索與配置生成完整的資源配置信息結構(物理磁盤,虛擬磁盤的空間組織和使用情況),并獲得各物理設備的規格參數;2)加載中間層命令處理模塊(stml_target.o)該模塊為實際命令的處理模塊。它根據ax_vd_t提供的資源映射表進行地址變換并完成所接受的命令。
1.向前端主機報告存儲區域網絡中可用的虛擬盤。
2.在內核中啟動一個負責處理虛擬命令的線程及為每個磁盤啟動一個處理物理命令的線程。
3.對收到的虛擬命令,經地址映射后拆分為若干個物理命令并執行;執行完畢后合并并返回給前端。
資源分配步驟如下1)添加PD使用命令./pdcreate a b c d;其中a b c d四個參數分別為待添加PD的host channelid lun號碼。該命令完成以下工作1.為PD分配并初始化ax_pd t數據結構及資源使用表,并將其加入axup_SC中;2.進行資源重分配,重構資源使用表與資源映射表;3.喚醒后臺線程background_process_thread完成重構后的數據拷貝;2)刪除PD使用命令./pdremove id;其中id為待刪除物理盤的編號。該命令完成以下工作1.計算刪除PD后是否有足夠的資源供VD使用。如果否,則該PD不能刪除。
2.進行資源重分配,重構資源使用表與資源映射表;3.喚醒后臺線程background_process_thread完成重構后的數據拷貝;4.從axup_SC中刪除該PD的ax_pd_t結構,釋放其資源使用表。
3)創建VD使用命令./vdcreate-n name-s size;其中name為該VD名,size為其大小。該命令完成以下工作1.計算SC中是否有足夠的空間創建該VD;2.為VD創建并初始化ax_vd_t數據結構及資源分配表,將其加入axup_SC中;3.為VD分配資源,并更改資源使用表與資源映射表;
權利要求
1.海量存儲系統中的資源分配方法,其特征在于,依次含有以下幾個步驟步驟(1)在所述系統的虛擬化管理節點之上加載一個資源分配與資源配置模塊以及一個中間層命令處理模塊,其中資源分配與配置模塊含有以下數據結構ax_pd_t記錄某一個物理磁盤PD的屬性,包括容量、帶寬、已用空間、可用空間及資源使用表;該資源使用表對應于莫一個PD,記錄了對應PD的每個存儲管理基本單元SG是否被某個虛擬磁盤VD使用以及被映射到哪個VD的哪個SG上;所述PD和VD均被劃分為大小相等的若干個SG;ax_vd_t記錄某一個虛擬磁盤的VD的屬性,包括容量及資源映射表;該資源映射表對應于某一個VD,記錄了對應VD的每個SG映射到的某一PD的具體位置;axum_SC記錄整個系統中所以物理磁盤PD、虛擬磁盤VD的總大小、總可用空間,并包含一個由系統中所有ax_pd_t組成的鏈表及所有ax_vd_t組成的鏈表;所述資源分配與配置模塊按以下方式實現資源分配設定系統中有n塊物理磁盤,用PD1、PD2……PDn表示,用容量表示的評價值分別為C1、C2……Cn;待分布的數據對象集合S={SG1,SG2…SGm},m為集合S的大小;定義PD1的容量區間為(0,C1),PD2的容量區間為(C1,C1+C2),……,PDn的容量區間為 則在創建VD或添加PD時,S為SAN中所有的數據對象;當刪除PD時,S為待刪除PD上的數據對象;對于待分布數據對象集合S中的每一個對象SGi,產生一個隨機數r,當r落在PDj的容量區間時,將SGi分布在PDj中;創建PDn的流程如下步驟(1.0),為PD分配數據結構ax_pd_t,填充包括容量、可用大小的基本屬性,初始化PD的資源分配表;定義變量P并初始化為0;步驟(1.1),將PD加入到虛擬化管理節點中把所有PD虛擬地組織成一個統一的存儲池SC;步驟(1.2),對SC中存在的VD按以下步驟進行資源重分配步驟(1.2.1),對所有已分配的物理磁盤PDi,i=1,2,…,n-1,定義δi=Ci/S’-Ci/S,其中S=Σi=1nCi]]>為包括PDn在內的所有物理磁盤的總容量,S′=Σi=1n-1Ci,]]>為所有已分配資源的物理磁盤的總容量;步驟(1.2.2),對于所有SGi產生(0,1)區間平均分布的隨機數r,所述SGi∈PDi且所有SGi已分配給VD,i=1,2,…,n-1;步驟(1.2.3),對于該SGi所屬的PDi,若r<δi,則該SGi遷移到PDn的第P個SG中,并修改相應的資源分配表與資源映射表,P加1;否則該SGi保持不變;步驟(1.2.4),重復步驟(1.2.3),直到i=n-1結束;刪除PDn的流程如下步驟(2.0),對于該PDn上所有已分配的SG的集合,產生 區間平均分布的n-1個隨機數r;步驟(2.1),若隨機數ri位于PDi的容量區間上,則該SG遷移到PDi的第Pi個SG上;否則該SG保持不變;Pi為PDi上按地址順序第一個未被分配給VD的SG的位置,i=1,2,…,n-1;步驟(2.2),搜索PDi使得Pi指向PDi下一個未被分配的SG,并修改相應的資源分配表與資源映射表;步驟(2.3),把PDn從SC中刪除;創建VD的流程如下步驟(3.0),計算SC中剩余空間之和是否大于要創建的VD的容量。如果否,則不能創建該VD;否則轉下一步;步驟(3.1),創建VD的數據結構并添加到SC中;步驟(3.2),若要創建的為VDn其步驟如下步驟(3.2.1),對該VDn上所有SG的集合,產生 區間平均分布的n個隨機數r;步驟(3.2.2),如果ri位于PDi的容量區間上,則該SG分配到PDi的第Pi個SG上;Pi為PDi上按地址順序第一個未被分配給VD的SG的位置,i=1,2,…,n;步驟(3.2.3),搜索PDi使得Pi指向PDi下一個未被分配的SG,并修改相應的資源分配表與資源映射表;中間層命令處理模塊,根據ax_vd_t提供的資源映射表進行地址變換并完成所接受的前端主機的命令;步驟(2),所述方法按以下步驟依次進行資源分配在添加PDn時首先,為該PDn分配并初始化ax_pd_t數據結構及資源使用表并把其加入到全局變量axup_SC中;其次,進行資源重分配,重購資源使用表及資源映射表;最后,喚醒后臺線程,該線程根據重購后的資源使用表與資源映射表進行數據拷貝;在刪除PDn時第一步,刪除PDn時需要將其上VD的數據進行轉移,計算刪除PD后是否有足夠的資源供VD使用。如果否,則該PD不能刪除;第二步,進行資源重分配,重構資源使用表與資源映射表;第三步,喚醒后臺線程,完成重購后的數據拷貝;第四步,從axup_SC中刪除該PD的ax_pd_t結構,釋放其資源使用表;在刪除VD時首先,計算SC中是否有足夠的空間創建該VD;其次,為VD創建并初始化ax_vd_t數據結構及資源分配表,將其加入axup_SC中;最后,為VD分配資源,并更改資源使用表與資源映射表。
全文摘要
海量存儲系統中的資源分配方法屬于存儲區域網絡領域,其特征在于按照容量規則對SAN環境中的資源進行評價,并根據該評價值用基于概率的隨機方法就行資源分配,以達到資源利用率及性能的最優化;同時,支持SAN中磁盤的添加與刪除。它具有高度的兼容性及靈活性、高效的資源管理、高度可擴展性與可靠性及資源管理的代價小等優點。
文檔編號G06F12/00GK1955912SQ20061011370
公開日2007年5月2日 申請日期2006年10月13日 優先權日2006年10月13日
發明者舒繼武, 薛巍, 鄭緯民, 劉坤 申請人:清華大學