CN102047305B - 文件输入/输出调度器及其处理方法 - Google Patents
文件输入/输出调度器及其处理方法 Download PDFInfo
- Publication number
- CN102047305B CN102047305B CN200980119736.8A CN200980119736A CN102047305B CN 102047305 B CN102047305 B CN 102047305B CN 200980119736 A CN200980119736 A CN 200980119736A CN 102047305 B CN102047305 B CN 102047305B
- Authority
- CN
- China
- Prior art keywords
- input
- data
- medium apparatus
- output request
- dispatch list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Abstract
可以在系统中实现处理进入或来自介质设备的输入或输出(I/O),所述系统具有存储器、处理器单元、以及介质设备,所述处理器单元具有主处理器和辅助处理器,所述辅助处理器具有关联本地存储器。从在处理器单元上运行的应用接收到的输入I/O请求可以根据调度表而受服务。被配置为实现I/O处理的一组处理器可执行指令可以包括介质过滤器层。I/O处理可以替换地包括:从在主处理器上运行的应用接收输入I/O请求;将所述请求插入到在所述主存储器中实施的调度表;根据所述调度表以及一个或多个过滤器实现所述请求,所述一个或多个过滤器中的至少一个是由辅助处理器实现的。
Description
优先权声明
该申请要求2008年5月30日提交的共同受让美国专利申请12/130,892的优先权之利益,其整个公开在此引入以供参考。
技术领域
本发明实施例涉及计算机游戏以及有关的应用,更具体地说,涉及计算游戏以及有关应用中的文件输入/输出(I/O)管理。
背景技术
很多软件应用(例如视频游戏)包括文件输入输出(I/O)调度器,以使得应用内的介质存取更高效并且可靠。文件I/O调度器(“FIOS”)是中间件层,用于存取带有若干部分的文件,其包括调度器和可选I/O过滤器层。调度器典型地被设计为优化地对I/O请求排序,从而它们在服从任意最终期限和优先级约束的最短可能时间内完成。过滤器层可以提供额外服务,例如解压缩或缓存。
很多不同游戏组件需要对存储介质中的文件的I/O存取。音频组件加载音频文件;游戏玩乐引擎加载级别清晰度;图形组件加载纹理地图和模型;电影组件加载音频视频文件;以及子系统加载大型WAD文件。介质可以是游戏传递介质(例如光盘(通用介质盘(UMD)、致密盘(CD)、数字视频盘(DVD)、蓝光盘(BD)等))、中间存储介质(例如硬盘)、或随着平台演进的其它介质类型。
单一应用(例如视频游戏)典型地具有多个组件,每一组件具有其自身的I/O需求。某些需要对介质的流式存取,其中,I/O系统将文件中的数据流送到组件,从而该组件可以将流送来的数据连续呈现在游戏机上。例如,音频组件典型地流送用于音轨回放的音频文件;电影组件流送音频视频内容,用于播放器回放电影。其它组件仅需要非流送式存取,其中,它们成块地从文件检索数据,以供组件处理。这些组件不需要稳固的数据流,但块传递时序一般是严格的。如果应用未在需要时接收到数据,则性能可能遭损。
视频游戏必须一般执行相当大量I/O。游戏事件一般是按时间驱动的,具有必须被满足的最终期限。例如,如果玩家正从点A行进到点B,则游戏需要具有用于在玩家达到点B之前加载的与点B关联的数据的文件。游戏组件可以使用低级别I/O原语来从介质检索数据,但当多个组件同时需要来自同一设备的数据时,这些原语不处理设备竞争。拥塞的I/O请求能够中断流送数据流,或者禁止关键数据块在需要之时到达组件。较高级别系统(例如989Sound's Streamsafe)至少提供对文件的可靠流存取,从而流送的数据不受中断。遗憾的是,这些系统仅分配单个数据流,而未很好地处理非流数据的竞争。常规系统未提供对于正常数据存取解决竞争的标准层。
因为应用的组件典型地不知道彼此的I/O活动,所以它们的I/O请求通常导致带有大量过度搜寻(对数据的前后搜索)的异常低效的I/O模式。随着游戏增长得较大,过度搜寻和低效数据检索增加。用于分布式介质(例如CD)的盘主控(disc mastering)可以通过各技术(例如频繁复制所存取的数据块,并且穿过盘来发布它们,从而拷贝将总是靠近,无论存储设备的读取头在何处)帮助避免这种无效性中的某些。文件系统并非总是显示数据在物理上位于盘上的何处,尽管I/O系统不能总是最佳使用数据。
在此情况下提出本发明实施例。
发明内容
根据本发明实施例,一种用于处理去往或来自介质设备的输入或输出(I/O)的方法可以得以实现在具有处理器单元、存储器和介质设备的系统中。可以从在所述处理器上运行的应用接收输入I/O请求,以将数据传送到介质设备或者传送来自介质设备的数据。可以计算出用于完成输入I/O请求的预测时间Tp。输入I/O请求可以插入到在所述存储器中实施的调度表。所述调度表内输入I/O请求的位置可以至少部分地取决于预测时间Tp。输入I/O请求可以根据调度表而受服务。
在某些实施例中,一组处理器可执行指令可以实施在所述存储器中。所述指令可以被配置为当执行时实现上述方法。所述一组处理器可执行指令可以包括一个或多个介质过滤器层。所述介质过滤器层可以包括解存档器层、RAM缓存层、调度器缓存(例如硬盘驱动器(HDD)缓存)层、覆盖层、分类缓存层、数据变换层、或仿真数据层。
在某些实施例中,所述预测时间Tp可以根据性能特征方程(PCE)而得以计算,所述PCE涉及所述介质设备的一个或多个参数以及根据所述输入I/O请求而确定的一个或多个系数。通过示例的方式,并且不失一般性,所述参数包括请求开销x、头移动速率y和吞吐量z。在该示例中,所述系数可以包括开销系数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调度器(FIOS)。通过示例的方式,并且不失一般性,系统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的指令可以被配置为其中实现具有以下所描述的特定特征的文件输入/输出系统(FIOS)。存储器106可以包含I/O队列101Q,例如形式是堆栈或队列,用于输入、调度、发出、完成以及释放FIOS程序101所使用的I/O请求。这些队列的示例也描述如下。
通过示例的方式,FIOS程序101可以包括各指令,用于:a)从应用103接收涉及介质设备118的输入I/O请求,b)计算用于完成I/O请求的预测时间Tp,c)至少部分地基于预测时间Tp将输入I/O请求插入到存储器106中的调度表的位置,d)根据调度表实现I/O请求。
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可以是高容量光盘驱动器,例如CD-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可以包括内部缓存L1和外部缓存L2。PPE 204可以将FIOS程序205的各部分存储在其内部缓存L1中。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的O/S可能未正确地缓存(例如文件存在性、大小、以及位置)的数据进行缓存。数据变换层311可以对读自或写入介质设备118的数据实现数据变换,例如加密、解密、压缩或解压缩。仿真数据层313可以例如用于生成多个零或随机数,以用于需要这种仿真数据的I/O请求。速度仿真层315可以用在例如软件开发期间,以对介质设备的不同速度进行仿真,如下所述。
可以关于如下所述的图4来理解调度器302的操作。从客户机应用的观点来看,I/O请求403可以是以相对直接的方式而受服务的。例如,应用401(例如视频游戏)内的线程402可以凭借调用函数(例如readFile())通过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完成。例如,客户机应用可以使用原子方法(例如isDone())来周期性地进行轮询。替换地,当I/O请求完成时,客户机应用可以等待调度器302调用的回调函数。
在I/O请求已经插入到输入队列404之后,FIOS程序101/205可以调用调度器302来执行调度表插入407。可以参照图5来理解调度器所实现的各操作的序列。如果没有I/O要处理,则调度器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的预测时间Tp。
PCE可以具有一般形式:
Tp = Af1(X) + Bf2(y) + Cf3(Z) + Df4(W) + Ef5(V) + ...,
其中,A、B、C、D以及E是系数,x、y、z、w和v表示与介质设备的性能特征有关的参数,f1(x)、f2(y)、f3(z)、f4(w)、f5(v)…是x、y、z、w和v的函数。通过示例的方式,而非通过限制的方式,PCE可以是线性方程,形式是一个或多个项之和,其中,每一项是系数(A、B、C等)乘以表示参数值的变量(x,y、z等)。这种方程可以具有以下形式:
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是与每移动区段的头移动时间有关的参数,z是与数据吞吐率有关的参数(例如用于读取或者写入指定量数据的时间)。系数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/O操作,其将可以移动到释放操作池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架构中的“dcbt”指令。根据本发明实施例,预取可以排队并且作为上述调度器循环的一部分而得以执行。预取可以在其它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所读取的介质(例如CD-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协作。具体地说,大型文件允许更好的模型驱动器头移动。如果压缩后的存档格式为随机存取,则嵌套式存档支持可以大受促进。通过对照,典型地,压缩后的存档并非随机存取。例如,zip、gzip、7z、压缩格式等典型地要求从存档的开头线性存取。
在此所使用的术语“存档”指代组合为单个较大文件的一组数据文件。源数据可以不修改地被存储,或者一个或多个数据变换(例如压缩或加密)可以应用于数据的任何部分。索引(有时称为内容表)可以通过描述源文件的至少某方面(例如存档内的路径和偏移)的存档而得以保存,从而它们可以被查找并且单独存取。术语“嵌套式存档”指代其中一个或多个源数据文件为另一存档(或嵌套式存档)的存档。根据这种嵌套,任何给定源数据块可以具有应用至其的零个或多个数据变换。例如,具有两个级别(级别1和级别2)的视频游戏应用可以使用题为“game.psarc”的嵌套式存档,其包含题为“level1.psarc”和“level2.psarc”的两个存档。这可以为了除错以及测试的目的而通过允许游戏开发者使用单存档(“level1.psarc”、“level2.psarc”等)来促进开发,而非总是每次花费时间来创建更大的“game.psarc”存档。
开发者可以生成嵌套式存档,但传统I/O读取器无法读取或者无法高效地读取多级存档。为了克服该问题,存档可以如图8所示而被配置。具体地说,外部存档800可以包括内部存档801、802,其包含带有用于单独级别游戏的数据的文件。通过示例的方式,而非通过限制的方式,内部存档801、802可以包含与特定游戏级别有关的数据,例如地图、在该级别可用的武器以及在该级别遭遇的敌人。用于内部存档801、802的数据可以被单独压缩,并且与公共数据803捆绑。外部存档800内的文件可以在一块接一块的基础上被压缩。每一存档可以包括允许解存档器在外部存档800内的任何地方(包括内部存档801、802中的任何地方)找寻任何给定数据块的索引。该索引可以被看作用于存档的内容表的等同物。
当FIOS 300发出对来自存档特定文件的请求时,该请求可以看起来如此:Request:/game/level2/map(1000,10)。部分“/game/level2/map”称为路径,其用于提交特定文件。部分“(1000,10)”标识请求的偏移和长度。当将要读取外部存档800或其一部分时,解存档器301可以考虑可用文件的列表。该列表可以根据哪些存档打开而不同。例如,如果外部存档800或内部存档801、802皆未打开,则列表可以看起来如此:
/game.psarc
如果外部存档800打开,则列表可以看起来如此:
/game (folder)
/game/level1.psarc
/game/level2.psarc
/game/common.dat
如果内部存档打开,则列表可以看起来如下:
/game/level1 /map
/game/level1/weapons
/game/level1 /enemies
/game/level2/map
/game/level2/weapons
/game/level2/enemies
/game/common.dat
每一存档800、801、802可以具有内容的路径(或部分路径)的散列的列表。散列列表可以用于生成用于存档的内容表(TOC)。例如,用于外部存档800的内容表可以被配置如下:
TOC: hash (/level1.psarc)
hash (/level2.psarc)
hash (/common.dat)
其中,hash()指代圆括号中的量的散列化。可以使用任何合适的散列,例如MD5散列。
相似地,用于级别1内部存档801的内容表可以被配置如下:
TOC: hash(/map)
hash(/weapons)
hash(/enemies)
如果使用图8所示的类型的嵌套式存档,则解存档器311可以被配置为处理它们。通过示例的方式,解存档器311可以实现图9所示的解存档方法900。方法900可以开始于存档中的初始查找,如在902所指示的那样。通过示例的方式,而非通过限制的方式,初始查找可以返回用于搜寻的数据的初始路径、偏移、长度、以及所需数据变换的排序后的列表。具体地说,I/O请求可能是如下的:
(/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/O系统级别。
多数现有打补丁实现方式是基于替换整个文件的。这是最便于实现的,并且因此至今是最常用的方法。通过对照,覆盖层307可以实现的增强型打补丁操作允许远更复杂且有用的模式,例如在压缩后的并且加密后的存档内打补丁。
速度仿真层
在本发明特定实施例中,速度仿真层315可以用于在开发期间减慢较快存储设备,以仿真较慢I/O设备的性能。速度仿真层315可以利用搜寻时间、吞吐量以及较慢I/O设备的其它性能特征的模型。例如,速度仿真层315可以减慢存储设备115(例如硬盘驱动器)来仿真介质设备118(例如HD-DVD,比如蓝光驱动器)的较慢搜寻时间和/或吞吐量。
根据本发明实施例,速度仿真层315可以通过将先前会话期间收集到的驱动器性能数据馈送到后来会话而得以实现。如上所述,调度器302所使用的性能模型可以被配置为对任意复杂驱动器特性(比如吞吐量、激光器摇摆、读取头移动、层改变、以及甚至请求开销)进行建模。速度仿真层315可以使用该信息提供特定介质设备的高精度仿真。由于这种仿真是基于运行时间性能的,因此其将远比在忽略更复杂细节(比如搜寻时间)的同时尝试简单地匹配吞吐量的简单质朴仿真层更精确。
本发明实施例提供了在利用大量I/O的应用和系统中的改进的I/O性能。如上所述,本发明实施例在视频游戏应用和视频游戏系统中尤其有用。然而,本发明实施例不限于这些应用和系统。
虽然以上是本发明优选实施例的完整描述,但有可能使用各种替换、修改和等同物。因此,本发明范围不应参照以上描述而得以确定,而应反之参照所附权利要求连同其等同物的全部范围而得以确定。在此描述的任何特征,无论优选与否,可以与在此描述的任何另外特征组合,也无论优选与否。在所附权利要求中,不定冠词“一”或“一个”指代不定冠词后的一个或多个项目的数量,除非另外明确声明。所附权利要求不应理解为包括装置加功能的限定,除非这种限定使用短语“用于……的装置”而明确陈述于给定权利要求中。
Claims (2)
1.在具有处理器单元、存储器和介质设备的系统中,其中,所述处理器单元包括主处理器和辅助处理器,所述辅助处理器带有关联本地存储器,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的方法,所述方法包括:
a)从在所述处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据;
b)计算用于完成所述进入的输入/输出请求的预测时间Tp;
c)将所述进入的输入/输出请求插入到在所述存储器中实施的调度表,其中,所述调度表内进入的输入/输出请求的位置至少部分地取决于所述预测时间Tp;
d)通过将数据从所述介质设备传送到所述本地存储器,并且使用所述辅助处理器对所述本地存储器中的数据进行变换而根据所述调度表服务于所述进入的输入/输出请求,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求完全受服务之后受服务。
2.权利要求1所述的方法,其中,b)包括:根据性能特征方程来计算Tp,所述方程涉及所述介质设备的一个或多个参数以及据所述进入的输入/输出请求所确定的一个或多个系数,其中,所述一个或多个参数包括请求开销、头移动速率和吞吐量;其中,所述一个或多个系数包括开销系数、头行进距离和传送数据量。
3. 权利要求2所述的方法,其中,所述性能特征方程的形式是:Tp = Ax+By+Cz,其中x是请求开销、y是头移动速率、z是吞吐量、A是开销系数、B是头行进距离、C是传送数据量。
4. 权利要求2所述的方法,其中,c)包括:对于所述调度表中的多个不同输入/输出请求,以不同系数迭代性能特征方程,以确定用于服务于所述输入/输出请求的总时间T。
5. 权利要求4所述的方法,其中,c)还包括:对于所述多个输入/输出请求的两个或更多个不同顺序,计算总时间T的两个或更多个不同的值,并且基于所述总时间T的最优值而将所述进入的输入/输出请求插入到所述调度表。
6. 权利要求5所述的方法,其中,所述总时间T的最优值的值是用于所述多个输入/输出请求的两个或更多个不同顺序的总时间T的最小值。
7. 权利要求2所述的方法,其中,b)包括:对于输入/输出请求测量所花费的实际时间Ta,并且结合所述一个或多个系数使用所述实际时间Ta来对于一个或多个未知参数的值以迭代方式求解所述性能特征方程。
8. 权利要求1所述的方法,其中,d)还包括:从压缩后的嵌套式存档提取特定资产文件。
9. 权利要求1所述的方法,其中,所述系统还包括图形处理器和关联图形存储器,其中,d)包括:将数据从所述介质设备读入所述图形存储器,将所述数据从所述图形存储器传送到所述本地存储器,使用所述辅助处理器对所述数据执行数据变换以产生变换后的数据,并且将所述变换后的数据传送回到所述图形存储器。
10. 权利要求1所述的方法,其中,d)包括:实现数据覆盖,其中,所述介质设备与所述存储器之间传送的一个或多个主数据单元被来自次要数据源的一个或多个次要数据单元所代替。
11. 权利要求10所述的方法,其中,所述主数据单元的源和所述次要数据源位于相同介质上。
12. 权利要求10所述的方法,其中,所述主数据单元的源和所述次要数据源位于不同介质上。
13. 权利要求10所述的方法,其中,所述次要数据源是虚拟数据源。
14. 权利要求13所述的方法,其中,所述一个或多个次要数据单元是由回调所指定的。
15. 权利要求1所述的方法,其中,所述系统还包括快速存储设备,其中,d)包括:将一个或多个数据单元从所述介质设备预取到所述快速存储设备,并且随后传送来自所述快速存储设备的数据单元。
16. 权利要求15所述的方法,其中,所述快速存储设备是硬盘驱动器。
17. 权利要求16所述的方法,其中,所述介质设备是高容量光盘驱动器。
18. 权利要求15所述的方法,其中,预取一个或多个数据单元包括:在输入/输出另外空闲的时间段期间预取所述一个或多个数据单元。
19. 权利要求18的方法,其中,预取一个或多个数据单元包括:从所述介质设备预取一个或多个数据单元的第一组,检查所述介质设备的空闲性,并且如果输入/输出空闲则从所述介质设备预取一个或多个数据单元的第二组,或者如果输入/输出不空闲则延迟预取所述第二组。
20. 权利要求1的方法,其中,b)包括:调整用于确定Tp的一个或多个参数,以仿真比与所述系统关联的所述介质设备更慢且与所述介质设备不同的介质设备的操作。
21. 在具有处理器单元、存储器、快速存储设备、以及介质设备的系统中,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的装置,所述装置包括:
a)用于从在所述处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据的部件;
b)用于计算用于完成所述进入的输入/输出请求的预测时间Tp的部件;
c)用于将所述进入的输入/输出请求插入到在所述存储器中实施的调度表的部件,其中,所述调度表内进入的输入/输出请求的位置至少部分地取决于所述预测时间Tp;以及
d)用于根据所述调度表实现所述进入的输入/输出请求的部件,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求被完全实现之后而被实现,其中,b)包括:用于调整用于确定Tp的一个或多个参数,以仿真比与所述系统关联的所述介质设备更慢且与所述介质设备不同的介质设备的操作的部件。
22. 在具有主处理器、带有关联本地存储器的辅助处理器、主存储器、以及介质设备的系统中,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的方法,所述方法包括:
a)从在所述主处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据;
b)将所述进入的输入/输出请求插入到在所述主存储器中实施的调度表;以及
c)根据所述调度表和一个或多个过滤器服务于所述进入的输入/输出请求,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求完全受服务之后受服务,其中,所述一个或多个过滤器中的至少一个是由所述辅助处理器实现的。
23. 在具有处理器单元、存储器以及介质设备的系统中,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的方法,所述方法包括:
a)从在所述处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据;
b)计算用于完成所述进入的输入/输出请求的预测时间Tp;
c)将所述进入的输入/输出请求插入到在所述存储器中实施的调度表,其中,所述调度表内进入的输入/输出请求的位置至少部分地取决于所述预测时间Tp;以及
d)根据所述调度表实现所述进入的输入/输出请求,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求被完全实现之后而被实现,其中,d)包括:从压缩后的嵌套式存档提取特定资产文件。
24. 在具有处理器单元、存储器以及介质设备的系统中,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的方法,所述方法包括:
a)从在所述处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据;
b)计算用于完成所述进入的输入/输出请求的预测时间Tp;
c)将所述进入的输入/输出请求插入到在所述存储器中实施的调度表,其中,所述调度表内进入的输入/输出请求的位置至少部分地取决于所述预测时间Tp;以及
d)根据所述调度表实现所述进入的输入/输出请求,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求被完全实现之后而被实现,其中,d)包括:实现数据覆盖,其中,在所述介质设备与所述存储器之间传送的一个或多个主数据单元被来自次要数据源的一个或多个次要单元所替代。
25. 权利要求24所述的方法,其中,所述主数据单元的源和所述次要数据源位于相同介质上。
26. 权利要求24所述的方法,其中,所述主数据单元的源和所述次要数据源位于不同介质上。
27. 权利要求24所述的方法,其中,所述次要数据源是虚拟数据源。
28. 权利要求24所述的方法,其中,所述一个或多个次要数据单元是由回调所指定的。
29. 在具有处理器单元、存储器、快速存储设备、以及介质设备的系统中,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的方法,所述方法包括:
a)从在所述处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据;
b)计算用于完成所述进入的输入/输出请求的预测时间Tp;
c)将所述进入的输入/输出请求插入到在所述存储器中实施的调度表,其中,所述调度表内进入的输入/输出请求的位置至少部分地取决于所述预测时间Tp,其中所述输入/输出请求包括对在预料到对文件的未来需要时从所述介质设备预取一个或多个数据单元的请求;以及
d)根据所述调度表实现所述进入的输入/输出请求,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求被完全实现之后而被实现,其中,d)包括:将所述一个或多个数据单元从所述介质设备预取到所述快速存储设备,以及如果所述一个或多个数据单元被所述系统需要则随后传送来自所述快速存储设备的数据单元,或者如果所述一个或多个数据单元不被所述系统需要则取消对预取所述一个或多个数据单元的请求。
30. 权利要求29所述的方法,其中,所述快速存储设备是硬盘驱动器。
31. 权利要求30所述的方法,其中,所述介质设备是高容量光盘驱动器。
32. 权利要求31所述的方法,其中,预取一个或多个数据单元包括:在输入/输出另外空闲的时间段期间预取所述一个或多个数据单元。
33. 权利要求31的方法,其中,预取一个或多个数据单元包括:从所述介质设备预取一个或多个数据单元的第一组,检查所述介质设备的空闲性,并且如果输入/输出空闲则从所述介质设备预取一个或多个数据单元的第二组,或者如果输入/输出不空闲则延迟预取所述第二组。
34. 在具有处理器单元、存储器、快速存储设备、以及介质设备的系统中,一种用于处理到所述介质设备的输入/来自所述介质设备的输出的方法,所述方法包括:
a)从在所述处理器上运行的应用接收进入的输入/输出请求,以将数据传送到所述介质设备或者传送来自所述介质设备的数据;
b)计算用于完成所述进入的输入/输出请求的预测时间Tp;
c)将所述进入的输入/输出请求插入到在所述存储器中实施的调度表,其中,所述调度表内进入的输入/输出请求的位置至少部分地取决于所述预测时间Tp;以及
d)根据所述调度表实现所述进入的输入/输出请求,其中所述调度表中的后续输入/输出请求在所述调度表中的在前输入/输出请求被完全实现之后而被实现,其中,b)包括:调整用于确定Tp的一个或多个参数,以仿真比与所述系统关联的所述介质设备更慢且与所述介质设备不同的介质设备的操作。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/130892 | 2008-05-30 | ||
US12/130,892 US8504736B2 (en) | 2008-05-30 | 2008-05-30 | File input/output scheduler |
US12/130,892 | 2008-05-30 | ||
PCT/US2009/043387 WO2009148764A1 (en) | 2008-05-30 | 2009-05-08 | File input/output scheduler |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102047305A CN102047305A (zh) | 2011-05-04 |
CN102047305B true CN102047305B (zh) | 2014-06-25 |
Family
ID=41381486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980119736.8A Active CN102047305B (zh) | 2008-05-30 | 2009-05-08 | 文件输入/输出调度器及其处理方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8504736B2 (zh) |
EP (1) | EP2301002A4 (zh) |
JP (1) | JP5385977B2 (zh) |
KR (1) | KR101238163B1 (zh) |
CN (1) | CN102047305B (zh) |
WO (1) | WO2009148764A1 (zh) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8504736B2 (en) * | 2008-05-30 | 2013-08-06 | Sony Computer Entertainment America Inc. | File input/output scheduler |
US8752100B2 (en) * | 2008-08-29 | 2014-06-10 | At&T Intellectual Property Ii, Lp | Systems and methods for distributing video on demand |
US8078799B2 (en) * | 2009-06-10 | 2011-12-13 | Lsi Corporation | Method and system of an adaptive input/output scheduler for storage arrays |
US8310492B2 (en) * | 2009-09-03 | 2012-11-13 | Ati Technologies Ulc | Hardware-based scheduling of GPU work |
US9852143B2 (en) | 2010-12-17 | 2017-12-26 | Microsoft Technology Licensing, Llc | Enabling random access within objects in zip archives |
US20130067237A1 (en) * | 2011-09-12 | 2013-03-14 | Microsoft Corporation | Providing random access to archives with block maps |
US20130159382A1 (en) * | 2011-12-15 | 2013-06-20 | Microsoft Corporation | Generically presenting virtualized data |
US9858149B2 (en) * | 2012-01-03 | 2018-01-02 | Microsoft Technology Licensing, Llc | Accessing overlay media over a network connection |
EP2867777A4 (en) * | 2012-06-29 | 2016-02-10 | Happy Cloud Inc | MANAGEMENT OF WRITING A RECORD TO A DATA STORAGE DEVICE |
US8983237B2 (en) | 2012-08-22 | 2015-03-17 | Adobe Systems Incorporated | Non-destructive collaborative editing |
US9514157B2 (en) * | 2012-08-22 | 2016-12-06 | Adobe Systems Incorporated | Multi-dimensional browsing of content |
US9390155B2 (en) | 2012-08-22 | 2016-07-12 | Adobe Systems Incorporated | Accessing content in a content-aware mesh |
US20140068621A1 (en) * | 2012-08-30 | 2014-03-06 | Sriram Sitaraman | Dynamic storage-aware job scheduling |
US9519574B2 (en) | 2012-11-28 | 2016-12-13 | Microsoft Technology Licensing, Llc | Dynamic content access window loading and unloading |
CN104346220B (zh) * | 2013-07-31 | 2017-11-03 | 中国科学院计算技术研究所 | 一种任务调度方法与系统 |
US9372716B1 (en) * | 2013-09-23 | 2016-06-21 | Amazon Technologies, Inc. | Download prioritization |
CN105763481A (zh) * | 2014-12-19 | 2016-07-13 | 北大方正集团有限公司 | 一种信息缓存方法及装置 |
KR102311229B1 (ko) | 2015-03-04 | 2021-10-14 | (주)솔레컨스 | 멀티미디어 데이터 저장 시스템 기반 파일 정보를 중복으로 저장하는 시스템 및 방법 |
CN105159774B (zh) * | 2015-07-08 | 2018-06-12 | 清华大学 | 一种api请求保序处理方法及系统 |
JP6243884B2 (ja) * | 2015-10-02 | 2017-12-06 | 株式会社ソニー・インタラクティブエンタテインメント | 情報処理装置、プロセッサ、および情報処理方法 |
US10635596B2 (en) | 2015-10-02 | 2020-04-28 | Sony Interactive Entertainment Inc. | Information processing device, access controller, information processing method, and computer program for accessing memory having access units of different sizes |
US10042749B2 (en) | 2015-11-10 | 2018-08-07 | International Business Machines Corporation | Prefetch insensitive transactional memory |
JP6734760B2 (ja) * | 2015-11-10 | 2020-08-05 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | プリフェッチ・インセンシティブのトランザクション・メモリ |
US10645162B2 (en) * | 2015-11-18 | 2020-05-05 | Red Hat, Inc. | Filesystem I/O scheduler |
CN105549910B (zh) * | 2015-12-14 | 2018-09-07 | 浪潮(北京)电子信息产业有限公司 | 一种io调度方法及装置 |
US10614092B2 (en) * | 2017-01-24 | 2020-04-07 | International Business Machines Corporation | Optimizing data retrieval operation in big-data processing systems |
US10496335B2 (en) | 2017-06-30 | 2019-12-03 | Intel Corporation | Method and apparatus for performing multi-object transformations on a storage device |
US10824598B2 (en) * | 2018-08-07 | 2020-11-03 | Dell Products L.P. | Handling file commit and commit-delete operations in an overlay optimizer |
KR102254501B1 (ko) * | 2018-10-19 | 2021-05-21 | 한양대학교 산학협력단 | 부분 순서 보장 기반의 입출력 스케줄러 및 그 방법 |
US11593156B2 (en) * | 2019-08-16 | 2023-02-28 | Red Hat, Inc. | Instruction offload to processor cores in attached memory |
US20210397526A1 (en) * | 2020-06-18 | 2021-12-23 | General Electric Company | Systems and methods of providing an abstraction layer between an application layer and hardware components of a computing device |
CN114706820B (zh) * | 2022-05-18 | 2022-09-06 | 北京卡普拉科技有限公司 | 异步i/o请求的调度方法、系统、电子设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1617100A (zh) * | 2003-08-20 | 2005-05-18 | 微软公司 | 确定连续介质优先级的存储调度程序 |
US7260703B1 (en) * | 2004-08-20 | 2007-08-21 | Sun Microsystems, Inc. | Method and apparatus for I/O scheduling |
CN102047305A (zh) * | 2008-05-30 | 2011-05-04 | 美国索尼电脑娱乐有限责任公司 | 文件输入/输出调度器 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5220653A (en) * | 1990-10-26 | 1993-06-15 | International Business Machines Corporation | Scheduling input/output operations in multitasking systems |
JPH08212090A (ja) * | 1995-02-03 | 1996-08-20 | Fujitsu Ltd | サーバシステム |
US6434569B1 (en) * | 1996-06-06 | 2002-08-13 | Kabushiki Kaisha Toshiba | Integrated medical information system formed of text-based and image-based databases, and display thereof |
US6157963A (en) * | 1998-03-24 | 2000-12-05 | Lsi Logic Corp. | System controller with plurality of memory queues for prioritized scheduling of I/O requests from priority assigned clients |
EP0978787A1 (en) * | 1998-08-04 | 2000-02-09 | Texas Instruments France | Improvements in or relating to transferring data between asynchronous device |
JP3975684B2 (ja) | 2000-03-29 | 2007-09-12 | 富士通株式会社 | ディスク入出力スケジュール装置および方法 |
US6671772B1 (en) * | 2000-09-20 | 2003-12-30 | Robert E. Cousins | Hierarchical file system structure for enhancing disk transfer efficiency |
US6587806B2 (en) * | 2000-12-29 | 2003-07-01 | Pitney Bowes Inc. | Method and system for determining time to sort mailpieces |
US6978355B2 (en) * | 2001-11-13 | 2005-12-20 | Seagate Technology Llc | Cache memory transfer during a requested data retrieval operation |
US7003644B2 (en) * | 2002-03-28 | 2006-02-21 | Seagate Technology Llc | Execution time dependent command schedule optimization |
US6965965B2 (en) * | 2002-06-06 | 2005-11-15 | International Business Machines Corporation | Dynamic response shaping for command aging |
US7590522B2 (en) * | 2004-06-14 | 2009-09-15 | Hewlett-Packard Development Company, L.P. | Virtual mass storage device for server management information |
JP4456490B2 (ja) * | 2005-01-14 | 2010-04-28 | 富士通株式会社 | Dma装置 |
JP5133540B2 (ja) | 2006-09-05 | 2013-01-30 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、データ転送方法及びプログラム |
US7991948B2 (en) * | 2008-01-30 | 2011-08-02 | International Business Machines Corporation | Optimizing execution of I/O requests for a disk drive in a computing system |
-
2008
- 2008-05-30 US US12/130,892 patent/US8504736B2/en active Active
-
2009
- 2009-05-08 WO PCT/US2009/043387 patent/WO2009148764A1/en active Application Filing
- 2009-05-08 KR KR1020107029818A patent/KR101238163B1/ko active IP Right Grant
- 2009-05-08 JP JP2011511688A patent/JP5385977B2/ja active Active
- 2009-05-08 EP EP09758927.9A patent/EP2301002A4/en not_active Ceased
- 2009-05-08 CN CN200980119736.8A patent/CN102047305B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1617100A (zh) * | 2003-08-20 | 2005-05-18 | 微软公司 | 确定连续介质优先级的存储调度程序 |
US7260703B1 (en) * | 2004-08-20 | 2007-08-21 | Sun Microsystems, Inc. | Method and apparatus for I/O scheduling |
CN102047305A (zh) * | 2008-05-30 | 2011-05-04 | 美国索尼电脑娱乐有限责任公司 | 文件输入/输出调度器 |
Non-Patent Citations (2)
Title |
---|
Pascal Gwosdek.Realtime Optical Flow Algorithms on the Cell Processor.《》.2008, |
Realtime Optical Flow Algorithms on the Cell Processor;Pascal Gwosdek;《》;20080414;全文 * |
Also Published As
Publication number | Publication date |
---|---|
KR101238163B1 (ko) | 2013-03-11 |
CN102047305A (zh) | 2011-05-04 |
EP2301002A4 (en) | 2016-05-25 |
WO2009148764A1 (en) | 2009-12-10 |
KR20110019763A (ko) | 2011-02-28 |
JP2011525010A (ja) | 2011-09-08 |
US8504736B2 (en) | 2013-08-06 |
EP2301002A1 (en) | 2011-03-30 |
US20090300642A1 (en) | 2009-12-03 |
JP5385977B2 (ja) | 2014-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102047305B (zh) | 文件输入/输出调度器及其处理方法 | |
CN103123595B (zh) | 使用即时数据分块的文件输入/输出调度 | |
CN105474186B (zh) | 硬件管理的压缩的高速缓存 | |
CN103312761B (zh) | 用于优化可下载内容传输的系统和方法 | |
US9128966B2 (en) | Determining a storage location based on frequency of use | |
EP2397946A1 (en) | Storage system using a rapid storage device as a cache | |
CN102904878B (zh) | 用于数据包的高效下载的方法及系统 | |
CN102713824A (zh) | 基于未来使用估计的分配存储器 | |
CN102708064A (zh) | 从休眠中多阶段恢复 | |
CN105247478B (zh) | 用于存储命令的方法及相关装置 | |
CN102646152B (zh) | 一种游戏地图切换方法及系统 | |
US8732355B1 (en) | Dynamic data prefetching | |
CN110109868A (zh) | 用于索引文件的方法、装置和计算机程序产品 | |
CN110209341B (zh) | 一种数据写入方法、装置和存储设备 | |
KR20220153592A (ko) | 비디오 게임의 인스턴트 플레이를 위한, 그리고 클라이언트 측 게임 데이터의 폐기와 프리페치를 위한 파일 시스템 판독 작동 추적 | |
WO2021137768A1 (en) | Method, apparatus and device for consuming messages based on message queue | |
JP5459388B2 (ja) | ストレージ装置 | |
JP2014139763A (ja) | 情報処理装置、情報処理方法、プログラム | |
US20170161056A1 (en) | Methods for Managing the Writing of Datasets by Computer-Implemented Processes | |
KR20220091346A (ko) | 컨테이너 이미지의 로딩을 위한 방법들 및 장치들 | |
CN105830027A (zh) | 用于为网络处理器中的处理器核心预取并处理作业的方法和装置 | |
US20100325116A1 (en) | Data library optimization | |
TW201445444A (zh) | 下載程式的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |