使用即时数据分块的文件输入/输出调度的制作方法

文档序号:6348024阅读:145来源:国知局
专利名称:使用即时数据分块的文件输入/输出调度的制作方法
技术领域
本发明的实施例涉及计算机游戏及相关应用程序,更特别地,涉及计算机游戏及相关应用程序中的文件输入/输出(I/O)管理。
背景技术
诸如视频游戏之类的许多软件应用程序包括文件输入/输出(I/O)调度器以使得应用程序内的媒体访问更高效且可靠。文件I/O系统(FIOS)是具有包括调度器和可选I/ 0过滤器层的多个部分的用于访问文件的中间件(middleware)层。所述调度器通常被设计为将I/O请求最优地排序,以便其在受到任意最后期限和优先级约束的最短可能时间内完成。所述过滤器层可以提供诸如解压缩或高速缓存之类的附加服务。许多不同的游戏组件要求对存储媒体中的文件进行I/O访问。音频组件加载音频文件;游戏播放引擎加载层级定义;图形组件加载纹理图和模型;电影组件加载视听文件;并且子系统加载大型WAD文件。所述媒体可以是游戏递送媒体,诸如光盘(通用媒体盘 (UMD)、压缩盘(CD)、数字视频盘(DVD)、蓝光盘等)、诸如硬盘之类的中间存储媒体、或随着平台演进的其它媒体类型。诸如视频游戏之类的单个应用程序通常具有多个组件,每个组件具有其自己的I/ 0要求。某些要求对媒体的流式访问,其中,I/O系统将文件中的数据流式传输到组件,因此组件可以接连地向游戏机呈现流式传输数据。例如,音频组件通常流式传输用于声音轨重放的音频文件;电影组件流式传输视听内容以重放用于播放器的电影。其它组件仅需要非流式访问,其中,其按照在本文中称为组块(chunk)的部分从文件获取(retrieve)数据以供组件处理。虽然这些组件不要求稳定的数据流以便处理,但组块的递送定时常常是关键的。如果应用程序在其需要时未接收到数据,则性能可能受损失。当前,分块(chunking)(即,将用于I/O请求的数据分成部分/组块)在I/O请求的执行期间发生。在执行之前不确定块之间的数据依赖性,并且这导致I/O请求的处理时的低效。例如,给定I/O请求可能要求在传送之前需要被解密和解压缩的数据。I/O系统可能要求给定块的解密在解压缩之前发生,但不同组块大小可以与解密和解压缩相关联。例如,与解密相关联的组块大小可以具有诸如64千字节的固定值,而与解压缩相关联的组块大小可以是可变的。因此,在没有确定被解密的组块和被解压缩的组块之间的数据依赖性的情况下,必须在能够将文件解压缩之前将整个文件解密,而不是一旦已处理了必要的解密组块就发起给定组块的解压缩。同样地,给定I/O请求要求可以在执行期间用当前的分块形式低效地处理从多个媒体源获取的数据。在执行之前没有确定组块之间的数据依赖性的情况下,当同时处理来自两个媒体设备的数据在理论上可能时,媒体设备可以在来自另一媒体设备的数据正被处理的同时是空闲的。这最终使视频游戏或其它应用程序的功能减慢。此外,视频游戏常常执行大量的I/O。游戏事件常常是用必须满足的最后期限进行时间驱动的。例如,如果播放器从点A行进到点B,则游戏需要具有用于在播放器到达点 B之前加载的与点B相关联的数据的文件。游戏组件可以使用低水平I/O基元来从媒体获取数据,但这些基元(primitive)不处理在多个组件同时要求来自相同设备的数据时的设备竞争。堵塞的(jammed up) I/O请求可能中断流式传输数据流或阻止关键数据组块在需要时到达组件。由于应用程序的组件通常不知道彼此的I/O活动,所以其I/O请求常常导致具有相当大的找寻(overseeking)量的非常低效的I/O模式(来回搜索数据)。随着游戏变大, 找寻和低效数据获取增加。本发明的实施例在这种背景下出现。


