文件输入/输出调度器的制作方法

文档序号:2578633阅读:219来源:国知局
专利名称:文件输入/输出调度器的制作方法
技术领域
本发明实施例涉及计算机游戏以及有关的应用,更具体地说,涉及计算游戏以及 有关应用中的文件输入/输出(I/O)管理。
背景技术
很多软件应用(例如视频游戏)包括文件输入输出(I/O)调度器,以使得应用内的 介质存取更高效并且可靠。文件I/O调度器(“FI0S”)是中间件层,用于存取带有若干部分 的文件,其包括调度器和可选I/O过滤器层。调度器典型地被设计为优化地对I/O请求排 序,从而它们在服从任意最终期限和优先级约束的最短可能时间内完成。过滤器层可以提 供额外服务,例如解压缩或缓存。很多不同游戏组件需要对存储介质中的文件的I/O存取。音频组件加载音频文 件;游戏玩乐引擎加载级别清晰度;图形组件加载纹理地图和模型;电影组件加载音频视 频文件;以及子系统加载大型WAD文件。介质可以是游戏传递介质(例如光盘(通用介质盘 (UMD)、致密盘(⑶)、数字视频盘(DVD)、蓝光盘(BD)等))、中间存储介质(例如硬盘)、或随着 平台演进的其它介质类型。单一应用(例如视频游戏)典型地具有多个组件,每一组件具有其自身的I/O需求。 某些需要对介质的流式存取,其中,I/O系统将文件中的数据流送到组件,从而该组件可以 将流送来的数据连续呈现在游戏机上。例如,音频组件典型地流送用于音轨回放的音频文 件;电影组件流送音频视频内容,用于播放器回放电影。其它组件仅需要非流送式存取,其 中,它们成块地从文件检索数据,以供组件处理。这些组件不需要稳固的数据流,但块传递 时序一般是严格的。如果应用未在需要时接收到数据,则性能可能遭损。视频游戏必须一般执行相当大量I/O。游戏事件一般是按时间驱动的,具有必须被 满足的最终期限。例如,如果玩家正从点A行进到点B,则游戏需要具有用于在玩家达到点 B之前加载的与点B关联的数据的文件。游戏组件可以使用低级别I/O原语来从介质检索 数据,但当多个组件同时需要来自同一设备的数据时,这些原语不处理设备竞争。拥塞的I/ 0请求能够中断流送数据流,或者禁止关键数据块在需要之时到达组件。较高级别系统(例 如989Soimd’S Streamsafe)至少提供对文件的可靠流存取,从而流送的数据不受中断。遗 憾的是,这些系统仅分配单个数据流,而未很好地处理非流数据的竞争。SCEA未提供对于正 常数据存取解决竞争的标准层。因为应用的组件典型地不知道彼此的I/O活动,所以它们的I/O请求通常导致带 有大量过度搜寻(对数据的前后搜索)的异常低效的I/O模式。随着游戏增长得较大,过度 搜寻和低效数据检索增加。用于分布式介质(例如⑶)的盘主控(disc mastering)可以通过各技术(例如频繁复制所存取的数据块,并且穿过盘来发布它们,从而拷贝将总是靠近,无论存储设备的读取头在何处)帮助避免这种无效性中的某些。文件系统并非总是显示数 据在物理上位于盘上的何处,尽管I/O系统不能总是最佳使用数据。在此情况下提出本发明实施例。

发明内容
根据本发明实施例,一种用于处理去往或来自介质设备的输入或输出(I/O)的方 法可以得以实现在具有处理器单元、存储器和介质设备的系统中。可以从在所述处理器上 运行的应用接收输入I/O请求,以将数据传送到介质设备或者传送来自介质设备的数据。 可以计算出用于完成输入I/O请求的预测时间Tp。输入I/O请求可以插入到在所述存储器 中实施的调度表。所述调度表内输入I/O请求的位置可以至少部分地取决于预测时间τρ。 输入I/O请求可以根据调度表而受服务。在某些实施例中,一组处理器可执行指令可以实施在所述存储器中。所述指令可 以被配置为当执行时实现上述方法。所述一组处理器可执行指令可以包括一个或多个介质 过滤器层。所述介质过滤器层可以包括解存档器层、RAM缓存层、调度器缓存(例如硬盘驱 动器(HDD)缓存)层、覆盖层、分类缓存层、数据变换层、或仿真数据层。 在某些实施例中,所述预测时间Tp可以根据性能特征方程(PCE)而得以计算,所述 PCE涉及所述介质设备的一个或多个参数以及根据所述输入I/O请求而确定的一个或多个 系数。通过示例的方式,并且不失一般性,所述参数包括请求开销χ、头移动速率y和吞吐量 ζ.在该示例中,所述系数可以包括开销系数A、头行进距离B和传送数据量C。所述性能特 征方程可以是这样的形式TP = Ax+By+Cz。在某些实施例中,用于I/O请求的所述PCE系数可以是基于所述I/O请求以及初 始介质状态而确定的,其可以包含关于影响性能的设备的状态的一条或多条信息。通过示 例的方式,并且不失一般性,所述一条或多条信息可以包括设备的准备状态、以及所存取的 最近逻辑块地址(LBA)。在某些实施例中,根据I/O请求和初始介质状态计算所述PCE系数 可以返回更新后的介质状态,其可以用作另一 PCE计算的初始介质状态。在某些实施例中,所述PCE系数可以与PCE中的未知量的值组合,以计算用于任何 给定的I/O请求的预测时间Tp。用于I/O请求的排序列表的总时间T可以随后通过如下方 式得以计算,即对于所述列表中的每一 I/O请求迭代所述PCE和介质状态,并且对所得时 间Tp求和。该过程可以对于I/O请求的所述排序列表的某些或所有排列而重复。所述列 表的优选排序可以基于对于每一排序而计算出的时间T以及可能的另外准则而选自所述 多个排列当中。在某些实施例中,优选排序可以是产生最小时间T的排列。可以影响排序 的额外准则可以包括(但不限于)I/O请求优先级、流缓冲器状态、以及等待时间需求。在某些实施例中,对于任何I/O请求所花费的实际时间Ta可以是结合PCE系数而 测量并且使用的,从而对于未知量迭代地求解PCE。这样可以允许模型以实际驱动器性能而 得以恒定地更新。在某些实施例中,实现所述I/O请求的操作还包括从压缩后的嵌套式存档提取 特定数据。在某些实施例中,所述处理单元可以包括主处理器、辅助处理器,所述辅助处理器具有关联本地存储器。在这些实施例中,实现所述I/O请求的步骤可以包括将数据从所述 介质设备传送到所述本地存储器,并且使用所述辅助处理器对所述本地存储器中的数据进 行变换。在某些实施例中,所述系统可以还包括图形处理器和关联图形存储器。在这些实施例中,实现所述I/O请求的步骤可以包括将数据从所述介质设备传送到所述图形存储 器,将所述数据从所述图形存储器传送到所述本地存储器,使用所述辅助处理器对所述数 据执行数据变换以产生变换后的数据,将变换后的数据传送回到所述图形存储器。在某些实施例中,实现所述I/O请求的操作可以包括实现数据覆盖,其中,所述 介质设备与所述存储器之间传送的一个或多个主数据单元被来自辅数据源的一个或多个 次要数据单元所代替。所述主数据单元的源和所述次要数据源可以位于相同介质上或不同 介质上。所述次要数据源可以是虚拟数据源。所述次要数据单元可以通过回调而得以指定。在某些实施例中,所述系统可以还包括快速存储设备。在此情况下,实现所述I/O 请求的步骤可以包括将一个或多个数据单元从所述介质设备预取到所述快速存储设备, 随后传送来自所述快速存储设备的数据单元。通过示例的方式,所述快速存储设备可以是 硬盘驱动器,介质设备可以是高容量光盘驱动器,例如蓝光盘驱动器。所述数据单元可以 在I/O另外空闲的时间段期间得以预取。在某些实施例中,所述预取步骤可以包括从所述 介质设备预取一个或多个数据单元的第一组,检查所述慢介质设备的空闲性,并且如果I/O 空闲则从所述慢介质设备预取一个或多个数据单元的第二组,或者如果I/O不空闲则延迟 预取所述第二组。在某些实施例中,计算所述预测时间Tp的步骤可以包括调整所述参数,以仿真比 与所述系统关联的实际介质设备更慢的介质设备的操作。根据本发明实施例,一种用于处理去往或来自介质设备的输入或输出(I/O)的方 法可以得以实现在具有主处理器、带有关联本地存储器的辅助处理器、主存储器和介质设 备的系统中。所述方法可以包括a)从在所述处理器上运行的应用接收输入I/O请求,以 将数据传送到所述介质设备或者传送来自所述介质设备的数据;b)将所述输入I/O请求插 入到在所述主存储器中实施的调度表;以及c)根据所述调度表和一个或多个过滤器实现 所述输入I/O请求,其中,所述过滤器中的至少一个是由所述辅助处理器实现的。


