一種基于虛擬磁盤層的io流控制方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種基于虛擬磁盤層的1流控制方法及
目.0
【背景技術(shù)】
[0002]傳統(tǒng)的磁盤驅(qū)動(dòng)建立在通用塊設(shè)備層之下,當(dāng)外部發(fā)送到塊設(shè)備接口的Outstanding 10(未完成的10)超出磁盤硬件處理能力時(shí),緩存到塊設(shè)備隊(duì)列Queue中,隊(duì)列的深度Queue Depth可以設(shè)置,當(dāng)塊設(shè)備隊(duì)列Queue中緩存的1個(gè)數(shù)超出Queue Depth長(zhǎng)度時(shí),阻塞1進(jìn)程,直到因?yàn)橄聦?處理完畢使得隊(duì)列長(zhǎng)度小于Queue D印th,才能重新喚醒1進(jìn)程。
[0003]但是,傳統(tǒng)的磁盤驅(qū)動(dòng)緩存隊(duì)列方法有以下缺陷:第一,當(dāng)緩存的1個(gè)數(shù)超出Queue Depth長(zhǎng)度時(shí),導(dǎo)致執(zhí)行1的進(jìn)程阻塞。在中高端存儲(chǔ)設(shè)備上對(duì)隨機(jī)1PS(Input/Output Operat1ns Per Second,即每秒進(jìn)行讀寫操作的次數(shù))的要求很高,要求達(dá)到10-100萬(wàn)級(jí)別,若發(fā)生進(jìn)程阻塞-喚醒,會(huì)對(duì)1PS處理能力造成極大影響,導(dǎo)致性能不達(dá)標(biāo);第二,單個(gè)緩存隊(duì)列會(huì)造成讀10等待寫10的情況,使得讀10的響應(yīng)時(shí)間增大并且不穩(wěn)定。
【發(fā)明內(nèi)容】
[0004]針對(duì)現(xiàn)有技術(shù)中存在的容易導(dǎo)致執(zhí)行10的進(jìn)程阻塞以及在讀寫并發(fā)情況下讀10的相應(yīng)時(shí)間大且不穩(wěn)定的缺陷,本發(fā)明提供了一種基于虛擬磁盤層的10流控制方法及裝置。
[0005]—方面,本發(fā)明提供的一種基于虛擬磁盤層的10流控制方法,包括:
[0006]建立虛擬磁盤;
[0007]在所述虛擬磁盤中設(shè)置讀10隊(duì)列和寫10隊(duì)列;
[0008]執(zhí)行10讀時(shí),將讀10緩存到讀10隊(duì)列中,執(zhí)行寫10時(shí),將寫10緩存到寫10隊(duì)列中。
[0009]進(jìn)一步地,所述虛擬磁盤,將磁盤的幾何空間劃分為保留區(qū)和數(shù)據(jù)區(qū)。
[0010]進(jìn)一步地,所述保留區(qū)包括:超級(jí)塊區(qū)、位圖bitmap索引區(qū)、壞塊重定向索引區(qū)以及壞塊重定向數(shù)據(jù)區(qū)。
[0011]進(jìn)一步地,所述將讀10緩存到讀10隊(duì)列中,將寫10緩存到寫10隊(duì)列中的步驟之前,還包括:
[0012]針對(duì)每一個(gè)所述隊(duì)列設(shè)定最大正在處理10個(gè)數(shù)的值threshold ;
[0013]判斷所述隊(duì)列的正在處理10個(gè)數(shù)是否大于threshold值,若是,則不執(zhí)行,否則,依次發(fā)送待執(zhí)行的10到所述隊(duì)列中,直到所述隊(duì)列的正在處理10個(gè)數(shù)等于threshold值。
[0014]進(jìn)一步地,所述隊(duì)列接收發(fā)送待執(zhí)行的10時(shí),相應(yīng)的正在處理10個(gè)數(shù)加1,完成10時(shí),相應(yīng)的正在處理10個(gè)數(shù)減I。
[0015]另一方面,本發(fā)明還提供一種基于虛擬磁盤層的1流控制裝置,包括:
[0016]建立模塊,用于建立虛擬磁盤;
[0017]設(shè)置模塊,用于在所述虛擬磁盤中設(shè)置讀1隊(duì)列和寫1隊(duì)列;
[0018]存儲(chǔ)模塊,用于執(zhí)行1讀時(shí),將讀1緩存到讀1隊(duì)列中,執(zhí)行寫1時(shí),將寫1緩存到寫1隊(duì)列中。
[0019]進(jìn)一步地,所述建立模塊具體用于:所述虛擬磁盤,將磁盤的幾何空間劃分為保留區(qū)和數(shù)據(jù)區(qū)。
[0020]進(jìn)一步地,所述建立模塊具體用于:所述保留區(qū)包括:超級(jí)塊區(qū)、位圖bitmap索引區(qū)、壞塊重定向索引區(qū)以及壞塊重定向數(shù)據(jù)區(qū)。
[0021]進(jìn)一步地,所述存儲(chǔ)模塊還用于:
[0022]針對(duì)每一個(gè)所述隊(duì)列設(shè)定最大正在處理1個(gè)數(shù)的值threshold ;
[0023]判斷所述隊(duì)列的正在處理1個(gè)數(shù)是否大于threshold值,若是,則不執(zhí)行,否則,依次發(fā)送待執(zhí)行的1到所述隊(duì)列中,直到所述隊(duì)列的正在處理1個(gè)數(shù)等于threshold值。
[0024]進(jìn)一步地,所述存儲(chǔ)模塊還用于:所述隊(duì)列接收發(fā)送待執(zhí)行的1時(shí),相應(yīng)的正在處理1個(gè)數(shù)加1,完成1時(shí),相應(yīng)的正在處理1個(gè)數(shù)減I。
[0025]本發(fā)明提供的一種基于虛擬磁盤層的1流控制方法及裝置,通過(guò)引入虛擬磁盤,在所述虛擬磁盤中設(shè)置讀1隊(duì)列和寫1隊(duì)列;執(zhí)行讀1時(shí),將讀1緩存到讀1隊(duì)列中,執(zhí)行寫1時(shí),將寫1緩存到寫1隊(duì)列中。可以實(shí)現(xiàn)應(yīng)用于下層的任何類型的磁盤驅(qū)動(dòng),都不會(huì)產(chǎn)生阻塞進(jìn)程導(dǎo)致的性能問(wèn)題,使得1PS性能在磁盤驅(qū)動(dòng)上不產(chǎn)生瓶頸。同時(shí),降低了讀寫并發(fā)情況下讀1的響應(yīng)時(shí)間,提高了讀1響應(yīng)時(shí)間的穩(wěn)定性。
【附圖說(shuō)明】
[0026]通過(guò)參考附圖會(huì)更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對(duì)本發(fā)明進(jìn)行任何限制,在附圖中:
[0027]圖1是本發(fā)明一個(gè)實(shí)施例中一種基于虛擬磁盤層的1流控制方法的流程示意圖;
[0028]圖2是本發(fā)明一個(gè)實(shí)施例中發(fā)送b1的隊(duì)列接口函數(shù)流程示意圖;
[0029]圖3是本發(fā)明一個(gè)實(shí)施例中一種基于虛擬磁盤層的1流控制裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0030]現(xiàn)結(jié)合附圖和實(shí)施例對(duì)本發(fā)明技術(shù)方案作進(jìn)一步詳細(xì)闡述。
[0031]圖1示出了本實(shí)施例中一種基于虛擬磁盤層的1流控制方法的流程示意圖,如圖1所示,本實(shí)施例提供的一種基于虛擬磁盤層的1流控制方法,包括:
[0032]SI,建立虛擬磁盤;
[0033]S2,在所述虛擬磁盤中設(shè)置讀1隊(duì)列和寫1隊(duì)列;
[0034]S3,執(zhí)行1讀時(shí),將讀1緩存到讀1隊(duì)列中,執(zhí)行寫1時(shí),將寫1緩存到寫1隊(duì)列中。
[0035]在本實(shí)施例中,為了讓RAID (Redundant Arrays of independent Disks,磁盤陣列)更好的記錄各種狀態(tài),適應(yīng)各種磁盤,我們引入了虛擬磁盤Virtual Storage Disk(簡(jiǎn)稱VSD)層。VSD將磁盤的幾何空間做了重新劃分,分為保留區(qū)和數(shù)據(jù)區(qū)。保留區(qū)由超級(jí)塊區(qū),bitmap索引區(qū),壞塊重定向索引區(qū),壞塊重定向數(shù)據(jù)區(qū)等組成。
[0036]上層的1要到達(dá)Disk,要通過(guò)VSD層轉(zhuǎn)發(fā),在VSD層做流控,就可以針對(duì)下層的各種Disk驅(qū)動(dòng)做流控,與具體OS,Disk無(wú)關(guān),具有很高的兼容性和擴(kuò)展性。
[0037]我們?cè)赩SD設(shè)定了兩個(gè)隊(duì)列,讀1的r_queue和寫1的w_queue。
[0038]對(duì)每個(gè)隊(duì)列上的10,若需要緩存,則緩存到隊(duì)列,每個(gè)Queue結(jié)構(gòu)中有最大正在處理10(pending 10)個(gè)數(shù)的設(shè)定值threshold,該值通過(guò)自測(cè)試程序產(chǎn)生,pending 1個(gè)數(shù)低于這個(gè)值不會(huì)造成底層的Disk驅(qū)動(dòng)阻塞進(jìn)程。
[0039]本實(shí)施例的具體工作流程:
[0040]執(zhí)行1時(shí),排隊(duì)到對(duì)應(yīng)的Queue (讀1對(duì)應(yīng)r_queue,寫1對(duì)應(yīng)w_queue):若Queue的pending 1大于threshold,則不執(zhí)行;否則依次下發(fā)pendi