一种基于渲染应用数据访问特点的数据管理方法

文档序号:6625672阅读:211来源:国知局
一种基于渲染应用数据访问特点的数据管理方法
【专利摘要】本发明公开了一种基于渲染应用数据访问特点的数据管理方法。与现有渲染应用所用的磁盘阵列存储方式不同,本技术方案通过对渲染应用访问数据特点的总结,针对不同数据类别进行不同的存储设计。使得保证渲染应用正常运行的情况下,有效使用渲染结点内存,减少了传统渲染存储的数据存取时间。除此之外,由于针对帧数据的特点进行了数据预取的考虑,所以在渲染运行过程中,几乎内存中都能存储到渲染所需要的数据,这样加大了内存利用率。同时,本发明设计的灵活性和弹性保证了使用的方便,灵活性体现在内存分配上,根据场景文件的大小分配每个结点的可用内存大小;弹性体现在分布式的环境下,如果增加或者减少结点本方案一样使用。
【专利说明】一种基于渲染应用数据访问特点的数据管理方法

【技术领域】
[0001]本发明属于高性能计算【技术领域】,更具体地,涉及一种基于渲染应用数据访问特点的数据管理方法。

【背景技术】
[0002]渲染是动漫、影视制作的关键环节,耗时占整个制作周期的30%左右,是一个数据密集和计算密集型任务。目前的渲染集群的数据管理都是把渲染所需的数据放在远端磁盘,渲染应用需要的时候,再从远端磁盘读取到计算结点,这种数据读取方式使得本地渲染应用等待,渲染相邻帧的时候,会涉及镜头数据的频繁读取,那么在数据存取结点会产生数据争用,延迟时间更长,同时渲染应用计算时会占用大量内存,存储数据的内存有限,所以良好的针对渲染访问特点的数据管理方法,可以减少文件远程存取的时间,合理使用结点内存,从而实现加快渲染进程的目的。
[0003]传统的渲染应用的数据管理方法是直接把所有渲染数据存储到统一的磁盘阵列中,比如现在流行的一些渲染农场Renderbus或者是渲染集群,如图1所示,就是把用户提交的所有的渲染数据统一存储在磁盘阵列中,在渲染需要的时候,再去取所需数据。在一个标准的渲染硬件平台中,渲染服务器与存储系统间的数据存取往往会成为渲染性能的瓶颈,尤其是在动漫影视的制作过程中。这样会导致若干问题:渲染结点需要等待远端磁盘读取数据,会导致磁盘取数据以及传输数据的延时;多个结点存取磁盘阵列时候,磁盘I/O频繁,并发存取数据请求太大的时候,会导致I/O排队过久。因此如何选用高效能的存储系统,满足前端众多渲染客户端提交的数据存储请求,尽可能的缩减渲染的时间,是用户急需解决的问题。


【发明内容】

