一種打開磁盤寫緩存的方法和裝置制造方法
【專利摘要】本發(fā)明公開了打開磁盤寫緩存的方法和裝置:在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列;當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中;對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中;當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令;當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。應(yīng)用本發(fā)明所述方案,能夠提高磁盤的工作性能。
【專利說明】一種打開磁盤寫緩存的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù),特別涉及一種打開磁盤寫緩存的方法和裝置。
【背景技術(shù)】
[0002]現(xiàn)有存儲系統(tǒng)中,通常都采用關(guān)閉磁盤(Disk)寫緩存(cache)的方式。
[0003]相比于關(guān)閉磁盤寫緩存的方式,打開磁盤寫緩存的方式能夠更好地提高磁盤的工作性能,如加快磁盤的處理速度、降低時延等;但現(xiàn)有技術(shù)中還沒有一種較好的打開磁盤寫緩存的方式。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種打開磁盤寫緩存的方法和裝置,能夠提高磁盤的工作性能。
[0005]為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0006]一種打開磁盤寫緩存的方法,包括:
[0007]在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列;
[0008]當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中;
[0009]對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中;
[0010]當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令;
[0011]當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。
[0012]一種打開磁盤寫緩存的裝置,包括:
[0013]第一處理模塊,用于在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列;
[0014]第二處理模塊,用于當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中;
[0015]對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中;
[0016]當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令;
[0017]當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。
[0018]可見,采用本發(fā)明所述方案,通過將寫命令在所建立的三個隊(duì)列之間進(jìn)行轉(zhuǎn)移等, 實(shí)現(xiàn)了打開磁盤寫緩存,從而提高了磁盤的工作性能。
【專利附圖】
【附圖說明】
[0019]圖1為本發(fā)明打開磁盤寫緩存的方法實(shí)施例的流程圖。
[0020]圖2為本發(fā)明三個隊(duì)列中所包括的寫命令情況第一示意圖。
[0021]圖3為本發(fā)明三個隊(duì)列中所包括的寫命令情況第二示意圖。
[0022]圖4為本發(fā)明三個隊(duì)列中所包括的寫命令情況第三示意圖。
[0023]圖5為本發(fā)明三個隊(duì)列中所包括的寫命令情況第四示意圖。
[0024]圖6為本發(fā)明三個隊(duì)列中所包括的寫命令情況第五示意圖。
[0025]圖7為本發(fā)明打開磁盤寫緩存的裝置實(shí)施例的組成結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0026]針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明中提出一種打開磁盤寫緩存的方案,能夠提高磁盤的工作性能。
[0027]為了使本發(fā)明的技術(shù)方案更加清楚、明白,以下參照附圖并舉實(shí)施例,對本發(fā)明所述方案作進(jìn)一步的詳細(xì)說明。
[0028]圖1為本發(fā)明打開磁盤寫緩存的方法實(shí)施例的流程圖。如圖1所示,包括以下步驟11?15。
[0029]步驟11:在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列。
[0030]初始建立時,三個隊(duì)列中均為空。
[0031]其中,Pending隊(duì)列:用于保存所有尚未從磁盤返回處理響應(yīng)的寫命令;
[0032]Done隊(duì)列:用于保存所有從磁盤返回處理響應(yīng)、但還未執(zhí)行sync命令的寫命令;
[0033]Sync隊(duì)列:用于保存所有正在同步磁盤緩存的寫命令。
[0034]步驟12:當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中。
[0035]本步驟中,當(dāng)每接收到一個寫命令時,根據(jù)三個隊(duì)列的不同功能,將其先加入到Pending隊(duì)列中。
[0036]圖2為本發(fā)明三個隊(duì)列中所包括的寫命令情況第一示意圖。如圖2所示,假設(shè)接收到了三個寫命令,分別為 Writelto Diskl、Write2to Disk2 以及 Write3to Diskl,那么,將這三個寫命令均加入到Pending隊(duì)列中,此時,Done隊(duì)列和Sync隊(duì)列中均為空。
[0037]步驟13:對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中。
[0038]所述預(yù)定條件具體是指何種條件可根據(jù)實(shí)際需要而定,比如:經(jīng)過預(yù)定時長。
[0039]對于Pending隊(duì)列中的每個寫命令,將其下發(fā)到對應(yīng)的磁盤中后,磁盤會按照現(xiàn)有方式對該寫命令進(jìn)行處理,處理完畢后,會返回處理響應(yīng);相應(yīng)地,當(dāng)接收到磁盤返回的處理響應(yīng)時,則可將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中。
[0040]圖3為本發(fā)明三個隊(duì)列中所包括的寫命令情況第二示意圖。如圖3所示,結(jié)合圖2所示情況,假設(shè)針對Writelto Diskl和Write3to Diskl已經(jīng)接收到了從Diskl返回的處理響應(yīng),針對Write2to Disk2已經(jīng)接收到了從Disk2返回的處理響應(yīng),那么則將WriteltoDiskl> Write2to Disk2 以及 Write3to Diskl 從 Pending 隊(duì)列轉(zhuǎn)移到 Done 隊(duì)列中;假設(shè)Write4to Diskl、Write5to Disk2以及Write6to Disk3為新接收到的寫命令,那么則將Write4to Diskl> Write5to Disk2 以及 Write6to Disk3 均加入到 Pending 隊(duì)列中。
[0041]步驟14:當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令。
[0042]所述預(yù)定條件具體是指何種條件可根據(jù)實(shí)際需要而定。
[0043]比如:當(dāng)Done隊(duì)列中的寫命令數(shù)量每次達(dá)到預(yù)定閾值時,或者,每經(jīng)過預(yù)定時長后,則可將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中。
[0044]之后,可針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令,即調(diào)用sync命令,如何調(diào)用為現(xiàn)有技術(shù)。
[0045]圖4為本發(fā)明三個隊(duì)列中所包括的寫命令情況第三示意圖。如圖4所示,結(jié)合圖3所示情況,假設(shè)經(jīng)過了預(yù)定時長,那么則將Done隊(duì)列中的WriteIto Diskl、Write2to Disk2以及Write3to Diskl從Done隊(duì)列轉(zhuǎn)移到Sync隊(duì)列中,并針對Diskl和Disk2,分別執(zhí)行sync命令;假設(shè)此時已經(jīng)接收到了針對Write4to Diskl、Write5to Disk2以及Write6toDisk3 的處理響應(yīng),那么則將 Write4to Diskl、Write5to Disk2 以及 Write6to Disk3 從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中;假設(shè)此時還新接收到了一個Write7to Disk3,那么則將Write7to Disk3 加入到 Pending 隊(duì)列中。
[0046]步驟15:當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。
[0047]如步驟14中所述,針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令,各磁盤如何根據(jù)sync命令進(jìn)行相關(guān)處理為現(xiàn)有技術(shù),處理完畢后,會返回sync響應(yīng)。
[0048]當(dāng)接收到任一磁盤返回的sync響應(yīng)時,可將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除,并且,可相應(yīng)地釋放所刪除的寫命令所占用的內(nèi)存,以節(jié)省內(nèi)存空間,如何釋放同樣為現(xiàn)有技術(shù)。
[0049]圖5為本發(fā)明三個隊(duì)列中所包括的寫命令情況第四示意圖。如圖5所示,結(jié)合圖4所示情況,假設(shè)接收到了 Diskl返回的sync響應(yīng),那么則可將Writelto Diskl以及Write3to Diskl 從 Sync 隊(duì)列中刪除,并釋放 Writelto Diskl 以及 Write3to Diskl 所占用的內(nèi)存。
[0050]另外,本發(fā)明所述方案中還提出:當(dāng)存儲系統(tǒng)掉電時,可將Pending隊(duì)列、Done隊(duì)列以及Sync隊(duì)列中的所有寫命令均保存到系統(tǒng)盤中;當(dāng)存儲系統(tǒng)上電時,可取出保存在系統(tǒng)盤中的所有寫命令,并將取出的所有寫命令均加入到Pending隊(duì)列中,后續(xù)按照圖1所示相關(guān)流程進(jìn)行處理即可。
[0051]系統(tǒng)盤通常位于主板上,當(dāng)存儲系統(tǒng)掉電后,按照現(xiàn)有技術(shù),主板上會有短時間的供電存留以對主板進(jìn)行相關(guān)保護(hù),本發(fā)明所述方案中即可利用主板的這一特性,當(dāng)存儲系統(tǒng)掉電時,將Pending隊(duì)列、Done隊(duì)列以及Sync隊(duì)列中的所有寫命令均保存到系統(tǒng)盤中,然后正常關(guān)機(jī);當(dāng)存儲系統(tǒng)上電時,將保存在系統(tǒng)盤中的所有寫命令均讀取出來,并可認(rèn)為這些寫命令均未持久化到磁盤中,因此將它們?nèi)考尤氲絇ending隊(duì)列中。
[0052]圖6為本發(fā)明三個隊(duì)列中所包括的寫命令情況第五示意圖。如圖6所示,結(jié)合圖5所示情況,當(dāng)存儲系統(tǒng)上電時,將原Pending隊(duì)列中的Write7to Disk3、原Done隊(duì)列中的 Write4to Diskl> Write5to Disk2 和 Write6to Disk3,以及原 Sync 隊(duì)列中的 Write2toDisk2均加入到Pending隊(duì)列中,此時,Done隊(duì)列和Sync隊(duì)列中均為空;需要說明的是,圖6中所示的各寫命令的排列順序僅為舉例說明,具體如何排序不作限制。
[0053]基于上述介紹,圖7為本發(fā)明打開磁盤寫緩存的裝置實(shí)施例的組成結(jié)構(gòu)示意圖。如圖7所示,包括:
[0054]第一處理模塊,用于在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列;
[0055]第二處理模塊,用于當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中;
[0056]對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中;
[0057]當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令;
[0058]當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。
[0059]具體地,
[0060]當(dāng)Done隊(duì)列中的寫命令數(shù)量每次達(dá)到預(yù)定閾值時,或者,每經(jīng)過預(yù)定時長后,第二處理模塊則將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中。
[0061]另外,
[0062]第二處理模塊還可進(jìn)一步用于,在將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除之后,釋放所刪除的寫命令所占用的內(nèi)存。
[0063]再有,
[0064]如圖7所示,該裝置中還可進(jìn)一步包括:第三處理模塊;
[0065]第三處理模塊,用于當(dāng)存儲系統(tǒng)掉電時,將Pending隊(duì)列、Done隊(duì)列以及Sync隊(duì)列中的所有寫命令均保存到系統(tǒng)盤中;
[0066]當(dāng)存儲系統(tǒng)上電時,取出保存在系統(tǒng)盤中的所有寫命令,并將取出的所有寫命令均加入到Pending隊(duì)列中。
[0067]圖7所示裝置實(shí)施例的具體工作流程請參照前述方法實(shí)施例中的相應(yīng)說明,此處不再贅述。
[0068]總之,采用本發(fā)明所述方案,實(shí)現(xiàn)了打開磁盤寫緩存,從而提高了磁盤的工作性能;而且,當(dāng)存儲系統(tǒng)掉電時,可及時將未同步到磁盤中的所有寫命令均保存到系統(tǒng)盤中,從而避免了數(shù)據(jù)丟失,進(jìn)而確保了數(shù)據(jù)的安全性。
[0069]綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種打開磁盤寫緩存的方法,其特征在于,包括: 在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列; 當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中; 對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中; 當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令; 當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中包括: 當(dāng)Done隊(duì)列中的寫命令數(shù)量每次達(dá)到預(yù)定閾值時,或者,每經(jīng)過預(yù)定時長后,則將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除之后,進(jìn)一步包括:釋放所刪除的寫命令所占用的內(nèi)存。`
4.根據(jù)權(quán)利要求1或3所述的方法,其特征在于, 該方法進(jìn)一步包括: 當(dāng)存儲系統(tǒng)掉電時,將Pending隊(duì)列、Done隊(duì)列以及Sync隊(duì)列中的所有寫命令均保存到系統(tǒng)盤中; 當(dāng)存儲系統(tǒng)上電時,取出保存在系統(tǒng)盤中的所有寫命令,并將取出的所有寫命令均加入到Pending隊(duì)列中。
5.一種打開磁盤寫緩存的裝置,其特征在于,包括: 第一處理模塊,用于在存儲系統(tǒng)中建立3個隊(duì)列,分別為Pending隊(duì)列、Done隊(duì)列和Sync隊(duì)列; 第二處理模塊,用于當(dāng)每接收到一個寫命令時,將該寫命令加入到Pending隊(duì)列中; 對于Pending隊(duì)列中的每個寫命令,當(dāng)滿足預(yù)定條件時,將該寫命令下發(fā)到對應(yīng)的磁盤中,并在當(dāng)接收到磁盤返回的處理響應(yīng)時,將該寫命令從Pending隊(duì)列轉(zhuǎn)移到Done隊(duì)列中; 當(dāng)每次滿足預(yù)定條件時,將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中,并針對Sync隊(duì)列中的所有寫命令所對應(yīng)的磁盤,分別執(zhí)行sync命令; 當(dāng)接收到任一磁盤返回的sync響應(yīng)時,將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于, 當(dāng)Done隊(duì)列中的寫命令數(shù)量每次達(dá)到預(yù)定閾值時,或者,每經(jīng)過預(yù)定時長后,所述第二處理模塊則將Done隊(duì)列中的所有寫命令均轉(zhuǎn)移到Sync隊(duì)列中。
7.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述第二處理模塊進(jìn)一步用于,在將Sync隊(duì)列中與該磁盤對應(yīng)的所有寫命令均刪除之后,釋放所刪除的寫命令所占用的內(nèi)存。
8.根據(jù)權(quán)利要求5或7所述的裝置,其特征在于, 該裝置中進(jìn)一步包括: 第三處理模塊,用于當(dāng)存儲系統(tǒng)掉電時,將Pending隊(duì)列、Done隊(duì)列以及Sync隊(duì)列中的所有寫命令均保存到系統(tǒng)盤中; 當(dāng)存儲系統(tǒng)上電時,取出保存在系統(tǒng)盤中的所有寫命令,并將取出的所有寫命令均加入到Pending 隊(duì)列中。
【文檔編號】G06F12/08GK103514109SQ201310438672
【公開日】2014年1月15日 申請日期:2013年9月24日 優(yōu)先權(quán)日:2013年9月24日
【發(fā)明者】余海濱 申請人:創(chuàng)新科存儲技術(shù)有限公司, 創(chuàng)新科軟件技術(shù)(深圳)有限公司