現(xiàn)有技術實施例中在特定的時間點可以找到的,其中針對每一新的組塊的信息存儲在單獨的表條目中。為了方便和簡單起見,將該表表示為存儲組塊指針和大小,雖然在實際的實施例中,該表可以包含用于跟蹤與向文件系統(tǒng)分配的組塊關聯(lián)的邏輯和物理地址和設備的、另外的和/或可供選擇的信息(例如,存儲向文件系統(tǒng)分配的組塊或組塊的組塊串的開始和結(jié)束地址)。當首先創(chuàng)建文件系統(tǒng)時,表9025中的字段是空白的。當文件服務器9002向文件系統(tǒng)分配組塊時,每一新近分配的組塊的地址和大小被存儲在條目字段中。文件服務器9002可以向文件系統(tǒng)分配三個新的組塊,從而占用了表9025中的三個條目。向表條目9030中寫入針對第一組塊的信息,包括指向在先前的空字段9040中的組塊開始的指針(在該示例中,指向組塊“空閑I”的開始的指針)且組塊大小X在字段9050中;針對第二組塊的信息被寫入表條目9031中,包括指向在先前的空字段9041中的組塊開始的指針(在該示例中,指向組塊“空閑2”的開始的指針)且組塊大小X在字段9051中;且針對第三組塊的信息被寫入到表條目9032中,包括指向在先前的空字段9042中的組塊開始的指針(在該示例中,指向組塊“空閑3”的開始的指針)且組塊大小X在字段9052中。虛擬文件系統(tǒng)地址空間被增加了 3X。在備選的實施例中,每一分配的組塊可以具有相同的大小。在這些實施例中,表9025可以包括單個列,其中列中的每一條目存儲了組塊的開始的地址。
[0069]圖7是表9025的示意性表示,如在示例性實施例中在特定的時間點可以找到的,其中針對連續(xù)組塊的信息可以存儲在單個表條目中,代替在表6中示出的表9025。特別地,使用上文所述的、在其中來自圖5的連續(xù)的組塊“空閑1”、“空閑2”、和“空閑3”被分配用于文件系統(tǒng)的示例,表條目9030用于存儲組塊串的三個連續(xù)的組塊的信息。指向組塊串的開始的指針(在該示例中,指向組塊“空閑I”的開始的指針)已經(jīng)被寫入字段9040。指向組塊串的結(jié)束的指針(在該示例中,指向組塊“空閑3”的結(jié)束的指針)已經(jīng)被寫入字段9050。以此方式,即使跨度管理器9003分配三個新的組塊并將上述組塊添加到文件系統(tǒng),連續(xù)的組塊也僅占據(jù)一個表條目并使得其在表9025作為具有較大組塊尺寸的單個組塊出現(xiàn)(即,跨越所存儲的地址的組塊)。
[0070]為了進一步展示的目的,假設接收了進一步的請求以供跨度管理器9003將文件系統(tǒng)擴大兩個或更多個組塊,且組塊管理器9003確定其應該從相同的帶區(qū)集分配接下來的兩個連續(xù)的組塊(例如,圖5中的組塊“空閑4”和“空閑5”)。
[0071]圖8是根據(jù)一示例性的實施例示出圖7中的表條目9030如何被修改成并入了兩個另外的連續(xù)塊的表9025的示意性表示。具體地,指向組塊串中的第一個組塊的開始的指針保持在字段9040中,而存儲在字段9050中的組塊串的結(jié)束的地址被改變(在該示例中,被改變?yōu)榻M塊“空閑5”的結(jié)束),以便在開始和結(jié)束地址之間的磁盤空間包含另外兩個連續(xù)分配的組塊。以此方式,即使跨度管理器9003現(xiàn)在已經(jīng)從存儲器分配了 5個連續(xù)的組塊并將上述組塊添加到文件系統(tǒng),連續(xù)的組塊仍然僅占據(jù)一個表條目。
[0072]在典型的實施例中,僅利用在表9025中最后使用或未使用的表條目來進行使用聚合的連續(xù)組塊的文件系統(tǒng)的擴大,以便將虛擬的文件系統(tǒng)地址空間的相應擴展映射到被添加到文件系統(tǒng)末尾的新存儲空間。例如,再次參考圖4,如果將3個組塊添加到文件系統(tǒng),則文件系統(tǒng)地址空間將從N增加到(N+3X),但是與針對塊O至(N-1)的存儲空間相對應的物理地址必須維持不變或特定的虛擬文件系統(tǒng)地址則指向無效的物理地址位置。圖9是圖4中擴大3個大小為X的組塊的文件系統(tǒng)空間的示意性表示。原始文件系統(tǒng)空間9060維持在邏輯地址范圍O至(N-1)且新近分配的文件系統(tǒng)空間9070位于邏輯地址范圍N至(N+3X-1)ο
[0073]圖10是根據(jù)一示例性實施例的針對通用組塊分配過程的流程圖。具體地,圖10描述了用于由文件服務器擴大針對文件系統(tǒng)的存儲空間的通用組塊分配過程,其中文件系統(tǒng)包括從多個帶區(qū)集選擇的多個組塊,且文件服務器將文件系統(tǒng)的虛擬地址空間映射到與組塊關聯(lián)的物理存儲地址。在塊1002中開始,文件服務器保持組塊數(shù)據(jù)庫以跟蹤與文件系統(tǒng)關聯(lián)的組塊,組塊數(shù)據(jù)庫包括固定數(shù)量的條目,每一條目能夠存儲與向文件系統(tǒng)分配的一部分存儲空間的開始地址和長度相關的信息。在框1004中,文件服務器接收要擴大文件系統(tǒng)的請求。在框1006中,文件服務器基于組塊數(shù)據(jù)庫識別與文件系統(tǒng)關聯(lián)的最后的組塊。在框1008中,文件服務器確定來自與最后的組塊相同的帶區(qū)集且與最后的組塊連續(xù)的至少一個組塊是否可用于向文件服務器分配。在本申請中討論的示例性實施例的上下文中,確定來自與最后的組塊相同的帶區(qū)集且與最后的組塊連續(xù)的至少一個組塊是否“可用于”向文件系統(tǒng)分配可以不僅將組塊是否空閑考慮在內(nèi)而且可以將諸如組塊串偏置和其他因素之類的其他因素考慮在內(nèi),如在下文所討論的。在框1010中,當至少一個組塊被確定為可用時,文件服務器分配來自與最后的組塊相同的帶區(qū)集且與最后的組塊連續(xù)的至少一個組塊。在框1012中,文件服務器更新與文件系統(tǒng)的最后的組塊關聯(lián)的表中的條目,以反映由所分配的至少一個組塊代表的連續(xù)存儲空間的長度的增加。
[0074]在某些示例性實施例中,向能夠從帶區(qū)集分配且與單個表條目關聯(lián)的多個連續(xù)組塊施加了各種限制(下文更充分討論的),以便在一些情形中,即使另外的連續(xù)組塊可能已經(jīng)從特定的帶區(qū)集分配且與單個表條目關聯(lián),組塊中的至少一些組塊也從不同的帶區(qū)集分配以跨多個帶區(qū)集分布存儲空間(以及從而存儲空間訪問)。例如,假設特定的文件系統(tǒng)中最后的組塊是來自特定帶區(qū)集的A個連續(xù)組塊的一個組塊串的一部分(在本申請中其可以被稱為“活動組塊串長度”),其中A大于或等于一但是小于預定的組塊串偏置。此外,假設接收要將文件系統(tǒng)擴大B個組塊的請求,其中(A+B)大于預定的組塊串偏置。即使存在從與最后的組塊相同的帶區(qū)集可用且與最后的組塊連續(xù)的B個組塊,組塊分配器9014通常也將僅從該帶區(qū)集分配N個組塊,其中N等于組塊串偏置減去活動組塊串長度;組塊分配器9014通常將從一個或多個其他的帶區(qū)集分配剩余的組塊,如根據(jù)預定的選擇方案所選擇、下文更充分討論的。但是,在一些實施例中,如果最近已經(jīng)將帶區(qū)集添加到跨度且上述帶區(qū)集比其他帶區(qū)集成比例地更空,則組塊分配器9014可以在更空的帶區(qū)集分配較長的組塊串,而不管組塊串偏置的長度。
[0075]雖然,在一些示例性的實施例中,組塊分配器9014可以實時確定一個或多個組塊是否可以從與最后的組塊相同的帶區(qū)集分配且與最后的組塊連續(xù),在某些示例性實施例中,組塊分配器9014可以在下文更充分討論的某些環(huán)境下,至少暫時地從帶區(qū)集預留一個或多個連續(xù)的組塊,以允許這樣的組塊在未來的時間以連續(xù)的方式被分配至文件系統(tǒng)。具體地,在這樣的情形下,當組塊分配器9014從帶區(qū)集分配一個或多個連續(xù)的組塊以向文件系統(tǒng)分配且存在另外的連續(xù)的組塊在未來可以被分配給文件系統(tǒng)的可能性時,組塊分配器9014可以預留該帶區(qū)集中、與所分配的組塊連續(xù)的一個或多個組塊,以便如果且當該文件系統(tǒng)在未來被擴大時,這樣的預留組塊可用于分配給文件系統(tǒng)。一般而言,組塊分配器9014將僅預留組塊至預留的組塊可以被分配而不超過預定的組塊串偏置的程度,即如果已經(jīng)從帶區(qū)集向文件系統(tǒng)分配的連續(xù)的組塊的數(shù)目(在本申請中其被稱為“活動組塊串長度”)已經(jīng)到達預定的組塊串偏置,則組塊分配器9014典型地不預留任何組塊;否則,組塊分配器9014可以預留多達N個組塊,其中N等于預定的組塊串偏置減去活動組塊串長度。當針對其他的文件系統(tǒng)分配組塊時,組塊分配器9014避免預留的組塊,至少直到預留的組塊被返回到可用組塊的“池”中(例如,如果預留的組塊變成僅有的可用于被分配的組塊)。應該注意的是,組塊分配器9014可以針對多個不同文件系統(tǒng)中的每一個文件系統(tǒng)保持一組單獨的預留組塊。
[0076]從而,當文件系統(tǒng)的存儲空間擴大時,文件服務器9002可以從預留用于文件系統(tǒng)的組塊串中分配組塊。因為具有多個組塊的組塊串可以占用組塊數(shù)據(jù)庫中的單個條目,所以文件系統(tǒng)可以包括比組塊數(shù)據(jù)庫將允許的更多的組塊。從而,在該系統(tǒng)中,可以有效地使用存儲空間,文件系統(tǒng)可以以較小的增量添加存儲空間,文件系統(tǒng)可以是可縮放的,且可以迅速地執(zhí)行地址翻譯。
[0077]此外,文件服務器9002可以試圖跨帶區(qū)集分配文件系統(tǒng)的累積負載和每一文件系統(tǒng)的單個負載。當文件系統(tǒng)請求磁盤空間擴大時,文件服務器9002考慮多個因素以確定選擇哪一個帶區(qū)集用于磁盤空間的下一次分配。用于評估帶區(qū)集的示例性因素包括在帶區(qū)集上需要分配的組塊的數(shù)目,以使得帶區(qū)集與最滿的帶區(qū)集和在帶區(qū)集上正由文件系統(tǒng)使用的組塊的數(shù)目成比例地滿。
[0078]在一些實施例中,示例性的因素對跨帶區(qū)集平衡文件系統(tǒng)的負載在帶區(qū)集上實現(xiàn)平衡總負載的優(yōu)先級,或者反之亦然。當跨度上的大多數(shù)或全部的文件系統(tǒng)被預計很忙時,跨帶區(qū)平衡總負載可能具有更重要的優(yōu)先級。當小比例的文件系統(tǒng)被預計很忙時,在任何給定的時刻或在峰值時刻期間,跨帶區(qū)集平衡每一文件系統(tǒng)的負載可能變成優(yōu)先。可以以應用于參數(shù)的權(quán)重來實現(xiàn)這些目標的相對重要性以確定下一個應該從其處分配磁盤空間的帶區(qū)集。上述權(quán)重可以是跨度權(quán)重和文件系統(tǒng)權(quán)重。較大的跨度權(quán)重以平衡跨帶區(qū)集的跨度的總負載為優(yōu)先,且跨度權(quán)重被應用于測量跨帶區(qū)集的組塊分配的不平衡(例如,在帶區(qū)集上將需要分配的以使得帶區(qū)集與最滿的帶區(qū)集成比例的滿的組塊的數(shù)目)。較大的文件系統(tǒng)權(quán)重以跨帶區(qū)集平衡活動文件系統(tǒng)為優(yōu)先,且文件系統(tǒng)權(quán)重被應用于針對跨帶區(qū)集的特定文件系統(tǒng)測量組塊分配的不平衡。
[0079]在一些實施例中,文件服務器9002具有針對跨度和文件系統(tǒng)權(quán)重存儲不同值的單個組塊分配器9014。在各個實施例中,文件服務器9002具有不同的組件分配器9014,其可以針對跨度和文件系統(tǒng)權(quán)重具有不同的值,且文件服務器9002可以基于客戶端進行請求、文件系統(tǒng)被擴大或任何其他的變量選擇組塊分配器9014以處理對磁盤空間擴大的請求?;诒旧暾堉杏懻摰闹辽龠@些參數(shù),文件服務器9002上的組塊分配器9014選擇包括向文件系統(tǒng)分配的最后的組塊的帶區(qū)集或一新的帶區(qū)集。
[0080]當組塊分配器9014選擇具有文件系統(tǒng)的最后分配的組塊的帶區(qū)集時,組塊分配器9014,當可能時,分配緊跟在最后的組塊之后的組塊。當組塊分配器9014選擇新的帶區(qū)集時,組塊分區(qū)器9014分配組塊且其還針對來自文件系統(tǒng)的未來的請求(例如,主張的組塊串),預留磁盤空間的多個隨后的、連續(xù)的組塊。從而,當文件系統(tǒng)請求另外的磁盤空間時,組塊分配器9014可以從已經(jīng)為其留出的磁盤空間分配組塊。此外,當組塊分配器9014在新的帶區(qū)集上搜索磁盤空間時,組塊分配器9014可以繞過已經(jīng)被預留用于其他文件系統(tǒng)的可用組塊。
[0081]關于要預留的連續(xù)組塊的數(shù)目,文件服務器9002可以確定用于跨度的組塊串偏置。雖然文件服務器9002將分配與組塊串偏置對應的組塊的數(shù)目,但是在一些情形下,文件服務器9002可以分配不同的數(shù)目,如下文更詳細描述的。
[0082]現(xiàn)在描述具體示例性實施例的細節(jié)。在這些具體的示例性實施例中,文件服務器9002接收關于與跨帶區(qū)集分配單個文件系統(tǒng)的負載相比跨帶區(qū)集分配跨度的總負載的相對重要性的信息。在一些實施例中,文件服務器9002針對跨度權(quán)重和文件系統(tǒng)權(quán)重存儲缺省值。在一些實施例中,文件服務器9002的管理員可以將跨度權(quán)重和文件系統(tǒng)權(quán)重輸入到文件服務器9002。在一些實施例中,管理員針對跨度中的每一文件系統(tǒng)輸入個別的和/或不同的文件系統(tǒng)權(quán)重。在一些實施例中,在向文件服務器系統(tǒng)訂制或請求新的文件系統(tǒng)之后,客戶端可以輸入跨度和/或文件系統(tǒng)權(quán)重以由文件服務器9002存儲。文件服務器9002可以將權(quán)重存儲在組塊分配器9014中。在一些實施例中,文件服務器9002將權(quán)重存儲在跨度磁盤上配置中(例如,Cod)。
[0083]在各個實施例中,權(quán)重的值的范圍在零(O)和十(10)之間。跨度權(quán)重和文件系統(tǒng)權(quán)重的缺省值可以是10。在一些實現(xiàn)中,如果客戶不提供關于針對負載分配的優(yōu)先級的信息,則文件服務器9002將跨度權(quán)重和文件系統(tǒng)權(quán)重設置成相同的值。該值可以是十(10)、五(5)、或由本領域的普通技術人員所期望的任何其他值。
[0084]文件服務器9002確定針對該跨度的組塊串偏置。在一些實施例中,文件服務器9002使用由客戶針對客戶的跨度和/或文件系統(tǒng)輸入的組塊串偏置。在一些實施例中,文件服務器9002使用在存儲器中存儲的缺省值。缺省組塊串偏置可以是64個組塊,雖然還可以使用其他的缺省值。
[0085]在一些實施例中,文件服務器9002基于文件系統(tǒng)的數(shù)目和跨度上帶區(qū)集的數(shù)目來確定組塊串偏置。例如,當跨度具有幾個組塊和很多帶區(qū)集時,較小的組塊串偏置可以提高跨帶區(qū)集的負載平衡。文件服務器9002可以根據(jù)跨度的參數(shù)減小組塊串偏置。
[0086]在一些實施例中,文件服務器9002可以將帶區(qū)集的數(shù)目除以2。文件服務器9002可以將結(jié)果值除以文件系統(tǒng)的數(shù)目。文件服務器9002可以將結(jié)果值與在存儲器中存儲的缺省組塊串偏置進行比較,并將組塊串偏置設置成較小的值。在一些實施例中,針對跨度的組塊串偏置可以在O個組塊與250個組塊之間,雖然還可以使用其他范圍的針對組塊串偏置的潛在值。
[0087]在操作中,在客戶端設備9006處的用戶向文件服務器9002發(fā)送請求以擴大針對文件系統(tǒng)的磁盤空間。在一些實施例中,該請求包括要添加到文件系統(tǒng)的磁盤空間量。文件服務器9002確定與磁盤空間量相對應的組塊數(shù)量,例如,通過將所請求的磁盤空間量除以組塊的指導大小。
[0088]當接收請求以擴大文件系統(tǒng)時,組塊分配器9014選擇一個或多個帶區(qū)集以向文件系統(tǒng)分配組塊。如上文所描述的,組塊分配器9014可以針對文件系統(tǒng)預留帶區(qū)集上的組塊串。由于該原因,當組塊分配器9014確定用于向文件系統(tǒng)進行下一次分配的帶區(qū)集時,組塊分配器9014可以具有朝向帶區(qū)集的偏置,其包括文件系統(tǒng)的最近分配的組塊(在本申請中也稱為“當前的帶區(qū)集”)。在一些情形下,組塊分配器9014還可選擇用于分配的新的帶區(qū)集。組塊分配器9014可以改變成其他的帶區(qū)集以平衡跨度的總負載、跨帶區(qū)集平衡文件系統(tǒng)負載、或出于任何其他的原因。
[0089]在一些實施例中,組塊分配器9014基于至少在帶區(qū)集中需要分配以使得帶區(qū)集與最滿的帶區(qū)集成比例地滿的組塊數(shù)目、帶區(qū)集上已經(jīng)分配給正被擴大的文件系統(tǒng)的所使用的組塊數(shù)量、跨度權(quán)重、以及文件系統(tǒng)權(quán)重來選擇帶區(qū)集。如果組塊分配器9014確定當前的帶區(qū)集上所剩余的可能是有利的,則當選擇該帶區(qū)集時,組塊分配器9014可以通過將偏置因子添加到當前的帶區(qū)集上可用的組塊數(shù)目來偏置其選擇。
[0090]在一些實施例中,組塊分配器9014可以使用各種標準來確定是否將帶區(qū)集的選擇朝向當前的帶區(qū)集偏置。例如,僅在文件系統(tǒng)已經(jīng)具有至少一個所分配的組塊的情況下,組塊分配器9014可以偏置選擇,從而具有當前的帶區(qū)集,且在文件系統(tǒng)的所分配的