專利名稱:一種處理流媒體數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及獨立冗余磁盤陣列(RAID)技術(shù),尤其涉及在獨立冗余磁盤陣列中處理流媒體數(shù)據(jù)的方法。
背景技術(shù):
RAID技術(shù)是加州大學(xué)伯克利分校1987年提出,最初是為了組合小的廉價磁盤來代替大的昂貴磁盤,同時希望磁盤失效時不會使對數(shù)據(jù)的訪問受損失而開發(fā)出一定水平的數(shù)據(jù)保護(hù)技術(shù)。RAID就是一種由多塊廉價磁盤構(gòu)成的冗余陣列,在操作系統(tǒng)下是作為一個獨立的大型存儲設(shè)備出現(xiàn)。RAID可以充分發(fā)揮出多塊硬盤的優(yōu)勢,可以提升硬盤速度,增大容量,提供容錯功能夠確保數(shù)據(jù)安全性,易于管理的優(yōu)點,在任何一塊硬盤出現(xiàn)問題的情況下都可以繼續(xù)工作,不會受到損壞硬盤的影響。
RAID的分級1.RAID0級,無冗余無校驗的磁盤陣列。數(shù)據(jù)同時分布在各個磁盤驅(qū)動器上,沒有容錯能力,讀寫速度在RAID中最快,但因為任何一個磁盤驅(qū)動器損壞都會使整個RAID系統(tǒng)失效,所以安全系數(shù)反倒比單個的磁盤驅(qū)動器還要低。一般用在對數(shù)據(jù)安全要求不高,但對速度要求很高的場合。
2.RAID1級,鏡象磁盤陣列。每一個磁盤驅(qū)動器都有一個鏡像磁盤驅(qū)動器,鏡像磁盤驅(qū)動器隨時保持與原磁盤驅(qū)動器的內(nèi)容一致。RAID1具有最高的安全性,但只有一半的磁盤空間被用來存儲數(shù)據(jù)。主要用在對數(shù)據(jù)安全性要求很高,而且要求能夠快速恢復(fù)被損壞的數(shù)據(jù)的場合。
3.RAID 0+1級,吸收了上述兩種標(biāo)準(zhǔn)的優(yōu)點,是數(shù)據(jù)分割和鏡像的結(jié)合。這種配置至少需要4塊硬盤,成本也將大大高于前者。它的工作方式是數(shù)據(jù)塊1寫到磁盤1,數(shù)據(jù)鏡像寫到磁盤2;數(shù)據(jù)塊2寫到磁盤3,數(shù)據(jù)鏡像寫到磁盤4;數(shù)據(jù)塊3寫到磁盤1,數(shù)據(jù)鏡像寫到磁盤2......依此類推。在資源的占用方式上與RAID1一樣,硬盤使用率只有50%,但它是真正的“安全性”加“高性能”。
4.RAID2級,糾錯海明碼磁盤陣列。磁盤驅(qū)動器組中的第一個、第二個、第四個......第2n個磁盤驅(qū)動器是專門的校驗盤,用于校驗和糾錯,例如七個磁盤驅(qū)動器的RAID2,第一、二、四個磁盤驅(qū)動器是糾錯盤,其余的用于存放數(shù)據(jù)。使用的磁盤驅(qū)動器越多,校驗盤在其中占的百分比越少。RAID2對大數(shù)據(jù)量的輸入輸出有很高的性能,但少量數(shù)據(jù)的輸入輸出時性能不好。RAID2很少實際使用。
5.RAID3和RAID4,奇校驗或偶校驗的磁盤陣列。不論有多少數(shù)據(jù)盤,均使用一個校驗盤,采用奇偶校驗的方法檢查錯誤。任何一個單獨的磁盤驅(qū)動器損壞都可以恢復(fù)。RAID3和RAID4的數(shù)據(jù)讀取速度很快,但寫數(shù)據(jù)時要計算校驗位的值以寫入校驗盤,速度有所下降。RAID3和RAID4的使用也不多。
6.RAID5級,無獨立校驗盤的奇偶校驗磁盤陣列。同樣采用奇偶校驗來檢查錯誤,但沒有獨立的校驗盤,校驗信息分布在各個磁盤驅(qū)動器上。RAID5對大小數(shù)據(jù)量的讀寫都有很好的性能,被廣泛地應(yīng)用。
RAID磁盤陣列適配卡RAID可以由軟件或硬件實現(xiàn)。軟件RAID是純軟件實現(xiàn)的,它運行于服務(wù)器的CPU中,占用一定的內(nèi)存和CPU資源,因此軟件RAID對服務(wù)器的整體性能有所影響。硬件RAID是由磁盤陣列適配器實現(xiàn)的。硬盤陣列適配器上具有獨立輸入/輸出處理器(IOP),所有的RAID操作都在IOP完成,不占用服務(wù)器的資源。硬件陣列適配器分擔(dān)了軟件RAID中原本服務(wù)器要完成的工作,因此硬件RAID比軟件RAID有更高的運行效率。
硬件RAID又可以分為內(nèi)部硬件RAID和外部硬件RAID。內(nèi)部硬件RAID是安裝于服務(wù)器內(nèi)部PCI槽的一種設(shè)備,通常稱之為PCI RAID卡。業(yè)界的許多磁盤陣列供應(yīng)商,如Adaptec、LSI、IBM、Intel等都有相關(guān)的RAID卡產(chǎn)品。
RAID卡一般采用IOP+專用的小型計算機(jī)系統(tǒng)接口(SCSI)控制芯片來實現(xiàn)。隨著硬件技術(shù)的發(fā)展,IOP處理器已經(jīng)從較早的i960發(fā)展到今天的80321,PCI的標(biāo)準(zhǔn)從PCI 2.1發(fā)展到PCI-X,SCSI的標(biāo)準(zhǔn)也從較早的SCSI-1發(fā)展到了SCSI-3。
現(xiàn)有的基于PCI RAID卡的流媒體服務(wù)器基本都采用商用的RAID卡和商用的操作系統(tǒng)及其文件系統(tǒng),在流媒體的具體應(yīng)用中呈現(xiàn)出以下缺點1、現(xiàn)有的RAID卡只支持最大128KB的分條單元(Stripe_unit)。這種配置對于間歇式的、小文件的讀寫訪問是有效的,但對流媒體這種需要高并發(fā)、大流量連續(xù)性地讀磁盤的應(yīng)用卻顯得無能為力?,F(xiàn)有的RAID卡只能導(dǎo)致磁頭頻繁地處于尋道定位過程中。
2、現(xiàn)有的RAID卡在訪問磁盤的時候,最大只能以4KB的粒度發(fā)起對磁盤的讀寫。在通用的文件系統(tǒng)下,4KB的粒度已經(jīng)能夠滿足普通的應(yīng)用。但在流媒體應(yīng)用中,4KB的粒度卻難以滿足多用戶并發(fā)的點播需求。
3、通用的文件系統(tǒng)不能實現(xiàn)媒體文件在磁盤上按區(qū)存放的策略。
綜上所述,簡單地利用現(xiàn)有的技術(shù)開發(fā)流媒體服務(wù)器,磁盤和SCSI總線的帶寬能力不能得到充分的發(fā)揮,媒體數(shù)據(jù)讀取能力低。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種處理流媒體數(shù)據(jù)的方法,以解決現(xiàn)有RAID技術(shù)在流媒體應(yīng)用中存在處理數(shù)據(jù)能力低的問題。
實現(xiàn)本發(fā)明的技術(shù)方案一種處理流媒體數(shù)據(jù)的方法,用于將源媒體文件的流媒體數(shù)據(jù)記錄在由N個磁盤構(gòu)成的獨立冗余磁盤陣列中,以及從該獨立冗余磁盤陣列中讀取流媒體數(shù)據(jù);該方法包括向磁盤寫入流媒體數(shù)據(jù)和/或從磁盤讀取數(shù)據(jù)A、向磁盤寫入流媒體數(shù)據(jù)包括步驟根據(jù)源媒體文件的碼率確定在一個磁盤上連續(xù)存放固定大小的數(shù)據(jù)子塊的數(shù)量Chunk_w;以所述數(shù)據(jù)子塊為單位分割接收的源流媒體數(shù)據(jù);
按數(shù)量Chunk_w將多個數(shù)據(jù)子塊組織為一個數(shù)據(jù)單元,并生成每N-1個數(shù)據(jù)單元的校驗數(shù)據(jù)單元;將每N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元分別記錄在不同的磁盤上;B、從磁盤讀取流媒體數(shù)據(jù)包括步驟根據(jù)媒體文件的碼率確定在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量Chunk_r;根據(jù)數(shù)量Chunk_r和所述數(shù)據(jù)單元包含的數(shù)據(jù)子塊數(shù)量,計算讀完一個數(shù)據(jù)單元需要進(jìn)行的讀取次數(shù)并得到各次實際需要讀取的數(shù)據(jù)子塊數(shù)量,且保證各次實際需要讀取的子塊數(shù)量大致相同;按所述各次實際需要讀取的子塊數(shù)量從磁盤讀取媒體文件的每一個數(shù)據(jù)單元。
根據(jù)上述方法以數(shù)據(jù)子塊的大小作為最小存儲單位將磁盤劃分為多個存儲塊(block),由多個存儲塊組成磁盤的一個分條單元(Stripe_unit),該分條單元中存儲塊的數(shù)量Stripe_depth不少于數(shù)量Chunk_w;并由各磁盤對應(yīng)的一個分條單元構(gòu)成一個分條(Stripe),該一個分條至少存儲N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元。
所述一個分條存儲多個N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元,即每一個分條單元存儲多個數(shù)據(jù)單元或校驗數(shù)據(jù)單元。
所述固定大小的數(shù)據(jù)子塊為64KB。
媒體文件的碼率越大,則使數(shù)據(jù)單元所包含的數(shù)據(jù)子塊越多。
所述數(shù)量Stripe_depth為32~256。生成每N-1個數(shù)據(jù)單元的校驗數(shù)據(jù)單元時,分別將各數(shù)據(jù)單元相對應(yīng)的數(shù)據(jù)子塊進(jìn)行校驗運算得到多個校驗數(shù)據(jù)子塊,由該多個校驗數(shù)據(jù)子塊構(gòu)成校驗數(shù)據(jù)單元。
所述N個磁盤作為一個單一的邏輯設(shè)備以統(tǒng)一的邏輯塊地址進(jìn)行訪問。
將高碼率的媒體文件存儲在磁盤磁道的內(nèi)圈,即持續(xù)吞吐量低的區(qū)域;將低碼率的媒體文件存儲在磁盤磁道的外圈,即持續(xù)吞吐量高的區(qū)域,以提高整個系統(tǒng)的有效吞吐量。
確定在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量還參考系統(tǒng)分配的緩存資源。
計算讀完一個數(shù)據(jù)單元需要進(jìn)行的讀取次數(shù)時,如果結(jié)果為小數(shù),則將整數(shù)部分加1作為需要進(jìn)行的讀取次數(shù)。
所述數(shù)量Chunk_r為5~32。
本發(fā)明針對流媒體服務(wù)器的具體應(yīng)用,通過對傳統(tǒng)的RAID5算法、數(shù)據(jù)讀取機(jī)制以及數(shù)據(jù)在磁盤上的存放機(jī)制的優(yōu)化,有效地提高了流媒體服務(wù)器的讀磁盤能力。在多請求并發(fā)的情況下,系統(tǒng)的總體性能得以顯著地提高。本發(fā)明的有益效果主要體現(xiàn)在以下幾個方面1、對RAID5算法進(jìn)行優(yōu)化,將數(shù)據(jù)子塊(block)的大小固定為64KB,數(shù)據(jù)單元(或稱分條單元,Stripe_depth)的大小固定為32~256個block。這樣就使得媒體文件以大塊的方式存放在磁盤上,這種優(yōu)化可以使得在讀磁盤的時候減少磁盤磁頭尋道的時間。同時RAID5算法又保證了媒體文件循環(huán)地存放在不同的磁盤上,當(dāng)用戶點播不同的媒體文件時,能夠使得多磁盤并發(fā)工作,這樣就大大地提高了整體的讀磁盤能力。
2、對數(shù)據(jù)讀取機(jī)制進(jìn)行優(yōu)化,以在一個磁盤上連續(xù)存放流媒體數(shù)據(jù)大小Chunk_w(Chunk_w=Strip_depth的1倍、1/2倍、1/4倍等)為單位組織一定時間段內(nèi)的媒體數(shù)據(jù),以在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量Chunk_r(5~32個數(shù)據(jù)子塊)為單位進(jìn)行媒體數(shù)據(jù)讀取,能夠提高媒體文件磁盤讀取吞吐量。
3、對媒體數(shù)據(jù)進(jìn)行按區(qū)存放,不同碼率的文件放在磁盤的不同物理位置。碼率高的文件放在磁盤磁道的內(nèi)圈,碼率低的文件放在磁盤磁道的外圈。通過這種改進(jìn)的文件存放方式,可有效地提高系統(tǒng)整體的吞吐量。
圖1為媒體服務(wù)器的存儲系統(tǒng)示意圖;圖2為PCI RAID卡結(jié)構(gòu)框圖;
圖3為存儲分配示意圖;圖4為從一個磁盤連接讀取和連接寫入數(shù)據(jù)的數(shù)量的取值范圍示意圖;圖5為低碼率的媒體文件的存儲分配示意圖;圖6為磁盤持續(xù)吞量與邏輯塊地址的關(guān)系圖。
具體實施例方式
在通用RAID中,采用分條(Stripe)技術(shù)把一個文件分散成片存儲在不同的磁盤上,可以減少單個磁盤的訪問次數(shù)和時間,有利于并發(fā)流的處理。在存儲媒體文件時,通過標(biāo)準(zhǔn)的文件系統(tǒng),依據(jù)RAID算法橫跨磁盤連續(xù)地存儲,每一個磁盤上存一個分條單元(Stripe_unit),當(dāng)寫完第一個RAID后,繼續(xù)寫下一個RAID,當(dāng)寫到最后一個RAID的最后一塊硬盤時,又從第一個RAID寫起。通用的RAID算法和通用的文件系統(tǒng)中分條單元僅為4KB,對于間歇式的、小文件的訪問是有效的,但不適用于需要高并發(fā)、大流量連續(xù)性地讀磁盤的流媒體應(yīng)用。
流媒體服務(wù)器是在Internet/Intranet中采用流式傳輸技術(shù),提供流媒體服務(wù)的設(shè)備,而流媒體服務(wù)器通常采用RAID來存儲媒體文件。本發(fā)明針對流媒體服務(wù)器的具體應(yīng)用,通過對傳統(tǒng)的RAID5算法、數(shù)據(jù)讀取機(jī)制以及數(shù)據(jù)在磁盤上的存放機(jī)制的優(yōu)化來提高流媒體服務(wù)器的讀磁盤能力。
流媒體服務(wù)器的存儲系統(tǒng)由相對獨立的系統(tǒng)存儲區(qū)和媒體存儲區(qū)兩個部分組成。系統(tǒng)存儲區(qū)用于存儲操作系統(tǒng)(如,Linux等)、主機(jī)軟件、媒體文件頭、媒體存儲區(qū)的控制數(shù)據(jù)(數(shù)據(jù)盤分配表、FAT文件分配表等數(shù)據(jù))等。媒體存儲區(qū)用于存儲媒體文件中的媒體數(shù)據(jù)部分,采用多個磁盤(至少3個)來實現(xiàn)數(shù)據(jù)存儲。
在實現(xiàn)上,系統(tǒng)存儲區(qū)可以通過在服務(wù)器主板的IDE/SCSI/RAID接口上直接掛接磁盤來實現(xiàn)(DAS方式的組網(wǎng));媒體存儲區(qū)通過在PCI RAID卡提供小型計算機(jī)系統(tǒng)接口(SCSI接口,本系統(tǒng)最大支持4個SCSI通道)上掛接磁盤來實現(xiàn),該SCSI接口可以接服務(wù)器內(nèi)置的磁盤或外置的磁盤柜(均為DAS方式的組網(wǎng))。存儲子系統(tǒng)如圖1所示。
參閱圖2所示的PCI RAID卡,采用輸入/輸出處理器(IOP)和專用的小型計算機(jī)系統(tǒng)接口(SCSI)控制芯片來實現(xiàn),對外提供4個Ultra 160通道或2個Ultra 320通道。
本發(fā)明的方法主要包括向磁盤寫入流媒體數(shù)據(jù)和使用時從磁盤讀取媒體文件。
向磁盤寫入流媒體數(shù)據(jù)為根據(jù)源媒體文件的碼率確定在一個磁盤上連續(xù)存放固定大小的數(shù)據(jù)子塊的數(shù)量Chunk_w;以所述數(shù)據(jù)子塊為單位分割接收的源流媒體數(shù)據(jù);按數(shù)量Chunk_w將多個數(shù)據(jù)子塊組織為一個數(shù)據(jù)單元,并生成每N-1個數(shù)據(jù)單元的校驗數(shù)據(jù)單元;將每N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元分別記錄在不同的磁盤上。
從磁盤讀取流媒體數(shù)據(jù)為根據(jù)媒體文件的碼率確定在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量Chunk_r;根據(jù)數(shù)量Chunk_r和所述數(shù)據(jù)單元包含的數(shù)據(jù)子塊數(shù)量,計算讀完一個數(shù)據(jù)單元需要進(jìn)行的讀取次數(shù)并得到各次實際需要讀取的數(shù)據(jù)子塊數(shù)量,且保證各次實際需要讀取的子塊數(shù)量大致相同;按所述各次實際需要讀取的子塊數(shù)量從磁盤讀取媒體文件的每一個數(shù)據(jù)單元。
以下結(jié)合附圖對上述兩個過程進(jìn)行詳細(xì)說明媒體存儲區(qū)中的一個RAID組可以包含多個磁盤(至少3個)。一個RAID組作為一個單一的邏輯設(shè)備以統(tǒng)一的邏輯塊地址LBA進(jìn)行訪問,訪問的粒度(即最小數(shù)據(jù)子塊,block)本例為64kB。
參閱圖3所示,以4個磁盤構(gòu)成一個RAID組為例。該原理同樣適用于多個磁盤(至少3個)構(gòu)成一組的情況。從圖可見,block是存儲分配機(jī)制中的最小的存儲單位;每一個分條單元SU(Stripe_unit)由多個block組成,每一個SU中所包含的block的個數(shù)為Stripe_depth(或稱為分條深度)。在本實施例中,每一個SU中包含128個block,即Stripe_depth等于128;4個磁盤中,每一個橫條上對應(yīng)的SU組成一個分條(stripe)。如SU0、SU1、SU2和P0組成了一個stripe。每一個stripe中都有一個校驗塊P,如P0-2就是SU0、SU1、SU2的校驗塊。對于SU的尋址、block的尋址、校驗塊P的尋址等與標(biāo)準(zhǔn)的RAID5算法一致。Stripe_depth的范圍為2^5~2^8,即32~256,可根據(jù)需要選擇適當(dāng)?shù)闹怠?br>
本發(fā)明采用了大塊讀和大塊寫的機(jī)制來進(jìn)行媒體數(shù)據(jù)的訪問。在具體的內(nèi)部實現(xiàn)上,通過chunk_r和chunk_w來控制,其中chunk_r和chunk_w可配置。(在描述跟RAID5相關(guān)的存儲機(jī)制上使用block這個概念,在描述跟流媒體服務(wù)器讀寫媒體數(shù)據(jù)時使用mage這個概念,block和mage的大小都是64KB)。
chunk_r表示從一個(物理)磁盤上連續(xù)讀取某一個媒體文件中的數(shù)據(jù)的長度(是指邏輯上連續(xù)而不是物理上連續(xù)),chunk_r的選擇如下1、chunk_r必須是mage的整倍數(shù)(這是因為媒體數(shù)據(jù)無論是在磁盤上存放還是讀入RAM緩沖區(qū)中,都是以mage為基本的存取粒度)。
2、chunk_r有下限為了保證對媒體存儲區(qū)的讀取效率,chunk_r必須有下限。當(dāng)chunk_r=磁盤特征值E時,平均而言,磁盤的吞吐量的利用率為50%。因此將chunk_r的下限選擇為磁盤特征值E。典型磁盤的E值為300kB左右,故將chunk_r的下限設(shè)定為5個mage。
注磁盤特征值E的定義為磁盤的平均持續(xù)吞吐量*(平均尋道時間+平均旋轉(zhuǎn)延時),單位為kByte。根據(jù)這個定義,E值基本不隨磁盤技術(shù)發(fā)展而改變,更快的磁盤其吞吐量高,但尋道時間短,所以乘積基本保持不變。
3、chunk_r隨媒體文件的碼率增加而增加,這是因為當(dāng)用戶訪問一個高碼率的媒體文件時,其占用了更多的流媒體服務(wù)器的出口帶寬(帶寬資源),相應(yīng)的,也允許該會話使用更多的SDRAM緩存容量(緩存資源),否則,系統(tǒng)的緩存資源將沒有得到充分利用(緩存資源和帶寬資源是對應(yīng)的)。而通過使用更高的chunk_r來訪問該媒體文件,可以提高磁盤的吞吐量利用率,超過50%。具體chunk_r隨媒體碼率的變化關(guān)系,將取決于系統(tǒng)的資源配置情況(包括SDRAM緩存容量、由磁盤數(shù)量和網(wǎng)絡(luò)接口帶寬決定的并發(fā)吞吐量)。
4、chunk_r有上限,因為過大的chunk_r將導(dǎo)致某個會話的一次讀操作占用某個磁盤的時間過長,給I/O調(diào)度帶來一定的困難,而影響其他會話的磁盤訪問操作。所以chunk_r也不是越大越好。初步考慮chunk_r的上限定為32mage,對應(yīng)的磁盤訪問時間低于50ms。
chunk_w是指媒體文件在一個(物理)磁盤上連續(xù)存放的長度(是指邏輯上連續(xù)而不是物理上連續(xù))。chunk_w的選擇如下1、chunk_w不能過小,至少應(yīng)是典型chunk_r的4倍以上,以允許chunk_r有足夠的變化范圍;2、chunk_w不能過大,以保證對一個媒體文件的訪問能比較均勻地分布在一個RAID組內(nèi)的多個磁盤之間。
chunk_r和chunk_w的關(guān)系如圖4所示。如果媒體服務(wù)器主要支持的媒體文件碼率范圍為250kbps~2Mbps,則將最大的chunk_w值設(shè)定為在1~2Mbps媒體文件碼率的情況下連續(xù)播放32~64秒所需要的媒體文件存儲量,因此根據(jù)這一點,設(shè)定Stripe_depth的大小是128。其他碼率的媒體文件在存儲時對應(yīng)的較小的chunk_w,可配置為Stripe_depth的1/2、1/4等。具體的chunk_r、chunk_w的設(shè)定值如下表和圖4所示
媒體文件的碼率高低跟chunk_w是相關(guān)的,高碼率的媒體文件其chunk_w也較大。但chunk_w過大時,會導(dǎo)致較多的存儲空間的浪費,比如當(dāng)chunk_w=128mage時,平均每個文件將浪費64個mage的空間,即4MB。為了減少存儲空間的浪費,也可以將Stripe_depth和chunk_w減半,以提高存儲空間的利用率。事實上,在具體的軟件實現(xiàn)時,chunk_w、stripe_depth值都采用參數(shù)配置的方式,以便滿足不同的需要。
不論是高碼率文件還是低碼率的文件,存儲分配的基本原則是在某一個磁盤上存儲了chunk_w大小的數(shù)據(jù)后,再在另一個不同的磁盤上存儲后續(xù)的chunk_w大小的數(shù)據(jù)。因此,媒體文件在存儲分配時分為以下兩種情況高碼率的文件Chunk_w=stripe_depth(=128mage)。這種情況下的存儲分配很簡單,一般可以按照連續(xù)的stripe_umt進(jìn)行分配。
低碼率的文件chunk_w=1/2 stripe_depth(=64mage)。這種情況下需要將兩個chunk_w放到1個Stripe_unit中。
參閱圖5所示,圖中主要說明低碼率的媒體文件的存儲分配,以chunk_w=1/2 stripe_depth為例子。由圖5可見,低碼率的媒體文件在存放時是按照m0、m1、m2...的順序進(jìn)行的。圖5只是個示意圖,對于其他,如chunk_w=1/4stripe_depth時的存儲分配方式,其存儲分配原理跟chunk_w=1/2 stripe_depth時是類似的。而且不同文件的chunk_w也可以放置在同一個stripe unit。
參閱圖6所示,磁盤的持續(xù)吞吐量(SDTR)隨邏輯塊地址(LBA)的變化而變化。在磁盤的外圈,LBA的地址較小,持續(xù)吞吐量較大,隨著LBA地址的增加,也即越往磁盤的內(nèi)圈走,持續(xù)吞吐量會逐漸下降,最后降低為外圈的60%左右。
考慮到磁盤的這個特性,可以將高碼率的文件盡量放置在SDTR低的區(qū)域(即LBA大的區(qū)域),而將低碼率的文件放置在SDTR高的區(qū)域(即LBA小的區(qū)域)。這是由于訪問低碼率的媒體文件時,其chunk_r較小,故相應(yīng)的磁盤吞吐量利用率低,將低碼率的媒體文件放在SDTR高的區(qū)域,可以起到一定的補償作用,以提高整個系統(tǒng)有效的吞吐量(DTR)。
以下舉例說明媒體數(shù)據(jù)讀取操作以chunk_w=64mage為例,假設(shè)資源管理模塊根據(jù)系統(tǒng)的資源情況,給該會話分配的緩存大小為18mage。當(dāng)該緩存中有2/3的空間處于空閑狀態(tài)時,媒體服務(wù)器就會立即從媒體存儲區(qū)中讀取相關(guān)的媒體數(shù)據(jù)來填充。據(jù)此,可以粗略計算出chunk_r的大小為chunk_r=2/3*18mage=12mage由于chunk_w=64mage,當(dāng)以chunk_r=12mage來讀取媒體數(shù)據(jù)時,需要分6次讀完一個數(shù)據(jù)單元(即chunk_w個數(shù)據(jù)子塊,次數(shù)=64/12=5.33333...,取6次),將數(shù)據(jù)單元的子數(shù)據(jù)塊分配到各次操作,使各次讀取的子數(shù)據(jù)塊大致相等,各次讀取的數(shù)據(jù)量如下第1次11mage第2次11mage第3次10mage第4次11mage第5次11mage第6次10mage從上述可知,本發(fā)明通過對傳統(tǒng)的RAID5算法、數(shù)據(jù)讀取機(jī)制以及數(shù)據(jù)在磁盤上的存放機(jī)制的優(yōu)化,結(jié)合文件系統(tǒng),能夠有效地提高流媒體服務(wù)器的讀磁盤能力,使得在多請求并發(fā)的情況下,系統(tǒng)的總體性能得以顯著地提高。
權(quán)利要求
1.一種處理流媒體數(shù)據(jù)的方法,用于將源媒體文件的流媒體數(shù)據(jù)記錄在由N個磁盤構(gòu)成的獨立冗余磁盤陣列中,以及從該獨立冗余磁盤陣列中讀取流媒體數(shù)據(jù);該方法包括向磁盤寫入流媒體數(shù)據(jù)和/或從磁盤讀取數(shù)據(jù)A、向磁盤寫入流媒體數(shù)據(jù)包括步驟根據(jù)源媒體文件的碼率確定在一個磁盤上連續(xù)存放固定大小的數(shù)據(jù)子塊的數(shù)量Chunk_w;以所述數(shù)據(jù)子塊為單位分割接收的源流媒體數(shù)據(jù);按數(shù)量Chunk_w將多個數(shù)據(jù)子塊組織為一個數(shù)據(jù)單元,并生成每N-1個數(shù)據(jù)單元的校驗數(shù)據(jù)單元;將每N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元分別記錄在不同的磁盤上;B、從磁盤讀取流媒體數(shù)據(jù)包括步驟根據(jù)媒體文件的碼率確定在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量Chunk_r;根據(jù)數(shù)量Chunk_r和所述數(shù)據(jù)單元包含的數(shù)據(jù)子塊數(shù)量,計算讀完一個數(shù)據(jù)單元需要進(jìn)行的讀取次數(shù)并得到各次實際需要讀取的數(shù)據(jù)子塊數(shù)量,且使各次實際需要讀取的子塊數(shù)量大致相等;按所述各次實際需要讀取的子塊數(shù)量從磁盤讀取媒體文件的每一個數(shù)據(jù)單元。
2.如權(quán)利要求1所述的方法,其特征在于,以數(shù)據(jù)子塊的大小作為最小存儲單位將磁盤劃分為多個存儲塊(block),由多個存儲塊組成磁盤的一個分條單元(Stripe_unit),該分條單元中存儲塊的數(shù)量Stripe_depth不少于數(shù)量Chunk_w;并由各磁盤對應(yīng)的一個分條單元構(gòu)成一個分條(Stripe),該一個分條至少存儲N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元。
3.如權(quán)利要求2所述的方法,其特征在于,所述一個分條存儲多個N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元,即每一個分條單元存儲多個數(shù)據(jù)單元或校驗數(shù)據(jù)單元。
4.如權(quán)利要求1、2或3所述的方法,其特征在于,所述固定大小的數(shù)據(jù)子塊為64KB。
5.如權(quán)利要求4所述的方法,其特征在于,媒體文件的碼率越大,則使數(shù)據(jù)單元所包含的數(shù)據(jù)子塊越多。
6.如權(quán)利要求4所述的方法,其特征在于,所述數(shù)量Stripe_depth為32~256。
7.如權(quán)利要求4所述的方法,其特征在于,生成每N-1個數(shù)據(jù)單元的校驗數(shù)據(jù)單元時,分別將各數(shù)據(jù)單元相對應(yīng)的數(shù)據(jù)子塊進(jìn)行校驗運算得到多個校驗數(shù)據(jù)子塊,由該多個校驗數(shù)據(jù)子塊構(gòu)成校驗數(shù)據(jù)單元。
8.如權(quán)利要求1所述的方法,其特征在于,所述N個磁盤作為一個單一的邏輯設(shè)備以統(tǒng)一的邏輯塊地址進(jìn)行訪問。
9.如權(quán)利要求1所述的方法,其特征在于,將高碼率的媒體文件存儲在磁盤磁道的內(nèi)圈,即持續(xù)吞吐量低的區(qū)域;將低碼率的媒體文件存儲在磁盤磁道的外圈,即持續(xù)吞吐量高的區(qū)域,以提高整個系統(tǒng)的有效吞吐量。
10.如權(quán)利要求1所述的方法,其特征在于,確定在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量還參考系統(tǒng)分配的緩存資源。
11.如權(quán)利要求4所述的方法,其特征在于,計算讀完一個數(shù)據(jù)單元需要進(jìn)行的讀取次數(shù)時,如果結(jié)果為小數(shù),則將整數(shù)部分加1作為需要進(jìn)行的讀取次數(shù)。
12.如權(quán)利要求1所述的方法,其特征在于,所述數(shù)量Chunk_r為5~32。
全文摘要
本發(fā)明公開了一種處理流媒體數(shù)據(jù)的方法,該方法為根據(jù)源媒體文件的碼率確定在一個磁盤上連續(xù)存放固定大小的數(shù)據(jù)子塊的數(shù)量Chunk_w;以數(shù)據(jù)子塊為單位分割接收的源流媒體數(shù)據(jù);按數(shù)量Chunk_w將多個數(shù)據(jù)子塊組織為一個數(shù)據(jù)單元,并生成每N-1個數(shù)據(jù)單元的校驗數(shù)據(jù)單元;將每N-1個數(shù)據(jù)單元及其校驗數(shù)據(jù)單元分別記錄在不同的磁盤上;以及根據(jù)媒體文件的碼率確定在一個磁盤上能夠連續(xù)讀取數(shù)據(jù)子塊的數(shù)量Chunk_r;根據(jù)數(shù)量Chunk_r和數(shù)據(jù)單元包含的數(shù)據(jù)子塊數(shù)量,計算讀完一個數(shù)據(jù)單元需要進(jìn)行的讀取次數(shù)并得到各次實際需要讀取的數(shù)據(jù)子塊數(shù)量,且保證各次實際需要讀取的子塊數(shù)量大致相等;按各次實際需要讀取的子塊數(shù)量從磁盤讀取媒體文件的每一個數(shù)據(jù)單元。
文檔編號G06F12/00GK1641603SQ200410002150
公開日2005年7月20日 申請日期2004年1月5日 優(yōu)先權(quán)日2004年1月5日
發(fā)明者朱浩穎, 彭華 申請人:華為技術(shù)有限公司