一種磁盤空閑空間分配的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及文件系統(tǒng)對(duì)磁盤空間的管理和空閑空間的分配。
【背景技術(shù)】
[0002]在文件系統(tǒng)對(duì)文件的讀寫操作中,為了提高讀寫效率,一般采用異步寫的方式,SP在內(nèi)存中分配出一片緩存,把文件數(shù)據(jù)首先緩存在緩存中,對(duì)文件的寫操作即是對(duì)緩存中數(shù)據(jù)的寫操作,然后在某個(gè)時(shí)間點(diǎn)由具體的刷寫線程將緩存中的數(shù)據(jù)刷寫到磁盤上。在刷寫之前的這段時(shí)間內(nèi)可能會(huì)對(duì)文件進(jìn)行了多次寫操作,也就是多次分配空間,同樣為了使同一個(gè)文件的數(shù)據(jù)塊盡量連續(xù),最好的辦法是當(dāng)磁盤塊要分配給待寫操作時(shí),從空閑空間計(jì)數(shù)中減去附加數(shù)據(jù)的磁盤空間大小,但是實(shí)際上并不在空閑空間位圖中分配空間。相反,附加數(shù)據(jù)一直保存在內(nèi)存中,直到刷寫線程決定刷新寫緩沖到磁盤時(shí),才將空間分配出去。
[0003]磁盤尋道時(shí)間一直是影響文件系統(tǒng)性能的一個(gè)主要因素。因此文件系統(tǒng)的空間策略是盡量讓新分配的塊緊接著原文件,使文件在磁盤上的布局盡量連續(xù),以減少磁盤尋道時(shí)間,提高順序訪問文件的性能。然而,當(dāng)在同一目錄下的兩個(gè)文件同時(shí)申請(qǐng)磁盤塊時(shí),這兩個(gè)文件就會(huì)交織在一起。因此需要采取一定的方法避免這種情況并同延遲分配的策略相結(jié)合,使同一個(gè)文件的數(shù)據(jù)塊盡量連續(xù)。
【發(fā)明內(nèi)容】
[0004]為了解決上述技術(shù)問題,本發(fā)明提供了一種利用保留空間的方式同文件系統(tǒng)的延遲分配相結(jié)合的方法,盡可能的保證了文件在增長(zhǎng)過程中所得到的分配空間的連續(xù)性,使文件數(shù)據(jù)的磁盤空間地址盡可能連續(xù),減少文件碎片,減少讀寫數(shù)據(jù)時(shí)的尋道時(shí)間。
[0005]為了達(dá)到本發(fā)明目的,本發(fā)明提供了一種磁盤空閑空間分配方法,其特征在于,為文件設(shè)置保留空間,文件系統(tǒng)的延遲分配使用上述保留空間,以使文件增長(zhǎng)過程中分配的空間為物理上為一段連續(xù)地址。
[0006]進(jìn)一步地,所述保留空間是指文件系統(tǒng)為文件增長(zhǎng)需要在磁盤上保留的物理地址空間,其緊接著所述文件的末尾地址位置的一段連續(xù)空間。
[0007]進(jìn)一步地,所述保留空間在磁盤設(shè)備上以鍵值對(duì)的形式組織,每個(gè)鍵值對(duì)與所述文件通過inode號(hào)關(guān)聯(lián)在一起。
[0008]進(jìn)一步地,根據(jù)文件的增長(zhǎng)次數(shù)計(jì)算需要設(shè)置的保留空間的大小。
[0009]進(jìn)一步地,所述保留空間具有最大值和最小值,所述根據(jù)文件的增長(zhǎng)次數(shù)計(jì)算的保留空間的大小與所述最大值比較,其中取較小者作為新的保留空間的大小。
[0010]進(jìn)一步地,如果文件的保留空間沒有被分配完,則在進(jìn)行新的保留空間分配時(shí),上述未分配的保留空間與所述文件末尾地址相連的連續(xù)空間合并用于新的保留空間的分配。
[0011]進(jìn)一步地,所述延遲分配是指在文件增長(zhǎng)需要分配新的磁盤空間時(shí),預(yù)留出增長(zhǎng)需要的空間,并不立即在磁盤上給其分配空間,直到文件數(shù)據(jù)落盤時(shí)才真正分配空間。
[0012]進(jìn)一步地,所述文件數(shù)據(jù)落盤是指文件系統(tǒng)在對(duì)文件寫操作時(shí),先將數(shù)據(jù)寫到內(nèi)存的緩存中,等到某個(gè)時(shí)間點(diǎn)再統(tǒng)一寫到磁盤設(shè)備上。
[0013]進(jìn)一步地,為新創(chuàng)建的文件延遲分配預(yù)留文件所需大小的磁盤空間時(shí),如果所述磁盤沒有空閑空間時(shí),則查找保留空間并將其轉(zhuǎn)變?yōu)槠胀ǖ拇疟P空閑空間進(jìn)行預(yù)留分配。
[0014]進(jìn)一步地,所述文件系統(tǒng)在延遲分配使用了上述保留空間后為所述文件申請(qǐng)新的保留空間。
[0015]為了達(dá)到本發(fā)明目的,本發(fā)明還提供了一種磁盤空閑空間分配裝置,其特征在于,包括:處理器;用于存儲(chǔ)所述處理器的可執(zhí)行程序的存儲(chǔ)器;其中,所述處理器被配置為用于執(zhí)行上述方法。
【附圖說明】
[0016]附圖用來提供對(duì)本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本申請(qǐng)的實(shí)施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。
[0017]圖1示出了根據(jù)本發(fā)明的一實(shí)施例的文件的保留空間申請(qǐng)流程圖;
[0018]圖2示出了根據(jù)本發(fā)明的一實(shí)施例的磁盤空閑空間的分配流程圖。
【具體實(shí)施方式】
[0019]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
[0020]在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0021]為了更好地說明,首先明確兩個(gè)概念:保留空間和預(yù)留空間。
[0022]本說明中所述的保留空間,是指文件系統(tǒng)為文件增長(zhǎng)需要在磁盤上保留的物理地址空間,是緊接著目前文件的末尾地址位置的一段連續(xù)空間。
[0023]所述預(yù)留空間,其是延遲分配中的概念,是指在對(duì)文件進(jìn)行寫操作需要增加文件的地址空間時(shí)預(yù)先留出來的磁盤空間,并沒有真正在磁盤上分配,當(dāng)文件系統(tǒng)刷寫緩存到磁盤時(shí)才真正分配空間,此時(shí)的范圍可能由于在刷寫緩存之前文件已進(jìn)行了多次空閑空間分配而將這些地址進(jìn)行了合并及調(diào)整等操作。
[0024]每一個(gè)文件對(duì)應(yīng)一個(gè)保留空間結(jié)構(gòu),這個(gè)結(jié)構(gòu)以B+tree的形式組織起來,B+tree的索引是文件的inode號(hào),這個(gè)B+tree在本發(fā)明中記為保留空間B+tree。保留空間在磁盤設(shè)備上以鍵值對(duì)的形式組織,每個(gè)鍵值對(duì)與特定文件通過inode號(hào)(文件標(biāo)識(shí))關(guān)聯(lián)在一起。
[0025]文件所占用的磁盤空間跟文件的增長(zhǎng)次數(shù)成一定的正比關(guān)系,文件增長(zhǎng)次數(shù)越多所使用的磁盤空間越大。設(shè)置標(biāo)記記錄文件的增長(zhǎng)次數(shù),在給文件設(shè)置保留空間時(shí)根據(jù)文件的增長(zhǎng)次數(shù)決定保留空間的大小。文件的保留空間有一個(gè)最小值和一個(gè)最大值,在給一個(gè)文件第一次設(shè)置保留空間時(shí)設(shè)置為最小值,以后根據(jù)文件的增長(zhǎng)次數(shù)設(shè)置保留空間大小直到預(yù)先設(shè)定的最大值。本說明中文件的增長(zhǎng)次數(shù)記為GrowNum,保留空間最小值記為MinVal,保留空間最大值記為MaxVal。
[0026]參考附圖1,根據(jù)本發(fā)明的一實(shí)施例,保留空間在文件第一次創(chuàng)建或被分配用于文件增長(zhǎng)之后需要重新向磁盤申請(qǐng)空間,根據(jù)不同的情況進(jìn)行不同的操作:
[0027](I)如果是文件第一次設(shè)置保留空間,則查詢判斷是否有同該文件末尾地址相連的連續(xù)空閑空間。如果有,則比較這段連續(xù)空閑空間與MinVal的大小,如果這段連續(xù)空閑空間小于等于MinVal,則將這段連續(xù)空閑空間設(shè)置為保留空間;如果這段連續(xù)空閑空間大于MinVal,