通过结合附图考虑以下详细描述,可以容易地理解本发明的教导。图1是根据本发明实施例的实现文件I/O系统(FIOS)的系统的框图。图2是根据本发明替换实施例的实现FIOS的替换系统的框图。图3是根据本发明实施例的文件输入/输出系统(FIOS)软件的框图。图4是示出根据本发明实施例的在FIOS中的操作流程的数据流程图。图5是示出根据本发明实施例的在FIOS中使用的软件调度器的示例的流程图。图6是示出根据本发明实施例的在FIOS中预取操作的示例的示意图。图7A是示出根据本发明实施例的使用带有关联本地存储器的辅助处理器的I/O 缓冲的示例的流程图。图7B是示出根据本发明实施例的使用带有关联本地存储器的辅助处理器的I/O缓冲和数据变换的 示例的流程图。图8是示出可以结合本发明实施例而使用的用于嵌套式存档的数据结构的框图。图9是示出根据本发明实施例的解存档器的流程图。
具体实施例方式虽然以下详细描述为了说明而包含很多特定细节,但本领域技术人员应理解,对 于以下细节的很多变形和改动是在本发明范围内的。相应地,以下描述的本发明实施例的 示例是在不失一般性的情况下阐述的,并且不将限制施加于本发明。本发明实施例可以围绕文件I/O调度器(FIOS)而得以实现,FIOS提供用于系统的 所有I/O穿过的中心层。FIOS可以包括调度器,其对I/O请求进行排序,并且确定最有效地 服务于I/O请求的顺序。通过示例的方式,以计算机实现的系统100可以被配置为实现图1所示的根据本 发明实施例的文件I/O调度器(FI0S)。通过示例的方式,并且不失一般性,系统100可以 实现为个人计算机、视频游戏控制台、个人数字助理、或其它数字设备,适合于实践本发明 实施例。系统100可以包括处理单元105和主存储器106,主存储器106耦合到处理105。 CPU 105被配置为运行软件应用,并且可选地运行操作系统。本发明某些实施例可以利 用特定类型的处理器架构,其中,CPU 105包括主处理器105A和辅助处理器105B,辅助处 理器105B具有其自身的关联本地存储器106B。其中,这样的处理器架构的一个例子是单 元处理器(Cell Processor).单元处理器架构的示例详细描述于例如单元宽带引擎架构 (Cell Broadband Engine Architecture)中,片反权归属 International Business Machines Corporation^ Sony Computer Entertainment Incorporated^ Toshiba Corporation,2005 年8月8日,其拷贝可以在http://cell.scei.co.jp/下载,其完整内容在此引入以供参 考。主存储器106可以存储应用和数据,以供CPU 105使用。存储器106可以是集成 电路的形式,例如RAM、DRAM、ROM等。计算机程序101可以存储于存储器106中,形式为可 以在处理器105上执行的指令。程序101的指令可以被配置为其中实现具有以下所描述的 特定特征的文件输入/输出系统(FI0S)。存储器106可以包含1/0队列101Q,例如形式是 堆栈或队列,用于输入、调度、发出、完成以及释放FIOS程序101所使用的1/0请求。这些 队列的示例也描述如下。通过示例的方式,FIOS程序101可以包括各指令,用于a)从应用103接收涉及介 质设备118的输入1/0请求,b)计算用于完成1/0请求的预测时间Tp,c)至少部分地基于 预测时间Tp将输入1/0请求插入到存储器106中的调度表的位置,d)根据调度表实现1/0 请求。FIOS程序101可以结合被配置为实现交互式环境的一条或多条指令而操作。通过 示例的方式,这些指令可以是主程序103 (例如视频游戏程序)的子程序或可调用函数。替 换地,主程序103可以是用于与虚拟世界进行接口的程序。主程序103可以被配置为将来 自相机POV的一部分仿真环境的场景显示在视频显示器上,并且响应于相机POV在用户与 仿真环境的交互期间沿着相机路径的移动而随着相机POV改变来改变场景。主程序可以包 括用于物理仿真104和相机管理107的指令。主程序103可以调用FIOS程序101、物理仿真指令104、相机管理指令107以及广告印象报告指令109,例如作为函数或子程序。 客户机系统100也可以包括公知的支持功能110,例如输入/输出(I/O)元件111、 电源(P/S)112、时钟(CLK)113和缓存114。客户机设备100可以还包括快速存储设备115, 例如硬盘驱动器,其为应用和数据提供非易失性存储。其中,快速存储设备115可以用于临 时或者长期存储从较慢介质设备118检索到的文件116。快速存储设备115上的文件116 可以另外来自除了较慢介质设备118之外的源。例如,文件116可以包括但不限于操作系 统文件、由应用所创建的临时文件、用户数据,例如相片/音频/视频、下载的内容、以及更 多。通过示例的方式,存储设备115可以是固定盘驱动器,可拆卸盘驱动器、闪速存储器设 备、带式驱动器。较慢介质设备118可以是高容量光盘驱动器,例如⑶-ROM驱动器、DVD-ROM 驱动器、高清晰度数字多功能盘(HD-DVD)驱动器、蓝光盘驱动器、UMD驱动器、或其它光学 存储设备。来自介质设备118的预取出的文件116可以临时存储于硬件缓存中的存储设备 115中,以便快速加载到存储器106。一个或多个用户输入设备120可以用于将用户输入从一个或多个用户传递到系 统100。通过示例的方式,用户输入设备120中的一个或多个可以经由I/O元件111耦合到 客户机设备100。合适的输入设备120的示例包括键盘、鼠标、操纵杆、触摸板、触摸屏、光 笔、相机或摄像机、和/或麦克风。客户机设备100可以包括网络接口 125,用于促进经由电 子通信网络127进行的通信。网络接口 125可以被配置为在局域网和广域网(例如互联网) 上实现有线通信或无线通信。系统100可以在网络127上经由一个或多个消息分组126来 发送并且接收数据和/或对文件的请求。系统100可以还包括图形子系统130,图形子系统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可以还包括能够执行阴影化(shader)程序的一个或多个可编程执行单元。图形子系统130可以从图形存储器140周期性地输出图像的像素数据,以显示在 视频显示设备150上。视频显示设备150可以是能够响应于来自系统100的信号而显示可 视信息的任何设备,包括CRT显示器、LCD显示器、等离子体显示器、以及OLED显示器。计 算机系统100可以向显示设备150提供模拟信号或数字信号。通过示例的方式,显示器150 可以包括阴极射线管(CRT)或平板屏幕,其显示文本、数字、图形符号或图像。此外,显示器 150可以包括一个或多个音频扬声器,其产生听觉声音或另外可检测到的声音。为了促进生 成这种声音,客户机设备100可以还包括音频处理器155,其适用于据CPU 105、存储器106 和/或存储装置115所提供的指令和/或数据而生成模拟音频输出或数字音频输出。包括CPU 105、存储器106、支持功能110、数据存储设备115、介质设备118、用户输 入设备120、网络接口 125和音频处理器155的系统100的各组件可操作地经由一条或多条数据总线160而彼此 连接。这些组件可以通过硬件、软件或固件或它们中的两个或更多个 的某种组合而得以实现。本发明某些实施例可以利用单元处理器架构或相似的处理器架构。图2示出根据 本发明实施例的被配置为实现FIOS的单元处理器200的示例。单元处理器200包括主存 储器202、单个功率处理器元件(PPE)204和八个协作处理器元件(SPE)206。通过示例的方 式,PPE 204可以包括带有关联缓存的64比特PowerPC处理器单元(PPU)。某些实现方式 (例如CBEA顺从的系统)可以包括将矢量多媒体扩展单元包括在PPE 204中。PPE 204可 以是通用处理单元,其可以访问系统管理资源(例如存储器保护表)。硬件资源可以明确映 射为PPE 204可见的真实地址空间。因此,PPE 204可以通过使用适当的有效地址值来直 接对任何这些资源进行寻址。PPE 204的主要功能是为不同的SPE 206管理并且分配任务。 PPU可以执行FIOS程序205的编码指令。SPE 206是比PPE 204不太复杂的计算单元,这是由于它们不需执行任何系统管 理功能。每一 SPE 206包括处理器单元,有时称为协作处理器单元(SPU)和关联本地存储 (LS)。SPE 206可以通常具有单指令多数据(SIMD)能力,并且典型地处理数据并且发起任 何所需的数据传送(服从PPE 204所设置的访问特性),以便执行它们的所分配的任务。SPE 206可以在其本地存储中存储实现FIOS程序205的各部分的指令207。SPE 206的目的在 于启用需要更高计算单元密度并且可以有效使用所提供的指令集的应用。虽然该示例中示 出八个SPE,但单元处理器200可以配置有任何数量的SPE。关于图2,存储器202、PPE 204 和SPE 206可以在环形元件互连总线210上彼此进行通信,并且与I/O设备208进行通信。 存储器202可以由PPE 204和SPE 206经由存储器接口控制器MIC来存取。存储器202可以包含I/O队列203,例如输入、调度、发出、完成、释放和预取队列、 如下所述。存储器202也可以包含具有与在此描述的FIOS程序101共同的特征的FIOS程 序209的各部分。SPE 206中的至少一个可以在其本地存储中包括代码207,其被配置为实 现如下所述的数据解压缩。PPE 204可以包括内部缓存Ll和外部缓存L2。PPE 204可以将 FIOS程序205的各部分存储在其内部缓存Ll中。FIOS程序205和以SPE实现的文件传送 指令207或其各部分也可以存储于存储器202中,以便当需要时由SPE 206和PPE 204来 存取。通过示例的方式,FIOS程序101/205可以包括介质堆栈,用于促进与硬件(例如存 储设备115)的接口。介质堆栈可以实现为图3所描述的那样。具体地说,介质堆栈300可 以包括调度器302、一个或多个介质过滤器层304、设备介质层306、处理器文件系统(FS)读 取层308和硬件层310。设备介质层306 (有时称为介质存取层)可以被配置为响应于从 上面介质过滤器层304接收到的介质请求,检索所请求的数据,然后将其应答发送回至堆 栈。介质过滤器层304可以包括解存档器层301、RAM缓存层303、调度器缓存层305、覆盖 层307、分类缓存层309、一个或多个数据变换层311、以及仿真数据层313、还有速度仿真层 315。解存档器301可以用于促进从压缩后的存档提取特定资产文件。RAM缓存层303 可以用于实现将数据缓存在例如主存储器106、202中。调度器缓存305可以是简单的盘对 盘缓存,用于临时存储来自较慢源(例如光盘)的数据。如在此所使用的那样,“调度器缓存” 指代在存储介质中的临时数据存储,其比介质设备118更快地进行存取。并非需要预取调度器缓存305中的所有数据;某些数据可以按需取得,并且拷贝到缓存。通过示例的方式,而非通过限制的方式,调度器缓存层305可以利用快速存储介质115来提供这种临时存储。在快速存储介质是硬盘驱动器(HDD)的特定情况下,调度器 缓存305有时称为HDD缓存。调度器缓存305可以作为单个文件或多个文件而得以保存。此外,调度器缓存305 的内容无需是全部文件。多文件缓存可以通过删除某些单独文件而得以部分地清洗,从而 当需要时智能地释放盘空间,而不牺牲太多数据。通过对照,单文件缓存典型地可以仅被截 断或者完全删除。单文件缓存可以提供比多文件缓存更高的性能,因为多文件缓存典型地 需要另外的簿记工作(在主机文件系统自身内部),这可能需要额外的I/O。覆盖层307可以用于允许在文件系统级别任意覆盖文件和目录,如下所述。分类 缓存层309可以用于对处理器单元105或单元处理器200的0/S可能未正确地缓存(例如 文件存在性、大小、以及位置)的数据进行缓存。数据变换层311可以对读自或写入介质设 备118的数据实现数据变换,例如加密、解密、压缩或解压缩。仿真数据层313可以例如用 于生成多个零或随机数,以用于需要这种仿真数据的I/O请求。速度仿真层315可以用在 例如软件开发期间,以对介质设备的不同速度进行仿真,如下所述。可以关于如下所述的图4来理解调度器302的操作。从客户机应用的观点来看, I/O请求403可以是以相对直接的方式而受服务的。例如,应用401 (例如视频游戏)内的 线程402可以凭借调用函数(例如readFileO)通过FIOS 101/205来请求I/O。该函数可 以指定FIOS请求403的优先级以及该请求应完成的最终期限。该函数也可以将指针提供给 缓冲器405。这种实现方式可以按原子方式来分配用于I/O请求403的I/O操作结构,并且 将新分配的操作移动到输入队列404。通过示例的方式,输入队列可以是先入先出(FIFO) 队列,其中,队列404中放入的最先I/O操作是由调度器302调度的最先操作。将请求403 插入到输入队列404的操作可以通过原子操作而得以实现,以防止当请求异步I/O时线程 受阻。在某些实施例中,输入队列404可以是原子堆栈的形式,其可以由辅助处理器105B 通过原子交换来填充。通过示例的方式,而非通过限制的方式,如果I/O请求403为读取操作,则客户机 应用401可以提供缓冲器,以接收从介质设备检索到的数据。当I/O请求完成时,客户机应 用可以从其所提供的缓冲器读取所检索的数据。当客户机终结于操作结构时,客户机可以 解除分配操作结构,从而,其资源可用于后来的I/O用途。I/O请求403可以在调度器尚未激活的情况下激活调度器302,并且可以将用户可 见的句柄返回到结构,从而应用401具有对操作的存取。应用401于是可以等待I/O请求 403完成。例如,客户机应用可以使用原子方法(例如isDoneO)来周期性地进行轮询。替 换地,当I/O请求完成时,客户机应用可以等待调度器302调用的回调函数。在I/O请求已经插入到输入队列404之后,FIOS程序101/205可以调用调度器302 来执行调度表插入407。可以参照图5来理解调度器所实现的各操作的序列。如果没有I/ 0要处理,则调度器302可以休眠(即保持不激活),如在502所指示的那样。当新I/O操作 进入到输入队列时,调度器唤醒,以对其进行处理。一旦调度器唤醒过来(或者已经唤醒), 其就注意队列中的新操作,并且将操作移动到调度队列406中的适当位置。为了确定I/O请求403的队列位置,调度器302可以可选地例如通过询问设备介质层306或FIOS堆栈300中的另一层来确定介质设备的当前状态,如在503所指示的那样。 状态数据可以根据FIOS堆栈300所处理的介质设备的类型以及堆栈中出现的各种层而变 化。各示例包括最新近存取的逻辑块地址(LBA)、RAM缓存之最近存取的路径和偏移、当前 盘层、头位置、流送模式、以及非流送模式。根据本发明实施例,调度器302可以是基于介质设备性能模型302A。不同于现有 I/O调度器的是,驱动器模型可以在确定请求403的最佳调度中将关于介质设备118之性能 的数据纳入考虑。使用驱动器模型来调度I/O请求可以与在生成CD的主控过程的逆过程 相比较。性能模型302A可以被配置为将诸如开销、盘移动时间、读取时间等之类的因素纳 入考虑。性能模型302A可以对介质设备118的任意复杂特性(例如吞吐量、激光器摆动、读 取头移动、层改变以及请求开销)进行建模。性能模型302A也可以将I/O请求中所涉及的 介质设备118所读取或者写入的特定介质的其它参数纳入考虑。例如,性能模型302A可以 考虑设备是正从单层盘还是多层盘(例如双层盘,比如蓝光DMD)进行读取。调度器302也可以可选地查看新I/O操作时序要求、优先级、以及可能的效率,如 在504所指示的那样。调度器可以被配置为计算预测时间Tp,以完成输入I/O请求,如在 506所指示的那样。根据优选实施例,调度器302可以根据具有与介质设备118有关的变量 参数以及与I/O请求403有关的系数的性能特征方程(PCE)来确定用于执行I/O请求403 的预测时间Τρ。PCE可以具有一般形式
Tp = Af1 (X) + Bf2 (y) + Cf3(Z) + Df4(W) + Ef5(V) + ···,
其中,A、B、C、D以及E是系数,χ、y、z、w和ν表示与介质设备的性能特征有关的参数, fi (χ)、f2 (y)、f3 (ζ)、f4 (w)、f5 (ν)…是χ、y、ζ、w和ν的函数。通过示例的方式,而非通过限 制的方式,PCE可以是线性方程,形式是一个或多个项之和,其中,每一项是系数(A、B、C等) 乘以表示参数值的变量(X,1、ζ等)。这种方程可以具有以下形式 Tp = Ax + By + Cz + Dw + Ev + ...
该方程可以具有任意数量的项。各变量可以对应于影响用于执行所要求的任务的时 间的介质设备的任何参数。所述参数的示例包括但不限于开销、搜寻时间、以及数据传送速 率。实际上,PCE可以使用远多于3个项,例如10个或更多项。例如,单一读取操作通常需 要6个有意义的项来描述它1.打开文件,2.开销,3.搜寻,4.传送,5.解压缩,6.关闭文 件。其它操作(打开、关闭、解除链接、读取目录)典型地需要不同集合的项。作为对于线性方程的替换,PCE可以扩展为一般多项式方程一个或多个项之和, 其中,每一项是系数(A)乘以提升到某次幂的对应变量。例如,PCE可以具有以下形式
Tp = Ax + By + Cz2 + Dw10 + Ev-2. · ·
作为另一替换,PCE可以扩展为任何普通方程,其可以表示为一个或多个项之和,其中, 每一项是系数(A)乘以对应变量的任意函数。例如,PCE可以具有以下形式 Tp = Ax + Blog y + Cez + D (w2 + 2w + 1) + ...
作为简单示例,线性PCE可以具有形式TP = Ax+By+Cz,其中x是与请求403的开销有 关的参数,y是与每移动区段的头移动时间有关的参数,ζ是与数据吞吐率有关的参数(例 如用于读取或者写入指定量数据的时间)。系数A、B和C的值可以取决于调度队列404中 请求403的位置。
通过示 例的方式,系数A、B、C可以根据状态以及请求403中的信息而得以确定。 通过示例的方式,并且不失一般性,一条或多条信息可以包括设备的准备状态、以及所存取 的最近逻辑块地址(LBA)。最近逻辑块地址可以指示驱动器的读取头的当前位置,因此允许 计算搜寻距离(头行进距离)。在该示例中,系数A在此称为开销系数。该系数将以下事实纳入考虑开销可以 部分地取决于I/O请求403的属性以及介质设备118的特性。系数B可以与介质设备118 中的读取头必须进行以便达到将要从其中读取数据的介质上的位置的头移动量有关。通过 示例的方式,请求403可以调用介质设备118来读取始于区段1000的10个区段。在此情 况下,数据系数C可以是待读取的区段之数量。移动系数B可以根据状态信息而得以确定, 状态信息可以从设备介质层306来获得。状态信息可以包括读取头在I/O请求的起始处的 初始位置。例如,如果读取头初始在区段500处,则移动系数B可以根据读取操作开始的区 段(区段1000)与当前区段(区段500)之间的差而得以确定,例如B=1000-500=500。调度 器302可以在I/O请求403已经完成之后确定最终状态,例如,如果始于1000读取10个区 段,则最终状态可以指示读取头结束于区段1010。PCE也可以将用于填写I/O请求的不同可能情形纳入考虑。例如,如果介质设备 118使用多层介质,则PCE可以将对从一个层到另一层切换然后移动读取头的预测时间Tp 的效果纳入考虑。在某些实施例中,对于任何I/O请求所花费的实际时间Ta可以被测量并且与PCE 系数一起使用从而对于未知变量的值迭代地求解PCE。这样可以允许模型通过实际驱动器 性能而得以恒定地更新。一旦计算出预测时间Tp,调度器302就可以通过相似方式确定用于调度队列406 中其它请求的预测时间。该过程可以按不同队列顺序而迭代地重复,直到用于请求403的 实际时间以及最佳调度队列顺序得以确定,如在507所指示的那样。注意,请求403的初始 状态可以根据调度顺序中先前请求的结束状态而得以确定,而调度顺序中下一请求的初始 状态可以根据请求403的最终状态而得以确定。调度器302可以预排调度队列中的各请求,对请求403的特性与已经在队列中的 其它操作的特性进行比较。调度器302可以尝试队列中的每一可能位置处的请求403、找寻 优先级覆盖(priority override)、错过的最终期限、以及时序考虑。调度器302可以通过 找寻所请求的I/O操作不错过其最终期限的顺序来确定最佳可能的新队列顺序。如果一个 或多个操作必须错过它们的最终期限,则调度器可以使用不同的准则来确定队列顺序。可 以影响调度队列406中的请求排序的额外准则可以包括(但不限于)I/O请求优先级、流缓 冲器状态、以及等待时间需求。在某些实施例中,用于一个Tp计算的PCE系数可以用于返 回更新后的介质状态,其可以用作用于另一 PCE计算的初始介质状态。根据一个示例,调度器302可以检查不同插入排列,例如将操作4插入在包含操作 1、2、3的现有调度表中。每一排列可以产生不同的总时间T。可能的排列和时间包括
4,1,2,3 — T1 1,4,2,3 — T2 1,2,4,3 — T3 1,2,3,4 — T4调度器302可以确定哪种排列产生最小的预测总时间T,并且使用该排列作为优选排列。此外,例如,通过合计用于每一调度项的时间,调度器302可以检查所预测的错过的最终期限并且查看这是否导致任何调度项错过其最终期限。这可以包括确定每一调度 操作的完成时间,并且对所述完成时间与该操作的最终期限进行比较。如果将错过任何最 终期限,则可以将该操作重新调度到队列中更早的地方。在某些实施例中,例如,如果不能求解所有最终期限,则可以使用优先级。例如,如 果将不可避免地错过某些最终期限,则最佳队列顺序可以是其中最低可能优先级操作错过 它们的最终期限的队列顺序。如果存在适于前述考虑的多个可能队列顺序,则具有最少数 量的同等优先级最终期限错过操作的队列顺序可以是最佳顺序。如果存在其中所有先前描 述的考虑皆相同的多个可能队列顺序,则具有用于执行整个队列的最低总估计时间的队列 顺序可以是最佳顺序。在某些情况下,只要高优先级操作可以满足其最终期限,就可以在高 优先级操作之前调度低优先级操作。如果存在其中所有先前描述的考虑皆相同的多个可能队列顺序,则其中调度队列 406中的最新操作去往队列末尾的顺序可以是最佳顺序。如果调度器302必须估计用于将 新操作插入队列中的总队列执行时间,则其可以考虑多种不同因素。例如,调度器可以考虑 调度器302恰在队列顺序估计之前检索的设备驱动器的当前状态。此外,调度器302可以 考虑FIOS堆栈300中介质过滤器层和其它层所报告的性能系数。这些值可以包括例如头 移动、头对准、DMA设置、数据传送率、对于存储层的层改变等。这些值可以通过I/O性能的 运行时间测量而得以馈送,从而估计可以是尽可能真实的。一旦调度器302已经对于请求403的操作确定队列406中的最佳位置,该操作就 可以插入在此,如图4中的407和图5中的508所指示的那样。再次参照图4,如果存在可 用于执行I/O请求的资源,则调度器302可以将调度队列406中的第一操作移动到发出队 列408,如在409所指示的那样。操作的关联介质请求可以是从发出队列408执行的。为了 执行介质请求,调度器302可以将请求传递下达FIOS堆栈300中的第一层。调度器302之下的每一层可以通过之上的层看到传递至其的介质请求403。如果 适当,则层可以处理数据。例如,如果请求是读取操作,则解存档器层301可以针对开放存 档的内容检查所提供的路径名称,如果其找到文件,则可以将请求重新映射为读取压缩后 的数据。FIOS堆栈300中的每一层将处理过的或未处理的介质请求传递给下一更低层,直 到请求最终到达硬件层310。当硬件层310对请求进行响应时,该响应从下至上遍历堆栈 300中的每一层,并且如果适当,则每一层可以处理检索到的数据。例如,解存档器层301可 以获知所返回的数据必须被解压缩,从而其对它进行解压缩,之后将响应传递回至堆栈。该 响应最终回到调度器302,得以完成。当检索到的数据回到堆栈时,调度器302可以接收它,并且然后将I/O操作移动到 完成的队列,其可以触发对于应用401的回调函数411 (如果应用设置了回调)。替换地,应 用401可以轮询FIOS堆栈300,以确定是否已经完成所请求的I/O操作。一旦已经完成I/ 0操作,其将可以移动到释放操作池412。释放操作池412可以包含未使用的一组I/O操作 结构。这些操作可以包括已经分配给客户机应用的操作或已经为客户机应用所使用并且然 后再次为了使用而释放的操作。当客户机应用进行I/O请求时,调度器302可以从该池将I/O操作分配给客户机。释放I/O池412可以实现为堆栈。释放I/O请求可以从释放操作 池412弹出,并且推送到输入队列404。以此方式,释放I/O请求可以被重新使用。根据本发明实施例,调度器302可以通过调度循环而操作,如下
1.检查I/O完成
2.发出新I/O请求
3.发出I/O回调(若有的话)
4.插入到调度表(从输入调度插入)
5.再次新发出
6.检查预测出的错过的最终期限
7.返回到1。对于循环的每一迭代的调度插入的数量可以受限于某个最大数,例如十六次插 入。在本发明某些实施例中,辅助处理器单元105B (例如SPE 206)可以通过关于主处理器105A或PPE 204为原子的交换而将对I/O的请求添加到输入队列404来请求其自身 的I/O。例如,在传统单元处理器实现方式中,SPE 206可能没有任何I/O设施。然而,如果 输入队列404是公共数据元素,则辅助处理器可以通过与主处理器105A的标准原子交换并 且发信号通知主处理器105A来将I/O请求添加到队列。在很多现有技术实现方式中,如果辅助处理器需要用于即刻处理的数据,则该数 据必须在主存储器中。通过本发明实施例,通过对照,辅助处理器105B可以将FIOS堆栈 300触发为去从硬介质设备118或者甚至在网络127上得到所需的数据。通过示例的方式,而非通过限制的方式,输入队列404、完成队列410以及释放池 412可以是原子堆栈。辅助处理器105B可以弹出来自释放池412的操作,填充用于该操作 的路径和偏移,将操作推送回到输入队列406,然后执行同步,并且唤醒调度器302。辅助处 理器可以在为了完成I/O操作而进行中断式轮询的同时进行其它工作。通过示例的方式,在单元处理器系统200中,SPE 206可以使用以下类型的指令的 序列来服务于I/O请求
Op = pop(FREE)
Op path .......
Offset .......
Push (op, incoming)。SPE 206所请求的数据可以发送到可由PPE 204寻址的任何地方。如果SPE 206 被锁定,则FIOS 300可以将数据直接写入到SPE 206的本地存储LS。在某些实施例中,一 个SPE 206可以请求解存档器进行与另一 SPE的解压缩。可以例如使用各处理器之间的远 程过程调用(RPC)来实现该操作。在此是示例,SPE 206要求PPE 204为其做事。在更传统 的RPC中,这是大约另一种方式。预取
在某些实施例中,调度器缓存305 (例如HDD缓存)可以用于将文件从介质设备预取到 存储设备115上的缓存117,从而该文件可以稍后得以快速读取。在此情况下,预取操作413 可以直接插入到发出队列402。预取可以是很多类型的缓存已经实现了的标准手动预取,例如在PowerPC CPU架构中的“debt”指令。根据本发明实施例,预取可以排队并且作为上述 调度器循环的一部分而得以执行。预取可以在其它I/O请求得以履行的同时通过相对高的 等待时间以及必须存取的低吞吐量来促进与相对慢的源介质(例如蓝光和UMD)的工作。

