專利名稱:一種分布式文件系統(tǒng)中元數(shù)據(jù)緩存管理的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式文件系統(tǒng)中高效的元數(shù)據(jù)緩存管理機制,具體來,涉及一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)緩存管理方法。
背景技術(shù):
在分布式文件系統(tǒng)中,元數(shù)據(jù)服務(wù)器是整個系統(tǒng)的中樞,它擔負著管理整個文件系統(tǒng)所有管理數(shù)據(jù)的任務(wù),在客戶端元數(shù)據(jù)操作比較密集的應用中,元數(shù)據(jù)服務(wù)器的服務(wù)能力是至關(guān)重要的,其吞吐量直接決定了文件系統(tǒng)支持的業(yè)務(wù)響應的速率。在現(xiàn)實元數(shù)據(jù)服務(wù)器中,制約其服務(wù)能力的因素有很多,但總的來說可以分為以下幾類第一,IO的壓力,如磁盤帶寬和網(wǎng)絡(luò)帶寬的不足;第二,并發(fā)處理能力,主要體現(xiàn)在多任務(wù)并發(fā)時,由于互斥或同步而消耗不必要的等待時間;第三,是對于CPU —二級快速緩存的污染,如大量的內(nèi)存拷貝或多核CPU之間的CPU緩存同步。Slab是Linux操作系統(tǒng)的一種內(nèi)存分配機制。與傳統(tǒng)的內(nèi)存管理模式相比,slab 緩存分配器提供了很多優(yōu)點。首先,內(nèi)核通常依賴于對小對象的分配,它們會在系統(tǒng)生命周期內(nèi)進行無數(shù)次分配。slab緩存分配器通過對類似大小的對象進行緩存而提供這種功能, 從而避免了常見的碎片問題。slab分配器還支持通用對象的初始化,從而避免了為同一目而對一個對象重復進行初始化。最后,slab分配器還可以支持硬件緩存對齊和著色,這允許不同緩存中的對象占用相同的緩存行,從而提高緩存的利用率并獲得更好的性能。
發(fā)明內(nèi)容
本發(fā)明旨在公開一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)緩存管理方法,該方法通過多種策略來優(yōu)化元數(shù)據(jù)緩存的管理,盡可能減少由于軟件的使用方式不合理而照成內(nèi)存訪問效率的低下,以及并發(fā)導致的CPU閑置,從而使得元數(shù)據(jù)服務(wù)器能夠充分地利用內(nèi)存和 CPU等硬件資源,提供盡可能高的服務(wù)能力。一種分布式文件系統(tǒng)中元數(shù)據(jù)緩存管理的方法,采用slab技術(shù)管理內(nèi)存。優(yōu)選的,所述內(nèi)存在申請時包括定長結(jié)構(gòu)和變長結(jié)構(gòu)。優(yōu)選的,所述定長結(jié)構(gòu)通過slab技術(shù)通過mmap —次性向系統(tǒng)分配內(nèi)存來管理,分配的內(nèi)存容納了需要數(shù)量的不同類型的定長結(jié)構(gòu)。優(yōu)選的,所述變成結(jié)構(gòu)通過預創(chuàng)建slab來管理,所述slab最小為可容納的最小變長結(jié)構(gòu),并以2的階乘遞增,最大為可容納的最大變長結(jié)構(gòu)。優(yōu)選的,所述變長結(jié)構(gòu)在使用時,將請求的內(nèi)存落在slab集合中大小與其最接近的 slab。優(yōu)選的,所述slab內(nèi)部,將大塊內(nèi)存拆分為小單元時,起始地址與CPU的 cacheline大小對齊。優(yōu)選的,所述每個slab,為每個線程配備一個私有緩存,用于存儲該線程操作的內(nèi)
存單元。
優(yōu)選的,所述線程需要進行內(nèi)存分配和釋放時,先操作私有緩存,如果私有緩存內(nèi)的內(nèi)存單元能夠滿足需求,則不需要對共有的內(nèi)存塊進行操作。優(yōu)選的,所述每個slab,根據(jù)每個線程內(nèi)存分配釋放的統(tǒng)計量,動態(tài)調(diào)整私有緩存的大小,使用slab頻率高的線程配備的私有緩存相對較大,使用slab頻率低的線程配備的私有緩存相對較小。優(yōu)選的,所述slab在各個線程的私有緩存之間進行均衡,將釋放內(nèi)存較多的線程私有cache中的內(nèi)存單元,直接搬移到申請需求較多的線程私有緩存。
具體實施例方式在元數(shù)據(jù)服務(wù)器中,常用的內(nèi)存結(jié)構(gòu)分為兩類第一類是定長的結(jié)構(gòu),這類內(nèi)存結(jié)構(gòu)通常常駐內(nèi)存,系統(tǒng)會頻繁的申請、釋放和訪問此類內(nèi)存結(jié)構(gòu),如索引節(jié)點、目錄項、消息結(jié)構(gòu)等;第二類是變長結(jié)構(gòu),該類內(nèi)存結(jié)構(gòu)通常是在系統(tǒng)運轉(zhuǎn)過程中分配的臨時內(nèi)存單元。對于服務(wù)器模型,通常會引入集中處理的方法,以減少并發(fā)帶來的性能下降。因此,服務(wù)器的內(nèi)存使用還有一個特性,就是通常分配內(nèi)存和釋放內(nèi)存的線程是不同的,這就大大增加了內(nèi)存分配和釋放的并發(fā)壓力,制約了系統(tǒng)的整體性能。(1)對于定長結(jié)構(gòu),引入slab技術(shù)進行管理,即通過mmap —次性向系統(tǒng)分配大塊內(nèi)存,該大塊內(nèi)存能夠容納若干需要的定長結(jié)構(gòu),通過自己的管理結(jié)構(gòu)進行管理,這樣以來,就減少了向系統(tǒng)申請釋放內(nèi)存的頻度,降低了并發(fā)性。同時,由于不同類型的定長結(jié)構(gòu)有自己的slab,因此不同線程訪問時,只需在各自slab內(nèi)存進行并發(fā)控制,不會影響到其他的slab。(2)對于變長的內(nèi)存結(jié)構(gòu),預創(chuàng)建一批slab,大小以2的階乘遞增。在使用時,將請求落在與slab集合中大小與之最接近的slab即可。這樣以來,隨機大小的內(nèi)存分配并發(fā)度也被大大降低。(3) slab內(nèi)部,將大塊內(nèi)存拆分為小單元時,起始地址與CPU的cacheline大小對齊,減少對于CPU緩存的污染。(4)單個slab,為了降低并發(fā)帶來的性能下降,為每個線程配備一個私有緩存,用于存儲該線程操作的內(nèi)存單元。線程需要進行內(nèi)存分配和釋放時,先操作私有緩存,如果私有緩存內(nèi)的內(nèi)存單元能夠滿足需求,則不需要對共有的內(nèi)存塊進行操作。這樣以來,同一個 slab的各個使用線程基本獨立,產(chǎn)生并發(fā)訪問的幾率幾乎為0。(5)對于每個slab,根據(jù)個線程內(nèi)存分配釋放的統(tǒng)計量,動態(tài)調(diào)整私有緩存的大小使用slab頻率高的線程,為其配備的私有緩存相對較大,以減少其訪問slab共有內(nèi)存區(qū)的幾率;對于使用slab頻率低的線程,為其配備的私有緩存相對較小,以減少不必要的浪費。(6)由于在服務(wù)器模型中,經(jīng)常使用任務(wù)集中處理的模式,因此使用slab的線程, 可能部分只申請內(nèi)存,而另一部分只釋放內(nèi)存,從而導致線程操作slab共有內(nèi)存區(qū)的頻率較高。因此,在slab各個線程私有緩存之間進行均衡,將釋放內(nèi)存較多的線程私有cache 中的內(nèi)存單元直接搬移到申請需求較多的線程私有緩存,而不是直接歸還給slab共有內(nèi)存區(qū)。這樣大大降低了 slab內(nèi)部各個線程的并發(fā)度,提高了性能。
權(quán)利要求
1.一種分布式文件系統(tǒng)中元數(shù)據(jù)緩存管理的方法,其特征在于采用Slab技術(shù)管理內(nèi)存。
2.如權(quán)利要求1所述的方法,其特征在于所述內(nèi)存在申請時包括定長結(jié)構(gòu)和變長結(jié)構(gòu)。
3.如權(quán)利要求2所述的方法,其特征在于所述定長結(jié)構(gòu)通過slab技術(shù)通過mmap— 次性向系統(tǒng)分配內(nèi)存來管理,分配的內(nèi)存容納了需要數(shù)量的不同類型的定長結(jié)構(gòu)。
4.如權(quán)利要求2所述的方法,其特征在于所述變成結(jié)構(gòu)通過預創(chuàng)建slab來管理,所述slab最小為可容納的最小變長結(jié)構(gòu),并以2的階乘遞增,最大為可容納的最大變長結(jié)構(gòu)。
5.如權(quán)利要求4所述的方法,其特征在于所述變長結(jié)構(gòu)在使用時,將請求的內(nèi)存落在 slab集合中大小與其最接近的slab。
6.如權(quán)利要求1所述的方法,其特征在于所述slab內(nèi)部,將大塊內(nèi)存拆分為小單元時,起始地址與CPU的cacheline大小對齊。
7.如權(quán)利要求1所述的方法,其特征在于所述每個slab,為每個線程配備一個私有緩存,用于存儲該線程操作的內(nèi)存單元。
8.如權(quán)利要求7所述的方法,其特征在于所述線程需要進行內(nèi)存分配和釋放時,先操作私有緩存,如果私有緩存內(nèi)的內(nèi)存單元能夠滿足需求,則不需要對共有的內(nèi)存塊進行操作。
9.如權(quán)利要求1所述的方法,其特征在于所述每個slab,根據(jù)每個線程內(nèi)存分配釋放的統(tǒng)計量,動態(tài)調(diào)整私有緩存的大小,使用slab頻率高的線程配備的私有緩存相對較大, 使用slab頻率低的線程配備的私有緩存相對較小。
10.如權(quán)利要求1所述的方法,其特征在于所述Slab在各個線程的私有緩存之間進行均衡,將釋放內(nèi)存較多的線程私有cache中的內(nèi)存單元,直接搬移到申請需求較多的線程私有緩存。
全文摘要
本發(fā)明公開了一種分布式文件系統(tǒng)中高效的元數(shù)據(jù)緩存管理方法,該方法通過多種策略來優(yōu)化元數(shù)據(jù)緩存的管理,盡可能減少由于軟件的使用方式不合理而照成內(nèi)存訪問效率的低下,以及并發(fā)導致的CPU閑置,從而使得元數(shù)據(jù)服務(wù)器能夠充分地利用內(nèi)存和CPU等硬件資源,提供盡可能高的服務(wù)能力。
文檔編號G06F12/08GK102375780SQ20111032647
公開日2012年3月14日 申請日期2011年10月25日 優(yōu)先權(quán)日2011年10月25日
發(fā)明者劉新春, 張東陽, 楊浩, 王勇, 苗艷超, 邵宗有, 馬振杰, 馬照云 申請人:無錫城市云計算中心有限公司