機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)的方法可以具體通過(guò)獲取磁盤(pán)10特征來(lái)監(jiān)測(cè)磁盤(pán)是否繁忙,下面結(jié)合圖2示出的本發(fā)明提供的監(jiān)測(cè)虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)方法的流程示意圖,詳細(xì)說(shuō)明本發(fā)明實(shí)施例中監(jiān)測(cè)所述虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)的步驟,可以具體包括:
[0040]步驟S200:獲取塊設(shè)備的最大任務(wù)隊(duì)列長(zhǎng)度以及當(dāng)前任務(wù)隊(duì)列長(zhǎng)度;
[0041]具體地,磁盤(pán)10特征包括很多,例如每個(gè)塊設(shè)備都會(huì)對(duì)應(yīng)有一個(gè)scsi_device結(jié)構(gòu),本實(shí)施例通過(guò)獲取該scsi_device結(jié)構(gòu)中的最大任務(wù)隊(duì)列長(zhǎng)度(可以是scsi_device結(jié)構(gòu)中的queue_depth字段),以及當(dāng)前任務(wù)隊(duì)列長(zhǎng)度(可以是scsi_device結(jié)構(gòu)中的device_busy 字段)。
[0042]步驟S202:比較所述最大任務(wù)隊(duì)列長(zhǎng)度與所述當(dāng)前任務(wù)隊(duì)列長(zhǎng)度;
[0043]步驟S204:當(dāng)所述當(dāng)前任務(wù)隊(duì)列長(zhǎng)度達(dá)到預(yù)設(shè)倍數(shù)的最大任務(wù)隊(duì)列長(zhǎng)度時(shí),則監(jiān)測(cè)到虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)為繁忙狀態(tài);
[0044]步驟S206:當(dāng)所述當(dāng)前任務(wù)隊(duì)列長(zhǎng)度沒(méi)有達(dá)到預(yù)設(shè)倍數(shù)的最大任務(wù)隊(duì)列長(zhǎng)度時(shí),則監(jiān)測(cè)到虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)為不繁忙狀態(tài)。
[0045]具體地,該預(yù)設(shè)倍數(shù)可以根據(jù)實(shí)際使用情況自定義設(shè)置,包括但不限于0.7倍、0.8倍、0.9倍、或1倍等等;例如,該預(yù)設(shè)倍數(shù)設(shè)為0.8倍,那么當(dāng)比較出當(dāng)前任務(wù)隊(duì)列長(zhǎng)度為0.9倍的最大任務(wù)隊(duì)列長(zhǎng)度,即判斷出當(dāng)前任務(wù)隊(duì)列長(zhǎng)度達(dá)到了該預(yù)設(shè)倍數(shù)的最大任務(wù)隊(duì)列長(zhǎng)度,從而監(jiān)測(cè)出了虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)為繁忙狀態(tài);當(dāng)比較出當(dāng)前任務(wù)隊(duì)列長(zhǎng)度為0.7倍的最大任務(wù)隊(duì)列長(zhǎng)度時(shí),即判斷出當(dāng)前任務(wù)隊(duì)列長(zhǎng)度沒(méi)有達(dá)到了該預(yù)設(shè)倍數(shù)的最大任務(wù)隊(duì)列長(zhǎng)度,從而監(jiān)測(cè)出了虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)為不繁忙狀態(tài)。
[0046]再進(jìn)一步地,如圖3示出的本發(fā)明提供的另一實(shí)施例的監(jiān)測(cè)虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)方法的流程示意圖,詳細(xì)說(shuō)明本發(fā)明實(shí)施例中監(jiān)測(cè)所述虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)的步驟,可以具體包括:
[0047]步驟S300:獲取塊設(shè)備的最大任務(wù)隊(duì)列長(zhǎng)度以及當(dāng)前任務(wù)隊(duì)列長(zhǎng)度;并從請(qǐng)求隊(duì)列中獲取請(qǐng)求鏈表;
[0048]具體地,獲取塊設(shè)備的最大任務(wù)隊(duì)列長(zhǎng)度以及當(dāng)前任務(wù)隊(duì)列長(zhǎng)度可以參考上述圖2實(shí)施例中步驟S200的描述,這里不再贅述。除了獲取塊設(shè)備的最大任務(wù)隊(duì)列長(zhǎng)度以及當(dāng)前任務(wù)隊(duì)列長(zhǎng)度外,還可以從請(qǐng)求隊(duì)列中獲取請(qǐng)求鏈表request_list。
[0049]步驟S302:比較所述最大任務(wù)隊(duì)列長(zhǎng)度與所述當(dāng)前任務(wù)隊(duì)列長(zhǎng)度,判斷所述當(dāng)前任務(wù)隊(duì)列長(zhǎng)度是否達(dá)到預(yù)設(shè)倍數(shù)的最大任務(wù)隊(duì)列長(zhǎng)度;
[0050]具體地,比較判斷的步驟可以參考上述圖2實(shí)施例中的步驟S202至步驟S206的描述,當(dāng)判斷出當(dāng)前任務(wù)隊(duì)列長(zhǎng)度達(dá)到預(yù)設(shè)倍數(shù)的最大任務(wù)隊(duì)列長(zhǎng)度后,執(zhí)行步驟S304;否則執(zhí)行步驟S310 ;
[0051]步驟S304:根據(jù)所述請(qǐng)求鏈表統(tǒng)計(jì)第三預(yù)設(shè)時(shí)間段內(nèi)的平均隊(duì)列長(zhǎng)度;
[0052]具體地,可以統(tǒng)計(jì)第三預(yù)設(shè)時(shí)間段內(nèi)請(qǐng)求鏈表的count字段的平均值來(lái)得到平均隊(duì)列長(zhǎng)度;本發(fā)明各個(gè)實(shí)施例中的第三預(yù)設(shè)時(shí)間段包括但不限于0.5秒、0.8秒、1秒等,優(yōu)選地,該第三預(yù)設(shè)時(shí)間段可以為0.5秒。
[0053]步驟S306:判斷所述平均隊(duì)列長(zhǎng)度是否大于預(yù)設(shè)擁塞閾值;
[0054]具體地,本發(fā)明實(shí)施例中的預(yù)設(shè)擁塞閾值包括但不限于113,可以根據(jù)實(shí)際使用情況來(lái)進(jìn)行設(shè)置,還可以為128等等。當(dāng)判斷該平均隊(duì)列長(zhǎng)度大于預(yù)設(shè)擁塞閾值時(shí),執(zhí)行步驟S308 ;否則,執(zhí)行步驟S310 ;
[0055]步驟S308:監(jiān)測(cè)到虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)為繁忙狀態(tài);
[0056]步驟S310:監(jiān)測(cè)到虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)為不繁忙狀態(tài)。
[0057]通過(guò)圖3實(shí)施例,為了提高磁盤(pán)10特征獲取的準(zhǔn)確性,在圖2實(shí)施例的基礎(chǔ)上加入了對(duì)磁盤(pán)10調(diào)度隊(duì)列長(zhǎng)度的判斷;由于磁盤(pán)10調(diào)度層會(huì)合并下發(fā)b1,并生成請(qǐng)求request,在達(dá)到一定條件后再下發(fā)請(qǐng)求到驅(qū)動(dòng)層。磁盤(pán)10調(diào)度層緩沖的請(qǐng)求數(shù)是有限制的,最大數(shù)量為128,一般在請(qǐng)求數(shù)大于預(yù)設(shè)擁塞閾值113后,會(huì)將后來(lái)創(chuàng)建請(qǐng)求的進(jìn)程睡目民,并設(shè)置隊(duì)列擁塞。因此,磁盤(pán)10隊(duì)列長(zhǎng)度也可以作為磁盤(pán)10繁忙的判斷標(biāo)準(zhǔn)。
[0058]再進(jìn)一步地,為了根據(jù)虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)來(lái)動(dòng)態(tài)調(diào)整LVM使用的帶寬,需要計(jì)算在底層設(shè)備繁忙時(shí)各個(gè)LVM使用的帶寬,如bps和1ps,為進(jìn)行10限速提供計(jì)算依據(jù)。下面結(jié)合圖4示出的本發(fā)明提供的獲取的LVM使用的帶寬的流程示意圖,詳細(xì)說(shuō)明本發(fā)明實(shí)施例中如何實(shí)時(shí)計(jì)算各個(gè)LVM當(dāng)前使用帶寬,包括:
[0059]步驟S400:判斷塊輸入輸出的下發(fā)速度是否超速;
[0060]具體地,正常的b1進(jìn)入塊層是直接合并后放到10隊(duì)列中,但加入throttle層后,b1下發(fā)就有兩條路徑下發(fā),一種是正常下發(fā)路徑(即本發(fā)明實(shí)施例中的第一下發(fā)路徑),一種是進(jìn)入throttle隊(duì)列(即本發(fā)明實(shí)施例中的第二下發(fā)路徑),經(jīng)過(guò)一段時(shí)間后,再次走塊層合并下發(fā)到10隊(duì)列;當(dāng)判斷到塊輸入輸出的下發(fā)速度沒(méi)有超速時(shí),表明b1只通過(guò)該第一下發(fā)路徑進(jìn)行下發(fā),則執(zhí)行步驟S402 ;當(dāng)判斷到塊輸入輸出的下發(fā)速度出現(xiàn)超速時(shí),表明b1除了通過(guò)第一下發(fā)路徑進(jìn)行下發(fā)外,還通過(guò)第二下發(fā)路徑進(jìn)行下發(fā),則執(zhí)行步驟S404 ;
[0061]步驟S402:統(tǒng)計(jì)在當(dāng)前時(shí)刻之前的第一預(yù)設(shè)時(shí)間段內(nèi)通過(guò)第一下發(fā)路徑累計(jì)下發(fā)的塊輸入輸出個(gè)數(shù)以及數(shù)量;
[0062]步驟S404:統(tǒng)計(jì)在當(dāng)前時(shí)刻之前的第一預(yù)設(shè)時(shí)間段內(nèi)通過(guò)第一下發(fā)路徑以及第二下發(fā)路徑累計(jì)下發(fā)的塊輸入輸出個(gè)數(shù)以及數(shù)量;
[0063]步驟S406:根據(jù)所述統(tǒng)計(jì)的塊輸入輸出個(gè)數(shù)以及數(shù)量計(jì)算得出LVM使用的帶寬。
[0064]具體地,可以計(jì)算出某時(shí)間段t內(nèi)下發(fā)的b1和b1_size總量之差,通過(guò)總量差除以該時(shí)間段t就可以得到LVM使用的10帶寬。該時(shí)間段t包括但不限于0.5秒到2秒坐寸。
[0065]再進(jìn)一步地,本發(fā)明實(shí)施例的提供的虛擬機(jī)磁盤(pán)輸入輸出調(diào)度方法,在獲取在當(dāng)前時(shí)刻之前的第一預(yù)設(shè)時(shí)間段內(nèi)各個(gè)LVM使用的帶寬之后,還可以包括記錄所述第一 LVM使用的帶寬。具體地,在減少該第一 LVM使用的帶寬之后,當(dāng)經(jīng)過(guò)第二預(yù)設(shè)時(shí)間段后監(jiān)測(cè)到虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)仍然為繁忙狀態(tài),則重復(fù)執(zhí)行所述獲取在當(dāng)前時(shí)刻之前的第一預(yù)設(shè)時(shí)間段內(nèi)各個(gè)LVM使用的帶寬的步驟,以繼續(xù)進(jìn)行磁盤(pán)10限速調(diào)整;當(dāng)經(jīng)過(guò)第二預(yù)設(shè)時(shí)間段后監(jiān)測(cè)到虛擬機(jī)磁盤(pán)的輸入輸出服務(wù)狀態(tài)不為繁忙狀態(tài),那么可以根據(jù)記錄的帶寬信息,對(duì)減少的帶寬進(jìn)行回調(diào),下面結(jié)合圖5示出的本發(fā)明提供的另一實(shí)施例的虛擬機(jī)磁盤(pán)輸入輸出調(diào)度方法的流程示意圖,該方法包括:。
[0066]步驟S500:監(jiān)測(cè)虛擬機(jī)磁盤(pán)的10服務(wù)狀態(tài)是否為繁忙狀態(tài);
[0067]具體地,當(dāng)監(jiān)測(cè)結(jié)果為否時(shí),繼續(xù)執(zhí)行步驟S500 ;當(dāng)監(jiān)測(cè)結(jié)果為是時(shí),則執(zhí)行步驟S502 ;具體可參考上述各實(shí)施例中監(jiān)測(cè)虛擬機(jī)磁盤(pán)的10服務(wù)狀態(tài)的方法,這里不再贅述。
[0068]步驟S502:,獲取在當(dāng)前時(shí)刻之前的第一預(yù)設(shè)時(shí)間段內(nèi)各個(gè)LVM使用的帶寬;
[0069]具體地,參考圖4實(shí)施例中計(jì)算各個(gè)LVM當(dāng)前使用帶寬的方法,找出限速對(duì)象(即第一 LVM)以及限速值(即該第一 LVM使用的帶寬)。
[0070]步驟S504:根據(jù)在所述繁忙狀態(tài)下獲取的各個(gè)LVM使用的帶寬,減少第一 LVM使用的帶寬;
[0071]步驟S506:判斷第二預(yù)設(shè)時(shí)間段內(nèi)虛擬機(jī)磁盤(pán)的10服務(wù)狀態(tài)是否為繁忙狀態(tài);
[0072]具體地,當(dāng)判斷結(jié)果為是時(shí),則執(zhí)行步驟S502 ;當(dāng)判斷結(jié)果為否時(shí),則可以執(zhí)行步驟S508,或者執(zhí)行步驟S510 ;具體可以根據(jù)實(shí)際使用情況來(lái)進(jìn)行選擇。
[0073]步驟S508:根據(jù)記錄的所述第一 LVM使用的帶寬,將所述第一 LVM使用的帶寬調(diào)整為最近記錄的所述第一 LVM使用的帶寬;
[0074]具體地,在記錄第一 LVM使用的帶寬時(shí),可以通過(guò)定義一個(gè)數(shù)組和數(shù)組指針,記錄η組限速值(即第一 LVM使用的帶寬)和限速對(duì)象(即對(duì)應(yīng)的第一 LVM),η為自然數(shù),例如可以為8、10等;當(dāng)判斷第二預(yù)設(shè)時(shí)間段內(nèi)虛擬機(jī)磁盤(pán)的10服務(wù)狀態(tài)為不繁忙狀態(tài)時(shí),即需要逐步解除對(duì)LVM的限制時(shí),可以去除當(dāng)前數(shù)組指針進(jìn)行前移,取出相應(yīng)數(shù)組元素,回退到上次的LVM限速(即將該第一 LVM使用的帶寬調(diào)整為最近記錄的該第一 LVM使用的帶寬);
[0075]可理解的是,可以設(shè)置一個(gè)參數(shù)值m,m為自然數(shù),默認(rèn)值為0 ;每當(dāng)數(shù)組指針前移一次,m值加1,直到m值達(dá)到閾值時(shí)(比如5或6等),則表明連續(xù)經(jīng)過(guò)了 5或6個(gè)第二預(yù)設(shè)時(shí)間段,虛擬機(jī)磁盤(pán)的10服務(wù)狀態(tài)仍然為不繁忙狀態(tài),那么可以執(zhí)行步驟S510,徹底解除對(duì)磁盤(pán)10的限速。
[0076]步驟S510:恢復(fù)所述第一 LVM使用的帶寬為減少之前的帶寬。
[0077]具體地,當(dāng)判斷第二預(yù)設(shè)時(shí)間段內(nèi)虛擬機(jī)磁盤(pán)的10服務(wù)狀態(tài)為不繁忙狀態(tài)時(shí),可以直接將該第一 LVM使用的帶寬恢復(fù)為限速前的帶寬,即不管在此之前該第一 LVM使用的帶寬經(jīng)過(guò)了多