调度器302可以被配置为以相对低的优先级实现这种预取,从而其将仅运行在介 质设备118将另外为空闲的未用时刻,并且将不干扰到其它I/O请求。例如,系统300可以 具有慢介质设备118 (例如,比如蓝光盘(BD)驱动器的光盘)和较快存储设备115 (例如硬 盘驱动器)。调度器缓存层305可以用于将文件从光盘驱动器异步拷贝到硬盘。当文件稍 后被存取时,其将以更高的HDD速度(例如20MiB/s)而不是更慢的光盘速度(例如8MiB/s) 而得以读取。虽然缓存预取通常是对于硬盘缓存而完成的,但预取也可以对于主存储器106、 206而完成。预取操作可以按在调度完成之后它们被接收的顺序而被包括在调度队列406 的结束。在某些实施例中,预取操作可以根据需要而延迟。在某些实施例中,调度器302 所使用的性能特征方程可以包括关于什么存储于缓存117中的信息,作为状态信息的一部 分。预取操作并非是以与其它I/O操作相同的方式而调度的。预取操作保存在分离的预取 队列413中,预取队列413仅当调度队列406为空时受服务。预取操作可以根据需要而延 迟。另外,预取可以是按它们被接收到的顺序而执行的。调度器302可以保持预取请求排 队,并且仅当I/O子系统已经空闲指定的时间长度时执行它们。这样防止预取干扰到正常 I/O请求。此外,预取也不限于单一缓存块;它们可以是任何大小的,或者甚至传递告诉缓 存从开始到结束加载整个文件的特殊“完整文件”值。进而,虽然预取可以是任何大小的,但 预取可以被实现使得不多于一个的缓存块被填充,之后返回到调度器302,以检查FIOS堆 栈302继续空闲。FIOS堆栈300可以被配置为以避免不必要的预取的方式来实现预取。例如,如图 6所示,如果缓存601中没有块,则FIOS调度器缓存层305可以填充第一块,然后返回以检 查空闲状态。如果块1至N在存储设备115上的缓存117中,则第(N+1)块将填充有来自 介质设备118的数据。调度器缓存层305可以返回,以检查空闲状态。该过程可以重复,直 到新I/O到达输入队列。这些特征允许任意数量的预取排队,从而对于应用而快速且高效 地将大量数据从介质设备118预取到存储设备115 (或主存储器106),而不干扰到正常调 度的I/O请求。例如,在游戏应用中,游戏数据一般存储在由介质设备118所读取的介质(例如 ⑶-ROM或HD-DVD盘)上。游戏可以确定玩家正移动朝向特定目的地,并且计算出玩家应在 60秒内到达那里。在该时间期间,FIOS堆栈300可以从介质设备预取与目的地有关的。如 果玩家决定转向并且前往不同的目的地,则应用可以取消预取。在其它实施例中,应用可以 使用高级通知来防止覆盖缓存117中的所需数据。如上所述的缓存预取可以改进以I/O驱动的应用(例如视频游戏)以及具有特定 I/O需求的平台(例如新潮视频游戏控制台)方面的I/O性能。具体地说,游戏数据通常存 储在慢介质(例如光学介质或网络文件服务器)上,但游戏可以具有对快速本地存储(比如 HDD)的存取。利用辅助处理器的数据变换
根据另一实施例,FIOS利用特定处理器架构,所述架构利用主处理器和辅助处理器,所述辅助处理器具有关联本地存储器。这些实施例可以例如用于数据变换,例如解压缩或解 密。通过比较的方式,特定先前解存档系统已经使用标准背景线程中运行的简单解压缩算 法(例如Zlib)。通过对照,本发明实施例可以包括抽象编解码器接口,其允许标准解压缩器 实现方式和非标准实现方式被配置为利用包括带有关联本地存储器的辅助处理器的处理 器架构(例如单元处理器架构)。这些实施例允许解压缩器对象设置多个标志和约束,解存 档器301于是可以利用其来优化存储器使用 和速度。这些约束中的很多以及导致特殊处理 的情形对于游戏编程、文件系统I/O解压缩、或系统100的架构的情形是唯一的。特定应用(例如视频游戏应用)具有受限量的可用存储器,这使得期望使用尽可能 少的存储器。一个通常表述是对于I/O解压缩,仅具有三个I/O缓冲器由读取占据的一 个缓冲器,由数据变换操作(例如解压缩或解密)占据的多达两个临时缓冲器(一个用于输 入,一个用于输出)。通过示例的方式,而非限制,特定实施例可以通过对于数据变换使用带 有关联本地存储器(例如单元处理器200中的SPE 206)的辅助处理器而完全避免使用临时 缓冲器。例如,如果解压缩是由主处理器(例如PPE 204)处理的,则典型地需要一个缓冲器 来临时存储压缩后的数据,并且需要另一缓冲器来临时存储解压缩后的数据。如果带有本 地存储器106B的辅助处理器105B可用,则可以使用本地存储器106B而非临时缓冲器来完 成相同的解压缩。压缩后的数据与解压缩后的数据皆可以存储于本地存储器106B中。通 过示例的方式,在特定单元处理器架构中,SPE 206具有256K字节的本地存储容量。这对于 压缩后的输入、解压缩后的输出以及用于解压缩算法的代码通常是足够的存储器空间。通 过比较,如果解压缩是由主处理器105A (例如PPE 204)处理的,则压缩后的数据读取到第 一缓冲器,解压缩,并且解压缩后的数据写入到第二缓冲器。解压缩后的数据于是从第二缓 冲器拷贝到其目的地。图7A和图7B示出其中利用辅助处理器实现特定数据变换的两个示例。具体地说, 如图7A所示,在履行I/O请求的过程期间,主处理器105A上运行的FIOS 300可以例如经 由数据变换层311调取数据变换。主处理器105A可以设置辅助处理器105B,如在702所指 示的那样。具体地说,主处理器105A可以命令辅助处理器105B加载编码后的指令701,用 于将数据变换置入到辅助处理器的本地存储器106B。主处理器或辅助处理器于是可以通过 FIOS堆栈300工作,以将数据703从介质设备118传送到主存储器106,如在704所指示的 那样。辅助处理器105B于是可以将数据703加载到本地存储器106B,如在706所指示的那 样。辅助处理器于是可以对数据703实现变换,如在708所指示的那样,以产生变换后 的数据705,变换后的数据705可以存储于本地存储器106B中。通过示例的方式,编码后的 指令701的执行可以对数据703进行解密或解压缩。变换后的数据705可以传送到主存储 器106,如在710所指示的那样。替换地,变换后的数据705可以传递到某个另外目的地,例 如存储设备115。前述操作序列可以对于后续数据块而重复,直到已经处理完I/O请求所指 定的所有数据。注意,一旦输入数据703已经传送到本地存储器106B,就可以通过新输入数 据或变换后的数据705在主存储器中对其进行覆盖。通过示例的方式,而非通过限制的方式,单元处理器架构(例如图2中所描述的架 构)可以用于实现根据图7A的数据解压缩。与文件系统I/O解压缩的需求相结合的SPU编程的特性(其中,数据被 流送到SPE 206的本地存储LS,然后一旦处理完成就流送回去)为 改进的I/O性能提供了机会。例如,使用SPE 206来解压缩可以提供从37Mbps到42Mbps 的性能改进,结果是释放出额外的缓冲器。可以通过Sony Playstation 2中所使用的处理 器架构来实现相似的解压缩。在此情况下,主处理器称为情绪引擎(EE),各辅助处理器之一 (称为I/O处理器(IOP))具有关联本地存储器。在此情况下,沿着图7A所示的线,解存档器 301可以运行在EE上,解压缩可以实现在IOP上。替换地,图7A所描述的技术可以用于分 布式计算架构,其包括两个带有分离可寻址存储器的处理器。注意,虽然前述示例处理通过变换层所实现的数据变换,但关于图7A而描述的方 法可以用于实现任何介质过滤器层304。通过对照,现有技术文件I/O系统典型地通过主处 理器(例如单元处理器示例中的PPU)而实现。在替换实现方式中,如果从介质设备118读取的数据之目的地是慢存储器(例如 图形存储器140,比如视频随机存取存储器(VRAM)),并且编解码器需要执行对其输出的随 机存取,则FIOS解存档器可能需要分配临时输出缓冲器。然而,如果编解码器不需要随机 存取(正如例如以SPU实现的解压缩器的情况),则FIOS解存档器301可以避免分配临时输 出缓冲器,并且数据703可以直接解压缩到目的地。进而,文件系统解压缩可以要求“溢出” 或未用的字节;即,当恰需要一些字节时对整个64千字节块进行解压缩。如果编解码器指 示其可以输出恰一部分压缩后的块(正如例如以SPU实现的解压缩器的情况),则FIOS解存 档器可以避免分配临时输出缓冲器。此外,带有关联本地存储器106B的辅助处理器105B 可以用在上述各情形的任何以及所有组合中。图7B示出结合慢图形存储器340使用辅助处理器105B和本地存储器106B的示 例。FIOS 300可以将数据从介质设备118读取到图形存储器340 (例如VRAM)。使用缓冲 器将数据传送到VRAM势必缓慢。然而,将VRAM数据读取到特定类型的辅助处理器本地存 储器(例如SPE 206的本地存储LS)不成问题。在图7B描述的示例中,FIOS 300主要是在 主处理器105A上实现的。未被变换的数据703可以从图形存储器340传送到与辅助处理 器105B关联的本地存储器106B。FIOS 301可以将变换指令701加载到本地存储器106B, 以由辅助处理器105B执行。辅助处理器105B可以通过执行指令701而将数据703变换为 变换后的数据,以生成变换后的数据705。变换后的数据于是可以传送到图形存储器340。 在对该实施例的某些变形中,未被变换的(例如加密的或压缩后的)数据703可以是从介质 设备118读取的,并且存储于主存储器106中的缓冲器中,之后其传送到本地存储器106B。嵌套式存档
先前FIOS实现方式已经包括了随机存取解存档系统,其允许压缩后的存档的内容实 际上出现于文件系统等级中,并且其通过覆盖读取和解压缩而以优化高效的方式从这些存 档检索数据。本发明实施例通过如下方式细化该系统,即包括用于处理具有单一解存档器 层301的嵌套式存档的能力,并且没有性能损失(penalty)。在此所使用的术语嵌套式存档 指代存储于其它存档内的存档,其自身可以存储于另一存档中,到达嵌套的任意深度级别。对于满足游戏I/O和数据布局的唯一需求而言,嵌套式存档支持是特别有用的。 使用嵌套式存档可以与调度器302所使用的驱动器模型302A协作。具体地说,大型文件允 许更好的模型驱动器头移动。如果压缩后的存档格式为随机存取,则嵌套式存档支持可以 大受促进。通过对照,典型地,压缩后的存档并非随机存取。例如,^ ^4 、72、压缩格式等典型地要求从存档的开头线性存取。在此所使用的术语“存档”指代组合为单个较大文件的一组数据文件。源数据可 以不修改地被存储,或者一个或多个数据变换(例如压缩或加密)可以应用于数据的任何部 分。索引(有时称为内容表)可以通过描述源文件的至少某方面(例如存档内的路径和偏 移)的存档而得以保存,从而它们可以被查找并且单独存取。术语“嵌套式存档”指代其中 一个或多个源数据文件为另一存档(或嵌套式存档)的存档。根据这种嵌套,任何给定源数 据块可以具有应用至其的零个或多个数据变换。例如,具有两个级别(级别1和级别2)的 视频游戏应用可以使用题为“game.psarc”的嵌套式存档,其包含题为“levell.psarc”和 “level2. psarc”的两个存档。这可以为了除错以及测试的目的而通过允许游戏开发者使用 单存档(“1^611. 8虹(”、“1^612. 5^1^”等)来促进开发,而非总是每次花费时间来创建 更大的“game, psarc”存档。

开发者可以生成嵌套式存档,但传统I/O读取器无法读取或者无法高效地读取多 级存档。为了克服该问题,存档可以如图8所示而被配置。具体地说,外部存档800可以包 括内部存档801、802,其包含带有用于单独级别游戏的数据的文件。通过示例的方式,而非 通过限制的方式,内部存档801、802可以包含与特定游戏级别有关的数据,例如地图、在该 级别可用的武器以及在该级别遭遇的敌人。用于内部存档801、802的数据可以被单独压 缩,并且与公共数据803捆绑。外部存档800内的文件可以在一块接一块的基础上被压缩。 每一存档可以包括允许解存档器在外部存档800内的任何地方(包括内部存档801、802中 的任何地方)找寻任何给定数据块的索引。该索引可以被看作用于存档的内容表的等同物。当FIOS 300发出对来自存档特定文件的请求时,该请求可以看起来如此 Request /game/1 eve 12/map (1000, 10)。部分 “/game/level2/map” 称为路径,其用于提交 特定文件。部分“(1000,10)”标识请求的偏移和长度。当将要读取外部存档800或其一部 分时,解存档器301可以考虑可用文件的列表。该列表可以根据哪些存档打开而不同。例 如,如果外部存档800或内部存档801、802皆未打开,则列表可以看起来如此
/game, psarc
如果外部存档800打开,则列表可以看起来如此 /game (folder) /game/Ieveil, psarc /game/level2. psarc /game/common, dat
如果内部存档打开,则列表可以看起来如下 /game/Ieveil /map /game/level1/weapons /game/Ieveil /enemies /game/1eve12/map /game/level2/weapons /game/level2/enemies /game/common, dat
每一存档800、801、802可以具有内容的路径(或部分路径)的散列的列表。散列列表可以用于生成用于存档的内容表(TOC)。例如,用于外部存档800的内容表可以被配置如下TOC: hash (/levell. psarc) hash (/level2. psarc) hash (/common, dat)
其中,hashO指代圆括号中的量的散列化。可以使用任何合适的散列,例如MD5散列。相似地,用于级别1内部存档801的内容表可以被配置如下 TOC: hash (/map)
hash(/weapons) hash(/enemies)
如果使用图8所示的类型的嵌套式存档,则解存档器311可以被配置为处理它们。通过 示例的方式,解存档器311可以实现图9所示的解存档方法900。方法900可以开始于存档 中的初始查找,如在902所指示的那样。通过示例的方式,而非通过限制的方式,初始查找 可以返回用于搜寻的数据的初始路径、偏移、长度、以及所需数据变换的排序后的列表。具 体地说,1/0请求可能是如下的
(/game/level2/weapons, offset 0, length 50000, none) 内部存档中的该文件的初始查找可以返回以下内容
(/game/level2. psarc, offset 20000,length 30000,zlib decompress) 在初始查找之后,解存档器311可以求解嵌套,如在904所指示的那样。在求解嵌套中, 解存档器311可以尝试确定存档器802是否存储于另一存档内以及其是压缩过还是未压缩 而存储的。在求解嵌套中,解存档器311可以返回用于搜寻的数据的路径、偏移、长度、以及 所需数据变换的排序列表。通过示例的方式,路径可以具有形式/game. psarc,offset 120000, length 30016, decrypt + zlib decompress。嵌套可以通过循环而不是递归而 求解,以避免堆栈极限。一旦已经求解嵌套,就可以从介质设备118传送数据。通过示例的 方式,而非通过限制的方式,解存档器311可以一块接一块地迭代地读取并且变换数据,如 在905所指示的那样。具体地说,解存档器可以读取数据块,如在906所指示的那样,然后 将数据变换应用于所读取的块,如在908所指示的那样。多级嵌套存档可以被求解,从最外 存档下至单一交错读取和变换循环读取块,以最高效地使用源介质。在已经读取并且变换 了每一块之后,可以将期望的部分拷贝去到合适的目的地,例如在主存储器106、存储设备 115或其它地方,如在910所指示的那样。块的期望部分可以是任何大小,例如与单个字节 同样小,或者与整个块同样大。覆盖层
如上所述,FIOS堆栈300中的介质过滤器层304可以包括覆盖层307。根据本发明实 施例,覆盖层307可以被配置为允许在文件系统级别任意覆盖文件和目录。普通构思可以 与Unix中的联合安装(union mount)比较,例外在于其远更灵活。典型的联合安装通过将 一个文件系统中的目录与另一文件系统的整个内容合并而工作。覆盖层307进行相似的事 情,但远更灵活并且全特征化。例如,覆盖层307可以在目录、文件或甚至文件中的字节范 围的粒度上操作。目录可以被隐藏,或者使用覆盖层307来代替它们的内容。此外,覆盖层 307可以用于将从主要数据源所请求的文件替代为来自次要数据源的其它文件。次要数据源可以是文件或目录,其可以在与主要数据源或另一介质相同的介质上。此外,第二数据源 可以甚至是虚拟数据源,从而数据可以通过回调而得以指定。在这种特定情境下,术语“回 调”指代作为对于其它代码的变元而传送的可执行代码。进而,创建覆盖的应用可以指定准则,用于覆盖层307应该如何以及何时应用覆 盖。例如,如果应用103正将目录B覆盖到目录A,则所述准则可以是“覆盖”=首先查找B 中的文件,然后查找A中的文件;“未覆盖”=首先查找A中的文件,然后查找B中的文件; “较新的”=如果文件存在于这两个地方,则使用带有更近修改日期的那个;“较旧的”=如果 文件存在于这两个地方,则使用带有较早修改日期的那个;诸如此类。覆盖层307可以被配置为允许将针对来自特定源的I/O读取的请求任意映射到来 自另一源的读取。例如,对于从介质设备118读取特定文件的请求可以映射到位于例如存 储设备115上的对应文件。使用这种范围从文件内的具体字节到整个目录的特征数据可以 被隐藏并且四处交换。通过指定哪些目录、文件或字节需要待替代,覆盖层307可以使得 FIOS堆栈300必须进行以处理特定I/O请求的工作量最小化。覆盖层307可以用于例如实现对软件和/或数据的更新。在很多现有技术更新系 统中,可执行的可链接文件(ELF)从介质设备118拷贝到存储设备115,然后利用更新后的 代码或数据打补丁。通过本发明实施例,通过对照,应用103可以命令FIOS 101填充带有 来自介质设备118的数据的特定字节范围以及来自某个另外位置(例如存储设备115)的其 它字节范围。因此,不是必须拷贝整个文件来对其打补丁。反之,打补丁操作可以实现在I/ 0系统级别。多数现有打补丁实现方式是基于替换整个文件的。这是最便于实现的,并且因此 至今是最常用的方法。通过对照,覆盖层307可以实现的增强型打补丁操作允许远更复杂 且有用的模式,例如在压缩后的并且加密后的存档内打补丁。速度仿真层
在本发明特定实施例中,速度仿真层315可以用于在开发期间减慢较快存储设备,以 仿真较慢I/O设备的性能。速度仿真层315可以利用搜寻时间、吞吐量以及较慢I/O设备 的其它性能特征的模型。例如,速度仿真层315可以减慢存储设备115 (例如硬盘驱动器) 来仿真介质设备118 (例如HD-DVD,比如蓝光驱动器)的较慢搜寻时间和/或吞吐量。根据本发明实施例,速度仿真层315可以通过将先前会话期间收集到的驱动器性 能数据馈送到后来会话而得以实现。如上所述,调度器302所使用的性能模型可以被配置 为对任意复杂驱动器特性(比如吞吐量、激光器摇摆、读取头移动、层改变、以及甚至请求开 销)进行建模。速度仿真层315可以使用该信息提供特定介质设备的高精度仿真。由于这 种仿真是基于运行时间性能的,因此其将远比在忽略更复杂细节(比如搜寻时间)的同时尝 试简单地匹配吞吐量的简单质朴仿真层更精确。本发明实施例提供了在利用大量I/O的应用和系统中的改进的I/O性能。如上所 述,本发明实施例在视频游戏应用和视频游戏系统中尤其有用。然而,本发明实施例不限于 这些应用和系统。 虽然以上是本发明优选实施例的完整描述,但有可能使用各种替换、修改和等同 物。因此,本发明范围不应参照以上描述而得以确定,而应反之参照所附权利要求连同其等 同物的全部范围而得以确定。在此描述的任何特征,无论优选与否,可以与在此描述的任何另外特征组合,也无论优选与否。在所附权利要求中,不定冠词“一”或“一个”指代不定冠 词后的一个或多个项目的数量,除非另外明确声明。所附权利要求不应理解为包括装置加 功能的限定, 除非这种限定使用短语“用于……的装置”而明确陈述于给定权利要求中。
权利要求
1.在具有处理器单元、存储器和介质设备的系统中,其中,所述处理器单元包括主处 理器和辅助处理器,所述辅助处理器带有关联本地存储器,一种用于处理进入或来自所述 介质设备的输入或输出(I/O)的方法,所述方法包括a)从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备或 者传送来自所述介质设备的数据;b)计算用于完成所述输入I/O请求的预测时间Tp;c)将所述输入I/O请求插入到在所述存储器中实施的调度表,其中,所述调度表内输 入I/O请求的位置至少部分地取决于所述预测时间Tp ;d)根据所述调度表通过将数据从所述介质设备传送到所述本地存储器,并且使用所述 辅助处理器对所述本地存储器中的数据进行变换而服务于所述输入I/O请求。
2.权利要求1所述的方法,其中,b)包括根据性能特征方程(PCE)来计算Tp,所述性 能特征方程涉及所述介质设备的一个或多个参数以及据所述输入I/O请求所确定的一个 或多个系数。
3.权利要求2所述的方法,其中,所述一个或多个参数包括请求开销χ、头移动速率y 和吞吐量ζ。
4.权利要求3所述的方法,其中,所述一个或多个系数包括开销系数A、头行进距离B 和传送数据量C。
5.权利要求4所述的方法,其中,所述特征方程的形式是TP= Ax+By+Cz。
6.权利要求2所述的方法,其中,c)包括对于所述调度表中的多个不同I/O请求,以 不同系数迭代PCE,以确定用于服务于所述I/O请求的总时间T。
7.权利要求6所述的方法,其中,c)还包括对于所述多个I/O请求的两个或更多个 不同顺序,计算总时间T的两个或更多个不同的值,并且基于所述总时间T的最优值而将所 述输入I/O请求插入到所述调度表。
8.权利要求7所述的方法,其中,所述总时间T的最优值的值是用于所述多个I/O请 求的两个或更多个不同顺序的总时间T的最小值。
9.权利要求2所述的方法,其中,b)包括对于I/O请求测量所花费的实际时间Ta,并 且结合所述一个或多个系数使用所述实际时间Ta来对于一个或多个未知参数的值以迭代 方式求解所述PCE。
10.权利要求1所述的方法,其中,d)还包括从压缩后的嵌套式存档提取特定数据。
11.权利要求1所述的方法,其中,所述系统还包括图形处理器和关联图形存储器,其 中,d)包括将数据从所述介质设备读入所述图形存储器,将所述数据从所述图形存储器 传送到所述本地存储器,使用所述辅助处理器对所述数据执行数据变换以产生变换后的数 据,并且将所述变换后的数据传送回到所述图形存储器。
12.权利要求1所述的方法,其中,d)包括实现数据覆盖,其中,所述介质设备与所述 存储器之间传送的一个或多个主数据单元被来自次要数据源的一个或多个次要数据单元 所代替。
13.权利要求12所述的方法,其中,所述主数据单元的源和所述次要数据源位于相同 介质上。
14.权利要求12所述的方法,其中,所述主数据单元的源和所述次要数据源位于不同介质上。
15.权利要求12所述的方法,其中,所述次要数据源是虚拟数据源。
16.权利要求15所述的方法,其中,所述一个或多个次要数据单元是由回调所指定的。
17.权利要求1所述的方法,其中,所述系统还包括快速存储设备,其中,d)包括将一 个或多个数据单元从所述介质设备预取到所述快速存储设备,随后传送来自所述快速存储 设备的数据单元。
18.权利要求17所述的方法,其中,所述快速存储设备是硬盘驱动器。
19.权利要求18所述的方法,其中,所述介质设备是高容量光盘驱动器。
20.权利要求17所述的方法,其中,预取一个或多个数据单元的步骤包括在I/O另外 空闲的时间段期间预取所述一个或多个数据单元。
21.权利要求20的方法,其中,预取一个或多个数据单元的步骤包括从所述介质设 备预取一个或多个数据单元的第一组,检查所述介质设备的空闲性,并且如果I/O空闲则 从所述介质设备预取一个或多个数据单元的第二组,或者如果I/O不空闲则延迟预取所述 第二组。
22.权利要求1的方法,其中,b)包括调整所述一个或多个参数,以仿真比与所述系 统关联的所述介质设备更慢的介质设备的操作。
23.—种系统,包括处理器单元;存储器,耦合到所述处理器单元;介质设备,耦合到所述处理器单元;以及一组处理器可执行指令,实施在所述存储器中,所述指令被配置为当执行时实现用于 处理进入或来自所述介质设备的输入或输出(I/O)的方法,所述方法包括a)从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备或 者传送来自所述介质设备的数据;b)计算用于完成所述输入I/O请求的预测时间Tp;c)将所述输入I/O请求插入到在所述存储器中实施的调度表,其中,所述调度表内输 入I/O请求的位置至少部分地取决于所述预测时间Tp ;以及d)根据所述调度表服务于所述输入I/O请求,其中,所述一组处理器可执行指令还包括一个或多个介质过滤器层,所述一个或多个 介质过滤器层包括解存档器层、RAM缓存层、调度器缓存层、覆盖层、分类缓存层、数据变换 层、或仿真数据层。
24.在具有主处理器、带有关联本地存储器的辅助处理器、主存储器、以及介质设备的 系统中,一种用于处理进入或来自所述介质设备的输入或输出(I/O)的方法,所述方法包 括a)从在所述主处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备 或者传送来自所述介质设备的数据;将所述输入I/O请求插入到在所述主存储器中实施的调度表;以及c)根据所述调度表和一个或多个过滤器服务于所述输入I/O请求,其中,所述一个或多个过滤器中的至少一个是由所述辅助处理器实现的。
25.在具有处理器单元、存储器以及介质设备的系统中,一种用于处理进入或来自所 述介质设备的输入或输出(I/O)的方法,所述方法包括a)从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备或 者传送来自所述介质设备的数据;b)计算用于完成所述输入I/O请求的预测时间Tp;c)将所述输入I/O请求插入到在所述存储器中实施的调度表,其中,所述调度表内输 入I/O请求的位置至少部分地取决于所述预测时间Tp ;以及d)根据所述调度表实现所述输入I/O请求,其中,d)包括从压缩后的嵌套式存档提取特定数据。
26.在具有处理器单元、存储器以及介质设备的系统中,一种用于处理进入或来自所 述介质设备的输入或输出(I/O)的方法,所述方法包括a)从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备或 者传送来自所述介质设备的数据;b)计算用于完成所述输入I/O请求的预测时间Tp;c)将所述输入I/O请求插入到在所述存储器中实施的调度表,其中,所述调度表内输 入I/O请求的位置至少部分地取决于所述预测时间Tp ;以及d)根据所述调度表实现所述输入I/O请求,其中,d)包括实现数据覆盖,其中,在所述介质设备与所述存储器之间传送的一个或多个主数据单元被来自次要数 据源的一个或多个次要数据单元所替代。
27.权利要求26所述的方法,其中,所述主数据单元的源和所述次要数据源位于相同 介质上。
28.权利要求26所述的方法,其中,所述主数据单元的源和所述次要数据源位于不同 介质上。
29.权利要求26所述的方法,其中,所述次要数据源是虚拟数据源。
30.权利要求29所述的方法,其中,所述一个或多个次要数据单元是由回调所指定的。
31.在具有处理器单元、存储器、快速存储设备、以及介质设备的系统中,一种用于处 理进入或来自所述介质设备的输入或输出(I/O)的方法,所述方法包括a)从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备或 者传送来自所述介质设备的数据;b)计算用于完成所述输入I/O请求的预测时间Tp;c)将所述输入I/O请求插入到在所述存储器中实施的调度表,其中,所述调度表内输 入I/O请求的位置至少部分地取决于所述预测时间Tp ;以及d)根据所述调度表实现所述输入I/O请求,其中,d)包括将一个或多个数据单元从所 述介质设备预取到所述快速存储设备,随后传送来自所述快速存储设备的数据单元。
32.权利要求31所述的方法,其中,所述快速存储设备是硬盘驱动器。
33.权利要求32所述的方法,其中,所述介质设备是高容量光盘驱动器。
34.权利要求33所述的方法,其中,预取一个或多个数据单元的步骤包括在I/O另外空闲的时间段期间预取所述一个或多个数据单元。
35.权利要求33的方法,其中,预取一个或多个数据单元的步骤包括从所述介质设 备预取一个或多个数据单元的第一组,检查所述介质设备的空闲性,并且如果I/O空闲则 从所述介质设备预取一个或多个数据单元的第二组,或者如果I/O不空闲则延迟预取所述第二组。
36.在具有处理器单元、存储器、快速存储设备、以及介质设备的系统中,一种用于处 理进入或来自所述介质设备的输入或输出(I/O)的方法,所述方法包括a)从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到所述介质设备或 者传送来自所述介质设备的数据;b)计算用于完成所述输入I/O请求的预测时间Tp;c)将所述输入I/O请求插入到在所述存储器中实施的调度表,其中,所述调度表内输 入I/O请求的位置至少部分地取决于所述预测时间Tp ;以及d)根据所述调度表实现所述输入I/O请求,其中,b)包括调整所述一个或多个参数, 以仿真比与所述系统关联的所述介质设备更慢的介质设备的操作。
全文摘要
可以在系统中实现处理进入或来自介质设备的输入或输出(I/O),所述系统具有存储器、处理器单元、以及介质设备,所述处理器单元具有主处理器和辅助处理器,所述辅助处理器具有关联本地存储器。从在处理器单元上运行的应用接收到的输入I/O请求可以根据调度表而受服务。被配置为实现I/O处理的一组处理器可执行指令可以包括介质过滤器层。I/O处理可以替换地包括从在主处理器上运行的应用接收输入I/O请求;将所述请求插入到在所述主存储器中实施的调度表;根据所述调度表以及一个或多个过滤器实现所述请求,所述一个或多个过滤器中的至少一个是由辅助处理器实现的。
文档编号G09B3/00GK102047305SQ200980119736
公开日2011年5月4日 申请日期2009年5月8日 优先权日2008年5月30日
发明者R. 萨勒 A., A. 莱尔纳 E., J. 米卡尔 R. 申请人:美国索尼电脑娱乐有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1