一種輔助記錄的組織方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種分布式文件操作方法,具體涉及一種輔助記錄的組織方法。
【背景技術(shù)】
[0002]并行存儲(chǔ)系統(tǒng)中,經(jīng)常需要記錄一些輔助記錄或者索引來達(dá)到特定目的,如在創(chuàng)建過程中記錄哪些磁盤上保存了該文件的數(shù)據(jù),這樣我們就能準(zhǔn)確的知道那個(gè)磁盤上保存了哪些文件,當(dāng)發(fā)生磁盤故障時(shí)能夠快速的修復(fù)這些文件;服務(wù)端收到客戶端的刪除請求時(shí)只刪除dentry項(xiàng),并不回收磁盤數(shù)據(jù),而是將刪除記錄下來后應(yīng)答客戶端,后臺由獨(dú)立回收線程完成真正的刪除,以達(dá)到快速響應(yīng)用戶的目的。
[0003]在日志分布式文件系統(tǒng)中,這些記錄同樣需要記錄日志以達(dá)到跟元數(shù)據(jù)相同的保護(hù)級別,否則當(dāng)系統(tǒng)發(fā)生掉電等故障時(shí)這些記錄有可能是不可信的。這些記錄具有以下特點(diǎn):同類型記錄之間是獨(dú)立的,對記錄的存儲(chǔ)位置沒有特別要求,只在需要時(shí)能夠拿到所有記錄,可以含已失效的記錄,但有效記錄不能缺少。
[0004]為了不影響文件系統(tǒng)的并發(fā)性能,這些輔助記錄所在的事務(wù)是不可能在輔助記錄鎖的保護(hù)下進(jìn)行的,所以這類日志只能記錄邏輯日志,利用日志處理線程的無并發(fā)特性在預(yù)處理時(shí)轉(zhuǎn)化成數(shù)據(jù)日志以保證每條記錄在文件內(nèi)偏移量的唯一性。
[0005]這類記錄的原有實(shí)現(xiàn)方式是每類記錄放在同一個(gè)文件,當(dāng)文件中的某個(gè)記錄無效時(shí),添加一條對消記錄,在需要回收該文件時(shí),從頭到尾掃描文件記錄,如果記錄及對消記錄同時(shí)存在則這兩條記錄都會(huì)被刪除,剩余記錄放入原文件以達(dá)到回收目的。
[0006]這種實(shí)現(xiàn)方式存在以下問題:
[0007]I)回收時(shí)可能由于內(nèi)存不足失敗。由于回收時(shí)需要將文件內(nèi)所有記錄load到內(nèi)存并且建立內(nèi)存hash結(jié)構(gòu)以方便記錄及其對消記錄配對,當(dāng)系統(tǒng)內(nèi)存資源本身就比較緊張的情況下,可能由于內(nèi)存分配失敗導(dǎo)致回收失敗。
[0008]2)如果日志系統(tǒng)的邏輯日志到數(shù)據(jù)日志轉(zhuǎn)化過程處于關(guān)鍵路徑,這種實(shí)現(xiàn)方式是不可接受的,這會(huì)使分布式文件系統(tǒng)產(chǎn)生鋸齒狀性能,甚至I分鐘內(nèi)不能響應(yīng)用戶,嚴(yán)重影響用戶體驗(yàn)。這是由于回收會(huì)改變文件長度,進(jìn)而改變新放入記錄的偏移量,所以回收過程必須與邏輯日志到數(shù)據(jù)日志的轉(zhuǎn)化過程互斥,原來的實(shí)現(xiàn)方式中回收也在日志處理線程中進(jìn)行。當(dāng)記錄文件非常大時(shí),即使加上預(yù)讀機(jī)制,這一過程的耗時(shí)相對于文件系統(tǒng)的服務(wù)能力也是非常大的。對于分布式文件系統(tǒng)是不可接受的。
【發(fā)明內(nèi)容】
[0009]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種輔助記錄組織方法,該方法將記錄拆分成多個(gè)獨(dú)立文件進(jìn)行存放,將耗時(shí)的嚴(yán)重影響系統(tǒng)性能的階段從關(guān)鍵路徑剝離出來。使回收時(shí)的內(nèi)存消耗更加可控,同時(shí)由于回收過程由由獨(dú)立后臺線程運(yùn)行,內(nèi)存分配失敗的代價(jià)也大大降低。
[0010]為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采取如下技術(shù)方案:
[0011]一種輔助記錄的組織方法,該方法包括邏輯日志轉(zhuǎn)化為數(shù)據(jù)日志并在內(nèi)存追加記錄的過程和文件回收的過程。
[0012]本發(fā)明提供的第一優(yōu)選技術(shù)方案中,所述邏輯日志轉(zhuǎn)化為數(shù)據(jù)日志并在內(nèi)存追加記錄的過程的步驟如下:
[0013](I)根據(jù)邏輯日志查找記錄的內(nèi)存結(jié)構(gòu);
[0014](2)獲取要寫入的頁號、頁內(nèi)偏移量和頁所屬的文件號;
[0015](3)從頁緩存中獲取頁并將頁引用計(jì)數(shù)加I ;
[0016](4)根據(jù)頁內(nèi)剩余空間及本次要追加寫入的記錄條數(shù)將記錄拷入頁緩存;若頁剩余空間不足則將本頁放滿后分配新頁直到將本次寫入記錄全部放入頁緩存;
[0017](5)對新寫入的記錄生成數(shù)據(jù)日志,并獲取頁的引用計(jì)數(shù);
[0018](6)更新記錄內(nèi)存結(jié)構(gòu);
[0019](7)釋放從頁緩存獲取頁時(shí)所加計(jì)數(shù),即將頁引用計(jì)數(shù)減I。
[0020]本發(fā)明提供的第二優(yōu)選技術(shù)方案中,所述文件回收過程的步驟如下:
[0021](I)找到要回收的記錄類型的內(nèi)存結(jié)構(gòu);
[0022](2)從最小的文件號開始對每個(gè)文件進(jìn)行掃描;
[0023](3)讀取文件號對應(yīng)的文件中的每一頁,并判斷頁內(nèi)記錄是否仍然有效,若有效則將記錄放入臨時(shí)緩存中;
[0024](4)判斷文件內(nèi)無效記錄是否達(dá)到初設(shè)比例,若沒有達(dá)到初設(shè)比例,則跳轉(zhuǎn)到步驟(3);若達(dá)到初設(shè)比例,則對臨時(shí)緩存中的記錄生成邏輯日志,并生成刪除無效頁對應(yīng)的文件的刪除日志。
[0025]本發(fā)明提供的第三優(yōu)選技術(shù)方案中,所述邏輯日志為操作記錄的日志,如添加、修改和刪除一項(xiàng)記錄。
[0026]本發(fā)明提供的第四優(yōu)選技術(shù)方案中,所述數(shù)據(jù)日志為在特定文件的特定偏移量寫入具體數(shù)據(jù)的日志。
[0027]與最接近的現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)異效果在于:
[0028]本發(fā)明提供的技術(shù)方案將文件拆分成了小文件,使回收時(shí)的內(nèi)存消耗更加可控,同時(shí),由于回收過程由獨(dú)立后臺線程運(yùn)行,內(nèi)存分配失敗的代價(jià)也大大降低。將耗時(shí)的嚴(yán)重影響系統(tǒng)性能的階段從關(guān)鍵路徑剝離出來,提升了關(guān)鍵路徑的處理速度,大大提高了用戶體驗(yàn)的滿意度。
【附圖說明】
[0029]圖1是磁盤結(jié)構(gòu)示意圖
[0030]圖2是內(nèi)存結(jié)構(gòu)示意圖
[0031]圖3是邏輯日志轉(zhuǎn)為數(shù)據(jù)日志的流程圖
[0032]圖4是記錄文件回收的流程圖
【具體實(shí)施方式】
[0033]下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0034]如圖1所示,組織方法的磁盤結(jié)構(gòu)為每類記錄元數(shù)據(jù)文件都包含每類記錄的唯一標(biāo)識fid和無效記錄數(shù)invalidnr。當(dāng)無效記錄數(shù)達(dá)到一定比例才進(jìn)行回收,所述一定比例默認(rèn)為30%,也可以自由調(diào)整。每類記錄磁盤上有多個(gè)記錄文件。
[0035]如圖2所示,組織方法的內(nèi)存結(jié)構(gòu)包括用于保護(hù)結(jié)構(gòu)內(nèi)容的讀寫鎖rwlock、本類記錄當(dāng)前最小subid號min_subid(便于獲取回收及順序讀取的起始文件)、本類記錄當(dāng)前最大subid號max_subid (用于文件滿創(chuàng)建新文件時(shí)subid分配,也用于追加記錄時(shí)文件查找)、追加記錄時(shí)需要寫入的頁號last_pgidx、追加記錄時(shí)的頁內(nèi)偏移pgoff、磁盤元數(shù)據(jù)content 和頁緩存 pgtree。
[0036]頁內(nèi)存結(jié)構(gòu)包括磁盤內(nèi)容是否讀入頁緩存標(biāo)記flag、本頁所屬的文件subid、本頁在文件內(nèi)的偏移量pgidx、本頁內(nèi)記錄長度(單個(gè)記錄長度不一定能被頁大小整除,所有有效記錄長度可能與頁大小不同)rdlen、頁引用計(jì)數(shù)(只有當(dāng)頁引用計(jì)數(shù)為I時(shí)才能回收頁內(nèi)存,頁初始計(jì)數(shù)為1,當(dāng)頁被使用時(shí)需要抓頁計(jì)數(shù),使用完畢釋放計(jì)數(shù),此外,對頁記錄日志也要抓頁計(jì)數(shù),當(dāng)日志將數(shù)據(jù)應(yīng)用到磁盤后釋放頁計(jì)數(shù),這樣可以防止頁提前釋放導(dǎo)致舊數(shù)據(jù)被讀取)refcnt、記錄內(nèi)容(記錄在頁內(nèi)逐條放置并在內(nèi)存記錄追加記錄不會(huì)跨頁存放)rdblk。
[0037]如圖3所示,邏輯日志轉(zhuǎn)為數(shù)據(jù)日志并在內(nèi)存追加記錄流程,具體步驟如下:
[0038](I)根據(jù)邏輯日志查找記錄內(nèi)存結(jié)構(gòu);
[0039](2)獲取要寫入的頁號、頁內(nèi)偏移量和頁所屬的文件號subid ;
[0040](3)從頁緩存pgtree中獲取頁并加計(jì)數(shù);
[0041](4)根據(jù)頁內(nèi)剩余空間及本次要追加寫入的記錄條數(shù)將記錄拷入頁緩存;若頁剩余空間不足則將本頁放滿后分配新頁直到將本次寫入記錄全部放入頁緩存;
[0042](5)對新寫入的記錄生成數(shù)據(jù)日志,并獲取頁的引用計(jì)數(shù);
[0043](6)更新記錄內(nèi)存結(jié)構(gòu);
[0044](7)釋放從頁緩存獲取頁時(shí)所加計(jì)數(shù),即將頁引用計(jì)數(shù)減I。
[0045]如圖4所示,所述文件回收過程的步驟如下:
[0046](I)找到要回收的記錄類型的內(nèi)存結(jié)構(gòu);
[0047](2)從最小的文件號開始對每個(gè)文件進(jìn)行掃描;
[0048](3)讀取文件號對應(yīng)的文件中的每一頁,并判斷頁內(nèi)記錄是否仍然有效,若有效則將記錄放入臨時(shí)緩存中;
[0049](4)判斷文件內(nèi)無效記錄是否達(dá)到初設(shè)比例,若沒有達(dá)到初設(shè)比例,則跳轉(zhuǎn)到步驟
(3);若達(dá)到初設(shè)比例,則對臨時(shí)緩存中的記錄生成邏輯日志,并生成刪除無效頁對應(yīng)的文件的刪除日志。
[0050]邏輯日志為操作記錄的日志,如添加、修改和刪除一項(xiàng)記錄。
[0051 ] 數(shù)據(jù)日志為在特定文件的特定偏移量寫入具體數(shù)據(jù)的日志。
[0052]最后應(yīng)當(dāng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制,盡管參照上述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,所屬領(lǐng)域的普通技術(shù)人員依然可以對本發(fā)明的【具體實(shí)施方式】進(jìn)行修改或者等同替換,這些未脫離本發(fā)明精神和范圍的任何修改或者等同替換,均在申請待批的本發(fā)明的權(quán)利要求保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種輔助記錄的組織方法,其特征在于,該方法包括邏輯日志轉(zhuǎn)化為數(shù)據(jù)日志并在內(nèi)存追加記錄的過程和文件回收的過程。
2.根據(jù)權(quán)利要求1所述輔助記錄的組織方法,其特征在于,所述邏輯日志轉(zhuǎn)化為數(shù)據(jù)日志并在內(nèi)存追加記錄的過程的步驟如下: (1)根據(jù)邏輯日志查找記錄的內(nèi)存結(jié)構(gòu); (2)獲取要寫入的頁號、頁內(nèi)偏移量和該頁所屬的文件號; (3)從頁緩存中獲取該頁并將該頁引用計(jì)數(shù)加I; (4)根據(jù)該頁內(nèi)剩余空間及本次要追加寫入的記錄條數(shù)將記錄拷入該頁緩存;若該頁剩余空間不足則將本頁放滿后分配新頁直到將本次寫入記錄全部放入該頁緩存; (5)對新寫入的記錄生成數(shù)據(jù)日志,并獲取該頁的引用計(jì)數(shù); (6)更新記錄內(nèi)存結(jié)構(gòu); (7)釋放從所述頁緩存獲取所述頁時(shí)所加計(jì)數(shù),即將所述頁引用計(jì)數(shù)減I。
3.根據(jù)權(quán)利要求1所述輔助記錄的組織方法,其特征在于,所述文件回收過程的步驟如下: (1)找到要回收的記錄類型的內(nèi)存結(jié)構(gòu); (2)從最小的文件號開始對每個(gè)文件進(jìn)行掃描; (3)讀取文件號對應(yīng)的文件中的每一頁,并判斷頁內(nèi)記錄是否仍然有效,若有效則將記錄放入臨時(shí)緩存中; (4)判斷文件內(nèi)無效記錄是否達(dá)到初設(shè)比例,若沒有達(dá)到初設(shè)比例,則跳轉(zhuǎn)到步驟(3);若達(dá)到初設(shè)比例,則對臨時(shí)緩存中的記錄生成邏輯日志,并生成刪除無效頁對應(yīng)的文件的刪除日志。
4.根據(jù)權(quán)利要求1所述輔助記錄的組織方法,其特征在于,所述邏輯日志為操作記錄的日志,如添加、修改和刪除一項(xiàng)記錄。
5.根據(jù)權(quán)利要求1所述輔助記錄的組織方法,其特征在于,所述數(shù)據(jù)日志為在特定文件的特定偏移量寫入具體數(shù)據(jù)的日志。
【專利摘要】本發(fā)明提供一種輔助記錄的組織方法,該方法包括邏輯日志轉(zhuǎn)化為數(shù)據(jù)日志并在內(nèi)存追加記錄的過程和文件回收的過程。本發(fā)明提供的方法將文件拆分成了小文件,使回收時(shí)的內(nèi)存消耗更加可控,同時(shí),由于回收過程由獨(dú)立后臺線程運(yùn)行,內(nèi)存分配失敗的代價(jià)也大大降低。將耗時(shí)的嚴(yán)重影響系統(tǒng)性能的階段從關(guān)鍵路徑剝離出來,提升了關(guān)鍵路徑的處理速度,大大提高了用戶體驗(yàn)的滿意度。
【IPC分類】G06F17-30
【公開號】CN104615652
【申請?zhí)枴緾N201410838249
【發(fā)明人】馬照云, 楊浩, 馬振杰
【申請人】曙光云計(jì)算技術(shù)有限公司
【公開日】2015年5月13日
【申請日】2014年12月29日