专利名称::针对实时性的媒体数据的档案系统vfs设计算法的制作方法
技术领域:
:本发明为磁盘文件系统及实时媒体数据存储传输
技术领域:
。
背景技术:
:目前操作系统普遍采用的文件结构包括索引节点和数据。索引节点又称I节点,在文件系统结构中,包含有关相应文件的信息的一个记录,这些信息包括文件权限、文件名、文件大小、存放位置、建立日期等。文件系统中所有文件的索引节点保存在索引节点表中。数据文件的实际内容。可以是空的,也可以非常大,并且拥有自己的结构。以常用的ext2格式为例ext2文件系统的数据块大小一般为1024B、2048B或4096B。ext2文件系统的索引节点(inode)采用多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。假设数据块大小为1024B,利用12个直接指针,可以保存最大为12KB的文件,当文件超过12KB时,则要利用单级间接指针,该指针指向的数据块保存有一组数据块指针,这些指针依次指向包含有实际数据的数据块;假如每个指针占用4B,则每个单级指针数据块可保存1024/4=256个数据指针,因此利用直接指针和单级间接指针可保存1024*12+1024*256=268KB的文件。当文件超过268KB时,再利用二级间接指针,直到使用三级间接指针。利用直接指针、单级间接指针、二级间接指针、三级间接指针可保存的最大文件大小为1024*12+1024*256+1024*256*256+1024*256*256*256=16843020KB,约16GB;若数据块大小为2048B,指针占4B,则最大文件大小为:2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792KB约268GB;若数据i央大小为4096B,指针占4B,则最大文件大小为4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744KB,约4TB。ext2文件系统在写入文件内容的同时并没有同时写入文件meta-data,其工作顺序是先写入文件的内容,然后等空闲时候再写入文件的meta-data,若发生意外,则文件系统就会处于不一致状态。—般的操作系统不能高效处理音视频文件的读取,因为文件的存储由操作系统决定,操作系统存储数据时是根据系统设置的数据块的大小寻找空间将文件存储在不一定连续的位置再通过索引来定位的,这对日常文件处理是可行的,但对于实时视频媒体文件大容量,实时性要求高,用户并发大的情形,文件的分散存储就会导致以下几方面的问题1)读取效率低下,读取文件内容有可能需要多次索引定位,无法保证一次性及时返回所需要数据。2)存取时间长,磁盘损耗大,有可能因为数据的分散存储导致频繁进行磁盘定位获取数据,影响磁盘寿命。3)无法提高同时点播的用户数量,本身从磁盘读取数据就是一个并发的瓶颈,加上这种数据格式的低效性,无法提升服务能力,影响服务性能。
发明内容本发明在于提供一种文件系统技术,该技术可以有效的解决实时媒体数据存储效率低下的问题,以及如何高效读取的问题。现有的各种文件系统,是针对通用数据而设计,而对于实时媒体数据的存储和读取并没有进行优化处理,该发明的技术针对实时媒体数据的特点进行分析并全新设计了算法,可以在保证数据安全稳定的前提下,能够提升存储和读取的性能。本发明的技术方案系统架构参见说明书附1:VFS系统架构图算法设计原理VideoFileSystem是针对实时性的媒体数据所设计的档案系统。使用者可以从磁盘驱动器组(DiskArray)中存取连续的视讯数据。其系统的设计由下图所示,共分为SessionManager,AdmissionController,DiskScheduler,BufferManager禾口DiskStri卯ing几个部份。参见说明书附2:VFS组成结构Disklayout因为一般的视讯数据都很庞大,在VideoFileSystem中,我们用较大的blocksize来增加读取的1/0throughput另外,对于一个视讯档案,我们会将之储存在连续的磁盘位置上。因为整个VideoFileSystem的精神在于保证视讯档案的存取在一定的datarate内,因此必须考虑磁盘的存取时间。在磁盘搜寻时间(seektime)与延迟时间(latencytime)上,我们都采取最坏情况(worstcase)的考虑,我们定义了ServerBoundSB(x),它表示对每一个session的1/0存取所需要的时间和。其定义如下幼(X)-t幼(A)Sb(n)是由CMFS[l]中所定义的upperboundfunctionU(n)而来的,它代表了对磁盘读写连续的n个blocks所需的最长时间(包括seektime和rotationtime),而和磁头一开始的位置以及第一个要存取的block皿mber无关。以下便是Sb(n)的定义Sb(n)=Lseek_max+n(Lblock+Lseek_min)whereblocksize=atrack其中Lseek-max表不worst-caseseektime丄seek-min表不l-trackseektime.Lblock则表示读写一个block所需时间。SessionManager此模块负责处理数据流的界面程序,负责接受IDM的命令。其功能如下1.建立读取的数据流。2.建立写入的数据流。3.移动读写的位置。4.取得数据流缓存器的使用权。5.归还数据流缓存器的使用权。AdmissionControl本模块用来判断是否可以接受一个新的资料流的建立。因为如果数据流的建立没有任何的限制,则系统会无法负荷而导致已建立好的数据流在播放时会产生不连续的现象。新的数据流是否允许被建立,取决于新建立的数据流与已存在的数据流会部会超过磁盘的频宽。如果未超过,则该数据流便允许被建立。我们定义了一个ClientBoundCB(n),用来表示每一个客户端所要求的数据流消耗掉n个blocks的数据所需要的时间。贝UMinimalClientBoundMCB择定义为參min一?如果在加入一个新的数据流后,整个VideoFileSystem仍能保证对于每一个客户端的数据流(包括新加入的数据流)的ServerBound所需要的时间比ClientBound所需要的时间短(即SB<MCB),即表示VideoFileSystem可以在比数据流消耗的速率还要快的时间内将数据塞入每一个客户端的buffer中,如此一来客户端的数据流便不会starvation。这样的话新的数据流便允许被加入,反之则予以拒绝。整个AdmissionControl的流程便建立在CMFS[l]中的MinimalWASprocedure上。DiskSchedulingPolicy此模块是排序的程序,负责安排数据流得处理顺序,并实际执行磁盘存取的工作。为了防止数据流的Starvation,此模块决定哪个数据流必须立即被执行。我们采取MinimalPolicy,也就是重复的作minimalWASprocedure的动作,已决定任何一个轮回时每一个数据流能读取几个blocks,这样的好处是一定能满足AdmissionControl,避免任何一个资料流会有Starvation的情形。BufferManager对于每一个数据流,都有一个相对应的buffer,负责存放由磁盘读出的数据(针对readsession而言),或者是即将写入磁盘的数据(针对writesession而言),然后再将数据送给IDMserver或是写入磁盘中。Buffer都是连续的内存。我们会根据磁盘的频宽,用staticbufferallocationpolicy去配置内存。DiskStripping当server的硬盘有两颗以上时,此模块可以将数个磁盘整合起来,让使用者感觉起来好像只有一颗。同时此模块会将数据加以分割,分别存放在不同的磁盘中。在读取时则可同时由多个磁盘驱动器读取数据。如此可以大幅的提升存取的速率。算法数据结构以下介绍几个重要的数据结构,包括BufferPool、Session、Acc印tedSessionList、StartedSessionList、WAS、DiskStruct(Superblock)等。參BUFFERPOOL參参见说明书附3:BUFFERPOOL数据结构A.数据会经由buffer在client和server间传送。每一个Buffer都指向一土央连续的内存。另夕卜Buffer内也有forwpointer禾口backpointer指向前后的Buffer。B.BufferPool则是一个circulardoublelinkedlist,指向所有的Buffer。C.Buffer的数目以及其所指向的内存大小决定于实际上配置给整个VideoFileSystem的内存大小。D.每一个数据流都会被配置一个buffer。<table>tableseeoriginaldocumentpage6</column></row><table>參SESSION参见说明书附4:SESSION数据结构A.—个Session表示client对server端的'session都必须保证数据能够实时的被读取。<table>tableseeoriginaldocumentpage6</column></row><table>AcceptedSessionList参见说明书附5:Acc印tedSessionList数据结构A.当一个session已经通过了admissioncontrol,但是还没有开始启动,便将之力口入AcceptedSessionList中。B.我们禾尔第一个session为standbysession。StartedSessionList参见说明书附6:startedsessionlist数据结构A.我们禾尔第一个session为startedsession。參WAS参见说明书附7:WAS数据结构<table>tableseeoriginaldocumentpage6</column></row><table>參DISK_STRUCT(superblock)A.DISK_STRUCT记录着有mounted到VFS所有信息。B.WritingdatatoMFS,theDISKSTRUCTisupdated.C.当VFS启动时它会读取所有的信息。D.DISK_STRUCT的size是512bytes的倍数。Einodes指向一个array,此array的每一个元素都记录着储存在磁盘内的一个档案的信息,包括在磁盘的起始位置(begin)、大小(size)、所在目录(parent)、同目录的下一个档案(next)以及最近被reference的信息(LRU)等。Fdir」nodes指向一个array,此array的每一个元素都记录着储存在磁盘内的一个目录的信息,包括该目录下的第一个档案(file—begin)、该目录下的第一个子目录(child)、该目录所在目录(parent)、该目录所在目录中的下一个目录(next)等。参见说明书附8:disk—struct数据结构本发明的有益效果是通过对磁盘空间重新进行格式划分,可以保证数据的安全性,因为数据分块不采用操作系统默认的处理方式,在操作系统里是无法对该数据进行操作的,这对一些强调数据安全的流媒体应用场合具有应用价值,尤其是那些应用于运营场合的流媒体服务,可以防止网络中一些恶意的破坏行为。按照块结构组织数据的存储的算法,能较大幅度提高文件访问的效率,提升磁盘使用寿命。在对磁盘进行初始化过程对其进行读取性能分析,判断磁盘能支持的最大带宽,有效保证用户播放质量。下面结合附图和实施例对本发明进一步说明。图1是VFS磁盘文件系统系统架构图。图2是VFS磁盘文件系统的组成结构。图3是BufferPool数据结构说明。图4是session数据结构说明。图5是Acc印tedsessionlist数据结构说明。图6是startedsessionlist数据结构说明。图7是WAS数据结构说明。图8是disk—struct数据结构说明具体实施例方式整个系统的设计执行流程与时间图参见说明书附9:VFS系统算法设计执行流程和时间图详细说明create—read—sessionA.呼口L]check—acc印tance(),之后会传回一个WASpointer,那便表示这个session的建立要求已被接受,于是便将此session力口入Acc印tedSessionList中。B.如果没有其它的session在等待,便呼叫begin_startup_mode()进入startupmode.参见说明书附10:create_read_session设计执行流程7create—write—sessionA.从VFSdiskscheduling的论点来看,读、写是一样的。主要的不同是对initialconditions而言,writesession的buffer是空的,而readsession的buffer是满的。B.当一个writesession的要求传给admissioncontrol我们将这个档案的startposition禾口filesize写至lj石兹盘superblock的freenode中,然后,我们再4f这个writesession力口到AcceptedSessionList中。参见说明书附11:create—write—session设计执行流程图參mfsSeekDataA.—开始我们必须检查这个session是否已经started。B.然后将这个session自Startedlist移至ljAcc印tedSessionList中。这个session的nextblock便设为所要seek的位置。参见说明书附12:mfsSeekData设计执行流程图mfsGetbufferA.当client端得到databuffer的指标,client便可以针对这个buffer读写数据。参见说明书附13:mfsGetbuffer设计执行流程图mfsRet證BufferA.如果这是一个readsession而且第一个满的buffer数据已经被client读完了,便将这个buffer移至ljemptybufferlist。B.如果这是一个writesession而且第一个空的buffer已经被client写满了,便将这个buffer移到fullbufferlist。参见说明书附14:mfsReturnBuffer设计执行流程图find—wasA.—开始先假设所有的sessions都只读一个block,然后根据dataduration的顺序排列出来。B.检查totalblocks是否有超过bufferspace,如果有超过,我们便无法找到一个minimalworkahead,便传回FALSE。C.计算最坏情况下读取n个blocks所需的totalboundtime,如果totalboundtime比minimaldatadurationtime小,便传回TRUE,贝Un个blocks便是此session的minimalworkahead。D.如果totalboundtime仍比minimaldataduration大,便对每——个session加一个block,重新到st印A的动作。rt_schedA.—开始,我们选择一个有minimalworkahead的session,然后根据这个session的timebound禾口buffersize来决定下——个要月艮务的session。compute_waA.计算一个readsession的workhead如下Workhead=(thenumberoffullblocks)氺(clientreadablocktime)B.计算一个writesession的workhead如下Workhead=(Thenumberofemptyblocks)氺(clientwriteablocktime)权利要求一种视频点播服务器的磁盘文件系统,其特征在于磁盘划分独立区域专门用于媒体文件存储,磁盘的分区按照大数据块来分配,自行对磁盘进行分区管理,文件存储在磁盘上连续的数据区域,对磁盘存取时间性能预先进行计算并保存信息。2.根据权利要求1所述文件系统,其特征在于操作系统进行磁盘分配时,对需要作为流媒体服务的存储区域的磁盘分区未进行格式化操作。3.根据权利要求1所述文件系统,其特征在于磁盘分区的基本单位是64K字节,其是系统的默认参数,实际应用中可进行调整,支持更大值。4.根据权利要求1所述文件系统,其特征在于对于未进行过格式化处理的磁盘分区,该文件系统自行进行磁盘分区和格式化等操作。5.根据权利要求l所述文件系统,其特征在于对于存储到该文件系统的文件,其内容存储在文件系统以块为单位的连续区域,而该文件系统在存储文件数据时将磁盘空间的最前面1M字节空间作为存储磁盘的分区信息。6.根据权利要求1所述文件系统,其特征在于在文件系统完成格式化以后,其能将磁盘的存取性能保存在磁盘的分区信息中。7.—种视频点播服务器的文件存储处理算法,其特征在于采用空闲节点池管理磁盘结构的空闲节点链表上节点的动态分配,磁盘结构通过空闲节点链表管理链表上的空闲节点空间分配。8.根据权利要求7所述的文件存储处理算法,其特征在于空闲节点池采用双向链表结构来保存,其头节点不被分配使用。9.根据权利要求7所述的文件存储处理算法,其特征在于链表中的节点从空闲节点池中分配,文件创建时从链表中寻找合适大小的节点分配并调整相应节点大小,文件写操作完毕会对分配的节点尺寸更新为已经分配的大小减去文件的实际尺寸大小,如果该链表中的节点空间大小变为零,节点从链表中删除并回收到空闲节点池中,每次文件写操作完毕或者删除完毕需要对该节点列表进行空闲节点的合并判断。全文摘要一种实时性媒体数据的档案系统设计算法。由文件系统自行对磁盘空间进行划分和格式化并由软件维护独立分区和磁盘信息。对数据的存取是按照大数据块的方式处理且对文件的分配储存在连续的磁盘位置上。通过计算磁盘能支持的带宽保证用户服务质量。对于文件的空间分配采用磁盘结构的空闲节点链表管理空闲节点。文件写入空间进行预先分配,完毕后动态调整,并且在磁盘结构的空闲节点链表中寻找最合适的空间进行分配。文档编号G06F17/30GK101782918SQ20091022349公开日2010年7月21日申请日期2009年11月17日优先权日2009年11月17日发明者李继凯申请人:北京泉舜广恒科技有限公司