本發(fā)明涉及計(jì)算機(jī)存儲計(jì)算技術(shù)領(lǐng)域,尤其涉及一種IO調(diào)度方法及IO調(diào)度裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)、云計(jì)算、物聯(lián)網(wǎng)等技術(shù)的發(fā)展,固態(tài)硬盤作為新的一代存儲,被廣泛應(yīng)用。目前調(diào)度算法主要有兩類,一、先進(jìn)先出服務(wù)FIFO;二、電梯算法,也即就近原則進(jìn)行服務(wù)。傳統(tǒng)的IO調(diào)度方式主要結(jié)合機(jī)械硬盤的尋址特點(diǎn)采用電梯算法實(shí)現(xiàn),簡單利用電梯算法不能充分發(fā)揮固態(tài)硬盤SSD的特性進(jìn)行處理。而且,由于緩存的存在,改變了IO的處理邏輯,引入了新的問題,比如IO沖突幾率大大增加,需要進(jìn)行解決?,F(xiàn)有技術(shù)中,對于存儲系統(tǒng)的企業(yè)而言,尤其是使用固態(tài)硬盤緩存處理過程中,如何高效地、合理地對進(jìn)行IO調(diào)度,從而提高存儲系統(tǒng)的讀寫速度是個很難解決的問題。
而固態(tài)硬盤相對于機(jī)械硬盤,其隨機(jī)性能接近順序性能,電梯算法調(diào)試方式優(yōu)勢消失。同時固態(tài)硬盤也具有自已特點(diǎn),如:寫操作要先擦除后寫入、寫操作次數(shù)受限等。因此,固態(tài)硬盤需要新的調(diào)度算法。
技術(shù)實(shí)現(xiàn)要素:
為了便于理解,對本申請文件中出現(xiàn)的部分詞語,澄清如下:
所述輪詢,是指依序詢問每一個周邊設(shè)備是否需要其服務(wù),有即給予服務(wù),服務(wù)結(jié)束后再問下一個周邊,接著不斷周而復(fù)始。
鑒于背景技術(shù)存在的技術(shù)問題,本方法提供了一種解決固態(tài)硬盤寫操作需要先擦除后再寫入、寫操作次數(shù)受限等問題,同時結(jié)合固態(tài)硬盤特點(diǎn),優(yōu)化IO棧的IO調(diào)度方法及IO調(diào)度裝置。
為了達(dá)到上述目的,本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的:
本發(fā)明提供一種IO調(diào)度方法,包括:
緩存中,通過IO調(diào)度將IO請求形成IO調(diào)度隊(duì)列;
判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中:若是則進(jìn)行下一步;否則將IO請求放回IO調(diào)度隊(duì)列;
判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作:若是則將IO請求放回IO調(diào)度隊(duì)列;否則將IO請求進(jìn)行IO操作。
其中,通過IO調(diào)度將IO請求形成IO調(diào)度隊(duì)列之前,還包括:
記錄IO請求進(jìn)入IO調(diào)度隊(duì)列的時間,進(jìn)入時間達(dá)到預(yù)設(shè)值的IO請求將被強(qiáng)制進(jìn)行IO操作。
其中,通過IO調(diào)度將IO請求形成IO調(diào)度隊(duì)列,包括:
在緩存中,以預(yù)設(shè)值為單位組織IO請求;
將IO請求進(jìn)行IO調(diào)度;
將IO請求形成IO調(diào)度隊(duì)列。
其中,判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中之前,還包括:
在緩存中,建立固態(tài)硬盤的地址映射表。
進(jìn)一步地,所述IO調(diào)度隊(duì)列包括有多個不同優(yōu)先級的子隊(duì)列,根據(jù)優(yōu)先級周期性地對IO調(diào)度隊(duì)列中的IO請求進(jìn)行IO操作。
進(jìn)一步地,還包括:判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中,若否,則將該IO請求的待操作固態(tài)硬盤的物理地址存入臨時地址映射表,每個周期后,將臨時地址映射表并入地址映射表。
本發(fā)明提供一種IO調(diào)度裝置,包括:
應(yīng)用模塊,用于組織IO請求,并將IO請求發(fā)送給IO調(diào)度模塊;
地址映射表創(chuàng)建模塊,用于在緩存中建立固態(tài)硬盤的地址映射表;
IO調(diào)度模塊,用于接收IO請求,將IO請求加入到IO調(diào)度隊(duì)列中,調(diào)度隊(duì)列包括多個不同優(yōu)先級的子隊(duì)列;
IO操作模塊,用于根據(jù)IO調(diào)度隊(duì)列的優(yōu)先級,選擇IO請求并下發(fā)到固態(tài)硬盤進(jìn)行處理;
第一判斷模塊,用于判斷IO請求的待操作固態(tài)硬盤的物理地址的是否在地址映射表中;
第二判斷模塊,判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作。
優(yōu)選地,還包括:
時間檢測模塊,用于記錄IO請求進(jìn)入IO調(diào)度隊(duì)列的時間。
優(yōu)選地,還包括:
輪詢模塊,用于根據(jù)子隊(duì)列的優(yōu)先級對IO調(diào)度隊(duì)列進(jìn)行周期性操作。
進(jìn)一步地,還包括:
臨時地址映射表創(chuàng)建模塊,用于創(chuàng)建臨時地址映射表,所述臨時地址映射表用于暫存未被操作的IO請求的待操作固態(tài)硬盤的物理地址,每個周期后,將臨時地址映射表并入地址映射表。
本發(fā)明所提供的一種IO調(diào)度方法,有益效果如下:
1.本發(fā)明結(jié)合固態(tài)硬盤的特點(diǎn),通過判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中;判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作,使固態(tài)硬盤的IO調(diào)度過程具有緩存感知、垃圾回收感知的功能,解決了固態(tài)硬盤寫操作需要先擦除后再寫入、寫操作次數(shù)受限等問題,提高固態(tài)硬盤的讀寫速度,從一定方面也提高了固態(tài)硬盤的使用壽命;
2.本發(fā)明設(shè)有時間檢測模塊,在IO進(jìn)行隊(duì)列之前,記錄IO的操作時間,系統(tǒng)通過時間檢測模塊檢測IO隊(duì)列中是否有IO操作達(dá)到最長的等待時間,如果達(dá)到最長等待時間,IO將被強(qiáng)制處理,避免了某些IO長時間沒有處理的情況,提高提高固態(tài)硬盤的讀寫效率;
本發(fā)明所提供的IO調(diào)度裝置與IO調(diào)度方法的有益效果類似,不再贅述。
附圖說明:
圖1為本發(fā)明實(shí)施例所提供的IO調(diào)度方法的流程示意圖;
圖2為本發(fā)明實(shí)施例所提供的IO調(diào)度裝置的模塊示意圖;
具體實(shí)施方式:
依照附圖詳細(xì)說明關(guān)于本發(fā)明的示例性實(shí)施例。
本發(fā)明提供一種IO調(diào)度方法,包括:
緩存中,通過IO調(diào)度將IO請求形成IO調(diào)度隊(duì)列;
判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中:若是則進(jìn)行下一步;否則將IO請求放回IO調(diào)度隊(duì)列;
判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作:若是則將IO請求放回IO調(diào)度隊(duì)列;否則將IO請求進(jìn)行IO操作。
請參考圖1,圖1為本發(fā)明實(shí)施例所提供的IO調(diào)度方法的流程示意圖;本實(shí)施例提供一種IO調(diào)度方法,結(jié)合固態(tài)硬盤地址映射的特點(diǎn)和垃圾回收的特點(diǎn)進(jìn)行映射,包括以下步驟:
S101、緩存中,通過IO調(diào)度將IO請求形成IO調(diào)度隊(duì)列;
其中,具體步驟為:
在緩存中,以預(yù)設(shè)值為單位組織IO請求,在本實(shí)施例中,以頁為單位進(jìn)行組織IO請求,頁的大小為4K;
作為一種可實(shí)施方式,預(yù)設(shè)值還可以設(shè)置為2K、8K、16K、32K等。
將IO請求進(jìn)行IO調(diào)度;
將IO請求形成IO調(diào)度隊(duì)列。
所述IO調(diào)度隊(duì)列包括有多個不同優(yōu)先級的子隊(duì)列,在本實(shí)施例中,IO調(diào)度隊(duì)列是一個多子隊(duì)列數(shù)據(jù)結(jié)構(gòu),每個子隊(duì)列具有不同的優(yōu)先級。每個子隊(duì)列的IO數(shù)目相等,均等于QueueMax。當(dāng)一個子隊(duì)列(N)的IO請求數(shù)達(dá)到最大值時,將從子隊(duì)列鏈表底部抽取IO請求移到前一個子隊(duì)列。
作為一種可實(shí)施方式,所述IO調(diào)度隊(duì)列還可以包括一個數(shù)組,數(shù)組的長度為優(yōu)先級的個數(shù),設(shè)置序號為0為最高調(diào)度優(yōu)先級。數(shù)組的每個元素包括一個鏈表指針,該指針用于指向?qū)儆谠搩?yōu)先級的IO請求。另外還可以采用鏈表、樹等其他數(shù)據(jù)結(jié)果進(jìn)行存儲。
作為另一種可實(shí)施方式,所述數(shù)組元素還可以保存當(dāng)前是否有IO請求需要處理的信息。除此之外,所述數(shù)據(jù)元素還可以保存與應(yīng)用屬性、固態(tài)盤屬性相關(guān)的信息。
根據(jù)優(yōu)先級周期性地對IO調(diào)度隊(duì)列中的IO請求進(jìn)行IO操作,在本實(shí)施例中, IO操作模塊從優(yōu)先級最高的隊(duì)列進(jìn)行處理,當(dāng)一個隊(duì)列處理完成之后即進(jìn)行休眠狀態(tài);當(dāng)時間片輪轉(zhuǎn)到之后,繼續(xù)上述處理,直至隊(duì)列中所有的操作均被請求完成。其中,時間片輪轉(zhuǎn)是分時操作系統(tǒng)任務(wù)調(diào)度機(jī)制。在完成指定的任務(wù)后,可以將系統(tǒng)轉(zhuǎn)入休眠狀態(tài),當(dāng)達(dá)到預(yù)設(shè)的時間或者達(dá)到調(diào)度條件后,可以繼續(xù)執(zhí)行。
在步驟S101進(jìn)行的同時,記錄IO請求進(jìn)入IO調(diào)度隊(duì)列的時間,進(jìn)入時間達(dá)到預(yù)設(shè)值的IO請求將被強(qiáng)制進(jìn)行IO操作。在本實(shí)施例中,通過一個時間檢測模塊記錄IO請求進(jìn)入IO調(diào)度隊(duì)列的時間。
作為一種可實(shí)施方式,系統(tǒng)通過deadline檢測模塊檢測IO隊(duì)列中是否有IO操作達(dá)到最長的等待時間Qmax,如果達(dá)到最長等待時間,IO將被強(qiáng)制處理。所述deadline檢測模塊,通過系統(tǒng)的Timer機(jī)制實(shí)現(xiàn)檢測程序定時運(yùn)行。當(dāng)運(yùn)行器達(dá)到預(yù)設(shè)的時間如1秒種,就激發(fā)檢測程序檢測IO隊(duì)列中IO請求等待時長,當(dāng)檢測到等待時間達(dá)到Qmax時,將被處理。該模塊檢測完成所有的IO請求后,創(chuàng)建新的定時器。
S102、在緩存中,建立固態(tài)硬盤的地址映射表。固態(tài)硬盤的地址映射表的換入換出由驅(qū)動實(shí)現(xiàn)的,即驅(qū)動程序根據(jù)一定的規(guī)則將存儲的固態(tài)硬盤的映射表調(diào)入內(nèi)存中,本發(fā)明所涉及的機(jī)制將優(yōu)先處理映射表在緩存中的IO請求。
S103、判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中:若是則進(jìn)行下一步;否則將IO請求放回IO調(diào)度隊(duì)列;
作為一種可實(shí)施方式,驅(qū)動程序可以提供API用以檢查其映射表(Mapping Cache)是否在緩存中
作為另一種可實(shí)施方式,判斷IO請求的待操作固態(tài)硬盤的物理地址是否在地址映射表中,若否,則將該IO請求的待操作固態(tài)硬盤的物理地址存入臨時地址映射表,每個周期后,將臨時地址映射表并入地址映射表。
S104、判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作:若是則將IO請求放回IO調(diào)度隊(duì)列;否則將IO請求進(jìn)行IO操作。
本發(fā)明提供一種IO調(diào)度裝置,包括:
應(yīng)用模塊,用于組織IO請求,并將IO請求發(fā)送給IO調(diào)度模塊;
地址映射表創(chuàng)建模塊,用于在緩存中建立固態(tài)硬盤的地址映射表;
IO調(diào)度模塊,用于接收IO請求,將IO請求加入到IO調(diào)度隊(duì)列中,調(diào)度隊(duì)列包括多個不同優(yōu)先級的子隊(duì)列;
IO操作模塊,用于根據(jù)IO調(diào)度隊(duì)列的優(yōu)先級,選擇IO請求并下發(fā)到固態(tài)硬盤進(jìn)行處理;
第一判斷模塊,用于判斷IO請求的待操作固態(tài)硬盤的物理地址的是否在地址映射表中;
第二判斷模塊,判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作。
請參考圖2,圖2為本發(fā)明實(shí)施例所提供的IO調(diào)度裝置的模塊示意圖;本實(shí)施例提供一種IO調(diào)度裝置,包括:
應(yīng)用模塊201,用于組織IO請求,并將IO請求發(fā)送給IO調(diào)度模塊;
地址映射表創(chuàng)建模塊206,用于在緩存中建立固態(tài)硬盤的地址映射表;
IO調(diào)度模塊202,用于接收IO請求,將IO請求加入到IO調(diào)度隊(duì)列中,調(diào)度隊(duì)列包括多個不同優(yōu)先級的子隊(duì)列;
IO操作模塊203,用于根據(jù)IO調(diào)度隊(duì)列的優(yōu)先級,選擇IO請求并下發(fā)到固態(tài)硬盤進(jìn)行處理;
第一判斷模塊204,用于判斷IO請求的待操作固態(tài)硬盤的物理地址的是否在地址映射表中;
第二判斷模塊205,判斷IO請求的待操作固態(tài)硬盤是否正在進(jìn)行垃圾回收操作。
優(yōu)選地,還包括:
時間檢測模塊207,用于記錄IO請求進(jìn)入IO調(diào)度隊(duì)列的時間。
優(yōu)選地,還包括:
輪詢模塊208,用于根據(jù)子隊(duì)列的優(yōu)先級對IO調(diào)度隊(duì)列進(jìn)行輪詢。
進(jìn)一步地,還包括:
臨時地址映射表創(chuàng)建模塊209,用于創(chuàng)建臨時地址映射表,所述臨時地址映射表用于暫存未被操作的IO請求的待操作固態(tài)硬盤的物理地址,每個輪詢周期后,將臨時地址映射表并入地址映射表。
以上所述僅為本發(fā)明示意性的具體實(shí)施方式,并非用以限定本發(fā)明的范圍,任何本領(lǐng)域的技術(shù)人員在不脫離本發(fā)明構(gòu)思和原則的前提下所做出的等同變化與修改,均應(yīng)屬于本發(fā)明保護(hù)的范圍。