專利名稱::針對實(shí)時性的媒體數(shù)據(jù)的檔案系統(tǒng)vfs設(shè)計(jì)算法的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明為磁盤文件系統(tǒng)及實(shí)時媒體數(shù)據(jù)存儲傳輸
技術(shù)領(lǐng)域:
。
背景技術(shù):
:目前操作系統(tǒng)普遍采用的文件結(jié)構(gòu)包括索引節(jié)點(diǎn)和數(shù)據(jù)。索引節(jié)點(diǎn)又稱I節(jié)點(diǎn),在文件系統(tǒng)結(jié)構(gòu)中,包含有關(guān)相應(yīng)文件的信息的一個記錄,這些信息包括文件權(quán)限、文件名、文件大小、存放位置、建立日期等。文件系統(tǒng)中所有文件的索引節(jié)點(diǎn)保存在索引節(jié)點(diǎn)表中。數(shù)據(jù)文件的實(shí)際內(nèi)容??梢允强盏?,也可以非常大,并且擁有自己的結(jié)構(gòu)。以常用的ext2格式為例ext2文件系統(tǒng)的數(shù)據(jù)塊大小一般為1024B、2048B或4096B。ext2文件系統(tǒng)的索引節(jié)點(diǎn)(inode)采用多重索引結(jié)構(gòu),主要體現(xiàn)在直接指針和3個間接指針。直接指針包含12個直接指針塊,它們直接指向包含文件數(shù)據(jù)的數(shù)據(jù)塊,緊接在后面的3個間接指針是為了適應(yīng)文件的大小變化而設(shè)計(jì)的。假設(shè)數(shù)據(jù)塊大小為1024B,利用12個直接指針,可以保存最大為12KB的文件,當(dāng)文件超過12KB時,則要利用單級間接指針,該指針指向的數(shù)據(jù)塊保存有一組數(shù)據(jù)塊指針,這些指針依次指向包含有實(shí)際數(shù)據(jù)的數(shù)據(jù)塊;假如每個指針占用4B,則每個單級指針數(shù)據(jù)塊可保存1024/4=256個數(shù)據(jù)指針,因此利用直接指針和單級間接指針可保存1024*12+1024*256=268KB的文件。當(dāng)文件超過268KB時,再利用二級間接指針,直到使用三級間接指針。利用直接指針、單級間接指針、二級間接指針、三級間接指針可保存的最大文件大小為1024*12+1024*256+1024*256*256+1024*256*256*256=16843020KB,約16GB;若數(shù)據(jù)塊大小為2048B,指針占4B,則最大文件大小為:2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792KB約268GB;若數(shù)據(jù)i央大小為4096B,指針占4B,則最大文件大小為4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744KB,約4TB。ext2文件系統(tǒng)在寫入文件內(nèi)容的同時并沒有同時寫入文件meta-data,其工作順序是先寫入文件的內(nèi)容,然后等空閑時候再寫入文件的meta-data,若發(fā)生意外,則文件系統(tǒng)就會處于不一致狀態(tài)?!愕牟僮飨到y(tǒng)不能高效處理音視頻文件的讀取,因?yàn)槲募拇鎯τ刹僮飨到y(tǒng)決定,操作系統(tǒng)存儲數(shù)據(jù)時是根據(jù)系統(tǒng)設(shè)置的數(shù)據(jù)塊的大小尋找空間將文件存儲在不一定連續(xù)的位置再通過索引來定位的,這對日常文件處理是可行的,但對于實(shí)時視頻媒體文件大容量,實(shí)時性要求高,用戶并發(fā)大的情形,文件的分散存儲就會導(dǎo)致以下幾方面的問題1)讀取效率低下,讀取文件內(nèi)容有可能需要多次索引定位,無法保證一次性及時返回所需要數(shù)據(jù)。2)存取時間長,磁盤損耗大,有可能因?yàn)閿?shù)據(jù)的分散存儲導(dǎo)致頻繁進(jìn)行磁盤定位獲取數(shù)據(jù),影響磁盤壽命。3)無法提高同時點(diǎn)播的用戶數(shù)量,本身從磁盤讀取數(shù)據(jù)就是一個并發(fā)的瓶頸,加上這種數(shù)據(jù)格式的低效性,無法提升服務(wù)能力,影響服務(wù)性能。
發(fā)明內(nèi)容本發(fā)明在于提供一種文件系統(tǒng)技術(shù),該技術(shù)可以有效的解決實(shí)時媒體數(shù)據(jù)存儲效率低下的問題,以及如何高效讀取的問題?,F(xiàn)有的各種文件系統(tǒng),是針對通用數(shù)據(jù)而設(shè)計(jì),而對于實(shí)時媒體數(shù)據(jù)的存儲和讀取并沒有進(jìn)行優(yōu)化處理,該發(fā)明的技術(shù)針對實(shí)時媒體數(shù)據(jù)的特點(diǎn)進(jìn)行分析并全新設(shè)計(jì)了算法,可以在保證數(shù)據(jù)安全穩(wěn)定的前提下,能夠提升存儲和讀取的性能。本發(fā)明的技術(shù)方案系統(tǒng)架構(gòu)參見說明書附1:VFS系統(tǒng)架構(gòu)圖算法設(shè)計(jì)原理VideoFileSystem是針對實(shí)時性的媒體數(shù)據(jù)所設(shè)計(jì)的檔案系統(tǒng)。使用者可以從磁盤驅(qū)動器組(DiskArray)中存取連續(xù)的視訊數(shù)據(jù)。其系統(tǒng)的設(shè)計(jì)由下圖所示,共分為SessionManager,AdmissionController,DiskScheduler,BufferManager禾口DiskStri卯ing幾個部份。參見說明書附2:VFS組成結(jié)構(gòu)Disklayout因?yàn)橐话愕囊曈崝?shù)據(jù)都很龐大,在VideoFileSystem中,我們用較大的blocksize來增加讀取的1/0throughput另外,對于一個視訊檔案,我們會將之儲存在連續(xù)的磁盤位置上。因?yàn)檎麄€VideoFileSystem的精神在于保證視訊檔案的存取在一定的datarate內(nèi),因此必須考慮磁盤的存取時間。在磁盤搜尋時間(seektime)與延遲時間(latencytime)上,我們都采取最壞情況(worstcase)的考慮,我們定義了ServerBoundSB(x),它表示對每一個session的1/0存取所需要的時間和。其定義如下幼(X)-t幼(A)Sb(n)是由CMFS[l]中所定義的upperboundfunctionU(n)而來的,它代表了對磁盤讀寫連續(xù)的n個blocks所需的最長時間(包括seektime和rotationtime),而和磁頭一開始的位置以及第一個要存取的block皿mber無關(guān)。以下便是Sb(n)的定義Sb(n)=Lseek_max+n(Lblock+Lseek_min)whereblocksize=atrack其中Lseek-max表不worst-caseseektime丄seek-min表不l-trackseektime.Lblock則表示讀寫一個block所需時間。SessionManager此模塊負(fù)責(zé)處理數(shù)據(jù)流的界面程序,負(fù)責(zé)接受IDM的命令。其功能如下1.建立讀取的數(shù)據(jù)流。2.建立寫入的數(shù)據(jù)流。3.移動讀寫的位置。4.取得數(shù)據(jù)流緩存器的使用權(quán)。5.歸還數(shù)據(jù)流緩存器的使用權(quán)。AdmissionControl本模塊用來判斷是否可以接受一個新的資料流的建立。因?yàn)槿绻麛?shù)據(jù)流的建立沒有任何的限制,則系統(tǒng)會無法負(fù)荷而導(dǎo)致已建立好的數(shù)據(jù)流在播放時會產(chǎn)生不連續(xù)的現(xiàn)象。新的數(shù)據(jù)流是否允許被建立,取決于新建立的數(shù)據(jù)流與已存在的數(shù)據(jù)流會部會超過磁盤的頻寬。如果未超過,則該數(shù)據(jù)流便允許被建立。我們定義了一個ClientBoundCB(n),用來表示每一個客戶端所要求的數(shù)據(jù)流消耗掉n個blocks的數(shù)據(jù)所需要的時間。貝UMinimalClientBoundMCB擇定義為參min一?如果在加入一個新的數(shù)據(jù)流后,整個VideoFileSystem仍能保證對于每一個客戶端的數(shù)據(jù)流(包括新加入的數(shù)據(jù)流)的ServerBound所需要的時間比ClientBound所需要的時間短(即SB<MCB),即表示VideoFileSystem可以在比數(shù)據(jù)流消耗的速率還要快的時間內(nèi)將數(shù)據(jù)塞入每一個客戶端的buffer中,如此一來客戶端的數(shù)據(jù)流便不會starvation。這樣的話新的數(shù)據(jù)流便允許被加入,反之則予以拒絕。整個AdmissionControl的流程便建立在CMFS[l]中的MinimalWASprocedure上。DiskSchedulingPolicy此模塊是排序的程序,負(fù)責(zé)安排數(shù)據(jù)流得處理順序,并實(shí)際執(zhí)行磁盤存取的工作。為了防止數(shù)據(jù)流的Starvation,此模塊決定哪個數(shù)據(jù)流必須立即被執(zhí)行。我們采取MinimalPolicy,也就是重復(fù)的作minimalWASprocedure的動作,已決定任何一個輪回時每一個數(shù)據(jù)流能讀取幾個blocks,這樣的好處是一定能滿足AdmissionControl,避免任何一個資料流會有Starvation的情形。BufferManager對于每一個數(shù)據(jù)流,都有一個相對應(yīng)的buffer,負(fù)責(zé)存放由磁盤讀出的數(shù)據(jù)(針對readsession而言),或者是即將寫入磁盤的數(shù)據(jù)(針對writesession而言),然后再將數(shù)據(jù)送給IDMserver或是寫入磁盤中。Buffer都是連續(xù)的內(nèi)存。我們會根據(jù)磁盤的頻寬,用staticbufferallocationpolicy去配置內(nèi)存。DiskStripping當(dāng)server的硬盤有兩顆以上時,此模塊可以將數(shù)個磁盤整合起來,讓使用者感覺起來好像只有一顆。同時此模塊會將數(shù)據(jù)加以分割,分別存放在不同的磁盤中。在讀取時則可同時由多個磁盤驅(qū)動器讀取數(shù)據(jù)。如此可以大幅的提升存取的速率。算法數(shù)據(jù)結(jié)構(gòu)以下介紹幾個重要的數(shù)據(jù)結(jié)構(gòu),包括BufferPool、Session、Acc印tedSessionList、StartedSessionList、WAS、DiskStruct(Superblock)等。參BUFFERPOOL參參見說明書附3:BUFFERPOOL數(shù)據(jù)結(jié)構(gòu)A.數(shù)據(jù)會經(jīng)由buffer在client和server間傳送。每一個Buffer都指向一土央連續(xù)的內(nèi)存。另夕卜Buffer內(nèi)也有forwpointer禾口backpointer指向前后的Buffer。B.BufferPool則是一個circulardoublelinkedlist,指向所有的Buffer。C.Buffer的數(shù)目以及其所指向的內(nèi)存大小決定于實(shí)際上配置給整個VideoFileSystem的內(nèi)存大小。D.每一個數(shù)據(jù)流都會被配置一個buffer。<table>tableseeoriginaldocumentpage6</column></row><table>參SESSION參見說明書附4:SESSION數(shù)據(jù)結(jié)構(gòu)A.—個Session表示client對server端的'session都必須保證數(shù)據(jù)能夠?qū)崟r的被讀取。<table>tableseeoriginaldocumentpage6</column></row><table>AcceptedSessionList參見說明書附5:Acc印tedSessionList數(shù)據(jù)結(jié)構(gòu)A.當(dāng)一個session已經(jīng)通過了admissioncontrol,但是還沒有開始啟動,便將之力口入AcceptedSessionList中。B.我們禾爾第一個session為standbysession。StartedSessionList參見說明書附6:startedsessionlist數(shù)據(jù)結(jié)構(gòu)A.我們禾爾第一個session為startedsession。參WAS參見說明書附7:WAS數(shù)據(jù)結(jié)構(gòu)<table>tableseeoriginaldocumentpage6</column></row><table>參DISK_STRUCT(superblock)A.DISK_STRUCT記錄著有mounted到VFS所有信息。B.WritingdatatoMFS,theDISKSTRUCTisupdated.C.當(dāng)VFS啟動時它會讀取所有的信息。D.DISK_STRUCT的size是512bytes的倍數(shù)。Einodes指向一個array,此array的每一個元素都記錄著儲存在磁盤內(nèi)的一個檔案的信息,包括在磁盤的起始位置(begin)、大小(size)、所在目錄(parent)、同目錄的下一個檔案(next)以及最近被reference的信息(LRU)等。Fdir」nodes指向一個array,此array的每一個元素都記錄著儲存在磁盤內(nèi)的一個目錄的信息,包括該目錄下的第一個檔案(file—begin)、該目錄下的第一個子目錄(child)、該目錄所在目錄(parent)、該目錄所在目錄中的下一個目錄(next)等。參見說明書附8:disk—struct數(shù)據(jù)結(jié)構(gòu)本發(fā)明的有益效果是通過對磁盤空間重新進(jìn)行格式劃分,可以保證數(shù)據(jù)的安全性,因?yàn)閿?shù)據(jù)分塊不采用操作系統(tǒng)默認(rèn)的處理方式,在操作系統(tǒng)里是無法對該數(shù)據(jù)進(jìn)行操作的,這對一些強(qiáng)調(diào)數(shù)據(jù)安全的流媒體應(yīng)用場合具有應(yīng)用價(jià)值,尤其是那些應(yīng)用于運(yùn)營場合的流媒體服務(wù),可以防止網(wǎng)絡(luò)中一些惡意的破壞行為。按照塊結(jié)構(gòu)組織數(shù)據(jù)的存儲的算法,能較大幅度提高文件訪問的效率,提升磁盤使用壽命。在對磁盤進(jìn)行初始化過程對其進(jìn)行讀取性能分析,判斷磁盤能支持的最大帶寬,有效保證用戶播放質(zhì)量。下面結(jié)合附圖和實(shí)施例對本發(fā)明進(jìn)一步說明。圖1是VFS磁盤文件系統(tǒng)系統(tǒng)架構(gòu)圖。圖2是VFS磁盤文件系統(tǒng)的組成結(jié)構(gòu)。圖3是BufferPool數(shù)據(jù)結(jié)構(gòu)說明。圖4是session數(shù)據(jù)結(jié)構(gòu)說明。圖5是Acc印tedsessionlist數(shù)據(jù)結(jié)構(gòu)說明。圖6是startedsessionlist數(shù)據(jù)結(jié)構(gòu)說明。圖7是WAS數(shù)據(jù)結(jié)構(gòu)說明。圖8是disk—struct數(shù)據(jù)結(jié)構(gòu)說明具體實(shí)施例方式整個系統(tǒng)的設(shè)計(jì)執(zhí)行流程與時間圖參見說明書附9:VFS系統(tǒng)算法設(shè)計(jì)執(zhí)行流程和時間圖詳細(xì)說明create—read—sessionA.呼口L]check—acc印tance(),之后會傳回一個WASpointer,那便表示這個session的建立要求已被接受,于是便將此session力口入Acc印tedSessionList中。B.如果沒有其它的session在等待,便呼叫begin_startup_mode()進(jìn)入startupmode.參見說明書附10:create_read_session設(shè)計(jì)執(zhí)行流程7create—write—sessionA.從VFSdiskscheduling的論點(diǎn)來看,讀、寫是一樣的。主要的不同是對initialconditions而言,writesession的buffer是空的,而readsession的buffer是滿的。B.當(dāng)一個writesession的要求傳給admissioncontrol我們將這個檔案的startposition禾口filesize寫至lj石茲盤superblock的freenode中,然后,我們再4f這個writesession力口到AcceptedSessionList中。參見說明書附11:create—write—session設(shè)計(jì)執(zhí)行流程圖參mfsSeekDataA.—開始我們必須檢查這個session是否已經(jīng)started。B.然后將這個session自Startedlist移至ljAcc印tedSessionList中。這個session的nextblock便設(shè)為所要seek的位置。參見說明書附12:mfsSeekData設(shè)計(jì)執(zhí)行流程圖mfsGetbufferA.當(dāng)client端得到databuffer的指標(biāo),client便可以針對這個buffer讀寫數(shù)據(jù)。參見說明書附13:mfsGetbuffer設(shè)計(jì)執(zhí)行流程圖mfsRet證BufferA.如果這是一個readsession而且第一個滿的buffer數(shù)據(jù)已經(jīng)被client讀完了,便將這個buffer移至ljemptybufferlist。B.如果這是一個writesession而且第一個空的buffer已經(jīng)被client寫滿了,便將這個buffer移到fullbufferlist。參見說明書附14:mfsReturnBuffer設(shè)計(jì)執(zhí)行流程圖find—wasA.—開始先假設(shè)所有的sessions都只讀一個block,然后根據(jù)dataduration的順序排列出來。B.檢查totalblocks是否有超過bufferspace,如果有超過,我們便無法找到一個minimalworkahead,便傳回FALSE。C.計(jì)算最壞情況下讀取n個blocks所需的totalboundtime,如果totalboundtime比minimaldatadurationtime小,便傳回TRUE,貝Un個blocks便是此session的minimalworkahead。D.如果totalboundtime仍比minimaldataduration大,便對每——個session加一個block,重新到st印A的動作。rt_schedA.—開始,我們選擇一個有minimalworkahead的session,然后根據(jù)這個session的timebound禾口buffersize來決定下——個要月艮務(wù)的session。compute_waA.計(jì)算一個readsession的workhead如下Workhead=(thenumberoffullblocks)氺(clientreadablocktime)B.計(jì)算一個writesession的workhead如下Workhead=(Thenumberofemptyblocks)氺(clientwriteablocktime)權(quán)利要求一種視頻點(diǎn)播服務(wù)器的磁盤文件系統(tǒng),其特征在于磁盤劃分獨(dú)立區(qū)域?qū)iT用于媒體文件存儲,磁盤的分區(qū)按照大數(shù)據(jù)塊來分配,自行對磁盤進(jìn)行分區(qū)管理,文件存儲在磁盤上連續(xù)的數(shù)據(jù)區(qū)域,對磁盤存取時間性能預(yù)先進(jìn)行計(jì)算并保存信息。2.根據(jù)權(quán)利要求1所述文件系統(tǒng),其特征在于操作系統(tǒng)進(jìn)行磁盤分配時,對需要作為流媒體服務(wù)的存儲區(qū)域的磁盤分區(qū)未進(jìn)行格式化操作。3.根據(jù)權(quán)利要求1所述文件系統(tǒng),其特征在于磁盤分區(qū)的基本單位是64K字節(jié),其是系統(tǒng)的默認(rèn)參數(shù),實(shí)際應(yīng)用中可進(jìn)行調(diào)整,支持更大值。4.根據(jù)權(quán)利要求1所述文件系統(tǒng),其特征在于對于未進(jìn)行過格式化處理的磁盤分區(qū),該文件系統(tǒng)自行進(jìn)行磁盤分區(qū)和格式化等操作。5.根據(jù)權(quán)利要求l所述文件系統(tǒng),其特征在于對于存儲到該文件系統(tǒng)的文件,其內(nèi)容存儲在文件系統(tǒng)以塊為單位的連續(xù)區(qū)域,而該文件系統(tǒng)在存儲文件數(shù)據(jù)時將磁盤空間的最前面1M字節(jié)空間作為存儲磁盤的分區(qū)信息。6.根據(jù)權(quán)利要求1所述文件系統(tǒng),其特征在于在文件系統(tǒng)完成格式化以后,其能將磁盤的存取性能保存在磁盤的分區(qū)信息中。7.—種視頻點(diǎn)播服務(wù)器的文件存儲處理算法,其特征在于采用空閑節(jié)點(diǎn)池管理磁盤結(jié)構(gòu)的空閑節(jié)點(diǎn)鏈表上節(jié)點(diǎn)的動態(tài)分配,磁盤結(jié)構(gòu)通過空閑節(jié)點(diǎn)鏈表管理鏈表上的空閑節(jié)點(diǎn)空間分配。8.根據(jù)權(quán)利要求7所述的文件存儲處理算法,其特征在于空閑節(jié)點(diǎn)池采用雙向鏈表結(jié)構(gòu)來保存,其頭節(jié)點(diǎn)不被分配使用。9.根據(jù)權(quán)利要求7所述的文件存儲處理算法,其特征在于鏈表中的節(jié)點(diǎn)從空閑節(jié)點(diǎn)池中分配,文件創(chuàng)建時從鏈表中尋找合適大小的節(jié)點(diǎn)分配并調(diào)整相應(yīng)節(jié)點(diǎn)大小,文件寫操作完畢會對分配的節(jié)點(diǎn)尺寸更新為已經(jīng)分配的大小減去文件的實(shí)際尺寸大小,如果該鏈表中的節(jié)點(diǎn)空間大小變?yōu)榱?,?jié)點(diǎn)從鏈表中刪除并回收到空閑節(jié)點(diǎn)池中,每次文件寫操作完畢或者刪除完畢需要對該節(jié)點(diǎn)列表進(jìn)行空閑節(jié)點(diǎn)的合并判斷。全文摘要一種實(shí)時性媒體數(shù)據(jù)的檔案系統(tǒng)設(shè)計(jì)算法。由文件系統(tǒng)自行對磁盤空間進(jìn)行劃分和格式化并由軟件維護(hù)獨(dú)立分區(qū)和磁盤信息。對數(shù)據(jù)的存取是按照大數(shù)據(jù)塊的方式處理且對文件的分配儲存在連續(xù)的磁盤位置上。通過計(jì)算磁盤能支持的帶寬保證用戶服務(wù)質(zhì)量。對于文件的空間分配采用磁盤結(jié)構(gòu)的空閑節(jié)點(diǎn)鏈表管理空閑節(jié)點(diǎn)。文件寫入空間進(jìn)行預(yù)先分配,完畢后動態(tài)調(diào)整,并且在磁盤結(jié)構(gòu)的空閑節(jié)點(diǎn)鏈表中尋找最合適的空間進(jìn)行分配。文檔編號G06F17/30GK101782918SQ20091022349公開日2010年7月21日申請日期2009年11月17日優(yōu)先權(quán)日2009年11月17日發(fā)明者李繼凱申請人:北京泉舜廣恒科技有限公司