一種提升web服務(wù)器性能的文件系統(tǒng)及方法
【專利摘要】本發(fā)明提供一種提升web服務(wù)器性能的文件系統(tǒng)及方法,該文件系統(tǒng)包括磁盤空間,磁盤空間包括磁盤元數(shù)據(jù)區(qū)和磁盤數(shù)據(jù)區(qū);磁盤元數(shù)據(jù)區(qū)包括文件系統(tǒng)超級塊、文件目錄項位圖、卷信息數(shù)組、以及文件目錄項;磁盤數(shù)據(jù)區(qū)包括多個大小固定的卷;其中,每個卷包括多個大小相同的文件磁盤塊,文件磁盤塊用于存放web服務(wù)器中的小文件。本發(fā)明針對web服務(wù)器中保存大量小文件的應(yīng)用環(huán)境簡化磁盤空間管理,使得文件數(shù)據(jù)連續(xù)存放,避免了磁盤碎片;減少讀寫文件數(shù)據(jù)過程中磁盤操作次數(shù),減少文件系統(tǒng)的API交互次數(shù),有效提升了文件系統(tǒng)的性能;通過Hash鏈表數(shù)組,簡化并加快了文件定位過程;所述文件系統(tǒng)的IO操作采用異步模式,消除了同步IO操作時阻塞應(yīng)用程序的問題。
【專利說明】一種提升web服務(wù)器性能的文件系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機硬件管理領(lǐng)域,涉及一種文件系統(tǒng)及方法,特別是涉及一種提升web服務(wù)器性能的文件系統(tǒng)及方法。
【背景技術(shù)】
[0002]在操作系統(tǒng)中,文件系統(tǒng)處于一個很重要的地位,隨著計算機硬件性能(諸如CPU,總線帶寬)的不斷提升,硬盤正日益成為系統(tǒng)性能瓶頸所在。而文件系統(tǒng)用來管理磁盤上數(shù)據(jù),如何高效地管理磁盤數(shù)據(jù),充分發(fā)揮磁盤設(shè)備的性能一直是文件系統(tǒng)追求的目標。
[0003]較早的諸如ext2文件系統(tǒng)將磁盤按照固定大小如1024字節(jié),2048字節(jié),4096字節(jié)等劃分成塊,文件數(shù)據(jù)存放在塊中,這樣導(dǎo)致超過塊大小的文件無法連續(xù)存放,小于磁盤塊大小的文件可能會導(dǎo)致嚴重的磁盤碎片問題。
[0004]由Hans Reiser及其團隊Namesys開發(fā)的ResierFs擅長處理小文件居多的應(yīng)用環(huán)境。ResierFs對一些小文件不分配inode,而是將這些小文件打包,存放在同一個磁盤分塊中。而且ReiserFS是基于快速平衡樹(balanced tree)搜索,平衡樹在搜索性能上非常卓越。
[0005]Silicon Graphics為IRIX操作系統(tǒng)開發(fā)的高性能日志文件系統(tǒng)XFS擅長處理大文件。它提供了基于extent的分配方式,可變塊尺寸允許用戶根據(jù)需要在格式化時指定塊大小,從512字節(jié)到64KB不等,其在小文件應(yīng)用環(huán)境下可盡量減少磁盤碎片問題,延遲分配機制可最大限度地連續(xù)存放文件數(shù)據(jù),并且在提高性能的同時能夠減少磁盤碎片問題。
[0006]上述傳統(tǒng)文件系統(tǒng)采用各種思想來對文件系統(tǒng)性能進行優(yōu)化,但由于需要為文件保存inode,dentry等數(shù)據(jù)結(jié)構(gòu),因此每次讀寫數(shù)據(jù)之前需要進行多次額外的磁盤操作,這樣便無法保證文件數(shù)據(jù)在磁盤上連續(xù)存放的同時盡量減少磁盤碎片。傳統(tǒng)文件系統(tǒng)在讀文件數(shù)據(jù)之前首先需要查找文件的元數(shù)據(jù)信息,而這通常也是保存在磁盤上。這樣,在讀有效數(shù)據(jù)前需要多次IO操作來定位文件的存儲位置。對于小文件來說,這會成倍地降低文件系統(tǒng)性能。雖然可以對部分文件元數(shù)據(jù)進行緩存,但由于當前文件系統(tǒng)的元數(shù)據(jù)信息過于復(fù)雜,緩存量不應(yīng)過大。因此,讀寫過程的主要時間消耗在磁頭定位過程,這樣便對小文件IO性能產(chǎn)生了影響。還有傳統(tǒng)IO操作是同步操作,同步IO請求執(zhí)行過程中會阻塞應(yīng)用程序,這樣會影響應(yīng)用程序的性能問題。
【發(fā)明內(nèi)容】
[0007]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種提升web服務(wù)器性能的文件系統(tǒng)及方法,用于解決現(xiàn)有技術(shù)中大文件數(shù)據(jù)無法連續(xù)存放的在磁盤上,小文件數(shù)據(jù)會帶來磁盤碎片、以及IO性能和應(yīng)用程序性能降低的問題。
[0008]為實現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種提升web服務(wù)器性能的文件系統(tǒng),所述文件系統(tǒng)包括所述磁盤空間包括磁盤元數(shù)據(jù)區(qū)和磁盤數(shù)據(jù)區(qū);所述磁盤元數(shù)據(jù)區(qū)包括文件系統(tǒng)超級塊、文件目錄項位圖、卷信息數(shù)組、以及文件目錄項;所述磁盤數(shù)據(jù)區(qū)包括多個大小固定的卷;其中,每個卷包括多個大小相同、連續(xù)的文件磁盤塊,所述文件磁盤塊用于存放web服務(wù)器中的小文件。
[0009]優(yōu)選地,所述卷的大小是可調(diào)節(jié)的,從32MB增長至256MB。
[0010]優(yōu)選地,所述文件磁盤塊的大小是可調(diào)節(jié)的,從4KB按倍增長至128KB。
[0011]優(yōu)選地,所述文件目錄項包括文件名、文件磁盤塊號以及文件大小,所述文件目錄項緩存于內(nèi)存中組織成Hash鏈表數(shù)組。
[0012]優(yōu)選地,所述文件系統(tǒng)還包括簡化后的應(yīng)用程序接口,所述簡化后的應(yīng)用程序接口包括mount應(yīng)用程序接口、unmount應(yīng)用程序接口、read應(yīng)用程序接口、write應(yīng)用程序接口、delete應(yīng)用程序接口、以及flush應(yīng)用程序接口。
[0013]本發(fā)明提供一種提升web服務(wù)器性能的方法,其特征在于:所述方法包括:
[0014]將磁盤空間劃分成磁盤元數(shù)據(jù)區(qū)和磁盤數(shù)據(jù)區(qū);
[0015]將所述磁盤元數(shù)據(jù)區(qū)劃分成文件系統(tǒng)超級塊、文件目錄項位圖、卷標信息數(shù)組、以及文件目錄項;
[0016]將所述磁盤數(shù)據(jù)區(qū)劃分成多個大小固定的卷;其中,每個卷被劃分成多個大小相同連續(xù)的文件磁盤塊。
[0017]優(yōu)選地,所述方法還包括查找元數(shù)據(jù)區(qū)上的信息;所述查找元數(shù)據(jù)區(qū)上的信息的實現(xiàn)步驟包括:
[0018]Q1,簡化文件元數(shù)據(jù)區(qū)上的信息,只記錄文件名、文件磁盤塊號、以及文件大?。?br>
[0019]Q2,簡化應(yīng)用程序接口 ;
[0020]Q3,將文件目錄項全部緩存于內(nèi)存之中;
[0021]Q4,通過文件名進行Hash查找,將所述文件目錄項鏈入Hash鏈表數(shù)組中。
[0022]優(yōu)選地,所述方法還包括異步執(zhí)行應(yīng)用程序。
[0023]優(yōu)選地,當所述應(yīng)用程序為read應(yīng)用程序時,異步執(zhí)行read應(yīng)用程序的過程包括:
[0024]Rl,根據(jù)文件名計算Hash ;
[0025]R2,通過Hash在Hash鏈表數(shù)組中查找該文件的文件目錄項;
[0026]R3,判讀查找是否成功;如果查找失敗,返回,文件不存在在該文件目錄項中;如果查找成功,繼續(xù)執(zhí)行R4;
[0027]R4,根據(jù)找到的文件目錄項獲取文件的磁盤塊號等信息,并為本次read請求創(chuàng)建IO請求結(jié)構(gòu),初始化所述IO請求結(jié)構(gòu);10請求結(jié)構(gòu)的格式為:
[0028]IO請求編號;
[0029]IO請求中包含的數(shù)據(jù)緩沖區(qū)的起始地址;
[0030]IO請求中數(shù)據(jù)緩沖區(qū)的長度;
[0031]待read的扇區(qū)號;
[0032]待read的扇區(qū)數(shù);
[0033]請求完成狀態(tài);
[0034]R5,設(shè)置IO請求參數(shù),文件系統(tǒng)根據(jù)為文件分配的磁盤塊號初始化IO請求的參數(shù),所述參數(shù)包括將磁盤塊號轉(zhuǎn)化扇區(qū)號,read的磁盤塊數(shù)轉(zhuǎn)化為扇區(qū)數(shù);
[0035]R6,將所創(chuàng)建的的IO請求結(jié)構(gòu)添加到所述磁盤驅(qū)動的控制器中,即將IO請求插入的IO請求隊列等待IO線程處理;返回成功狀態(tài)。
[0036]優(yōu)選地,當所述應(yīng)用程序為write應(yīng)用程序時,異步執(zhí)行write應(yīng)用程序的過程包括:
[0037]Rr,為待寫入的文件數(shù)據(jù)分配數(shù)據(jù)空間;
[0038]R2’,判斷分配所述數(shù)據(jù)空間是否成功;
[0039]R3 ’,分配所述磁盤文件目錄項;
[0040]R4’,判斷分配所述磁盤文件目錄項是否成功;如果文件目錄項空間使用完畢,則返回失??;為待寫入的文件數(shù)據(jù)分配磁盤文件目錄項空間,根據(jù)磁盤文件目錄項空間位圖信息分配;為該文件數(shù)據(jù)構(gòu)造一個內(nèi)存文件目錄項,并初始化所述內(nèi)存文件目錄項;將所述內(nèi)存文件目錄項插入Hash鏈表數(shù)組中;為write請求創(chuàng)建并初始化IO請求結(jié)構(gòu);該IO請求結(jié)構(gòu)的格式為:
[0041]IO請求編號;
[0042]IO請求中包含的數(shù)據(jù)緩沖區(qū)的起始地址;
[0043]IO請求中數(shù)據(jù)緩沖區(qū)的長度;
[0044]待write的扇區(qū)號;
[0045]待write的扇區(qū)數(shù);
[0046]請求完成狀態(tài);
[0047]R5’,設(shè)置所述IO請求參數(shù),文件系統(tǒng)根據(jù)為文件分配的磁盤塊號初始化IO請求的參數(shù),所述參數(shù)包括將磁盤塊號轉(zhuǎn)化扇區(qū)號,write的磁盤塊數(shù)轉(zhuǎn)化為扇區(qū)數(shù);
[0048]R6’,將創(chuàng)建的初始化的IO請求結(jié)構(gòu)添加到磁盤控制器中,返回成功狀態(tài)。
[0049]如上所述,本發(fā)明所述的一種提升web服務(wù)器性能的文件系統(tǒng)及方法,具有以下有益效果:
[0050]1、簡化磁盤空間,可以連續(xù)存放文件數(shù)據(jù)的同時減少磁盤碎片;
[0051]2、減少每次數(shù)據(jù)讀寫過程中的所需IO操作次數(shù)以及磁頭移動的時間,提升了文件系統(tǒng)的IO性能;
[0052]3、消除了同步IO操作下應(yīng)用程序的阻塞,采用異步執(zhí)行,應(yīng)用程序的效率更高。
【專利附圖】
【附圖說明】
[0053]圖1顯示為本發(fā)明的提升web服務(wù)器性能的文件系統(tǒng)劃分后的磁盤空間格式示意圖;
[0054]圖2顯示為本發(fā)明的提升web服務(wù)器性能的文件系統(tǒng)中Hash鏈表數(shù)組結(jié)構(gòu)示意圖;
[0055]圖3顯示為本發(fā)明的提升web服務(wù)器性能的方法中查找元數(shù)據(jù)區(qū)上信息的流程圖;
[0056]圖4顯示為本發(fā)明的提升web服務(wù)器性能的方法中IO請求異步執(zhí)行的讀取函數(shù)流程圖;
[0057]圖5顯示為本發(fā)明的提升web服務(wù)器性能的方法中IO請求異步執(zhí)行的寫入函數(shù)流程圖。
[0058]元件標號說明[0059]I磁盤空間
[0060]11磁盤元數(shù)據(jù)區(qū)
[0061]12磁盤數(shù)據(jù)區(qū)
[0062]111文件系統(tǒng)超級塊
[0063]112文件目錄項位圖
[0064]113卷信息數(shù)組
[0065]114文件目錄項
[0066]121卷
[0067]1211文件磁盤塊
【具體實施方式】
[0068]以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的【具體實施方式】加以實施或應(yīng)用,本說明書中的各項細節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進行各種修飾或改變。
[0069]請參閱附圖。需要說明的是,本實施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式 中僅顯示與本發(fā)明中有關(guān)的組件而非按照實際實施時的組件數(shù)目、形狀及尺寸繪制,其實際實施時各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0070]下面結(jié)合實施例和附圖對本發(fā)明進行詳細說明。
[0071]實施例一
[0072]本實施例提供的一種提升web服務(wù)器性能的文件系統(tǒng),如圖1所示,所述文件系統(tǒng)包括磁盤空間I。所述磁盤空間I包括磁盤元數(shù)據(jù)區(qū)11和磁盤數(shù)據(jù)區(qū)12,所述磁盤元數(shù)據(jù)區(qū)11包括文件系統(tǒng)超級塊111、文件目錄項位圖112、卷信息數(shù)組113、文件目錄項114 ;其中,所述文件系統(tǒng)超級塊111用于描述文件系統(tǒng)的信息;所述文件目錄項位圖112通過比特數(shù)值用來說明位圖信息;所述卷信息數(shù)組113用于描述卷信息;所述文件目錄項114是指文件系統(tǒng)的文件保存文件的一些信息的數(shù)據(jù)結(jié)構(gòu),所述文件目錄項保存的信息包含了<文件名,文件磁盤塊號,文件大小 > 的映射關(guān)系,將所述文件目錄項114緩存于內(nèi)存組織成Hash鏈表數(shù)組,如圖2所示,所述Hash鏈表數(shù)組中包括N個Hash鏈表,例如,Hash [O],Hash [I],…Hash [N],每個Hash鏈表包括文件目錄項(dentry ),所述文件目錄項(dentry )記錄文件名(fname)、文件磁盤塊(blk)的塊號、以及文件大小(fsize);所述文件目錄項的格式有別于傳統(tǒng)文件inode的復(fù)雜格式。
[0073]所述磁盤數(shù)據(jù)區(qū)12包括多個卷121,這些卷121的大小是可調(diào)節(jié)的,例如,所述卷的大小從32MB增長至256MB ;同時,所述卷121包括多個大小相同、連續(xù)的文件磁盤塊(blk)1211 ;其中,所述文件磁盤塊(blk)用于連續(xù)存放web服務(wù)器中的小文件,所述文件磁盤塊(blk)的大小是可調(diào)節(jié)的,例如,從4KB按倍增長直至128KB。
[0074]所述文件系統(tǒng)還包括簡化后的應(yīng)用程序接口(API),所述簡化后的應(yīng)用程序接口包括mount應(yīng)用程序接口、unmount應(yīng)用程序接口、read應(yīng)用程序接口、write應(yīng)用程序接口、deIete應(yīng)用程序接口、以及flush應(yīng)用程序接口。所述mount應(yīng)用程序接口用于所述文件系統(tǒng)使用之前掛載文件系統(tǒng);所述unmount應(yīng)用程序接口用于所述文件系統(tǒng)使用完畢后卸載文件系統(tǒng);所述read應(yīng)用程序接口用于讀取所述文件系統(tǒng)中的文件數(shù)據(jù);所述write應(yīng)用程序接口用于向磁盤中寫入數(shù)據(jù);所述delete應(yīng)用程序接口用于刪除所述文件系統(tǒng)中特定的文件;所述flush應(yīng)用程序接口用于將內(nèi)存中臟數(shù)據(jù)塊同步到磁盤上,所述臟數(shù)據(jù)塊是相對于原數(shù)據(jù)而言的,是指被修改過的,與原數(shù)據(jù)不一樣的數(shù)據(jù)。
[0075]本發(fā)明所述的文件系統(tǒng),可以極大地提升web服務(wù)器的性能。該系統(tǒng)針對web服務(wù)器中多保存小文件的應(yīng)用環(huán)境簡化文件系統(tǒng),簡化磁盤空間,這便可保證小文件可以連續(xù)存放;同時,卷中所述文件磁盤塊(blk)的大小可根據(jù)文件大小動態(tài)的按需設(shè)定,最大程度地減少磁盤碎片問題。
[0076]實施例二
[0077]本發(fā)明提供一種提升web服務(wù)器性能的方法,所述方法包括:
[0078]將磁盤空間I劃分成磁盤元數(shù)據(jù)區(qū)11和磁盤數(shù)據(jù)區(qū)12 ;
[0079]將所述磁盤元數(shù)據(jù)區(qū)劃分成文件系統(tǒng)超級塊111、文件目錄項位圖112、卷信息數(shù)組113、文件目錄項114 ;其中,所述文件系統(tǒng)超級塊111描述了文件系統(tǒng)的信息;所述文件目錄項位圖112通過比特數(shù)值說明位圖信息;所述卷信息數(shù)組113描述卷信息;所述文件目錄項114保存文件的信息的數(shù)據(jù)結(jié)構(gòu),并且將所述文件目錄項114組織成Hash鏈表數(shù)組,根據(jù)文件名在所述Hash鏈表數(shù)組中查找文件在磁盤空間上的存儲位置;
[0080]將所述磁盤數(shù)據(jù)區(qū)12劃分成多個大小固定的卷121,同時,將所述卷121劃分成多個大小相同連續(xù)的文件磁盤塊(blk) 1211 ;其中,所述文件磁盤塊(blk)可連續(xù)存放web服務(wù)器中的小文件,例如,存放網(wǎng)頁等小文件。
[0081]文件系統(tǒng)在讀寫文件數(shù)據(jù)之前,需要查找元數(shù)據(jù)區(qū)上的信息,通常所述信息是保存在磁盤空間上,所以在讀取文件數(shù)據(jù)前需要多次IO操作以便定位文件數(shù)據(jù)的存儲位置,所以所述方法還包括查找元數(shù)據(jù)區(qū)上的信息,如圖3所示,實現(xiàn)該過程具體包括:
[0082]Q1,簡化元數(shù)據(jù)區(qū)上的信息,也就是簡化文件目錄項,只記錄文件名,文件磁盤塊號,以及文件大??;
[0083]Q2,簡化應(yīng)用程序接口(API),僅提供mount應(yīng)用程序接口、umount應(yīng)用程序接口、read應(yīng)用程序接口、write應(yīng)用程序接口、delete應(yīng)用程序接口、以及flush應(yīng)用程序接口這幾個必需的應(yīng)用程序接口(API);其中,
[0084]所述mount應(yīng)用程序接口在所述文件系統(tǒng)使用之前掛載文件系統(tǒng);
[0085]所述umount應(yīng)用程序接口在所述文件系統(tǒng)使用完畢后卸載文件系統(tǒng);
[0086]所述read應(yīng)用程序接口讀取所述文件系統(tǒng)中的文件數(shù)據(jù);
[0087]所述write應(yīng)用程序接口向磁盤中寫入數(shù)據(jù);
[0088]所述delete應(yīng)用程序接口刪除所述文件系統(tǒng)中特定的文件;
[0089]所述flush應(yīng)用程序接口將內(nèi)存中臟數(shù)據(jù)塊同步到磁盤上。
[0090]Q3,在所述文件系統(tǒng)初始化后,將所有文件的元數(shù)據(jù),也就是元數(shù)據(jù)中的文件目錄項全部緩存于內(nèi)存之中;
[0091]Q4,通過對文件名進行Hash查找,將所述文件目錄項鏈入Hash鏈表數(shù)組中。
[0092]通過所述方法,每次10操作之前定位和查找文件位置信息就非常簡單,只需要在內(nèi)存中通過Hash鏈表數(shù)組快速查找,無需產(chǎn)生額外的10請求;[0093]傳統(tǒng)IO操作是同步執(zhí)行,所以在IO操作之前,應(yīng)用程序會被阻塞,所以本發(fā)明提供的提升web服務(wù)器性能的方法還包括異步執(zhí)行IO請求,首先調(diào)用文件系統(tǒng)中應(yīng)用程序接口執(zhí)行所需應(yīng)用程序;
[0094]接著,文件系統(tǒng)負責創(chuàng)建并初始化相應(yīng)的IO請求結(jié)構(gòu);然后,設(shè)置IO請求參數(shù);最后,將創(chuàng)建的IO請求結(jié)構(gòu)插入到底層磁盤驅(qū)動的控制器之中,文件系統(tǒng)即可向所述應(yīng)用程序返回成功,當該請求完成之后,所述磁盤驅(qū)動的控制器通過中斷通知文件系統(tǒng)請求完成,文件系統(tǒng)進而通知所述應(yīng)用程序請求已完成,等待所述應(yīng)用程序進一步的處理。
[0095]當所需應(yīng)用程序為read應(yīng)用程序時,如圖4所示,異步執(zhí)行read應(yīng)用程序的過程包括:
[0096]Rl,根據(jù)文件名(fname )計算Hash ;
[0097]R2,通過Hash在Hash鏈表數(shù)組中查找該文件的文件目錄名;
[0098]R3,判讀查找是否成功;如果查找失敗,返回,文件不存在在該文件目錄名;同時,如果查找成功,繼續(xù)執(zhí)行R4;
[0099]R4,根據(jù)找到的文件目錄項獲取文件磁盤塊號等信息,并為本次read請求創(chuàng)建IO請求結(jié)構(gòu),并初始化所述IO請求結(jié)構(gòu);所述IO請求結(jié)構(gòu)的格式為:
[0100]{
[0101]IO請求編號;
[0102]IO請求中包含的數(shù)據(jù)緩沖區(qū)的起始地址;
[0103]IO請求中數(shù)據(jù)緩沖區(qū)的長度;
[0104]待read的扇區(qū)號;
[0105]待read的扇區(qū)數(shù);
[0106]請求完成狀態(tài);
[0107]};
[0108]R5,設(shè)置IO請求參數(shù),文件系統(tǒng)根據(jù)為文件分配的磁盤塊號初始化IO請求的參數(shù),所述參數(shù)包括將磁盤塊號轉(zhuǎn)化扇區(qū)號,read的磁盤塊數(shù)目轉(zhuǎn)化為扇區(qū)數(shù);
[0109]R6,將創(chuàng)建的IO請求結(jié)構(gòu)添加到所述磁盤驅(qū)動的控制器中,即將請求插入的IO請求隊列等待IO線程處理;返回成功狀態(tài)。
[0110]實施例三
[0111]本發(fā)明提供一種提升Web服務(wù)器性能的方法,所述方法包括:
[0112]將磁盤空間I劃分成磁盤元數(shù)據(jù)區(qū)11和磁盤數(shù)據(jù)區(qū)12 ;
[0113]將所述磁盤元數(shù)據(jù)區(qū)劃分成文件系統(tǒng)超級塊111、文件目錄項位圖112、卷信息數(shù)組113、文件目錄項114 ;其中,所述文件系統(tǒng)超級塊111描述了文件系統(tǒng)的信息;所述文件目錄項位圖112通過比特數(shù)值說明位圖信息;所述卷信息數(shù)組113描述卷信息;所述文件目錄項114保存文件的信息的數(shù)據(jù)結(jié)構(gòu),并且將所述文件目錄項114組織成Hash鏈表數(shù)組,根據(jù)文件名在所述Hash鏈表數(shù)組中查找文件在磁盤空間上的存儲位置;
[0114]將所述磁盤數(shù)據(jù)區(qū)12劃分成多個大小固定的卷121,同時,將所述卷121劃分成多個大小相同連續(xù)的文件磁盤塊(blk) 1211 ;其中,所述文件磁盤塊(blk)可連續(xù)存放web服務(wù)器中的小文件,例如,存放網(wǎng)頁等小文件。
[0115]文件系統(tǒng)在讀寫文件數(shù)據(jù)之前,需要查找元數(shù)據(jù)區(qū)上的信息,通常所述信息是保存在磁盤空間上,所以在讀取文件數(shù)據(jù)前需要多次IO操作以便定位文件數(shù)據(jù)的存儲位置,所以所述方法還包括查找元數(shù)據(jù)區(qū)上的信息,實現(xiàn)該過程具體包括:
[0116]Ql,簡化元數(shù)據(jù)區(qū)上的信息,也就是簡化文件目錄項,只記錄文件名,文件磁盤塊號,以及文件大小;
[0117]Q2,簡化應(yīng)用程序接口( API),僅提供mount應(yīng)用程序接口、umount應(yīng)用程序接口、read應(yīng)用程序接口、write應(yīng)用程序接口、delete應(yīng)用程序接口、以及flush應(yīng)用程序接口這幾個必需的應(yīng)用程序接口(API);其中,
[0118]所述mount應(yīng)用程序接口在所述文件系統(tǒng)使用之前掛載文件系統(tǒng);
[0119]所述umount應(yīng)用程序接口在所述文件系統(tǒng)使用完畢后卸載文件系統(tǒng);
[0120]所述read應(yīng)用程序接口讀取所述文件系統(tǒng)中的文件數(shù)據(jù);
[0121]所述write應(yīng)用程序接口向磁盤中寫入數(shù)據(jù);
[0122]所述delete應(yīng)用程序接口刪除所述文件系統(tǒng)中特定的文件;
[0123]所述flush應(yīng)用程序接口將內(nèi)存中臟數(shù)據(jù)塊同步到磁盤上。
[0124]Q3,在所述文件系統(tǒng)初始化后,將所有文件的元數(shù)據(jù),也就是元數(shù)據(jù)中的文件目錄項全部緩存于內(nèi)存之中;
[0125]Q4,通過對文件名進行Hash查找,將所述文件目錄項鏈入Hash鏈表數(shù)組中。
[0126]通過所述方法,每次IO操作之前定位和查找文件位置信息就非常簡單,只需要在內(nèi)存中通過Hash鏈表數(shù)組快速查找,無需產(chǎn)生額外的IO請求;
[0127]傳統(tǒng)IO操作是同步執(zhí)行,所以在IO操作之前,應(yīng)用程序會被阻塞,所以本發(fā)明提供的提升web服務(wù)器性能的方法還包括異步執(zhí)行IO請求,首先調(diào)用文件系統(tǒng)中應(yīng)用程序接口執(zhí)行所需應(yīng)用程序;
[0128]接著文件系統(tǒng)負責創(chuàng)建相應(yīng)的IO請求結(jié)構(gòu),并初始化該IO請求結(jié)構(gòu);
[0129]然后,設(shè)置IO請求參數(shù);
[0130]最后,將該IO請求結(jié)構(gòu)插入到底層磁盤驅(qū)動的控制器之中,文件系統(tǒng)即可向所述應(yīng)用程序返回成功,當該請求完成之后,所述磁盤驅(qū)動的控制器通過中斷通知文件系統(tǒng)請求完成,文件系統(tǒng)進而通知所述應(yīng)用程序請求已完成,等待所述應(yīng)用程序進一步的處理。
[0131]當所需應(yīng)用程序為write應(yīng)用程序時,如圖5所示,異步執(zhí)行write應(yīng)用程序的過程包括:
[0132]R1’,為待寫入的文件數(shù)據(jù)分配數(shù)據(jù)空間;
[0133]R2’,判斷分配所述數(shù)據(jù)空間是否成功;在內(nèi)存中查找當前是否有合適塊大小的卷,例如3KB大小的文件分配4KB塊大小的卷,如果有,在所述卷中為該文件分配一個塊;如果沒有所述卷,則從空閑卷中獲取一個,并將其塊大小定為合適大小,例如,3KB的文件則將所述卷(volume)塊大小定為4KB,并從所述卷中分配一個塊來存放該文件,如果沒有所述空閑卷,則失敗,磁盤空間已滿;
[0134]R3 ’,分配所述磁盤文件目錄項;
[0135]R4’,判斷分配所述磁盤文件目錄項是否成功;如果文件目錄項空間使用完畢,則返回失敗;同時,為待寫入的文件數(shù)據(jù)分配磁盤文件目錄項空間,根據(jù)磁盤文件目錄項空間位圖信息分配;為該文件數(shù)據(jù)構(gòu)造一個內(nèi)存文件目錄項,并初始化所述內(nèi)存文件目錄項;將所述內(nèi)存文件目錄項插入Hash鏈表數(shù)組中;為write請求創(chuàng)建并初始化10請求結(jié)構(gòu),所述IO請求結(jié)構(gòu)的格式為:
[0136]{
[0137]IO請求編號;
[0138]IO請求中包含的數(shù)據(jù)緩沖區(qū)的起始地址;
[0139]IO請求中數(shù)據(jù)緩沖區(qū)的長度;
[0140]待write的扇區(qū)號;
[0141]待write的扇區(qū)數(shù);
[0142]請求完成狀態(tài);
[0143]};
[0144]R5’,設(shè)置所述IO請求參數(shù),文件系統(tǒng)根據(jù)為文件分配的磁盤塊號初始化IO請求的參數(shù),所述參數(shù)包括將磁盤塊號轉(zhuǎn)化扇區(qū)號,write的磁盤塊數(shù)目轉(zhuǎn)化為扇區(qū)數(shù);
[0145]R6’,將創(chuàng)建的IO請求結(jié)構(gòu)添加到磁盤控制器中,即將所述初始化的IO請求插入到IO請求隊列中;返回成功狀態(tài)。
[0146]本發(fā)明的保護范圍不限于以上所列步驟的先后順序,只要根據(jù)本發(fā)明所述系統(tǒng)能夠解決現(xiàn)有技術(shù)中中小文件連續(xù)存放的同時減少磁盤碎片、IO性能、應(yīng)用程序性能問題均屬于本發(fā)明的保護范圍。
[0147]本發(fā)明所述的web服務(wù)器文件系統(tǒng)設(shè)計的磁盤空間管理、減少讀取文件數(shù)據(jù)所需IO次數(shù)、以及IO請求異步執(zhí)行可以保證在小文件應(yīng)用環(huán)境下文件數(shù)據(jù)連續(xù)存放的同時盡可能的減少了磁盤碎片,延遲分配機制使得文件數(shù)據(jù)最大限度地連續(xù)存放,即提升性能的同時能減少磁盤碎片;其次,去掉小文件IO讀寫過程中頻發(fā)調(diào)用open/close等系統(tǒng)調(diào)用,減少了數(shù)據(jù)讀寫過程中所需IO次數(shù),大幅減少文件系統(tǒng)的APL,提升了文件系統(tǒng)的性能;最后消除了同步IO模式下的應(yīng)用程序阻塞,應(yīng)用程序的效率更高。。
[0148]綜上所述,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點而具高度產(chǎn)業(yè)利用價值。
[0149]上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因此,舉凡所屬【技術(shù)領(lǐng)域】中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。
【權(quán)利要求】
1.一種提升web服務(wù)器性能的文件系統(tǒng),其特征在于:所述文件系統(tǒng)包括磁盤空間;所述磁盤空間包括磁盤元數(shù)據(jù)區(qū)和磁盤數(shù)據(jù)區(qū); 所述磁盤元數(shù)據(jù)區(qū)包括文件系統(tǒng)超級塊、文件目錄項位圖、卷信息數(shù)組、以及文件目錄項; 所述磁盤數(shù)據(jù)區(qū)包括多個大小固定的卷;其中,每個卷包括多個大小相同、連續(xù)的文件磁盤塊,所述文件磁盤塊用于存放web服務(wù)器中的小文件。
2.根據(jù)權(quán)利要求1所述的提升web服務(wù)器性能的文件系統(tǒng),其特征在于:所述卷的大小是可調(diào)節(jié)的,從32MB增長至256MB。
3.根據(jù)權(quán)利要求2所述的提升web服務(wù)器性能的文件系統(tǒng),其特征在于:所述文件磁盤塊的大小是可調(diào)節(jié)的,從4KB按倍增長至128KB。
4.根據(jù)權(quán)利要求1所述的提升web服務(wù)器性能的文件系統(tǒng),其特征在于:所述文件目錄項包括文件名、文件磁盤塊號以及文件大小,所述文件目錄項緩存于內(nèi)存中組織成Hash鏈表數(shù)組。
5.根據(jù)權(quán)利要求1所述的提升web服務(wù)器性能的文件系統(tǒng),其特征在于:所述文件系統(tǒng)還包括簡化后的應(yīng)用程序接口,所述簡化后的應(yīng)用程序接口包括mount應(yīng)用程序接口、unmount應(yīng)用程序接口、read應(yīng)用程序接口、write應(yīng)用程序接口、delete應(yīng)用程序接口、以及flush應(yīng)用程序接口。
6.一種提升web服務(wù)器性能的方法,其特征在于:所述方法包括: 將磁盤空間劃分成磁盤元數(shù)據(jù)區(qū)和磁盤數(shù)據(jù)區(qū); 將所述磁盤元數(shù)據(jù)區(qū)劃分成文件系統(tǒng)超級塊、文件目錄項位圖、卷標信息數(shù)組、以及文件目錄項; 將所述磁盤數(shù)據(jù)區(qū)劃分成多個大小固定的卷;其中,每個卷被劃分成多個大小相同連續(xù)的文件磁盤塊。
7.根據(jù)權(quán)利要求6所述的提升web服務(wù)器性能的方法,其特征在于:所述方法還包括查找元數(shù)據(jù)區(qū)上的信息;所述查找元數(shù)據(jù)區(qū)上的信息的實現(xiàn)步驟包括: Q1,簡化文件元數(shù)據(jù)區(qū)上的信息,只記錄文件名、文件磁盤塊號、以及文件大小; Q2,簡化應(yīng)用程序接口 ; Q3,將文件目錄項全部緩存于內(nèi)存之中; Q4,通過文件名進行Hash查找,將所述文件目錄項鏈入Hash鏈表數(shù)組中。
8.根據(jù)權(quán)利要求6所述的提升web服務(wù)器性能的方法,其特征在于:所述方法還包括異步執(zhí)行應(yīng)用程序。
9.根據(jù)權(quán)利要求8所述的提升web服務(wù)器性能的方法,其特征在于:當所述應(yīng)用程序為read應(yīng)用程序時,異步執(zhí)行read應(yīng)用程序的過程包括: Rl,根據(jù)文件名計算Hash ; R2,通過Hash在Hash鏈表數(shù)組中查找該文件的文件目錄項; R3,判讀查找是否成功;如果查找失敗,返回,文件不存在在該文件目錄項中;如果查找成功,繼續(xù)執(zhí)行R4 ; R4,根據(jù)找到的文件目錄項獲取文件的磁盤塊號等信息,并為本次read請求創(chuàng)建IO請求結(jié)構(gòu),初始化所述IO請求結(jié)構(gòu);10請求結(jié)構(gòu)的格式為:IO請求編號; IO請求中包含的數(shù)據(jù)緩沖區(qū)的起始地址; IO請求中數(shù)據(jù)緩沖區(qū)的長度; 待read的扇區(qū)號; 待read的扇區(qū)數(shù); 請求完成狀態(tài); R5,設(shè)置IO請求參數(shù),文件系統(tǒng)根據(jù)為文件分配的磁盤塊號初始化IO請求的參數(shù),所述參數(shù)包括將磁盤塊號轉(zhuǎn)化扇區(qū)號,read的磁盤塊數(shù)轉(zhuǎn)化為扇區(qū)數(shù); R6,將所創(chuàng)建的的IO請求結(jié)構(gòu)添加到所述磁盤驅(qū)動的控制器中,即將IO請求插入的IO請求隊列等待IO線程處理;返回成功狀態(tài)。
10.根據(jù)權(quán)利要求8所述的提升web服務(wù)器性能的方法,其特征在于:當所述應(yīng)用程序為write應(yīng)用程序時,異步執(zhí)行write應(yīng)用程序的過程包括: R1’,為待寫入的文件數(shù)據(jù)分配數(shù)據(jù)空間; R2’,判斷分配所述數(shù)據(jù)空間是否成功; R3 ’,分配所述磁盤文件目錄項; R4’,判斷分配所述磁盤文件目錄項是否成功;如果文件目錄項空間使用完畢,則返回失??;為待寫入的文件數(shù)據(jù)分配磁盤文件目錄項空間,根據(jù)磁盤文件目錄項空間位圖信息分配;為該文件數(shù)據(jù)構(gòu)造一個內(nèi)存文件目錄項,并初始化所述內(nèi)存文件目錄項;將所述內(nèi)存文件目錄項插入Hash鏈表數(shù)組中;為write請求創(chuàng)建并初始化IO請求結(jié)構(gòu);該IO請求結(jié)構(gòu)的格式為: IO請求編號; IO請求中包含的數(shù)據(jù)緩沖區(qū)的起始地址; IO請求中數(shù)據(jù)緩沖區(qū)的長度; 待write的扇區(qū)號; 待write的扇區(qū)數(shù); 請求完成狀態(tài); R5’,設(shè)置所述IO請求參數(shù),文件系統(tǒng)根據(jù)為文件分配的磁盤塊號初始化IO請求的參數(shù),所述參數(shù)包括將磁盤塊號轉(zhuǎn)化扇區(qū)號,write的磁盤塊數(shù)轉(zhuǎn)化為扇區(qū)數(shù); R6’,將創(chuàng)建的初 始化的IO請求結(jié)構(gòu)添加到磁盤控制器中,返回成功狀態(tài)。
【文檔編號】G06F17/30GK103577470SQ201210275779
【公開日】2014年2月12日 申請日期:2012年8月3日 優(yōu)先權(quán)日:2012年8月3日
【發(fā)明者】李小勇, 丁凱, 單蓉勝 申請人:上海交通大學(xué)