[0004]针对现有技术的以上缺陷或改进需求,本发明提供了一种基于渲染应用数据访问特点的数据管理方法,用以解决现有技术中从远端磁盘读取数据时间太久的问题。
[0005]为了实现上述目的,本发明提供了一种针对渲染应用数据访问特点的数据管理方法,用于在一个渲染集群的分布式渲染环境下渲染一个镜头或者一个场景,所述方法包括以下步骤:
[0006](I)对渲染应用的源数据进行场景分类,所述源数据场景分类包括镜头数据和帧数据,其中镜头数据包括纹理文件和公共几何文件,帧数据包括场景文件、几何文件和着色器文件;
[0007](2)为源数据分配存储区域,将分布式渲染结点的每个结点的空余内存集中为一个内存池,然后将每个节点的内存分为两块:一块为存储镜头数据的镜头数据区,另一块为存储帧数据的帧数据区;并分别设置镜头数据hash表和帧数据hash表;
[0008](3)渲染应用运行初始化时,将渲染应用的源数据中的镜头数据分发到各个结点的镜头数据区,将渲染应用的源数据中的帧数据的场景文件分发到各个结点的帧数据区;
[0009](4)渲染应用运行开始之后,根据帧数据hash表对帧数据区进行数据预取,当需要读取场景文件的时候,如果本结点的帧数据区已存储该场景文件,则直接读取,如果本结点的帧数据区未存储该场景文件,则从远端磁盘读取,然后根据场景文件提取本结点渲染帧的帧号,并根据提取的帧号从远端磁盘预取该渲染帧的另外两类帧数据,即几何文件和着色器文件。
[0010]本发明的一个实施例中,所述步骤⑴具体为:
[0011]将渲染应用的同一个场景的源数据文件放在一起,然后对这个场景的源数据文件进行如下划分:将纹理文件和公共几何文件划分为镜头数据,将场景文件、几何文件和着色器文件划分为帧数据。
[0012]本发明的一个实施例中,所述步骤(2)中分别设置镜头数据hash表和帧数据hash表具体为:
[0013]在镜头数据区设置镜头数据hash表,用于存储整个分布式渲染结点的所有结点的镜头数据的元数据信息,方便镜头数据的读取,镜头数据hash表不需要更新;
[0014]在帧数据区设置帧数据hash表,每个结点的帧数据hash表只存储本结点会访问的帧数据的元数据信息,预取到帧数据之后,更新hash表,当内存不足置换出帧数据之后,需重新更新hash表,删除掉置换出去的文件的hash表项。
[0015]本发明的一个实施例中,所述方法还包括:当本结点内存不足时,对存储在本结点的帧数据区的帧数据进行置换,具体地,采用LRU置换方法进行帧数据的置换。
[0016]本发明的一个实施例中,所述步骤(4)中根据帧数据hash表对帧数据区进行数据预取具体包括:
[0017]当接收到渲染应用访问文件名时,判断此文件是镜头数据还是帧数据;
[0018]根据判断结果,去镜头数据或者帧数据相应的hash表中查找,找到访问文件的hash结点信息,这个hash结点信息包括:{文件大小,文件块数量,文件块信息数组{文件块存储的结点id,该块是文件的第几个块,块大小,块第一字节数据所在文件内偏移}};
[0019]针对文件名和内存地址也有一个hash表,根据这个哈希表的hash结点信息:{此内存块在镜头数据或帧数据的起始地址,此内存块是否在被写,此块的大小},根据前述两次hash处理从相应内存取得文件内容。
[0020]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0021](I)有效利用各个结点的可用内存规划的两类数据管理的内存池来减少渲染时远端磁盘数据的读取,减少磁盘读取和数据传输开销;
[0022](2)通过利用渲染数据的访问特点,把一个场景的渲染源文件放在一起,划分成两类数据:镜头数据和帧数据,多结点共享的镜头在内存池中存一次的方式可以减少存储占用;
[0023](3)利用帧数据的三类数据的整体顺序性读取且只读一次的特点,可以进行帧数据的预取和置换,直接本地存取将要访问的数据,减少存取延时同时提高内存利用率;
[0024](4)系统有很好的灵活性和弹性,本系统可以根据场景的渲染源文件的大小,来动态的给出可用内存的大小,在保证渲染应用正常运行的情况下,保证更多的数据预取到内存。

【专利附图】

【附图说明】
[0025]图1是现有的分布式渲染的数据管理架构;
[0026]图2是本发明实施例中渲染应用的分布式系统架构;
[0027]图3是本发明实施例中渲染系统初始化时候数据载入方法;
[0028]图4是本发明实施例中渲染运行过程中的帧数据预取方法。

