本發(fā)明屬于計算機存儲技術領域,尤其涉及一種多控存儲中IO管理的方法和裝置。
背景技術:
存儲軟件系統(tǒng)是由多個不同的模塊組成的,所有的模塊整體上是以層次的方式組成一個棧的結構。在具有多個控制器的多控存儲中,每個控制器中都有這樣一個棧式結構,而多控系統(tǒng)中的存儲資源都有一個屬主,即這部分存儲資源是由他的屬主控制器所獨占的,這樣的目的是為了避免多個控制器對同一存儲資源的競爭。但是多個控制器對外又要提供相同的存儲資源,即在一個控制器中看到存儲系統(tǒng)中有多少空間的存儲資源,在另一個控制器中看到的應該是相同的。因為多控存儲有多個控制器,從上層傳給存儲系統(tǒng)的IO可能到達不同的控制器,對某一特定的存儲資源來說,這些控制器中只有一個可以對他進行讀寫,也就是他的屬主控制器,所以要到達某一存儲資源的IO如果是到達了非屬主的控制器,非屬主的控制器必須將IO轉發(fā)給屬主的控制器,由屬主控制器進行讀寫。
技術實現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種多控存儲中IO管理的方法和裝置,能夠將到達存儲的IO轉發(fā)給其屬主控制器,更方便的對讀寫進行控制,提高工作效率,同時提供了插件注冊的功能,使得存儲系統(tǒng)的擴展性得到提高。
本發(fā)明提供的一種多控存儲中IO管理的方法,包括:
接收上層發(fā)來的IO的請求;
根據(jù)所述IO的屬性,判斷所述IO所屬的虛擬卷是否存在,如果否,則結束;
如果是,則判斷所述虛擬卷是否屬于當前的控制器,如果否,則查詢所述虛擬卷所屬的控制器,并轉發(fā)至與所述虛擬卷對應的控制器;
判斷所述虛擬卷是否處于正常狀態(tài),如果是,則將所述IO加入route_IOQ隊列中,調(diào)用所述route_IOQ隊列的線程進行處理。
優(yōu)選的,在上述多控存儲中IO管理的方法中,所述調(diào)用所述route_IOQ隊列的線程進行處理之后,還包括:
將處理完畢的所述IO加入到submmit_IOQ隊列中,向下層下發(fā)。
優(yōu)選的,在上述多控存儲中IO管理的方法中,所述將處理完畢的所述IO加入到submmit_IOQ隊列中,向下層下發(fā)包括:
從所述submmit_IOQ中取出IOE,將所述IOE轉換成下層所能處理的IO單位;
根據(jù)所述IOE的讀寫屬性,調(diào)用下層的讀接口或寫接口,向下層下發(fā)所述IOE中的IO;
調(diào)用IOE的回調(diào)函數(shù),釋放所述IOE的數(shù)據(jù)結構。
優(yōu)選的,在上述多控存儲中IO管理的方法中,所述調(diào)用所述route_IOQ隊列的線程進行處理包括:
從所述route_IOQ中取出IO;
判斷當前的所述IO所屬的控制器是否有注冊的插件,如果有,則從插件鏈表中按照優(yōu)先級從高到低依次選取插件,將所述IO依次交給所述插件處理;
當所述IO被所有的插件處理完畢后,休眠所述route_IOQ,將IO添加到所述submmit_IOQ隊列中。
優(yōu)選的,在上述多控存儲中IO管理的方法中,所述判斷所述虛擬卷是否處于正常狀態(tài)之后還包括:
如果所述虛擬卷處于掛起狀態(tài)或者error狀態(tài),則返回錯誤并結束流程。
本發(fā)明提供的一種多控存儲中IO管理的裝置,包括設置于存儲系統(tǒng)中的多個控制器,以及與多個所述控制器連接的IO管理模塊,其中,所述IO管理模塊包括:
接收單元,用于接收上層發(fā)來的IO;
第一判斷單元,用于根據(jù)所述IO的屬性,判斷所述IO所屬的虛擬卷是否存在,如果否,則結束;
第二判斷單元,用于如果是,則判斷所述虛擬卷是否屬于當前的控制器,如果否,則查詢所述虛擬卷所屬的控制器,并轉發(fā)至與所述虛擬卷對應的控制器;
第三判斷單元,用于判斷所述虛擬卷是否處于正常狀態(tài),如果是,則將所述IO加入route_IOQ隊列中,調(diào)用所述route_IOQ隊列的線程進行處理。
優(yōu)選的,在上述多控存儲中IO管理的裝置中,還包括:
下發(fā)單元,用于將處理完畢的所述IO加入到submmit_IOQ隊列中,向下層下發(fā)。
優(yōu)選的,在上述多控存儲中IO管理的裝置中,所述下發(fā)單元包括:
轉換部件,用于從所述submmit_IOQ中取出IOE,將所述IOE轉換成下層所能處理的IO單位;
下發(fā)部件,用于根據(jù)所述IOE的讀寫屬性,調(diào)用下層的讀接口或寫接口,向下層下發(fā)所述IOE中的IO;
釋放部件,用于調(diào)用IOE的回調(diào)函數(shù),釋放所述IOE的數(shù)據(jù)結構。
優(yōu)選的,在上述多控存儲中IO管理的裝置中,所述第三判斷單元包括:
取出部件,用于從所述route_IOQ中取出IO;
判斷部件,用于判斷當前的所述IO所屬的控制器是否有注冊的插件,如果有,則從插件鏈表中按照優(yōu)先級從高到低依次選取插件,將所述IO依次交給所述插件處理;
休眠部件,用于當所述IO被所有的插件處理完畢后,休眠所述route_IOQ,將IO添加到所述submmit_IOQ隊列中。
優(yōu)選的,在上述多控存儲中IO管理的裝置中,還包括:
返回單元,用于如果所述虛擬卷處于掛起狀態(tài)或者error狀態(tài),則返回錯誤并結束流程。
通過上述描述可知,本發(fā)明提供的多控存儲中IO管理的方法和裝置,由于該方法包括:接收上層發(fā)來的IO的請求;根據(jù)所述IO的屬性,判斷所述IO所屬的虛擬卷是否存在,如果否,則結束;如果是,則判斷所述虛擬卷是否屬于當前的控制器,如果否,則查詢所述虛擬卷所屬的控制器,并轉發(fā)至與所述虛擬卷對應的控制器;判斷所述虛擬卷是否處于正常狀態(tài),如果是,則將所述IO加入route_IOQ隊列中,調(diào)用所述route_IOQ隊列的線程進行處理,因此能夠將到達存儲的IO轉發(fā)給其屬主控制器,更方便的對讀寫進行控制,提高工作效率,同時提供了插件注冊的功能,使得存儲系統(tǒng)的擴展性得到提高。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請實施例提供的第一種多控存儲中IO管理的方法的示意圖;
圖2為本申請實施例提供的第一種多控存儲中IO管理的裝置的示意圖。
具體實施方式
多控存儲是指在一個存儲系統(tǒng)中包含多個相同的控制器,每個控制器是一個單獨的存儲管理單位,多個控制器之間又可以相互通信,當一個控制器由于某種原因失效之后,其他控制器可以接管該控制器中的IO和存儲資源,保證整個存儲不會宕機,達到冗余備份的目的。而每個控制器獨自占有其對應的存儲資源,即一個存儲資源屬于某一個控制器,只能由該控制器對其進行讀寫,只有當該控制器失效,其他控制器接管這一控制器的存儲資源以后才能對這一部分存儲資源進行讀寫。本發(fā)明的核心思想在于提供一種多控存儲中IO管理的方法和裝置,能夠將到達存儲的IO轉發(fā)給其屬主控制器,更方便的對讀寫進行控制,提高工作效率,同時提供了插件注冊的功能,使得存儲系統(tǒng)的擴展性得到提高。
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本申請實施例提供的第一種多控存儲中IO管理的方法如圖1所示,圖1為本申請實施例提供的第一種多控存儲中IO管理的方法的示意圖,該方法包括如下步驟:
S1:接收上層發(fā)來的IO的請求;
具體的,各種高級功能可以以插件的形式注冊到IO管理模塊中,當上層IO到來時,IO管理模塊根據(jù)IO的特性確定是否需要將IO轉發(fā)給其他控制器以及是否需要交由插件處理。
S2:根據(jù)所述IO的屬性,判斷所述IO所屬的虛擬卷是否存在,如果否,則結束;
其中,虛擬卷(VLVM)用來表示一個邏輯卷,同存儲資源中的邏輯卷是一一對應的。邏輯卷是存儲系統(tǒng)中的存儲資源,所有的IO最后都是要對邏輯卷進行讀寫,每一個VLVM都有一個ID,在VLVM中包含一個鏈表,該鏈表鏈接了所有注冊到該虛擬卷上的插件。當所述IO所屬的虛擬卷不存在時,就不能進行相關的處理,結束流程。
S3:如果是,則判斷所述虛擬卷是否屬于當前的控制器,如果否,則查詢所述虛擬卷所屬的控制器,并轉發(fā)至與所述虛擬卷對應的控制器;
在該步驟中,能夠確定出虛擬卷對應的控制器,利用控制器進行相應的操作。
S4:判斷所述虛擬卷是否處于正常狀態(tài),如果是,則將所述IO加入route_IOQ隊列中,調(diào)用所述route_IOQ隊列的線程進行處理。
其中,IOQ就是IO隊列,用來存儲IO,在將IO加入到route_IOQ隊列中后,會喚醒該隊列,調(diào)用該隊列的處理線程進行操作。這種IO路由功能負責接收上層發(fā)來的IO,然后根據(jù)IO所屬的虛擬卷判斷該IO是否屬于該控制器確定是否要進行IO轉發(fā),然后根據(jù)所屬的虛擬卷中注冊的插件,將IO依次發(fā)送到各個插件中執(zhí)行。
通過上述描述可知,本申請實施例提供的上述第一種多控存儲中IO管理的方法,由于包括:接收上層發(fā)來的IO的請求;根據(jù)所述IO的屬性,判斷所述IO所屬的虛擬卷是否存在,如果否,則結束;如果是,則判斷所述虛擬卷是否屬于當前的控制器,如果否,則查詢所述虛擬卷所屬的控制器,并轉發(fā)至與所述虛擬卷對應的控制器;判斷所述虛擬卷是否處于正常狀態(tài),如果是,則將所述IO加入route_IOQ隊列中,調(diào)用所述route_IOQ隊列的線程進行處理,因此能夠將到達存儲的IO轉發(fā)給其屬主控制器,更方便的對讀寫進行控制,提高工作效率,同時提供了插件注冊的功能,使得存儲系統(tǒng)的擴展性得到提高。
本申請實施例提供的第二種多控存儲中IO管理的方法,是在上述第一種多控存儲中IO管理的方法的基礎上,還包括如下技術特征:
所述調(diào)用所述route_IOQ隊列的線程進行處理之后,還包括:
將處理完畢的所述IO加入到submmit_IOQ隊列中,向下層下發(fā)。
需要說明的是,存儲軟件系統(tǒng)中包含有多個模塊,模塊之間可能是在同一層次,也可能在不同層次。具體的,先從上層接收IO,控制IO在本層的流向,然后將本層處理完畢的IO向下層下發(fā)。submmit_IOQ也就是提交IO隊列,用來向IO管理模塊的下層提交在IO管理模塊中處理完畢的IO。在將IO加入到submmit_IOQ隊列中之后,會喚醒該隊列,調(diào)用該隊列的處理線程進行操作。
本申請實施例提供的第三種多控存儲中IO管理的方法,是在上述第二種多控存儲中IO管理的方法的基礎上,還包括如下技術特征:
所述將處理完畢的所述IO加入到submmit_IOQ隊列中,向下層下發(fā)包括:
從所述submmit_IOQ中取出IOE,將所述IOE轉換成下層所能處理的IO單位;
根據(jù)所述IOE的讀寫屬性,調(diào)用下層的讀接口或寫接口,向下層下發(fā)所述IOE中的IO;
調(diào)用IOE的回調(diào)函數(shù),釋放所述IOE的數(shù)據(jù)結構。
需要說明的是,IOE是一個IO的管理單位,用來表示一個IO,上層到來的IO都封裝在這個數(shù)據(jù)結構中,IOE中有表示這個IO所屬的存儲資源以及讀寫標志等屬性,包括本IO所屬的卷、IO數(shù)據(jù)、讀寫標志、所注冊的插件鏈表、插件數(shù)量。
本申請實施例提供的第四種多控存儲中IO管理的方法,是在上述第三種多控存儲中IO管理的方法的基礎上,還包括如下技術特征:
所述調(diào)用所述route_IOQ隊列的線程進行處理包括:
從所述route_IOQ中取出IO;
判斷當前的所述IO所屬的控制器是否有注冊的插件,如果有,則從插件鏈表中按照優(yōu)先級從高到低依次選取插件,將所述IO依次交給所述插件處理;
當所述IO被所有的插件處理完畢后,休眠所述route_IOQ,將IO添加到所述submmit_IOQ隊列中。
需要說明的是,存儲系統(tǒng)中的很多高級特性可以做成插件的形式,當需要使用該功能時,將該插件注冊到虛擬卷中。加入IO管理模塊之后,系統(tǒng)對IO的控制和監(jiān)控就更加方便,不但可以方便的增加IO性能監(jiān)控的插件,而且可以隨時增加或減少高級功能,這些功能根據(jù)特定的環(huán)境可能需要也可能不需要,需要根據(jù)情況實時添加,具體的,這些高級功能可以插件的形式注冊到IO管理模塊中,操作方便。
本申請實施例提供的第五種多控存儲中IO管理的方法,是在上述第一種至第四種多控存儲中IO管理的方法中任一種的基礎上,還包括如下技術特征:
所述判斷所述虛擬卷是否處于正常狀態(tài)之后還包括:
如果所述虛擬卷處于掛起狀態(tài)或者error狀態(tài),則返回錯誤并結束流程。
在這種情況下,就不再對虛擬卷進行IO操作。
本申請實施例提供的第一種多控存儲中IO管理的裝置如圖2所示,圖2為本申請實施例提供的第一種多控存儲中IO管理的裝置的示意圖,該裝置包括設置于存儲系統(tǒng)中的多個控制器,以及與多個所述控制器連接的IO管理模塊,其中,所述IO管理模塊包括:
接收單元201,用于接收上層發(fā)來的IO,具體的,各種高級功能可以以插件的形式注冊到IO管理模塊中,當上層IO到來時,IO管理模塊根據(jù)IO的特性確定是否需要將IO轉發(fā)給其他控制器以及是否需要交由插件處理;
第一判斷單元202,用于根據(jù)所述IO的屬性,判斷所述IO所屬的虛擬卷是否存在,如果否,則結束,其中,虛擬卷(VLVM)用來表示一個邏輯卷,同存儲資源中的邏輯卷是一一對應的。邏輯卷是存儲系統(tǒng)中的存儲資源,所有的IO最后都是要對邏輯卷進行讀寫,每一個VLVM都有一個ID,在VLVM中包含一個鏈表,該鏈表鏈接了所有注冊到該虛擬卷上的插件。當所述IO所屬的虛擬卷不存在時,就不能進行相關的處理,結束流程;
第二判斷單元203,用于如果是,則判斷所述虛擬卷是否屬于當前的控制器,如果否,則查詢所述虛擬卷所屬的控制器,并轉發(fā)至與所述虛擬卷對應的控制器,這就能夠確定出虛擬卷對應的控制器,利用控制器進行相應的操作;
第三判斷單元204,用于判斷所述虛擬卷是否處于正常狀態(tài),如果是,則將所述IO加入route_IOQ隊列中,調(diào)用所述route_IOQ隊列的線程進行處理,其中,IOQ就是IO隊列,用來存儲IO,在將IO加入到route_IOQ隊列中后,會喚醒該隊列,調(diào)用該隊列的處理線程進行操作。這種IO路由功能負責接收上層發(fā)來的IO,然后根據(jù)IO所屬的虛擬卷判斷該IO是否屬于該控制器確定是否要進行IO轉發(fā),然后根據(jù)所屬的虛擬卷中注冊的插件,將IO依次發(fā)送到各個插件中執(zhí)行。
本申請實施例提供的第二種多控存儲中IO管理的裝置,是在上述第一種多控存儲中IO管理的裝置的基礎上,還包括如下技術特征:
下發(fā)單元,用于將處理完畢的所述IO加入到submmit_IOQ隊列中,向下層下發(fā)。
需要說明的是,存儲軟件系統(tǒng)中包含有多個模塊,模塊之間可能是在同一層次,也可能在不同層次。具體的,先從上層接收IO,控制IO在本層的流向,然后將本層處理完畢的IO向下層下發(fā)。submmit_IOQ也就是提交IO隊列,用來向IO管理模塊的下層提交在IO管理模塊中處理完畢的IO。在將IO加入到submmit_IOQ隊列中之后,會喚醒該隊列,調(diào)用該隊列的處理線程進行操作
本申請實施例提供的第三種多控存儲中IO管理的裝置,是在上述第二種多控存儲中IO管理的裝置的基礎上,還包括如下技術特征:
所述下發(fā)單元包括:
轉換部件,用于從所述submmit_IOQ中取出IOE,將所述IOE轉換成下層所能處理的IO單位;
下發(fā)部件,用于根據(jù)所述IOE的讀寫屬性,調(diào)用下層的讀接口或寫接口,向下層下發(fā)所述IOE中的IO;
釋放部件,用于調(diào)用IOE的回調(diào)函數(shù),釋放所述IOE的數(shù)據(jù)結構。
需要說明的是,IOE是一個IO的管理單位,用來表示一個IO,上層到來的IO都封裝在這個數(shù)據(jù)結構中,IOE中有表示這個IO所屬的存儲資源以及讀寫標志等屬性,包括本IO所屬的卷、IO數(shù)據(jù)、讀寫標志、所注冊的插件鏈表、插件數(shù)量。
本申請實施例提供的第四種多控存儲中IO管理的裝置,是在上述第三種多控存儲中IO管理的裝置的基礎上,還包括如下技術特征:
所述第三判斷單元包括:
取出部件,用于從所述route_IOQ中取出IO;
判斷部件,用于判斷當前的所述IO所屬的控制器是否有注冊的插件,如果有,則從插件鏈表中按照優(yōu)先級從高到低依次選取插件,將所述IO依次交給所述插件處理;
休眠部件,用于當所述IO被所有的插件處理完畢后,休眠所述route_IOQ,將IO添加到所述submmit_IOQ隊列中。
需要說明的是,存儲系統(tǒng)中的很多高級特性可以做成插件的形式,當需要使用該功能時,將該插件注冊到虛擬卷中。加入IO管理模塊之后,系統(tǒng)對IO的控制和監(jiān)控就更加方便,不但可以方便的增加IO性能監(jiān)控的插件,而且可以隨時增加或減少高級功能,這些功能根據(jù)特定的環(huán)境可能需要也可能不需要,需要根據(jù)情況實時添加,具體的,這些高級功能可以插件的形式注冊到IO管理模塊中,操作方便。
本申請實施例提供的第五種多控存儲中IO管理的裝置,是在上述第一種至第四種多控存儲中IO管理的裝置中任一種的基礎上,還包括如下技術特征:
返回單元,用于如果所述虛擬卷處于掛起狀態(tài)或者error狀態(tài),則返回錯誤并結束流程。
在這種情況下,就不再對虛擬卷進行IO操作。
對所公開的實施例的上述說明,使本領域專業(yè)技術人員能夠實現(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。