通过结合附图来考虑以下详细说明,可以很容易理解本发明的讲授内容,在附图中
图1是根据本发明的实施例的实现文件I/O系统(FIOS)的系统的框图。图2是根据本发明的替换实施例的实现FIOS的替换系统的框图。图3是根据本发明的实施例的文件输入/输出系统(FIOS)软件的框图。图4是举例说明根据本发明的实施例的FIOS的操作流程的数据流程图。图5是举例说明根据本发明的实施例的在FIOS中使用的软件调度器的示例的流程图。
具体实施例方式虽然以下详细说明出于说明的目的包含许多特定细节,但本领域的普通技术人员应认识到以下细节的许多变更和修改在本发明的范围内。因此,在不失一般性并且不对所要求保护的发明的施加限制的情况下阐述下述本发明的实施例。可以在提供集中层的文件I/O系统(FIOS)周围实现本发明的实施例,其中用于系统的所有I/O通过所述集中层。FIOS可以包括创建用于每个单独I/O请求的最优处理的树形结构的指令,和调度I/O请求并确定最高效地服务于(service) I/O请求的次序的指令。举例来说,可以将计算机实现的系统100配置为实现如同1所示的根据本发明的实施例的文件I/O系统(FI0S)。举例来说,但不失一般性地,可以将系统100实现为个人计算机、视频游戏机、手持式游戏设备、蜂窝电话、个人数字助理、或适合于实施本发明的实施例的其它数字设备。系统100可以包括处理单元105和耦合到处理单元105的主存储器 106。可以将CPU 105配置为运行软件应用程序并可选地运行操作系统。本发明的某些实施例可以利用某些类型的处理器架构,其中,CPU 105包括主处理器105A和具有其自己的相关联本地存储器106B的辅助处理器105B。特别地,此类处理器架构的一个示例是单元处理器(cell processor)。在例如版权属于国际商业机器公司、索尼计算机娱乐公司、东芝公司2005年8月8日的Cell Broadband Engine Architecture中详细地描述了单元处理器架构的示例,其拷贝可以在http://cell.scei.co.jp/处下载,其全部内容通过引用结合到本文中。 主存储器106可以存储供CPU 105使用的应用程序和数据。主存储器106可以采取例如RAM、DRAM、ROM等集成电路的形式。可以以能够在处理器105上执行的指令的形式将计算机程序101存储在存储器106中。可以将程序101的指令配置为特别地实现具有下述某些特征的文件输入/输出系统(FI0S)。存储器106可以包含I/O队列101Q,例如,采取用于FIOS程序101所使用的传入(incoming),已调度、已发布、已完成、和自由1/0请求的栈或队列的形式。下面还描述了此类队列的示例。举例来说,FIOS程序101可以包括指令a)从应用程序103接收涉及媒体设备118 的传入1/0请求,b)通过确定要传送的数据的组块(即部分)的位置和数据依赖性来创建被配置为形成用于1/0请求的最优处理次序的树形结构,C)将传入1/0请求插入在存储器 106中包含的调度表(schedule)中,其中,传入1/0请求在调度表内的位置至少部分地取决于树形结构的处理次序和d)根据所述调度表和树形结构来实施1/0请求。客户端系统100还包括众所周知的支持功能110,诸如输入/输出(1/0)元件111、 电源(P/S) 112、时钟(CLK) 113、以及高速缓存(cache) 114。客户端设备100还可以包括快速存储设备115,诸如提供用于应用程序和数据的非易失性存储的硬盘驱动器。特别地,可以将快速存储设备115用于对从较慢媒体设备118获取的文件116的临时或长期存储。快速存储设备115上的文件116另外可以来自除较慢媒体设备118之外的源。例如,文件116 可以包括但不限于操作系统文件、由应用程序创建的临时文件、诸如照片/音频/视频之类的用户数据、下载内容等等。举例来说,存储设备115可以是固定磁盘驱动器、可移动磁盘驱动器、闪速存储器设备、或磁带驱动器。较慢媒体设备118可以是大容量光盘驱动器,例如CD-ROM驱动器、DVD-ROM驱动器、高清晰度数字多功能盘(HD-DVD)驱动器、蓝光盘驱动器、UMD驱动器、或其它光学存储设备。可以将从媒体设备118预取的文件116临时存储在硬件高速缓存中的储存器115中以便快速加载到存储器106中。可以使用一个或多个用户输入设备120将来自一个或多个用户的用户输入传达到系统100。举例来说,可以经由1/0元件111将用户输入设备120中的一个或多个耦合到客户端设备100。适当输入设备120的示例包括键盘、鼠标、操纵杆、触控板、触摸屏、光笔、 静物照相机或视频摄像机、和/或麦克风。客户端设备100可以包括网络接口 125以促进经由电子通信网络127的通信。网络接口 125可以被配置为通过局域网和广域网(例如因特网)来实现有线或无线通信。系统100可以通过网络127经由一个或多个消息分组126 来发送和接收数据和/或文件请求。系统还可以包括图形子系统130,其可以包括图形处理单元(GPU) 135和图形存储器140。图形存储器140可以包括用于存储用于输出图像的每个像素的像素数据的显示存储器(例如,帧缓冲器)。图形存储器140可以被集成在与GPU 135相同的设备中、作为单独的设备与GPU 135相连、和/或在存储器106内实现。可以直接从CPU 105向图形存储器140提供像素数据。可替换地,CPU 105可以为GPU 135提供定义期望输出图像的数据和/ 或指令,由此,GPU 135可以生成一个或多个输出图像的像素数据。定义期望输出图像的数据和/或指令可以被存储在存储器106和/或图形存储器140中。在实施例中,GPU 135可以被配置具有由用于由定义用于场景的几何结构、照明、阴影、纹理、运动、和/或摄像机参数的指令和数据生成用于输出图像的像素数据的3D再现能力。GPU 135还可以包括能够执行着色器程序的一个或多个可编程执行单元。图形子系统130可以从图形存储器140周期性地输出用于图像的像素数据以便显示在视频显示设备150上。视频显示设备150可以是能够响应于来自系统100的信号而显示视觉信息的任何设备,包括CRT、IXD、等离子体、和OLED显示器。计算机系统100可以为显示设备150提供模拟或数字信号。举例来说,显示器150可以包括显示文本、数字、图形符号或图像的阴极射线管(CRT)或平板屏幕。另外,显示器150可以包括产生可听或其他可检测声音的一个或多个音频扬声器。为了促进此类声音的生成,客户端设备100还可以包括适合于根据由CPU 105、存储器106、和/或储存器115提供的指令和/或数据来生成模拟或数字音频输出的音频处理器155。包括CPU 105、存储器106、支持功能110、数据存储设备115、媒体设备118、用户输入设备120、网络接口 125、和音频处理器155的系统100的组件可以经由一个或多个数据总线160在操作上相互连接。这些组件可以以硬件、软件、固件、或这些中的两个或更多的某些组合来实现。本发明的某些实施例可以利用单元处理器架构或类似处理器架构。图2举例说明根据本发明的实施例的被配置为实现FIOS的单元处理器200。单元处理器200包括主存储器202、单个Power处理器元件(PPE) 204、以及八个协同处理器元件(SPE) 206。举例来说,PPE 204可以包括具有相关联高速缓存的64位Power PC处理器单元(PPU)。例如服从 CBEA系统的某些实现可以在PPE 204中包括向量多媒体扩展单元。PPE 204可以是能够访问系统管理资源(诸如存储器保护表)的通用处理单元。硬件资源可以被明确地映射到被 PPE 204看到的实地址空间。因此,PPE 204可以直接通过使用适当的有效地址值来对这些资 源中的任何一个进行寻址。PPE 204的主要功能是用于不同SPE 206的任务的管理和分配。PPU可以执行FIOS程序101的编码指令。SPE 206是与PPE 240相比不那么复杂的计算单元,因为其不需要执行任何系统管理功能。每个SPE 206包括有时称为协同处理器单元(SPU)的处理器单元和相关联的本地存储装置(LS)。SPE 206通常可以具有单指令多数据(SIMD)能力且通常处理数据并发起任何所需数据传送(根据由PPE 204设置的访问性质)以便执行其分配的任务。SPE 206可以在其本地存储装置中存储实现FIOS程序101的部分的指令207。SPE 206的目的是实现要求较高计算单元密度并能够有效地使用所提供的指令集的应用。虽然在本示例中示出8 个SPE,但单元处理器200可以被配置具有任何数目的SPE。根据图2,存储器202、PPE 204、 和SPE 206可以相互通信并通过环形元件互连总线210与I/O设备208通信。可以由PPE 204和SPE 206经由存储器接口控制器(MIC)来访问存储器202。存储器202可以包含I/O队列203,例如,如下所述的传入、调度、发布、完成、自由、 和预取队列。存储器202还可以包含具有与本文所述的FIOS程序101共有的特征的FIOS 程序101的部分。PPE 204可以包括内部高速缓存(Li)和外部高速缓存(L2)。PPE可以将FIOS程序101的部分存储在其内部高速缓存(Li)中。FIOS程序101和SPE实现的文件传送指令207或其部分也可以被存储在存储器202以便在需要时供SPE 206和PPE 204访问。举例来说 ,如图3所示,FIOS程序101可以包括媒体栈300以促进与诸如存储设备115或媒体设备118之类的硬件的对接。媒体栈300可以包括树形结构层301、调度器 303、一个或多个媒体过滤器层305、设备媒体层307、处理器文件系统(FS)读取层309、以及硬件层311。树形结构层301创建映射表(map)以促进与要传送的单独I/O请求相关联的数据的最优处理。最初,创建限定了与给定I/O请求相关联的一个或多个处理层306 (例如,解密、解压缩、去存档(de-archiving)等)的树形结构313。在树形结构313的每个层306处处理对于每个I/O请求所传送或接收到的数据,并且树形结构313被配置为在已经处理前一层中的足够数据之前不开始后续处理层。然后,树形结构313在一个或多个处理层306 中的每一个处处将要传送或接收的数据分成一个或多个组块302。与特定处理层306相关联的块302具有对应于该特定处理层306的一个或多个大小。用于不同层的组块大小可以是不同的。树形结构313通过确定每个块302的位置和不同处理层306的组块302之间的数据依赖性304来形成用于不同层的块的最优处理次序。举例来说,但非限制性地,I/O请求可以包括接收被加密且压缩的数据。最初,树形结构创建两个处理层(包括解密层和解压缩层)以便满足I/O请求。在本示例中,要传送的数据需要在其可以被应用程序接收到之前被解压缩且要传送的数据需要在其可以被解压缩之前被解密。树形结构层301根据处理层将要传送的数据分成组块(即数据的部分)。 特别地,树形结构301生成将数据分成组块的指令,所述组块具有的大小被选择为使得可以同时处理数据的各部分而不必等待整个数据片在下一层级的处理可以开始之前完成一个层级的处理。用于给定组块的每个指令可以用路径名、偏移、和长度来定义组块。例如,可以在固定的64K组块大小下实现解密,因此树形结构层301可以将数据分成64K块以进行解密。然而,可以在可变大小的组块中处理解压缩,因此,树形结构层可以将数据分成可变大小的组块以进行解压缩。解压缩(去存档器(de-archiver)变换)过程可以接受可变大小的已压缩和解密的组块并将其解压缩成固定大小的未压缩块。树形结构层301或媒体过滤器层305可以被配置为确定已压缩和解密的数据的哪些可变大小组块解压缩成固定大小的组块而不必首先将其解压缩。为了促进加密组块的可变长度的确定,在分块时,媒体过滤器层305 (最终确定哪些组块被创建)可以在RAM中存储其需要用来计算给定组块的大小和位置的任何信息。 例如,对于FIOS psarc文件而言,去存档器层可以将psarc文件的目录表(TOC)保持在RAM 中。TOC可以包含列出文件中的每个压缩块的大小的表格,并且去存档器媒体层可以由此得到块的位置。因此,有效地,去存档器能够将对未压缩数据块的传入请求转换成对相应压缩数据块的请求。去存档器为进行此变换需要的唯一信息是T0C,其已在RAM中。去存档器不需要实际读取任何数据或将其解压缩以创建树节点。由于解密层的组块大小和解压缩层的组块大小不对齐,所以给定解密组块可能不是总是被立刻解压缩。作为替代,在可以开始将解压缩层组块解压缩之前,多于一个解密层组块可能需要被解密。然后,通过确定与每个层相关联的组块的位置并确定不同层的组块之间的数据依赖性来建立最优处理次序。这样,不是在后续处理层可以开始之前等待整个处理层完成,而是后续处理层可以在已处理了前一层中的必要数据组块时立即开始(例如, 一旦必要的解密层组块已完成被解密,给定组块的解压缩就可以开始)。 有时候,I/O请求可能要求从多于一个的媒体/存储设备获取数据。因此,通过在执行之前确定数据依赖性,可以同时进行与来自多个媒体/存储设备的数据一起处理I/O 请求,而不是使一个媒体/存储设备空闲、同时另一媒体/存储设备处理其I/O请求的一部分。举例来说,但不是以限制的方式,给定I/O请求可以要求从硬盘(HD)和蓝光媒体设备两者进行数据获取。通过略述用于给定I/O请求的数据依赖性,可以确定从HD确切地需要什么和从蓝光确切地需要什么。这样,当树形结构确定其可容许时,可以同时处理来自两个设备的数据,而不是在正在处理来自另一设备的数据的同时使一个设备空闲。一旦已经创建树形结构313,则调度器303就可以将构成传入I/O请求的树形结构的指令插入包含于存储器中的调度表中。该调度表内的给定指令的位置至少部分地取决于与树形结构313相关联的处理次序。如果调度表中的两个或更多不同的I/O请求包含类似的树形结构313,则可以使这些I/O请求交错,使得可以同时处理多于一个的请求。这可以改善满足I/O请求的效率, 因为可以同时地或以重叠的时间完成相关I/O请求,而不是等待每个I/O请求在下一个开始处理之前完成处理。例如,在某些实施例中,可以与树形结构313的指令执行并行地执行来自已与树形结构313的指令交错的其它I/O请求的一个或多个指令。举例来说,但不以限制的方式,如果调度器303确定如果请求被交错则将更快地服务于该I/O请求,则I/O请求可以被交错。这可以用以下两个示例来举例说明。根据第一示例,假设同时执行两次补丁(patch)读取。文件A需要五个组块(Al) (A2) (Pl) (A3) (P2)。文件B需要四个组块(Bi) (P3) (B2) (B3)。在这种情况下,“P” 代表补丁文件,并且“A”和“B”是原始数据文件。磁盘上布局可以看起来像这样
· · (Al) (A2) (A3) · · · (Bi) (B2) (B3) ............. (Pl) (P2) · · ·
请注意,由于磁盘上的文件接近,所以调度器303可以确定以最小的查找完成两次读取的最快方式是通过首先读取Al A3、然后是Bl B3、然后是Pl P3来使请求交错。根据第二示例,假设调度器303已经调度第一读取请求并调度第二高优先级低等待时间读取请求(例如,音频请求)。如下表I所描绘的,FIOS 101可以从第一读取开始对组块进行操作。在表I中,组块随着时间的推移向左移动;其始于队列,移动至执行,并最后完全完成。表 I
dο e 丨 eecUt Jig 丨 s η c|eue
\I ;Λ 1 .■ -I AΓ) ·< A J ;· A ·31 i h 5 ! i A丨 (A1 . ; AB >
在已开始A3的执行之后,队列看起来如下表II所描绘的 表II
ο··Π t!?; e τ: u “ χ η q" 二 ι; □ ii e eA1 ; A, ; Ij \i 5 A i ; [At:) ; Λ·; · ‘ AH :ι
现在假设音频线程进入并突然想要加载负载(Bi)和(B2)。如果音频读取器请求即时服务,则调度器303可以将(Bi)和(B2)的读取放在队列的前面。现在,队列可以看起来如下表III所示最后,当队列的此部分完成执行时,可以看到如表IV所示,I/O已被交错以用于两个读取请求。表 IV
-ζ·} ;tri ( λ e 二 ; U. ι ng ! ι q v.t u r
.·. ιτ .., 、; -m ...r- ! t- γ- -γ .'■%.·'·it :· 、- w ” .-" -··-. ·ι %
! .-i 丄- ;Λ... ; i 尸.3 - i. Γ-丄、 h .:. ,- /r'.-t - '. . ; i Α , ‘ χ-. - '- ; ,'■%.<, i II
设备媒体层307 (有时称为媒体访问层)可以被配置为对从上述媒体过滤器层305接收到的媒体请求进行响应,获取所请求的数据,然后向栈300返回其答复。媒体过滤器层305可以包括补丁器(patcher)322、去存档器层308、RAM高速缓存层310、调度器高速缓存层312、覆盖层314、目录高速缓存层316、加密/解密层318、以及压缩/解压缩层320。这些媒体过滤器层305对应于与树形结构313相关联的处理层306。与 I/O请求相关联的给定数据片可以根据与数据相关联的媒体过滤器层的数目而具有多个处理层。去存档器308可以用来促进从压缩档案提取特定资产文件。RAM高速缓存层310可以用来实现数据例如在主存储器中的高速缓存。调度器高速缓存312可以是简单的磁盘至磁盘高速缓存以用于临时存储来自诸如光盘之类的较慢源的数据。本文所使用的术语“调度器高度缓存”指的是更快访问媒体设备的存储媒体中的临时数据存储器。不需要预取调度器高速缓存312中的所有数据;某些可以按需取得并将其拷贝到高速缓存。举例来说,而非限制性地,调度器高速缓存层312可以利用快速存储媒体来提供此类临时存储。在其中快速存储媒体是硬盘驱动器(HDD)的特殊情况下,调度器高速缓存312有时称为HDD高速缓存。可以将调度器高速缓存312保持为单个文件或多个文件。另外,调度器高速缓存 312的内容不必是完整文件。可以通过删除某些单独文件以在不牺牲过多数据的情况下在需要时智能地释放磁盘空间来部分地刷新多文件高速缓存。相反,单文件高速缓存通常只能被截取(truncate)或完全删除。单文件高速缓存可以提供比多文件高速缓存更高的性能,因为多文件高速缓存通常要求附加的簿记工作(在主机文件系统本身内部),这可能要求额外的I/O。如下文所讨论的,覆盖层314可以用来允许文件系统层级处的文件和目录的任意覆盖。目录高速缓存层316可以用来高速缓存用于处理器单元或单元处理器的0/S可能不适当地高速缓存(例如文件存在、大小、和位置)的数据。加密/解密层318可以用来促进用于传送的数据的加密或解密。压缩/解压缩层320可以用来促进用于传送的数据的压缩或解压缩。参照下文描述的图4,可以理解FIOS程序101的树形结构层301和调度器303的操作。从客户端的角度出发,可以以相对简单的方式服务于I/O请求403。例如,诸如视频游戏之类的应用程序401内的线程402可以通过调用函数(例如readFileO )经由FIOS程序101来请求I/O。该函数可以指定用于I/O请求403的优先级和应完成请求403的最后期限。然后,FIOS媒体栈300使用树形结构层301来创建用于I/O请求403的树形结构 313,其形成定义用于该I/O请求403的最优处理次序的映射表。树形结构最初定义与给定I/O请求403相关联的处理层级306。例如,给定I/O请求403可以要求从处理器向媒体设备传送数据,其中,需要对数据进行压缩、加密、和存档。 在这种情况下,树形结构313将定义用于与I/O请求403相关联的数据的压缩、加密、和存档的处理的三个层级306。给定数据片必须在其被加密之前被压缩,在其被存档之前被加密,并在其最后被传送到媒体设备之前被存档。然后,树形结构313根据处理层级306将要传送的数据分成组块302 (例如,在压缩层级处将数据分成64K组块,在加密层级处将数据分成可变大小组块,并在存档层级处将数据分成64K组块)。数据被分成组块302,因此可以同时处理任何给定层级或不同层级处的数据部分,而不是必须在可以开始下一处理层级306之前等待请求中的所述数据完成一个处理层级306。由于一个处理层级306的组块302不一定与另一处理层级306的组块 302对齐,所以必须映射与不同处理层级306相对应的组块302的数据依赖性304以便使 I/O请求403的处理成流线型。例如,给定压缩层级组块可能不是总是在压缩已完成时立即开始加密。由于在可变大小下处理加密层级,所以可能在加密层级组块可以开始加密之前必须对两个或更多压缩层级组块进行压缩。因此,树形结构313有必要确定这些数据依赖性304以优化给定I/O请求403的处理。此外,当I/O请求要求从多个媒体/存储设备获取数据时,在树形结构313中概述的数据依赖性304可以允许来自不同媒体/存储设备的数据的同时处理,而不是在另一媒体/存储设备空闲的同时使来自一个媒体/存储设备的数据被处理。与树形结构313相关联的最终产物是定义用于给定I/O请求403的最优处理次序的映射表。与I/O请求的调度表的优化无关,每个I/O请求403被树形结构313单独地优化,以便其可以在可能的最短时间量内完成。此I/O请求403及其相关联树形结构313然后被馈送给调度器303以进行高效调度。 重要的是应注意与I/O请求相关联的数据可以具有比上述的两个更多的处理层。 树形结构实际上不服务于I/O请求,而是仅创建如何可以最优地服务于单独I/O请求的映
射表。 举例来说,但非限制性地,可以将I/O请求分成树形结构,其中,由相应的指令来处理在处理该请求时的每个层处的每个数据组块。树形结构的一个层内的给定指令可以具有相关联的数据依赖性,其指示在该给定指令可以开始执行之前必须完成的来自前一层的一个或多个指令。表V提供用于I/O请求的树形结构的示例。在表I中,每个指令使用由路径名、偏移和以千字节(KiB)为单位的长度标识的数据。在本示例中,树形结构内的层的处理次序是从下至上。然而,可以并行地执行树形结构内的指令,从而满足数据依赖性。在表V中,用于给定指令的依赖性指示在给定指令可以开始执行之前必须从下面的层完成哪个(哪些) 其它指令。在本示例中,以/dev_开头的路径名指的是媒体设备。具体而言,/dev_hdd0和 /dev_hddl指的是硬盘驱动器且/dev_bdvd0指的是高清晰度数字视频驱动器(DVD)。不以 /(1^_开头的路径名指的是由其它指令所获取的数据组成的虚拟文件。表V
权利要求
1.在具有处理器单元、存储器、和一个或多个媒体/存储设备的系统中,一种用于处理到或来自所述一个或多个媒体/存储设备的输入或输出(I/O)的方法,包括a)从在所述处理器上运行的应用程序接收传入I/O请求以向所述一个或多个媒体/ 存储设备传送数据或从所述一个或多个媒体/存储设备接收数据;b)创建包括能被所述处理器执行且包含于存储器中的指令的树形结构,该树形结构定义与所述I/O请求相关联的一个或多个处理层,其中,所述指令在所述一个或多个处理层中的每一个处将所述I/O请求中的数据划分成一个或多个组块,其中,所述一个或多个层处的每个指令具有对前一层中的一个或多个相应指令的相关联数据依赖性,其中,对给定指令的数据依赖性允许所述给定指令仅在所述前一层中的相应一个或多个依赖的指令的执行之后执行;c)通过确定每个组块的位置和不同处理层的组块之间的数据依赖性将所述树形结构中的指令排序成处理次序;d)将一个或多个指令插入包含于所述存储器中的调度表中,其中,所述一个或多个指令在所述调度表内的位置至少部分地取决于所述处理次序;以及e)通过用所述处理器根据所述调度表来执行所述指令而服务于I/O请求,其中,由所述处理器根据与包含于所述存储器中的树形结构相关联的所述处理次序来执行所述指令。
2.权利要求1的方法,其中,与特定处理层相关联的组块具有不同于与另一处理层相关联的组块的大小。
3.权利要求1的方法,其中,e)包括在执行具有数据依赖性的给定指令之前确定依赖的指令的执行是否完成。
4.权利要求1的方法,其中,所述树形结构包括最低层,其中,所述最低层的一个或多个指令具有对所述最低层中的不同指令的相关联数据依赖性,其中,对最低层中的给定指令的数据依赖性允许所述给定指令仅在执行最低层中的相应一个或多个依赖的指令之后执行。
5.权利要求1的方法,其中,e)包括并行地执行来自公共处理层的两个或更多指令。
6.权利要求1的方法,其中,e)包括并行地执行来自两个或更多不同处理层的两个或更多指令。
7.权利要求1的方法,其中,e)包括在所述树形结构的指令的执行中使由所述处理器进行的对来自一个或多个其它I/O请求的一个或多个指令的执行交错。
8.权利要求7的方法,其中,e)包括与所述树形结构的一个或多个指令的执行并行地执行来自所述一个或多个其它I/O请求的一个或多个指令。
9.权利要求1的方法,其中,所述一个或多个处理层包括去存档或存档层。
10.权利要求1的方法,其中,所述一个或多个处理层包括解密或加密层。
11.权利要求1的方法,其中,所述一个或多个处理层包括解压缩或压缩层。
12.权利要求1的方法,其中,在d)中将传入I/O请求插入所述调度表内还取决于与 I/O请求相关联的优先级约束。
13.权利要求1的方法,其中,在d)中将传入I/O请求插入所述调度表内还取决于与 I/O请求相关联的最后期限约束。
14.权利要求1的方法,其中,e)包括在插入到所述调度表之前、当与两个或更多I/O请求相关联的所述树形结构满足阈值重叠值时使两个或更多I/O请求交错。
15.权利要求1的方法,其中,e)包括在运行时间向一个或多个文件应用差别补丁。
16.一种用于处理输入/输出(I/O)的系统,包括处理器单元;存储器,其被耦合到所述处理器单元;一个或多个媒体/存储设备,其耦合到所述处理器单元;以及包含于所述存储器中的一组处理器可执行指令,所述指令被配置为在被执行时实现用于处理到或来自所述一个或多个媒体/存储设备的输入或输出(I/O)的方法,该方法包括a)从在所述处理器上运行的应用程序接收传入I/O请求以向所述一个或多个媒体/ 存储设备传送数据或从所述一个或多个媒体/存储设备接收数据;b)创建包括能被所述处理器执行且包含于存储器中的指令的树形结构,该树形结构定义与所述I/O请求相关联的一个或多个处理层,其中,所述指令在所述一个或多个处理层中的每一个处将所述I/O请求中的数据划分成一个或多个组块,其中,所述一个或多个层处的每个指令具有对前一层中的一个或多个相应指令的相关联数据依赖性,其中,对给定指令的数据依赖性允许所述给定指令仅在所述前一层中的相应一个或多个依赖的指令的执行之后执行;c)通过确定每个组块的位置和不同处理层的组块之间的数据依赖性将所述树形结构中的指令排序成处理次序;d)将一个或多个指令插入包含于所述存储器中的调度表中,其中,所述一个或多个指令在所述调度表内的位置至少部分地取决于所述处理次序;以及e)通过用所述处理器根据所述调度表来执行所述指令而服务于I/O请求,其中,由所述处理器根据与包含于所述存储器中的树形结构相关联的所述处理次序来执行所述指令。
17.权利要求16的系统,其中,与特定处理层相关联的组块具有不同于与另一处理层相关联的组块的大小。
18.权利要求16的系统,其中,e)包括在执行具有数据依赖性的给定指令之前确定依赖的指令的执行是否完成。
19.权利要求16的系统,其中,所述树形结构包括最低层,其中,所述最低层的一个或多个指令具有对所述最低层中的不同指令的相关联数据依赖性,其中,对最低层中的给定指令的数据依赖性允许所述给定指令仅在执行最低层中的相应一个或多个依赖的指令之后执行。
20.权利要求16的系统,其中,e)包括并行地执行来自公共处理层的两个或更多指令。
21.权利要求16的系统,其中,e)包括并行地执行来自两个或更多不同处理层的两个或更多指令。
22.权利要求16的系统,其中,e)包括在所述树形结构的指令的执行中使由所述处理器进行的对来自一个或多个其它I/O请求的一个或多个指令的执行交错。
23.权利要求22的系统,其中,e)包括与所述树形结构的一个或多个指令的执行并行地执行来自所述一个或多个其它I/O请求的一个或多个指令。
24.权利要求16的系统,其中,所述一个或多个处理层包括去存档/存档层。
25.权利要求16的系统,其中,所述一个或多个处理层包括解密/加密层。
26.权利要求16的系统,其中,所述一个或多个处理层包括解压缩/压缩层。
27.权利要求16的系统,其中,在d)中将传入I/O请求插入所述调度表内还取决于与 I/O请求相关联的优先级约束。
28.权利要求16的系统,其中,在d)中将传入I/O请求插入所述调度表内还取决于与 I/O请求相关联的最后期限约束。
29.权利要求16的系统,其中,e)包括在插入到所述调度表之前、当与一个或多个I/O 请求相关联的所述树形结构满足阈值重叠值时使一个或多个I/O请求交错。
30.权利要求16的系统,其中,e)包括在运行时间向一个或多个文件应用差别补丁。
31.一种计算机程序产品,包括计算机可读媒体,其具有在所述媒体中包含的计算机可读程序代码,所述计算机可读程序代码包括在被执行时处理到或来自一个或多个媒体/存储设备的输入或输出(I/O)的计算机可执行指令,所述计算机程序产品具有a)用于从在所述处理器上运行的应用程序接收传入I/O请求以向所述一个或多个媒体/存储设备传送数据或从所述一个或多个媒体/存储设备接收数据的计算机可执行程序代码装置;b)用于创建包括能被所述处理器执行且包含于存储器中的指令的树形结构的计算机可执行程序代码装置,该树形结构定义与所述I/O请求相关联的一个或多个处理层,其中, 所述指令在所述一个或多个处理层中的每一个处将所述I/O请求中的数据划分成一个或多个组块,其中,所述一个或多个层处的每个指令具有对前一层中的一个或多个相应指令的相关联数据依赖性,其中,对给定指令的数据依赖性允许所述给定指令仅在所述前一层中的相应一个或多个依赖的指令的执行之后执行;c)用于通过确定每个组块的位置和不同处理层的组块之间的数据依赖性将所述树形结构中的指令排序成处理次序的计算机可读程序代码装置;d)用于将一个或多个指令插入包含于所述存储器中的调度表中的计算机可读程序代码装置,其中,所述一个或多个指令在所述调度表内的位置至少部分地取决于所述处理次序;以及e)用于通过用所述处理器根据所述调度表来执行所述指令而服务于I/O请求的计算机可读程序代码装置,其中,由所述处理器根据与包含于所述存储器中的树形结构相关联的所述处理次序来执行所述指令。
32.权利要求31的计算机程序产品,其中,与特定处理层相关联的组块具有不同于与另一处理层相关联的组块的大小。
33.权利要求31的计算机程序产品,其中,e)包括用于在执行具有数据依赖性的给定指令之前确定依赖的指令的执行是否完成的计算机可读程序代码装置。
34.权利要求31的计算机程序产品,其中,所述树形结构包括最低层,其中,所述最低层的一个或多个指令具有对所述最低层中的不同指令的相关联数据依赖性,其中,对最低层中的给定指令的数据依赖性允许所述给定指令仅在执行最低层中的相应一个或多个依赖的指令之后执行。
35.权利要求31的计算机程序产品,其中,e)包括用于并行地执行来自公共处理层的两个或更多指令的计算机可读程序代码装置。
36.权利要求31的计算机程序产品,其中,e)包括用于并行地执行来自两个或更多不同处理层的两个或更多指令的计算机可读程序代码装置。
37.权利要求31的计算机程序产品,其中,e)包括用于在所述树形结构的指令的执行中使由所述处理器进行的对来自一个或多个其它I/O请求的一个或多个指令的执行交错的计算机可读程序代码装置。
38.权利要求37的计算机程序产品,其中,e)包括用于与所述树形结构的一个或多个指令的执行并行地执行来自所述一个或多个其它I/O请求的一个或多个指令的计算机可读程序代码装置。
39.权利要求31的计算机程序产品,其中,所述一个或多个处理层包括去存档或存档层。
40.权利要求31的计算机程序产品,其中,所述一个或多个处理层包括解密或加密层。
41.权利要求31的计算机程序产品,其中,所述一个或多个处理层包括解压缩或压缩层。
42.权利要求31的计算机程序产品,其中,在e)中将传入I/O请求插入所述调度表内还取决于与I/O请求相关联的优先级约束。
43.权利要求31的计算机程序产品,其中,在e)中将传入I/O请求插入所述调度表内还取决于与I/O请求相关联的最后期限约束。
44.权利要求31的计算机程序产品,其中,e)包括用于在插入到所述调度表之前、当与一个或多个I/O请求相关联的所述树形结构满足阈值重叠值时使一个或多个I/O请求交错的计算机可读程序代码装置。
45.权利要求31的计算机程序产品,其中,e)包括用于在运行时间向一个或多个文件应用差别补丁的计算机可读程序代码装置。
全文摘要
从在处理器上运行的应用程序接收传入I/O请求。包括处理器可执行指令的树形结构定义与I/O请求相关联的一个或多个处理层。所述指令在所述一个或多个处理层中的每一个处将I/O请求中的数据划分成一个或多个组块。每个指令具有对前一层中的一个或多个相应指令的相关联数据依赖性。通过确定每个组块的位置和不同处理层的组块之间的数据依赖性将所述指令排序成处理次序。将一个或多个指令插入至少部分地取决于所述处理次序的调度表。根据所述处理次序,通过用处理器根据调度表来执行指令而服务于I/O请求。
文档编号G06F7/00GK102171647SQ201080001671
公开日2011年8月31日 申请日期2010年10月14日 优先权日2009年10月26日
发明者R. 萨勒 A. 申请人:美国索尼电脑娱乐有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1