本公開的實(shí)施例涉及存儲(chǔ)系統(tǒng),并且更具體地涉及用于存儲(chǔ)系統(tǒng)的路徑選擇的方法和裝置。
背景技術(shù):
在企業(yè)級(jí)的存儲(chǔ)解決方案中,在串行附接的小型計(jì)算機(jī)系統(tǒng)接口(SAS)域,多路徑技術(shù)已經(jīng)被廣泛使用以提供路徑冗余、容錯(cuò)、以及負(fù)載均衡。如圖1所示,在后端存儲(chǔ)應(yīng)用中的一個(gè)通常的使用場(chǎng)景中,提供多個(gè)磁盤簇(JBOD)(101-104),其中每個(gè)JBOD中的磁盤驅(qū)動(dòng)器(121-128)被經(jīng)由一個(gè)或者多個(gè)擴(kuò)展器(131-138)路由到不同的主機(jī)總線適配器(HBA)端口(111,112),從而具有到服務(wù)器(110)的兩條路徑。多路徑技術(shù)被用來針對(duì)給定磁盤驅(qū)動(dòng)器在兩個(gè)HBA端口之間進(jìn)行路徑切換。
在負(fù)載均衡領(lǐng)域,多路徑發(fā)揮著重要作用,并且對(duì)于整個(gè)系統(tǒng)性能來說非常關(guān)鍵。例如,在圖1中,需要多路徑模塊來均衡一個(gè)磁盤驅(qū)動(dòng)器的兩條路徑之間的工作負(fù)載。其原因詳述如下。
圖1所示的SAS域中的一條鏈路可能具有很大的存儲(chǔ)設(shè)備容量,并導(dǎo)致單個(gè)HBA端口的帶寬飽和。例如,對(duì)于Data DomainTM(DD)產(chǎn)品,能夠在一個(gè)鏈路連接最多7個(gè)磁盤框。每個(gè)磁盤框可以具有15個(gè)磁盤,并且每個(gè)磁盤框可能達(dá)到每秒800MB的輸入輸出(IO)吞吐量。這意味著在最壞的情況下,一個(gè)具有2GB/s帶寬的繁忙的HBA很容易變成整個(gè)系統(tǒng)的瓶頸,即使在同一時(shí)間另一HBA仍然有足夠的帶寬可以使用。
尤其是,當(dāng)固態(tài)磁盤(SSD)磁盤框被引入一條鏈路時(shí),情況將變得更糟。首先,SSD磁盤框產(chǎn)生更多的吞吐量,這將加速帶寬的 飽和。其次,由于SSD和硬盤驅(qū)動(dòng)器(HDD)磁盤介質(zhì)的不同特性,SSD將消耗掉很多帶寬,從而在SAS協(xié)議中沒有有效的擁塞控制策略的情況下,這將導(dǎo)致與該SSD位于同一鏈路的HDD磁盤框的饑餓。
在本公開的實(shí)施例中,提供了方法和裝置,用于提供存儲(chǔ)系統(tǒng)中有效的路徑選擇和負(fù)載均衡。
技術(shù)實(shí)現(xiàn)要素:
本公開的實(shí)施例提出了用于存儲(chǔ)系統(tǒng)中的路徑選擇的方法和裝置。下面給出了對(duì)各實(shí)施例的簡(jiǎn)要概述,以提供對(duì)各種實(shí)施例的一些方面的基本理解。該概述不旨在標(biāo)識(shí)關(guān)鍵元素的要點(diǎn)或描述各種實(shí)施例的范圍。其唯一目的在于以簡(jiǎn)化形式呈現(xiàn)一些概念,作為對(duì)后述更具體描述的前序。
本公開的第一方面提供了一種用于存儲(chǔ)系統(tǒng)的方法,該存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)設(shè)備,并且每個(gè)存儲(chǔ)設(shè)備經(jīng)由多條路徑分別被連接到服務(wù)器的多個(gè)不同HBA端口,該方法包括:監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量,以獲得動(dòng)態(tài)性能統(tǒng)計(jì);基于所述動(dòng)態(tài)性能統(tǒng)計(jì),檢測(cè)與性能相關(guān)的事件;以及基于所述動(dòng)態(tài)性能統(tǒng)計(jì)和所述檢測(cè)的結(jié)果,從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一個(gè)實(shí)施例中,監(jiān)測(cè)該存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量可以包括:監(jiān)測(cè)所述多個(gè)不同HBA端口處的性能度量。在另一實(shí)施例中,多個(gè)不同HBA端口處的性能度量包括吞吐量、延時(shí)和資源使用狀況中的至少一項(xiàng)。在又一實(shí)施例中,監(jiān)測(cè)該存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量還可以包括監(jiān)測(cè)以下中的至少一項(xiàng):所述多個(gè)存儲(chǔ)設(shè)備的本地性能度量,以及多條路徑的本地性能度量。
在一個(gè)實(shí)施例中,與性能相關(guān)的事件可以包括以下中的至少一項(xiàng):所述多個(gè)不同HBA端口中的一個(gè)HBA端口處的性能瓶頸;所述多個(gè)不同HBA端口的性能的失衡;以及所述多個(gè)存儲(chǔ)設(shè)備中至少 一個(gè)存儲(chǔ)設(shè)備的性能低于閾值。
在另一實(shí)施例中,基于所述動(dòng)態(tài)性能統(tǒng)計(jì)和所述檢測(cè)的結(jié)果,從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑可以包括:基于檢測(cè)結(jié)果和所述動(dòng)態(tài)性能統(tǒng)計(jì),將所述多個(gè)存儲(chǔ)設(shè)備劃分成與所述多個(gè)不同HBA端口分別對(duì)應(yīng)的多個(gè)子集,以及將每個(gè)子集的存儲(chǔ)設(shè)備路由到其對(duì)應(yīng)HBA端口。
在又一實(shí)施例中,基于所述動(dòng)態(tài)性能統(tǒng)計(jì)和所述檢測(cè)的結(jié)果,從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑可以包括:在檢測(cè)到所述多個(gè)不同HBA端口中的第一HBA端口處的性能瓶頸或者工作量過大時(shí),針對(duì)所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備進(jìn)行動(dòng)態(tài)路徑選擇,以將經(jīng)由所述第一HBA端口的至少一部分工作量重新路由到所述多個(gè)HBA端口中的另一HBA端口。在一個(gè)實(shí)施例中,針對(duì)所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備進(jìn)行動(dòng)態(tài)路徑選擇,以將經(jīng)由所述第一HBA端口的至少一部分工作量重新路由到所述多個(gè)HBA端口中的另一HBA端口可以包括:計(jì)算需要從所述第一HBA端口卸載的期望工作量;基于所述計(jì)算,從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,并且將所述一組存儲(chǔ)設(shè)備的活動(dòng)路徑切換到經(jīng)由所述第一HBA端口之外的另一HBA端口的路徑。在另一實(shí)施例中,計(jì)算需要從所述第一HBA端口卸載的期望工作量可以包括:至少基于所述第一HBA端口的性能度量和預(yù)定閾值來計(jì)算需要卸載的所述期望工作量。在又一實(shí)施例中,基于所述計(jì)算,從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備可以包括:從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,使得所述一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配。在另一實(shí)施例中,基于所述計(jì)算,從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備包括:從所述多個(gè)存儲(chǔ)設(shè)備中選擇多組存儲(chǔ)設(shè)備,使得所述多組存儲(chǔ)設(shè)備中的每一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配;以及根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備。在進(jìn)一步的實(shí)施例中,根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一 組存儲(chǔ)設(shè)備包括:從所述多組存儲(chǔ)設(shè)備中選擇優(yōu)先級(jí)權(quán)重之和最大的一組存儲(chǔ)設(shè)備。
在一個(gè)實(shí)施例中,該方法可以包括:監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的拓?fù)涓拢徊⑶一跈z測(cè)結(jié)果和所述動(dòng)態(tài)性能統(tǒng)計(jì),從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑可以包括:在監(jiān)測(cè)到拓?fù)涓率录鴽]有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑;以及在檢測(cè)到性能相關(guān)事件時(shí),按照第二路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。在另一實(shí)施例中,第一路徑選擇策略為缺省的靜態(tài)路徑選擇策略,并且/或者,所述第二路徑選擇策略為動(dòng)態(tài)路徑選擇策略。在又一實(shí)施例中,在監(jiān)測(cè)到拓?fù)涓率录鴽]有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑可以包括:在監(jiān)測(cè)到拓?fù)涓率录鴽]有檢測(cè)到性能相關(guān)事件時(shí),驗(yàn)證更新后的拓?fù)涞挠行裕约霸诟潞蟮耐負(fù)溆行r(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在另一實(shí)施例中,基于所述動(dòng)態(tài)性能統(tǒng)計(jì)和所述檢測(cè)的結(jié)果,從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑還可以包括:基于所述檢測(cè)的結(jié)果、所述動(dòng)態(tài)性能統(tǒng)計(jì)以及路徑的優(yōu)先級(jí),從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一個(gè)實(shí)施例中,該方法可以進(jìn)一步包括:根據(jù)所述選擇結(jié)果,對(duì)路徑的狀態(tài)和路徑的優(yōu)先級(jí)中的至少一項(xiàng)進(jìn)行更新。
在另一實(shí)施例中,該方法可以進(jìn)一步包括:迭代地執(zhí)行所述監(jiān)測(cè)、檢測(cè)和選擇,直到達(dá)到期望的性能目標(biāo)。
本公開的第二方面提供了一種用于存儲(chǔ)系統(tǒng)的裝置,該存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)設(shè)備,并且每個(gè)存儲(chǔ)設(shè)備經(jīng)由多條路徑分別被連接到服務(wù)器的多個(gè)不同HBA端口,所述裝置包括:性能監(jiān)測(cè)器,被配 置為監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量,以獲得動(dòng)態(tài)性能統(tǒng)計(jì);事件檢測(cè)器,被配置為基于所述動(dòng)態(tài)性能統(tǒng)計(jì),檢測(cè)與性能相關(guān)的事件;以及路徑選擇器,被配置為基于所述動(dòng)態(tài)性能統(tǒng)計(jì)和所述檢測(cè)的結(jié)果,從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一個(gè)實(shí)施例中,性能監(jiān)測(cè)器可以包括:HBA端口性能監(jiān)測(cè)器,被配置為通過監(jiān)測(cè)所述多個(gè)不同HBA端口處的性能度量來監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量。在另一實(shí)施例中,所述多個(gè)不同HBA端口處的性能度量包括吞吐量、延時(shí)和資源使用狀況中的至少一項(xiàng)。在又一實(shí)施例中,性能監(jiān)測(cè)器還可以包括本地性能監(jiān)測(cè)器,其被配置為監(jiān)測(cè)以下中的至少一項(xiàng):所述多個(gè)存儲(chǔ)設(shè)備的本地性能度量;以及多條路徑的本地性能度量。
在一個(gè)實(shí)施例中,與性能相關(guān)的事件可以包括以下中的至少一項(xiàng):所述多個(gè)不同HBA端口中的一個(gè)HBA端口處的性能瓶頸;所述多個(gè)不同HBA端口的性能的失衡;以及所述多個(gè)存儲(chǔ)設(shè)備中至少一個(gè)存儲(chǔ)設(shè)備的性能低于閾值。
在另一實(shí)施例中,路徑選擇器可以被配置為通過以下方式從所述多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑:基于所述檢測(cè)的結(jié)果和所述動(dòng)態(tài)性能統(tǒng)計(jì),將所述多個(gè)存儲(chǔ)設(shè)備劃分成與所述多個(gè)不同HBA端口分別對(duì)應(yīng)的多個(gè)子集,以及將每個(gè)子集的存儲(chǔ)設(shè)備路由到其對(duì)應(yīng)HBA端口。
在一個(gè)實(shí)施例中,路徑選擇器可以進(jìn)一步包括:負(fù)載均衡器,被配置為在檢測(cè)到所述多個(gè)不同HBA端口中的第一HBA端口處的性能瓶頸或者工作量過大時(shí),將經(jīng)由所述第一HBA端口的至少一部分工作量重新路由到所述多個(gè)HBA端口中的另一HBA端口。在另一實(shí)施例中,負(fù)載均衡器可以進(jìn)一步包括:卸載工作量計(jì)算器,被配置為在檢測(cè)到所述多個(gè)不同HBA端口中的第一HBA端口處的性能瓶頸或者工作量過大時(shí),計(jì)算需要從所述第一HBA端口卸載的期望工作量;存儲(chǔ)設(shè)備選擇器,被配置為基于所述計(jì)算,從所述多個(gè) 存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,以及路徑切換器,被配置為將所述一組存儲(chǔ)設(shè)備的活動(dòng)路徑切換到經(jīng)由所述第一HBA端口之外的另一HBA端口的路徑。在進(jìn)一步的實(shí)施例中,卸載工作量計(jì)算器可以進(jìn)一步被配置為至少基于所述第一HBA端口的性能度量和預(yù)定閾值來計(jì)算需要卸載的所述期望工作量。在另一實(shí)施例中,存儲(chǔ)設(shè)備選擇器可以進(jìn)一步被配置為:基于所述計(jì)算從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,使得所述一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配。在一個(gè)實(shí)施例中,存儲(chǔ)設(shè)備選擇器可以進(jìn)一步被配置為:從所述多個(gè)存儲(chǔ)設(shè)備中選擇多組存儲(chǔ)設(shè)備,使得所述多組存儲(chǔ)設(shè)備中的每一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配;以及根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備。在另一實(shí)施例中,根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備包括:從所述多組存儲(chǔ)設(shè)備中選擇優(yōu)先級(jí)權(quán)重之和最大的一組存儲(chǔ)設(shè)備。
在一個(gè)實(shí)施例中,該裝置還可以包括拓?fù)錂z測(cè)器,被配置為監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的拓?fù)涓拢徊⑶衣窂竭x擇器可以進(jìn)一步包括決策模塊,被配置為在監(jiān)測(cè)到拓?fù)涓率录鴽]有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑,以及在檢測(cè)到性能相關(guān)事件時(shí),按照第二路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。在另一實(shí)施例中,該第一路徑選擇策略可以是缺省的靜態(tài)路徑選擇策略,并且/或者,該第二路徑選擇策略可以是動(dòng)態(tài)路徑選擇策略。在又一實(shí)施例中,該裝置還可以包括拓?fù)潋?yàn)證器,被配置為在監(jiān)測(cè)到拓?fù)涓率录r(shí),驗(yàn)證更新后的拓?fù)涞挠行裕⑶覜Q策模塊可以被配置為被配置為在更新后的拓?fù)溆行Р⑶覜]有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一個(gè)實(shí)施例中,路徑選擇器可以進(jìn)一步被配置為:基于所述檢測(cè)的結(jié)果、所述動(dòng)態(tài)性能統(tǒng)計(jì)以及路徑的優(yōu)先級(jí),從多條路徑中 選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在另一實(shí)施例中,該裝置可以進(jìn)一步包括多路徑模塊,被配置為根據(jù)所述選擇結(jié)果,對(duì)路徑的狀態(tài)和路徑的優(yōu)先級(jí)中的至少一項(xiàng)進(jìn)行更新。
在又一實(shí)施例中,該裝置可以進(jìn)一步包括性能調(diào)整器,被配置為促使所述性能監(jiān)測(cè)器、所述事件檢測(cè)器和所述路徑選擇器迭代地執(zhí)行所述監(jiān)測(cè)、檢測(cè)和選擇操作,直到達(dá)到期望的性能目標(biāo)。
本公開的第三方面提供了一種裝置,該裝置包括至少一個(gè)處理器;以及包括計(jì)算機(jī)程序代碼的至少一個(gè)存儲(chǔ)器,其中所述至少一個(gè)存儲(chǔ)器和所述計(jì)算機(jī)程序代碼被配置為:與所述至少一個(gè)處理器一起,促使所述裝置執(zhí)行根據(jù)本公開的第一方面的方法。
根據(jù)本公開的實(shí)施例的方法或裝置,能夠避免或者及時(shí)消除性能瓶頸,獲得負(fù)載均衡,并使得系統(tǒng)資源被更加有效的利用。
盡管在附圖中通過示例的方式示出了特定的實(shí)施例,然而,應(yīng)當(dāng)理解,本文的具體實(shí)施例的描述不意在將實(shí)施例限制為所公開的具體形式。
附圖說明
從下文的公開內(nèi)容和權(quán)利要求中,本公開的目的、優(yōu)點(diǎn)和其他特征將變得更加明顯。這里僅出于示例的目的,參考附圖來給出優(yōu)選實(shí)施例的非限制性描述,在附圖中:
圖1示出了雙SAS域拓?fù)涞氖疽鈭D;
圖2a-b示出了根據(jù)本公開的實(shí)施例的方法的流程圖;
圖3示出了根據(jù)本公開的實(shí)施例的裝置的示例性結(jié)構(gòu)圖;以及
圖4示出了根據(jù)本公開的實(shí)施例的另一裝置的操作示意圖。
具體實(shí)施方式
在以下描述中,出于說明的目的而闡述許多細(xì)節(jié)。然而,本領(lǐng)域普通技術(shù)人員將認(rèn)識(shí)到可以在不使用這些具體細(xì)節(jié)的情況下實(shí)現(xiàn) 本公開的實(shí)施例。因此,本公開不旨在于受限于所示實(shí)施例、而是將被賦予與本文描述的原理和特征一致的最寬的范圍。
應(yīng)當(dāng)理解,術(shù)語“第一”、“第二”等僅被用來將一個(gè)元素與另一個(gè)元素區(qū)分開來。而實(shí)際上第一元素也能夠被稱為第二元素,反之亦然。另外還應(yīng)當(dāng)理解“包括”,“包含”僅被用來說明所陳述的特征、元素、功能或者部件的存在,然而并不排除存在一個(gè)或者多個(gè)其他的特征、元素、功能或者部件。
如上所述,在存儲(chǔ)系統(tǒng)中需要多路徑技術(shù)來實(shí)現(xiàn)負(fù)載均衡。針對(duì)負(fù)載不均衡和性能瓶頸問題,現(xiàn)有的多路徑方法嘗試提出不同的解決方案,然而由于各種不同的原因,這些現(xiàn)有的解決方案并不能夠很好地工作。這些解決方案包括:
1.靜態(tài)路徑選擇配置
這解決方案允許針對(duì)每個(gè)磁盤手動(dòng)地配置活動(dòng)路徑。該方法沒有將動(dòng)態(tài)性能改變納入考慮,并且完全依賴于工程師的經(jīng)驗(yàn)來進(jìn)行路徑選擇。
2.基于跳的路徑選擇
該解決方案假定從磁盤到HBA端口的跳數(shù)與磁盤的延時(shí)和性能密切關(guān)聯(lián)。該方法在很多情況下工作良好,然而較小的跳數(shù)并不必然地對(duì)應(yīng)于較高的性能。對(duì)于DD系統(tǒng)的某些特定類型的磁盤框,已經(jīng)發(fā)現(xiàn)性能問題。另外,該方法同樣是靜態(tài)的路徑選擇,因此,缺少靈活性和可擴(kuò)展性。
3.dm-多路徑(dm-multipath)實(shí)施的路徑選擇器
該解決方案由開源設(shè)備映射器多路徑目標(biāo)使用。例如,在Linux3.2中,有3種路徑選擇器:輪詢(round-robin)、隊(duì)列長(zhǎng)度(queue-length)和服務(wù)時(shí)間(service-time)。與前兩種方法不同,這些路徑選擇器(尤其是3種中的后兩種)具有利用路徑度量有效處理動(dòng)態(tài)性能變化的能力。但是仍然具有各自的缺陷。
例如,這些方案僅基于通過跟蹤給定磁盤的一批IO而收集到的本地度量來決定路徑選擇。因此,缺少系統(tǒng)級(jí)的知識(shí),諸如關(guān)于在 給定時(shí)間HBA端口是否嚴(yán)重繁忙的信息。
這類路徑選擇器僅以細(xì)粒度調(diào)整的方式進(jìn)行工作,這需要頻繁地切換路徑。然而,這種頻繁地路徑切換可能導(dǎo)致串行高級(jí)技術(shù)附接(SATA)磁盤性能惡化。因?yàn)榕cSAS盤不同,SATA驅(qū)動(dòng)器初始地并未被設(shè)計(jì)為同時(shí)支持多啟動(dòng)器(initiator)(例如圖1中的多個(gè)HBA111和112)。盡管能夠通過添加接口轉(zhuǎn)換器來模擬雙端口,但是在不同路徑間切換時(shí),其性能并不如其在單端口連接情況下那樣好,因?yàn)槠鋬?nèi)部設(shè)計(jì)并沒有針對(duì)路徑切換進(jìn)行優(yōu)化。
為了解決以上問題中的至少一些問題,本公開的實(shí)施例提出了用于存儲(chǔ)系統(tǒng)中的路徑選擇的方法和裝置。
圖2a中示出了方法200的示例性流程圖。該方法應(yīng)用于的存儲(chǔ)系統(tǒng)包多個(gè)存儲(chǔ)設(shè)備,并且每個(gè)存儲(chǔ)設(shè)備經(jīng)由多條路徑被連接到服務(wù)器的多個(gè)不同HBA端口。例如該存儲(chǔ)系統(tǒng)可以是如圖1所示的結(jié)構(gòu),并且存儲(chǔ)設(shè)備可以是圖1中所示的磁盤(121-128)。但是如本領(lǐng)域技術(shù)人員能夠理解的,該方法也可以應(yīng)用于其它的存儲(chǔ)系統(tǒng)。
如圖2a所示,方法200包括:在塊S201,監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量,以獲得動(dòng)態(tài)性能統(tǒng)計(jì);在塊S202,基于所述動(dòng)態(tài)性能統(tǒng)計(jì),檢測(cè)與性能相關(guān)的事件;在塊S203,基于檢測(cè)結(jié)果和所述動(dòng)態(tài)性能統(tǒng)計(jì),從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
使用該方法,能夠利用系統(tǒng)級(jí)的性能度量來進(jìn)行路徑選擇,以避免或者及時(shí)地檢測(cè)到性能瓶頸并進(jìn)行處理;另外能夠有效地自適應(yīng)于性能的動(dòng)態(tài)改變,使系統(tǒng)資源更有效使用。
在一些實(shí)施例中,在塊S201,能夠通過監(jiān)測(cè)多個(gè)不同端口處的性能度量來監(jiān)測(cè)存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量。該端口可以是,但不限于,HBA端口(例如圖1中的HBA 111,112)。如本領(lǐng)域技術(shù)人員能夠理解的,根據(jù)存儲(chǔ)結(jié)構(gòu)和技術(shù)的不同,并且隨著技術(shù)的發(fā)展,該HBA端口也可以被其他端口所取代,因此,本公開的實(shí)施例并不限于HBA端口。在另一實(shí)施例中,HBA端口處的性能度量可 以包括,但不限于,吞吐量、延時(shí)和資源使用狀況中的至少一項(xiàng)。在又一實(shí)施例中,在塊S201,還可以監(jiān)測(cè)以下中的至少一項(xiàng):所述多個(gè)存儲(chǔ)設(shè)備的本地性能度量;以及多條路徑的本地性能度量。在該實(shí)施例中,能夠同時(shí)利用系統(tǒng)級(jí)的性能度量和特定存儲(chǔ)設(shè)備和/或路徑的本地度量的動(dòng)態(tài)統(tǒng)計(jì)來進(jìn)行路徑選擇。
在一個(gè)實(shí)施例中,在塊S202,根據(jù)動(dòng)態(tài)性能統(tǒng)計(jì)而檢測(cè)的與性能相關(guān)的事件可以包括,但不限于,多個(gè)不同HBA端口中的一個(gè)HBA端口(例如圖1中的HBA 1,111)處的性能瓶頸、和/或多個(gè)不同HBA端口的性能的失衡、和/或多個(gè)存儲(chǔ)設(shè)備中至少一個(gè)存儲(chǔ)設(shè)備的性能低于閾值。這些事件可以觸發(fā)動(dòng)態(tài)路徑選擇。
在一個(gè)實(shí)施例中,基于塊S202中的檢測(cè)結(jié)果以及塊S201中獲得的動(dòng)態(tài)性能統(tǒng)計(jì),在塊S203,可以將多個(gè)存儲(chǔ)設(shè)備劃分成與多個(gè)不同HBA端口分別對(duì)應(yīng)的多個(gè)子集,以及將每個(gè)子集的存儲(chǔ)設(shè)備路由到其對(duì)應(yīng)HBA端口。子集的具體劃分可以根據(jù)檢測(cè)結(jié)果以及塊S201中獲得的動(dòng)態(tài)性能統(tǒng)計(jì)而定。例如,對(duì)于統(tǒng)計(jì)顯示為高負(fù)載的HBA端口,可以使其對(duì)應(yīng)負(fù)載較小的存儲(chǔ)設(shè)備的子集。這使得能夠均衡各個(gè)HBA端口的工作量,避免或者解決負(fù)載的失衡。
在另一實(shí)施例中,在塊S203,如果檢測(cè)到多個(gè)不同HBA端口中的第一HBA端口處的性能瓶頸或者工作量過大時(shí),可以針對(duì)多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備進(jìn)行動(dòng)態(tài)路徑選擇,以將經(jīng)由所述第一HBA端口的至少一部分工作量重新路由到所述多個(gè)HBA端口中的另一HBA端口。如本領(lǐng)域技術(shù)人員能夠理解的,該第一HBA端口可以是多個(gè)不同HBA端口中的任一HBA端口。例如,在檢測(cè)到經(jīng)由圖1中的HBA 1(111)的負(fù)載過高,以致稱為整個(gè)存儲(chǔ)系統(tǒng)的瓶頸時(shí),可以將經(jīng)由該HBA端口的一些存儲(chǔ)設(shè)備重新路由到HBA 2端口(112),即,針對(duì)這些存儲(chǔ)設(shè)備,將經(jīng)由HBA2的路徑選為活動(dòng)路徑。
本公開的實(shí)施例并不限于在塊S203以任何具體的方式來進(jìn)行存儲(chǔ)設(shè)備的重新路由。以下僅作為示例給出一種實(shí)施方式。如圖2b所 示,在該示例中,如果檢測(cè)到第一HBA端口(例如圖1中的HBA 1,111)處的性能瓶頸或者工作量過大,可以在S2031首先計(jì)算需要從該第一HBA端口卸載的期望工作量;然后在S2032,基于該計(jì)算,從多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,并且,在S2033,將所選的一組存儲(chǔ)設(shè)備的活動(dòng)路徑切換到經(jīng)由第一HBA端口之外的另一HBA端口(例如圖1中的HBA 2,112)的路徑。
在一個(gè)實(shí)施例中,在S2031,可以至少基于第一HBA端口的性能度量和預(yù)定閾值來計(jì)算需要卸載的所述期望工作量。例如可以將第一HBA端口的性能度量的當(dāng)前統(tǒng)計(jì)結(jié)果與預(yù)定閾值進(jìn)行比較來獲得超出該預(yù)定閾值的量(即,與預(yù)定閾值的差值),作為需要卸載的期望工作量。在另一實(shí)施例中,也可以將大于差值的量作為需要卸載的期望工作量。
在一個(gè)實(shí)施例中,可以將HBA端口的帶寬認(rèn)為是系統(tǒng)資源的限制。因此,可以將閾值設(shè)定為逼近HBA端口的帶寬的值。如果HBA端口的吞吐量已經(jīng)逼近HBA端口的帶寬,則將造成整個(gè)系統(tǒng)的瓶頸。從這一點(diǎn)來說,期望被卸載的工作量指示有多少工作量應(yīng)當(dāng)從繁忙的HBA端口(例如HBA 1)被重新路由到空閑的HBA端口(例如HBA 2)。該期望工作量與性能統(tǒng)計(jì)和閾值密切相關(guān),或者與HBA端口帶寬、性能統(tǒng)計(jì)和閾值密切相關(guān)。例如,在塊S2031中計(jì)算的期望工作量可以通過以下函數(shù)描述:
E=f(帶寬,閾值,性能) (1)
盡管該示例中我們僅著重于帶寬,并且獲得期望卸載的工作量的值(E)。然而根據(jù)需要,上述公式也能夠被應(yīng)用于其他性能度量,例如每秒IO數(shù)(IOPS)、時(shí)延等。
在一個(gè)實(shí)施例中,基于S2031中的計(jì)算,在S2032,可以從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,使得該一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的期望工作量匹配。例如,可以采用,但不限于僅采用,以下算法來進(jìn)行子集的選擇:利用一個(gè)存儲(chǔ)設(shè)備(例如磁盤驅(qū)動(dòng)器)的當(dāng)前的性能統(tǒng)計(jì),估計(jì)其在較近的未來的吞吐量, 并且使存儲(chǔ)設(shè)備子集中的總吞吐量與在S2031中計(jì)算得到的需要卸載的期望工作量的基本一致。也就是說,通過將該一組存儲(chǔ)設(shè)備理由到其他HBA端口,則期望卸載的工作量能夠被卸載。如本領(lǐng)域技術(shù)人員能夠理解的,在以上操作中所使用的存儲(chǔ)設(shè)備的性能度量并不限于吞吐量,還可以是,例如占用的帶寬、數(shù)據(jù)量等。
在另一實(shí)施例中,在S2032,還可以從多個(gè)存儲(chǔ)設(shè)備中選擇多組存儲(chǔ)設(shè)備,使得該多組存儲(chǔ)設(shè)備中的每一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配;以及根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備。在進(jìn)一步的實(shí)施例中,根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備可以包括:從多組存儲(chǔ)設(shè)備中選擇優(yōu)先級(jí)權(quán)重之和最大的一組存儲(chǔ)設(shè)備。
在一個(gè)示例中,每個(gè)存儲(chǔ)設(shè)備的權(quán)重可以表示配置的優(yōu)先級(jí)。相應(yīng)的,可以將這種選擇定義為經(jīng)典的0-1背包算法問題。形式上,該選擇可以被描述為:
以和x∈{0,1}為條件,
使最大化。
其中pj表示一個(gè)存儲(chǔ)設(shè)備的當(dāng)前性能統(tǒng)計(jì)。wj指示一個(gè)存儲(chǔ)設(shè)備的優(yōu)先級(jí)權(quán)重,其可以是用戶配置的權(quán)重(例如從磁盤到HBA的跳數(shù))、或者是通過其它統(tǒng)計(jì)操作獲得的動(dòng)態(tài)權(quán)重。xj表示0-1變量,其決定了驅(qū)動(dòng)器j是否屬于該子集。例如,取值為1表示屬于該子集,取值為0則表示不屬于該子集。
如本領(lǐng)域技術(shù)人員能夠理解的,從多組中選擇一組存儲(chǔ)設(shè)備也可以根據(jù)其他的預(yù)定準(zhǔn)則進(jìn)行。例如,可以選擇其中具有最少數(shù)目的存儲(chǔ)設(shè)備的一組,或者,選擇其中平均性能最差的一組等。因此,本公開的實(shí)施例并不限于通過任何特定的準(zhǔn)則進(jìn)行選擇。
在一個(gè)實(shí)施例中,方法200還包括:在塊S204,監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的拓?fù)涓拢徊⑶覊KS203可以包括:在監(jiān)測(cè)到拓?fù)涓率录? 沒有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑;以及在檢測(cè)到性能相關(guān)事件時(shí),按照第二路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
利用該實(shí)施例,能夠監(jiān)測(cè)拓?fù)渥兓托阅芙y(tǒng)計(jì),并且根據(jù)不同的事件進(jìn)行相應(yīng)的處理。在一個(gè)實(shí)施例中,第一路徑選擇策略可以是缺省的靜態(tài)路徑選擇策略,并且/或者,所述第二路徑選擇策略為動(dòng)態(tài)路徑選擇策略。例如,對(duì)于拓?fù)涓率录?,可以使用基于跳?shù)的路徑選擇方法或者針對(duì)某些特定的平臺(tái)引入用于SSD鏈路的基于實(shí)驗(yàn)結(jié)果的靜態(tài)映射路徑選擇方法;而對(duì)于與性能相關(guān)的事件時(shí),其可以使用動(dòng)態(tài)路徑選擇器。
在進(jìn)一步的實(shí)施例中,在監(jiān)測(cè)到拓?fù)涓率录鴽]有檢測(cè)到性能相關(guān)事件時(shí),還可以在S204驗(yàn)證更新后的拓?fù)涞挠行裕约霸诟潞蟮耐負(fù)溆行r(shí),可以在塊S203,按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一個(gè)實(shí)施例中,路徑可以具有優(yōu)先級(jí),并且在塊S203中,可以基于檢測(cè)結(jié)果、動(dòng)態(tài)性能統(tǒng)計(jì)、以及路徑的優(yōu)先級(jí)來從多條路徑中選擇用于多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
該路徑優(yōu)先級(jí)可以是預(yù)先配置的,或者是動(dòng)態(tài)更新的。例如,在一個(gè)實(shí)施例中,方法200還可以包括,在塊S205,根據(jù)塊S203中的選擇結(jié)果,更新路徑的狀態(tài)和/或路徑的優(yōu)先級(jí)。更新的結(jié)果可以被用于后續(xù)的路徑選擇。
在另一實(shí)施例中,塊S201-S203中的監(jiān)測(cè)、檢測(cè)和選擇可以迭代進(jìn)行,直到達(dá)到期望的性能目標(biāo)。例如,在S203中進(jìn)行活動(dòng)路徑選擇之后,開始繼續(xù)在S201中監(jiān)測(cè)性能度量,并在S203中調(diào)整選擇結(jié)果。例如,如果S201中監(jiān)測(cè)結(jié)果顯示已經(jīng)實(shí)現(xiàn)了期望的性能目標(biāo)(例如,被路由到繁忙的HBA的吞吐量已經(jīng)低于閾值),則結(jié)束該路徑選擇過程;否則繼續(xù)監(jiān)測(cè)和調(diào)整。
以下參考附圖3描述用于存儲(chǔ)系統(tǒng)中的路徑選擇的裝置300的 結(jié)構(gòu)。裝置300所適用的存儲(chǔ)系統(tǒng)包括多個(gè)存儲(chǔ)設(shè)備(例如圖1中的121-128),并且每個(gè)存儲(chǔ)設(shè)備經(jīng)由多條路徑被連接到服務(wù)器(例如圖1中的110)的多個(gè)不同端口(例如圖1中的HBA端口111和112)。例如該存儲(chǔ)系統(tǒng)可以是(但是并不限于)如圖1所示。裝置300可以執(zhí)行參考圖2所述的方法200,但是不限于執(zhí)行該方法200。同樣該方法200可以由裝置300執(zhí)行,但是不限于由裝置300執(zhí)行。例如方法200的至少一些操作可以由其它的裝置來執(zhí)行。
在一個(gè)實(shí)施例中,該裝置300包括性能監(jiān)測(cè)器301,被配置為監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量,以獲得動(dòng)態(tài)性能統(tǒng)計(jì);事件檢測(cè)器302,被配置為基于所述動(dòng)態(tài)性能統(tǒng)計(jì),檢測(cè)與性能相關(guān)的事件;以及路徑選擇器303,被配置為基于檢測(cè)結(jié)果和所述動(dòng)態(tài)性能統(tǒng)計(jì),從多條路徑中選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一個(gè)實(shí)施例中,單元301-303可以被配置為執(zhí)行參考圖2所述的方法200的步驟S201-S203。因此,參考方法200進(jìn)行的相關(guān)描述在此同樣適用。
在一個(gè)實(shí)施例中,性能監(jiān)測(cè)器301可以包括端口性能監(jiān)測(cè)器3011,被配置為通過監(jiān)測(cè)所述多個(gè)不同HBA端口處的性能度量來監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的系統(tǒng)級(jí)的性能度量。在一個(gè)示例實(shí)施例中,多個(gè)不同HBA端口處的性能度量可以包括,但不限于,吞吐量、延時(shí)和資源使用狀況中的至少一項(xiàng)。
在另一實(shí)施例中,性能監(jiān)測(cè)器301還可以包括本地性能監(jiān)測(cè)器3012,被配置為監(jiān)測(cè)多個(gè)存儲(chǔ)設(shè)備的本地性能度量,和/或多條路徑的本地性能度量。
在一個(gè)實(shí)施例中,事件檢測(cè)器302所檢測(cè)的與性能相關(guān)的事件可以包括:多個(gè)不同HBA端口中的一個(gè)HBA端口處的性能瓶頸、和/或多個(gè)不同HBA端口的性能的失衡、和/或多個(gè)存儲(chǔ)設(shè)備中至少一個(gè)存儲(chǔ)設(shè)備的性能低于閾值。
路徑選擇器303可以以多種方式、至少基于系統(tǒng)級(jí)的動(dòng)態(tài)性能 統(tǒng)計(jì)進(jìn)行存儲(chǔ)設(shè)備的路徑選擇。僅作為示例,路徑選擇器303可以基于檢測(cè)結(jié)果和動(dòng)態(tài)性能統(tǒng)計(jì),將多個(gè)存儲(chǔ)設(shè)備劃分成與多個(gè)不同HBA端口分別對(duì)應(yīng)的多個(gè)子集,以及將每個(gè)子集的存儲(chǔ)設(shè)備路由到其對(duì)應(yīng)HBA端口。
替代的或者附加的,路徑選擇器303可以包括:負(fù)載均衡器3031,被配置為在檢測(cè)到所述多個(gè)不同HBA端口中的第一HBA端口處的性能瓶頸或者工作量過大時(shí),將經(jīng)由所述第一HBA端口的至少一部分工作量重新路由到所述多個(gè)HBA端口中的另一HBA端口。
在一個(gè)實(shí)施例中,負(fù)載均衡器3031可以進(jìn)一步包括卸載工作量計(jì)算器30311,被配置為在檢測(cè)到所述多個(gè)不同HBA端口中的第一HBA端口處的性能瓶頸或者工作量過大時(shí),計(jì)算需要從所述第一HBA端口卸載的期望工作量;存儲(chǔ)設(shè)備選擇器30312,被配置為基于所述計(jì)算,從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,以及路徑切換器30313,被配置為將所述一組存儲(chǔ)設(shè)備的活動(dòng)路徑切換到經(jīng)由所述第一HBA端口之外的另一HBA端口的路徑。
在一個(gè)實(shí)施例中,卸載工作量計(jì)算器30311可以被配置為至少基于所述第一HBA端口的性能度量和預(yù)定閾值來計(jì)算需要卸載的所述期望工作量。例如通過將第一HBA端口的性能度量和預(yù)定閾值進(jìn)行比較來獲得期望工作量。
在另一實(shí)施例中,存儲(chǔ)設(shè)備選擇器30312可以進(jìn)一步被配置為:基于所述計(jì)算從所述多個(gè)存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備,使得所述一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配。在又一實(shí)施例中,存儲(chǔ)設(shè)備選擇器也可以被配置為從所述多個(gè)存儲(chǔ)設(shè)備中選擇多組存儲(chǔ)設(shè)備,使得所述多組存儲(chǔ)設(shè)備中的每一組存儲(chǔ)設(shè)備的當(dāng)前性能度量之和與所計(jì)算的所述期望工作量匹配;以及根據(jù)預(yù)定準(zhǔn)則從所述多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備。如本領(lǐng)域技術(shù)人員能夠理解的,本公開的實(shí)施例不限于根據(jù)任何特定的預(yù)定的準(zhǔn)則從多組存儲(chǔ)設(shè)備中選擇一組存儲(chǔ)設(shè)備。僅作為示例,這可以包括從所述多組存儲(chǔ)設(shè)備中選擇優(yōu)先級(jí)權(quán)重之和最大的一組存儲(chǔ) 設(shè)備。在其它的實(shí)施例中,也可以根據(jù)每組存儲(chǔ)設(shè)備中的數(shù)目、平均性能等進(jìn)行選擇。
在一個(gè)實(shí)施例中,替代地或者附加地,裝置300可以包括拓?fù)浔O(jiān)測(cè)器304,被配置為監(jiān)測(cè)所述存儲(chǔ)系統(tǒng)的拓?fù)涓?;并且路徑選擇器303可以進(jìn)一步包括:決策模塊3032,被配置為在監(jiān)測(cè)到拓?fù)涓率录鴽]有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑,以及在檢測(cè)到性能相關(guān)事件時(shí),按照第二路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。在一個(gè)實(shí)施例中,第一路徑選擇策略可以是缺省的靜態(tài)路徑選擇策略,并且/或者,第二路徑選擇策略可以是動(dòng)態(tài)路徑選擇策略。
在另一實(shí)施例中,裝置還可以包括拓?fù)潋?yàn)證器305,被配置為在監(jiān)測(cè)到拓?fù)涓率录r(shí),驗(yàn)證更新后的拓?fù)涞挠行?,并且決策模塊3032可以被配置為在更新后的拓?fù)溆行А⒉⑶覜]有檢測(cè)到性能相關(guān)事件時(shí),按照第一路徑選擇策略選擇用于所述多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在一些實(shí)施例中,路徑選擇器303可以被配置為還基于檢測(cè)結(jié)果和動(dòng)態(tài)性能統(tǒng)計(jì)之外的其它參數(shù),例如路徑的優(yōu)先級(jí),來從多條路徑中選擇用于多個(gè)存儲(chǔ)設(shè)備中的至少一個(gè)存儲(chǔ)設(shè)備的活動(dòng)路徑。
在另一實(shí)施例中,裝置300還可以進(jìn)一步包括多路徑模塊306,被配置為根據(jù)路徑選擇器303的選擇結(jié)果,更新路徑的狀態(tài)和/或路徑的優(yōu)先級(jí)。
在一個(gè)實(shí)施例中,裝置300還可以進(jìn)一步包括性能調(diào)整器307,被配置為促使性能監(jiān)測(cè)器301、事件檢測(cè)器302和路徑選擇器303迭代地執(zhí)行監(jiān)測(cè)、檢測(cè)和選擇操作,直到達(dá)到期望的性能目標(biāo)。
如本領(lǐng)域技術(shù)人員能夠理解的,裝置300還可以包括圖3中未示出的其它單元;并且在一些實(shí)施例中,圖3中的某些單元可以被省略。并且,在一些實(shí)施例中,由圖3中一個(gè)單元進(jìn)行的操作也可以分不到多個(gè)單元中執(zhí)行;類似的,在另一些實(shí)施例中,在圖3中 由多個(gè)單元進(jìn)行的操作也可以由單個(gè)部件實(shí)現(xiàn)。
在圖4中示出了通過根據(jù)本公開的實(shí)施例的另一裝置400迭代地進(jìn)行路徑選擇的示意圖。裝置400包括性能監(jiān)測(cè)器401、路徑選擇器框架402(其中包括自適應(yīng)的路徑選擇器4021)、拓?fù)浔O(jiān)測(cè)器403、和多路徑核心模塊404。其背后的基本想法是:監(jiān)測(cè)性能度量,不僅包括本地路徑狀態(tài),還包括系統(tǒng)級(jí)的資源使用。利用這些動(dòng)態(tài)統(tǒng)計(jì),可以及時(shí)地檢測(cè)到性能的瓶頸,并且向決策模塊通知。然后路徑選擇器框架402中的決策模塊(4023)可以進(jìn)一步分析性能度量、系統(tǒng)資源使用和系統(tǒng)拓?fù)洹T诖酥?,其將給出路徑選擇建議,用于進(jìn)行路徑選擇(422)以獲得工作量均衡。多路徑核心模塊將最終提供路徑選擇機(jī)制以支持以上策略。
圖4中的裝置400的各個(gè)部件的功能可以被總結(jié)如下:
性能監(jiān)測(cè)器401的功能類似于圖3中的性能監(jiān)測(cè)器301,其可以收集存儲(chǔ)設(shè)備(例如磁盤驅(qū)動(dòng)器)和端口(例如HBA端口)的性能度量,例如可以分別由圖4中的驅(qū)動(dòng)器性能模塊4011和端口性能模塊4012來執(zhí)行該監(jiān)測(cè)。當(dāng)檢測(cè)到系統(tǒng)級(jí)的瓶頸時(shí),其中的性能警告模塊4013可以通過發(fā)送系統(tǒng)級(jí)的性能事件來通知路徑選擇框架402。
如圖4所示,拓?fù)浔O(jiān)測(cè)器403可以包括4個(gè)子部件:設(shè)備熱拔插事件(Uevent)處理單元4031、拓?fù)浍@取單元4032、拓?fù)潋?yàn)證單元4033、和拓?fù)涓峦ㄖ獑卧?034。其可以實(shí)施圖3中的拓?fù)浔O(jiān)測(cè)器304和拓?fù)潋?yàn)證器305的功能。
其中,Uevent處理單元4031被配置為集中于Uevent收集和分析,Uevent是指示與拓?fù)渥兓嘘P(guān)的事件,例如磁盤數(shù)量的改變。當(dāng)拓?fù)涓淖兎€(wěn)定時(shí),Uevent處理單元4031可以調(diào)用拓?fù)潋?yàn)證單元4033。
拓?fù)浍@取單元4032,被配置為維護(hù)拓?fù)湫畔?,用于由其他部件訪問。例如,路徑選擇器框架402可以使用該信息。拓?fù)潋?yàn)證單元4033將檢查拓?fù)涫欠裼行?。拓?fù)涫欠裼行怯筛潞蟮耐負(fù)涫欠穹? 合產(chǎn)品的要求和配置來決定的。例如,如果無效的拓?fù)浯嬖?,則可以認(rèn)為進(jìn)行路徑選擇是無意義的。拓?fù)涓峦ㄖ獑卧?034被配置為將通過發(fā)送拓?fù)涓淖兪录韱拘崖窂竭x擇框架402。
多路徑核心模塊404能夠檢測(cè)路徑狀態(tài)和統(tǒng)計(jì)(4041),例如可以執(zhí)行圖3中的本地性能監(jiān)測(cè)器3012中的至少一部分功能。當(dāng)其檢測(cè)到一條路徑上的本地瓶頸時(shí),將通過發(fā)送本地性能事件來通知路徑選擇框架402。其還可以提供顯示/存儲(chǔ)sysfs接口(4042),以支持路徑選擇框架402改變路徑優(yōu)先級(jí)。
路徑選擇框架402在該示例中主要包括三個(gè)功能部分:事件檢測(cè)4021、信息高速緩存4022、以及決策模塊4023。各部分的具體功能直接如下,并且各部分的功能又可以由子模塊來完成:
事件檢測(cè)4021:被配置為接收事件并對(duì)其分類(420)。其可能接收到多種類型的事件,并且僅將與性能相關(guān)的事件調(diào)度到?jīng)Q策模塊4023中的動(dòng)態(tài)路徑選擇器。拓?fù)涫录甘就負(fù)涓淖?,其可能由配置的靜態(tài)路徑選擇器進(jìn)行處理(424)。
信息高速緩存4022:被配置為維護(hù)與性能和拓?fù)溆嘘P(guān)的信息。不同的信息可以分別由不同的子模塊來維護(hù),如圖4所示。例如驅(qū)動(dòng)器性能模塊411維護(hù)與驅(qū)動(dòng)器性能有關(guān)的信息;端口性能模塊412維護(hù)與HBA端口性能有關(guān)的信息;路徑性能模塊413維護(hù)與路徑性能有關(guān)的信息;拓?fù)淠K414維護(hù)與拓?fù)溆嘘P(guān)的信息。核心決策模塊4023能夠通過調(diào)用信息高速緩存接口來訪問它們。
決策模塊4023可以被配置為執(zhí)行圖3中的決策模塊3032的至少一部分功能。例如,事件檢測(cè)4021單元喚醒決策模塊4023,并且然后核心決策邏輯啟動(dòng)。其可以包括動(dòng)態(tài)路徑選擇器421,其在自適應(yīng)路徑選擇算法中發(fā)揮核心作用。其可以執(zhí)行以上參照?qǐng)D2所述的塊S203的功能或者參照?qǐng)D3所述的路徑選擇單元303的全部或者一部分功能。
另外,如圖4所示,裝置400個(gè)各部分可以通信,以根據(jù)路徑選擇的結(jié)果更新統(tǒng)計(jì),監(jiān)測(cè)性能調(diào)整(423)促使迭代地執(zhí)行事件檢 測(cè)和路徑選擇操作,直到達(dá)到期望的性能目標(biāo)。達(dá)到期望后,可以進(jìn)入等待狀態(tài)(425)。
如本領(lǐng)域技術(shù)人員能夠理解的,圖3或者4所示僅是示例結(jié)構(gòu),本公開的實(shí)施例也可以以不同于圖3或者4所示的其它結(jié)構(gòu)來實(shí)施基于系統(tǒng)級(jí)性能的動(dòng)態(tài)路徑選擇。例如,裝置300、400還可以包括圖3-4中未示出的其它單元;并且在一些實(shí)施例中,圖3-4中的某些單元可以被省略。并且,在一些實(shí)施例中,由圖3-4中的一個(gè)單元進(jìn)行的操作也可以分布到多個(gè)單元中執(zhí)行;類似的,在另一些實(shí)施例中,在圖3-4中由多個(gè)單元進(jìn)行的操作也可以由單個(gè)部件實(shí)現(xiàn)。
在本公開的實(shí)施例中,從多路徑側(cè),針對(duì)負(fù)載均衡問題設(shè)計(jì)了智能的路徑選擇解決方案。其可以由,例如,圖4中的路徑選擇框架和其中的動(dòng)態(tài)路徑選擇器完成。該框架檢測(cè)拓?fù)涓潞托阅芷款i,從而能夠通知路徑選擇器來針對(duì)負(fù)載均衡進(jìn)行路徑選擇。動(dòng)態(tài)路徑選擇器可以利用拓?fù)渲R(shí)、和/或本地性能統(tǒng)計(jì)、和/或系統(tǒng)級(jí)的性能統(tǒng)計(jì)來進(jìn)行路徑選擇。該解決方案還可以被配置為迭代地監(jiān)測(cè)性能并進(jìn)行路徑選擇,以自適應(yīng)的方式獲得性能的調(diào)整。各部件一起工作以提供比現(xiàn)有方法更加智能和靈活的方法。
盡管在一些實(shí)施例中,本公開提出的方法和裝置可以在SAS域得以應(yīng)用,但是本公開的實(shí)施例不限于此,而是能夠并應(yīng)用于其他域,例如FC、ISCSI存儲(chǔ)域等。
本領(lǐng)域技術(shù)人員將容易地認(rèn)識(shí)到,各種上述各種方法中的塊或者步驟可以通過編程的計(jì)算機(jī)來執(zhí)行。在本公開中,一些實(shí)施例還意在涵蓋程序存儲(chǔ)系統(tǒng),例如,數(shù)字?jǐn)?shù)據(jù)存儲(chǔ)介質(zhì),這是機(jī)器或計(jì)算機(jī)可讀的并且編碼機(jī)器可執(zhí)行或計(jì)算機(jī)可執(zhí)行的指令程序,其中,所述指令執(zhí)行上述方法的一些或所有步驟。程序存儲(chǔ)系統(tǒng)可以是,例如,數(shù)字存儲(chǔ)器、諸如磁盤和磁帶的磁存儲(chǔ)介質(zhì)、硬盤驅(qū)動(dòng)器或光學(xué)可讀數(shù)字?jǐn)?shù)據(jù)存儲(chǔ)介質(zhì)。該實(shí)施例還意在涵蓋編程為執(zhí)行所述上述方法的步驟的計(jì)算機(jī)。一些實(shí)施例還意在涵蓋一種裝置,該裝置包括至少一個(gè)處理器;以及至少一個(gè)包括計(jì)算機(jī)程序代碼的存儲(chǔ) 器,其中所述至少一個(gè)存儲(chǔ)器和所述計(jì)算機(jī)程序代碼被配置為:與所述至少一個(gè)處理器一起,促使所述裝置執(zhí)行方法200。
在附圖中示出的裝置的各種元件的功能,可以通過使用軟件、專用硬件以及與適當(dāng)軟件相關(guān)聯(lián)的能夠執(zhí)行軟件的硬件、或者固件、或者其結(jié)合來提供。當(dāng)由處理器提供時(shí),該功能可以由單個(gè)專用處理器、由單個(gè)共享處理器或由多個(gè)單獨(dú)的處理器來提供。此外,術(shù)語“處理器”可以包括但不限于,數(shù)字信號(hào)處理器(DSP)硬件、網(wǎng)絡(luò)處理器、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA),用于存儲(chǔ)軟件的只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)和非易失性存儲(chǔ)裝置。還可以包括其他常規(guī)和/或定制的硬件。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,說明書和附圖僅僅說明本公開的實(shí)施例的原理。因此,應(yīng)當(dāng)理解,本領(lǐng)域的技術(shù)人員將能夠設(shè)計(jì)出各種布置,雖然這里沒有明確地描述或示出,但是該布置體現(xiàn)本公開的實(shí)施例的原理并且被包括在本公開的實(shí)施例的精神和范圍內(nèi)。此外,這里闡述的所有示例主要旨在明確僅用于教學(xué)目的,以幫助讀者理解本公開的實(shí)施例的原理和發(fā)明人貢獻(xiàn)的用于促進(jìn)本領(lǐng)域的概念,并且應(yīng)被解釋為不限于這些具體闡釋的示例和條件。而且,這里闡述本公開的實(shí)施例的原理、方面和實(shí)施例的所有闡述及其具體示例也意在包含其等同物。