【具体实施方式】
[0029]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0030]为了解决渲染应用中远端磁盘数据的读取延时长和针对相邻帧渲染多结点数据争用等问题,本发明提出了利用计算结点空闲内存,针对渲染应用的访问特点,在渲染计算的不同阶段实行不同的数据管理方法来解决。本发明针对一个渲染集群的分布式渲染环境,在渲染一个镜头或者一个场景的时候使用。针对一个场景的多个帧,多个帧都用到的数据叫做镜头数据,每一个帧的独享数据叫做帧数据。本发明就是把每个渲染结点的空闲内存集中组成内存池,然后在渲染开始时分发镜头数据和部分帧数据到内存池中,随后在渲染运行过程中,利用渲染单帧的数据访问顺序性的文件预取方法来预取剩余的帧数据,达到合理使用有限内存,用内存读取规避磁盘读取,从而减少渲染数据的存取时间,加快渲染速度的目的。
[0031]针对上述分析,传统渲染应用的磁盘阵列的数据存取会导致一定的数据存取延时和并发I/o的排队延时,所以本发明提出的针对渲染应用数据访问特点的数据管理方法:在渲染应用运行开始的分发方法和运行中的预取方法,达到合理使用内存资源,减少数据存取延时,加快渲染速度的目的。
[0032]与现有的渲染应用的数据管理方法不同,本技术方案通过对渲染应用数据访问特点进行总结和分类,在渲染运行的不同阶段分发和预取不同的数据到内存池。克服了现有的渲染应用数据在磁盘阵列或者简单缓存预取方法带来的数据存取速度慢,存储空间利用率低的问题。减少了渲染应用的时间,并且增加了内存的利用率。
[0033]如图2所示,为应用于本发明中数据管理方法的分布式系统架构,该系统架构构建如下:
[0034]首先把渲染应用的源数据进行场景分类,后续的数据管理方法是针对每一个场景进行的。划分场景之后,每一个场景的文件都分为两大类:包括镜头数据(纹理文件和公共几何文件)和帧数据(场景文件,几何文件和着色器文件)。
[0035]对于数据的存储划分:将分布式渲染结点的每个结点的空余内存集中为一个内存池,然后内存池分为两块:一个存储镜头数据,一个存储帧数据。对每一个存储区分别建立一个文件哈希表,镜头数据存储之后在这个场景渲染中是不变动的,所以镜头数据存储区的哈希表建立完之后不变。而由于帧数据数量大,且有只读一次并且三类帧数据(场景文件,几何文件和着色器文件)有访问顺序的特点,可以对帧数据进行预取存储,这时候涉及到文件的增删,所以帧数据存储区的哈希表也是变化的。
[0036]在渲染应用系统初始化时候,进行每个计算结点的内存分配组成系统内存池,然后把将要渲染的场景文件中的镜头数据分发到各个结点的镜头数据区,把帧数据的场景文件分发到各个结点的帧数据区,由于帧数据一般比较大,所以第一次我们只存储场景文件,也就是场景文件。如图3所不。
[0037]渲染运行开始之后,对于帧数据区的管理要进行数据预取和置换,之前分析过三类帧数据的访问是有大致顺序性然后个别交叉读取,所以在系统初始化时已经读取了场景文件,如果场景文件使用之后,就置换出去,预取方法会预取接下来会访问到的帧数据,也就是几何文件,这时,要根据内存大小而定,内存充足可预取大量帧数据,内存少的话,预取少量帧数据,同样,几何文件预取完毕后,就预取色器文件,直到所有帧数据都被访问一次,渲染结束。预取方法如图4所示。
[0038]预取流程可描述为:
[0039]Load (场景文件)//初始化载入场景文件
[0040]Render Process//访问数据后巾贞数据只访问一次,触发预取
[0041]Load (几何文件)
[0042]Render Process//访问数据后巾贞数据只访问一次,触发预取
[0043]Load (剩余几何文件+着色器)
[0044]Render Process
[0045]上面的预取方法重叠了计算和去远端取数据的时间,在渲染计算之前将数据预取到本地结点内存中,减少文件系统的10等待时间,提高渲染的效率。
[0046]下面,进一步详细的说明本发明基于渲染应用数据访问特点的数据管理方法,其实现步骤如下:
[0047](I)对渲染应用的源数据进行场景分类,所述源数据场景分类包括镜头数据和帧数据,其中镜头数据包括纹理文件和公共几何文件,帧数据包括场景文件、几何文件和着色器文件;
[0048](2)为源数据分配存储区域,将分布式渲染结点的每个结点的空余内存集中为一个内存池,然后将每个内存池分为两块:一块为存储镜头数据的镜头数据区,另一块为存储帧数据的帧数据区;并分别设置镜头数据hash表和帧数据hash表;
[0049](3)渲染应用运行初始化时,将渲染应用的源数据中的镜头数据分发到各个结点的镜头数据区,将渲染应用的源数据中的帧数据的场景文件分发到各个结点的帧数据区;
[0050](4)渲染应用运行开始之后,根据帧数据hash表对帧数据区进行数据预取,当需要读取场景文件的时候,如果本结点的帧数据区已存储该场景文件,则直接读取,如果本结点的帧数据区未存储该场景文件,则从远端磁盘读取,然后根据场景文件提取本结点渲染帧的帧号,并根据提取的帧号从远端磁盘预取该渲染帧的另外两类帧数据,即几何文件和着色器文件。
[0051]本结点内存不足时,进行置换,由于帧数据具有只读一次的特点,所以直接用近期最少使用算法(Least Recently Used, LRU)置换方法即可。
[0052]本发明步骤(I)根据渲染应用的数据访问特点,将数据进行如下划分:镜头数据(多个渲染结点共享,多次读)、帧数据(单个渲染结点渲染一帧的数据,单结点访问且只读一次)。
[0053]数据的访问特点主要分为:数据分类和数据访问顺序。
[0054]数据分类:镜头数据和帧数据,其中镜头数据有两种:纹理文件和公共几何文件。帧数据有:场景文件,几何文件,和着色器文件。
[0055]帧数据访问顺序是:场景文件,几何文件,着色器。
[0056]在进行完数据分类和总结之后,将各个渲染结点的内存构成的内存池分为两块区域,一块存储镜头数据,一块存储帧数据。暂且叫做镜头数据区和帧数据区。由于镜头数据区存储镜头数据,镜头数据会在渲染过程进行多次存取且数据量较小,所以镜头数据区的数据在渲染最初进行分发,然后一直存在内存中,直到这个场景的所有帧渲染完成。帧数据区存储的单个帧的帧数据,帧数据是仅一个渲染结点访问且只读一次,但是帧数据一般数据量比较大,所以在系统初始化时候,先载入场景文件,然后根据内存空间容量,预取后两类帧数据,由于只访问一次的特点,对这个区域数据使用LRU方法进行置换。所以第(3)步骤中分发的文件分别是:镜头数据中的纹理文件和公共几何文件,以及帧数据中的场景文件。
[0057]分布式渲染的内存池数据管理方法如下:
[0058]将内存池中每个渲染结点的内存分为两块区域,一块存储镜头数据,一块存储帧数据。分别叫镜头数据区和帧数据区。镜头数据区设置镜头数据hash表存储整个分布式系统所有结点的镜头数据的元数据信息,方便镜头数据的读取,这个hash表不需要更新。帧数据区设置帧数据hash表,每个结点的帧数据hash表只存储本结点会访问的帧数据的元数据信息,预取到帧数据之后,需更新hash表,当内存不足置换出帧数据之后,重新更新hash表,删除掉置换出去的文件的hash表项。
[0059]步骤(2)中把分布式结点的内存组成内存池切分成两块进行管理,由于镜头数据和帧数据每类数据特点明显故分开存储且设置不同的hash表方便查找。这样保证镜头数据访问不会多遍历帧数据。帧数据的增删只改自己的hash表,不会影响镜头数据hash表的访问。
[0060]以上两个hash表的设置主要是出于以下的考虑:
[0061]内存池分为两个区域管理,一个区域的镜头数据是不置换的,另外一个区域帧数据是置换的,所以如果是一个hash表,帧数据的读取对hash表的改变会影响镜头数据的查询。另外读取不同类型的文件时,直接可以判断文件是镜头数据还是帧数据,这样直接去相应的hash表查找,在相应的内存管理区存取的话,会加快存取速度,减少hash表的查找时间,所以本发明设置两个独立的hash表。
[0062]在上述步骤(3)中,数据的初始化存储并没有向传统的渲染存储一样,一次加载所有的渲染数据到存储点,本发明限于使用内存存储资源有限且帧数据量大,所以在初始化时候,只载入全部镜头数据和帧数据的场景文件,由于之前分析过数据的访问特点,渲染的最开始只读取场景文件,所以没有必要加载另外两类帧数据,所以这样的考虑在不影响渲染的前提下节省了内存。
[0063]在上述步骤(4)中,在渲染应用进行过程中,进行帧数据的预取,本发明是和目前的渲染应用的磁盘阵列存储进行比较,虽然帧数据很大不能利用内存全部存储,但是由于渲染应用的特点,所以可以根据数据类别进行预取,本发明的预取没有使用现有的一些预取方法,而是把数据访问特点和存储相结合,这样预取准确,且绝对是预取的本帧所需要的帧数据。
[0064]对每一个渲染结点的文件存储管理表述如下:
[0065]上层渲染应用访问文件直接给出文件名,然后本系统会判断此文件是镜头数据还是中贞数据,去相应的hash表中查找,然后找到文件的hash结点信息,这个hash结点信息包括:{文件大小,文件块数量,文件块信息数组{文件块存储的结点id,该块是文件的第几个块,块大小,块第一字节数据所在文件内偏移}},然后针对文件名和内存地址也有一个hash表,根据这个哈希表的hash结点信息:{此内存块在镜头数据或帧数据的起始地址,此内存块是否在被写,此块的大小},根据上面的用文件名的两次hash就可以直接从相应内存取得文件内容。
[0066]针对以上对数据的访问特点总结和分析,对帧数据和镜头数据的文件的结构体设计项有:哈希表结点,包含文件路径字符串,文件大小,文件块数量,文件块信息数组,文件种类标识(是镜头数据还是帧数据)。
[0067]本发明在解决问题的同时,系统部分性能与现有渲染应用的存储相比,有了很大的改善:首先使用本地多余内存进行数据缓存和预取规避了磁盘读取时间和网络传输时间;本发明对一个场景文件进行分类处理,减少了各个独立帧之间共享的文件的多次存储;发明分析了渲染中读取数据的特点,既然利用内存资源,把数据访问特点考虑进去规划存储这样在渲染应用的过程中尽量存储渲染当时阶段所需的数据,这样提高了内存存储利用率;
[0068]发明中对于内存的使用时针对不同数据做不同处理,镜头数据多次访问所以固定存储在内存,帧数据访问一次的特点,所以采用了预取方法。灵活的内存管理,弹性化的内存分配适合不同大小的场景文件使用。
[0069]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种针对渲染应用数据访问特点的数据管理方法,其特征在于,用于在一个渲染集群的分布式渲染环境下渲染一个镜头或者一个场景,所述方法包括以下步骤: (1)对渲染应用的源数据进行场景分类,所述源数据场景分类包括镜头数据和帧数据,其中镜头数据包括纹理文件和公共几何文件,帧数据包括场景文件、几何文件和着色器文件; (2)为源数据分配存储区域,将分布式渲染结点的每个结点的空余内存集中为一个内存池,然后将每个节点的内存分为两块:一块为存储镜头数据的镜头数据区,另一块为存储帧数据的帧数据区;并分别设置镜头数据hash表和帧数据hash表; (3)渲染应用运行初始化时,将渲染应用的源数据中的镜头数据分发到各个结点的镜头数据区,将渲染应用的源数据中的帧数据的场景文件分发到各个结点的帧数据区; (4)渲染应用运行开始之后,根据帧数据hash表对帧数据区进行数据预取,当需要读取场景文件的时候,如果本结点的帧数据区已存储该场景文件,则直接读取,如果本结点的帧数据区未存储该场景文件,则从远端磁盘读取,然后根据场景文件提取本结点渲染帧的帧号,并根据提取的帧号从远端磁盘预取该渲染帧的另外两类帧数据,即几何文件和着色器文件。
2.根据权利要求1所述的数据管理方法,其特征在于,所述步骤(I)具体为: 将渲染应用的同一个场景的源数据文件放在一起,然后对这个场景的源数据文件进行如下划分:将纹理文件和公共几何文件划分为镜头数据,将场景文件、几何文件和着色器文件划分为帧数据。
3.根据权利要求1或2所述的数据管理方法,其特征在于,所述步骤(2)中分别设置镜头数据hash表和帧数据hash表具体为: 在镜头数据区设置镜头数据hash表,用于存储整个分布式渲染结点的所有结点的镜头数据的元数据信息,方便镜头数据的读取,镜头数据hash表不需要更新; 在帧数据区设置帧数据hash表,每个结点的帧数据hash表只存储本结点会访问的帧数据的元数据信息,预取到帧数据之后,更新hash表,当内存不足置换出帧数据之后,需重新更新hash表,删除掉置换出去的文件的hash表项。
4.根据权利要求1或2所述的数据管理方法,其特征在于,还包括:当本结点内存不足时,对存储在本结点的帧数据区的帧数据进行置换,具体地,采用LRU置换方法进行帧数据的置换。
5.根据权利要求1或2所述的数据管理方法,其特征在于,所述步骤(4)中根据帧数据hash表对帧数据区进行数据预取具体包括: 当接收到渲染应用访问文件名时,判断此文件是镜头数据还是帧数据; 根据判断结果,去镜头数据或者帧数据相应的hash表中查找,找到访问文件的hash结点信息,这个hash结点信息包括:{文件大小,文件块数量,文件块信息数组{文件块存储的结点id,该块是文件的第几个块,块大小,块第一字节数据所在文件内偏移}}; 针对文件名和内存地址也有一个hash表,根据这个哈希表的hash结点信息:{此内存块在镜头数据或帧数据的起始地址,此内存块是否在被写,此块的大小},根据前述两次hash处理从相应内存取得文件内容。
【文档编号】G06F12/02GK104239224SQ201410442786
【公开日】2014年12月24日 申请日期:2014年9月2日 优先权日:2014年9月2日
【发明者】郑然 , 金海 , 贾金莉, 章勤, 王文瑾 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1