JP5385977B2 - ファイル入出力スケジューラ - Google Patents

ファイル入出力スケジューラ Download PDF

Info

Publication number
JP5385977B2
JP5385977B2 JP2011511688A JP2011511688A JP5385977B2 JP 5385977 B2 JP5385977 B2 JP 5385977B2 JP 2011511688 A JP2011511688 A JP 2011511688A JP 2011511688 A JP2011511688 A JP 2011511688A JP 5385977 B2 JP5385977 B2 JP 5385977B2
Authority
JP
Japan
Prior art keywords
input
request
data
media device
memory
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
Application number
JP2011511688A
Other languages
English (en)
Other versions
JP2011525010A (ja
Inventor
ターラー、アンドリュー、アール.
ラーナー、エドワード、アダム
ミカル、ロバート、ジェイ.
Original Assignee
ソニー コンピュータ エンタテインメント アメリカ リミテッド ライアビリテイ カンパニー
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ソニー コンピュータ エンタテインメント アメリカ リミテッド ライアビリテイ カンパニー filed Critical ソニー コンピュータ エンタテインメント アメリカ リミテッド ライアビリテイ カンパニー
Publication of JP2011525010A publication Critical patent/JP2011525010A/ja
Application granted granted Critical
Publication of JP5385977B2 publication Critical patent/JP5385977B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0674Disk device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Description

[優先権主張]
本出願は、2008年5月30日に出願された、同一譲受人による米国特許出願第12/130,892号の優先権の利益を主張し、開示内容全体を参照により組み入れる。
[技術分野]
本発明の実施の形態はコンピュータゲームおよび関連するアプリケーションに関し、特に、コンピュータゲームおよび関連するアプリケーションにおけるファイル入出力(I/O)管理に関する。
ビデオゲームのような多くのソフトウェアアプリケーションは、アプリケーション内のメディアアクセスをより効率よくかつ信頼あるものとするためのファイル入力/出力(入出力;I/O)スケジューラを含む。ファイル入出力システム(file I/O system: FIOS)は、いくつかのパーツからなるファイルにアクセスするための、スケジューラおよび任意の入出力フィルタレイヤを含むミドルウェアレイアである。スケジューラは、典型的には任意の期限および優先度制約による条件の下、可能な限り最短時間で完了するように入出力リクエストを最適に並べ替えるように設計されている。
多くの異なるゲームコンポーネントは、ストレージメディア内のファイルへの入出力アクセスを要求する。オーディオコンポーネントはオーディオファイルを読み込み、ゲームプレイのエンジンはレベルの定義を読み込み、グラフィックコンポーネントはテクスチャマップおよびモデルを読み込み、動画コンポーネントは音声映像ファイルを読み込み、サブシステムは巨大なWADファイルを読み込む。メディアは、UMD(universal media disc)、CD(compact disc)、DVD(digital video disc)、Blu−ray(登録商標)ディスク等のような光学ディスク、ハードディスクのような中間ストレージメディア、あるいは発達するプラットフォームの等の他のメディアタイプのような、ゲーム配信メディアであってもよい。
ビデオゲームのような単一のアプリケーションは、典型的には多数のコンポーネントを持っており、各コンポーネントは独自の入出力要求を持っている。あるものはメデイアへのストリーミングアクセスを要求する。ここで入出力システムは、コンポーネントがゲームプレイヤにストリーム化されたデータを連続的に提示できるようにファイル内のデータをストリーム化する。例えば、音声コンポーネントは典型的にはサウンドトラックの再生のためにオーディオファイルをストリーミングする。動画コンポーネントはプレイヤに動画を再生するために音声映像コンテンツをストリーミングする。他のコンポーネントは、そのコンポーネントが処理するためのデータをファイルからチャンクという形で取ってくる非ストリーミングアクセスのみを必要とする。これらのコンポーネントは安定したデータフローを要求しないが、チャンクの配信のタイミングはしばしば極めて重要となる。もしアプリケーションがデータが必要なときにそれを受け取れないと、パフォーマンスを下げるかも知れない。
ビデオゲームはしばしばかなりの量の入出力を行う。ゲームのイベントはしばしば必ず間に合わなければならない期限を持つタイムドリブン型のものである。例えば、もしプレイヤがA地点からB地点まで移動すると、ゲームはプレイヤがB地点に到達する前にB地点に関連するデータ用のファイルを持っておく必要がある。ゲームコンポーネントは低水準の入出力基本命令(primitives)を使ってメディアからデータを読み出すことができるが、これらの基本命令は多数のコンポーネントが同じデバイスからのデータを同時に要求するときにデバイス接続を扱うことはしない。混雑した入出力リクエストはストリーミングデータフローを中断したり、必要なときにコンポーネントがデータのチャンクを取得することを妨げたりする可能性がある。989SoundのStreamsafeのような高レベルシステムは少なくともファイルに対して信頼できるストリームアクセスを供給するため、ストリーム化されたデータは中断されることはない。残念ながら、そのようなシステムは一つだけデータストリームを割り当てるので、非ストリームデータに対する競合をうまく扱えない。SCEAは普通のデータアクセスに対する競合を解消する標準的なレイヤを提供しない。
アプリケーションのコンポーネントは、典型的にはお互いの入出力活動を関知していないので、それらの入出力リクエストはかなりの量の過度な探索(データを探すために行きつ戻りつすること)を含む、とても非効率な入出力パターンにしばしば陥る。ゲームが大きくなると、過度な探索および非効率なデータ取得が増加する。CDのような配布メディアに対するディスクのマスター化では、頻繁にアクセスされるデータブロックを重複させたり、ディスク全体にデータブロックを分散させることで、ストレージデバイスの読み取りヘッドがどこにあってもコピーがいつも近くにあるようにする技術を通してこの非効率性をある程度避けることができる。ファイルシステムは、データが物理的にディスクにある場所を明らかにするとは限らないので、I/Oシステムはそのデータを最大限活用することができるとは限らない。
本発明の実施の形態はこのような文脈の中で生じた。
本発明の実施の形態によれば、プロセッサユニット、メモリ、およびメディアデバイスをもつシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法が実装される。メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取る。前記入力I/Oリクエストを完了するための予測時間Tを計算する。前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入する。前記入力I/Oリクエストのスケジュール内の位置は予測時間Tに少なくとも部分的に依存する。前記スケジュールにしたがって前記入力I/Oリクエストをサービスする。
ある実施の形態では、プロセッサ実行可能な命令セットがメモリに具体化される。前記命令は実行されたときに、上述の方法を実行するように構成されてもよい。プロセッサ実行可能な命令セットは1以上のメディアフィルタレイヤを含む。メディアフィルタレイヤは、デアーカイバレイヤ、RAMキャッシュレイヤ、スケジューラキャッシュ(たとえば、ハードディスクドライブ(HDD)キャッシュ)レイヤ、オーバレイレイヤ、カタログキャッシュレイヤ、データ変換レイヤ、またはシミュレートされたデータレイヤを含んでもよい。
ある実施の形態では、メディアデバイスのパラメータと入力I/Oリクエストから決定される係数を用いた性能特性式(performance characteristic equation;PCE)にしたがって予測時間Tを決定してもよい。一例として、一般性を失うことなく、前記パラメータは、リクエストオーバーヘッドx、ヘッド運動レートy、およびスループットzを含んでもよい。そのような例において、前記係数は、オーバーヘッド係数A、ヘッド移動距離B、および転送データ量Cを含んでもよい。前記性能特性式は、T=Ax+By+Czの形であってもよい。
ある実施の形態では、I/Oリクエストに対するPCE係数はI/Oリクエストと初期メディア状態にもとづいて決定されてもよい。初期メディア状態は、性能に影響するデバイスの状態に関する情報を含む。一例として、一般性を失うことなく、その情報には、デバイスのレディ状態とアクセスされる最後の論理ブロックアドレス(LBA)が含まれる。ある実施の形態では、I/Oリクエストと初期メディア状態からのPCE係数の計算は、更新されたメディア状態を返し、これは別のPCE計算に対する初期メディア状態として用いることができる。
ある実施の形態では、PCE係数は、所与のI/Oリクエストに対する予測時間Tを計算するために、PCEにおける未知の値と結合されてもよい。その後、I/Oリクエストの順序付けされたリストに対する合計時間Tは、リスト内の各I/Oリクエストに対してPCEとメディア状態を反復し、その結果得られる時間Tを加算することにより計算されてもよい。この処理は、I/Oリクエストの順序付けされたリストのある順列またはすべての順列に対して繰り返されてもよい。リストの好ましい順序付けは、各順序づけに対して計算された時間Tと場合によっては他の基準とにもとづいて、複数の順列の中から選択されてもよい。ある実施の形態では、好ましい順序付けは、最小時間Tを与える順列であってもよい。順序付けに影響する付加的な基準は、これに限定しないが、I/Oリクエスト優先度、ストリームバッファ状態、およびレーテンシ要件であってもよい。
ある実施の形態では、I/Oリクエストに対してかかった現実の時間Tを測定し、前記現実の時間Tを前記係数とともに用いて、未知パラメータの値に対してPCEを反復して解いてもよい。これにより、モデルが現実のドライブ性能で絶えず更新される。
ある実施の形態では、I/Oリクエストを実行するステップは、圧縮されたネストしたアーカイブから特定のデータを抽出するステップを含んでもよい。
ある実施の形態では、前記プロセッサユニットは、メインプロセッサと、関連づけられたローカルメモリをもつ補助プロセッサとを含んでもよい。そのような実施の形態では、I/Oリクエストを実行するステップは、メディアデバイスからローカルメモリにデータを転送するステップと、補助プロセッサを用いてローカルメモリのデータを変換するステップとを含んでもよい。
ある実施の形態では、前記システムはさらにグラフィックスプロセッサと関連づけられたグラフィックスメモリとを含んでもよい。そのような実施の形態では、I/Oリクエストを実行するステップは、メディアデバイスからグラフィックスメモリにデータを読み込むステップと、グラフィックスメモリからローカルメモリにデータを転送するステップと、補助プロセッサを用いてデータ上でデータ変換を実行して、変換されたデータを生成するステップと、変換されたデータをグラフィックスメモリに返送するステップとを含んでもよい。
ある実施の形態では、I/Oリクエストを実行するステップは、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられてもよい。前記プライマリデータユニットのソースと前記セカンダリデータソースは同じメディア上にあっても、異なるメディア上にあってもよい。前記セカンダリデータソースは仮想的なデータソースであってもよい。セカンダリデータユニットはコールバックによって指定されてもよい。
ある実施の形態では、前記システムは高速ストレージデバイスをさらに含んでもよい。そのような実施の形態では、I/Oリクエストを実行するステップは、メディアデバイスから高速ストレージデバイスへ1以上のデータユニットをプリフェッチするステップと、それに続いて高速ストレージデバイスからそのデータユニットを転送するステップとを含んでもよい。一例として、高速ストレージデバイスはハードディスクドライブであり、メディアデバイスはブルーレイ(登録商標)ディスクドライブのような大容量光ディスクドライブであってもよい。I/Oがアイドルであるとき、ある時間間隔の間、1以上のデータユニットをプリフェッチしてもよい。ある実施の形態では、プリフェッチするステップは、メディアデバイスから1以上のデータユニットの第1グループをプリフェッチするステップと、メディアデバイスがアイドルかどうかを調べるステップと、もしI/Oがアイドルなら、メディアデバイスから1以上のデータユニットの第2グループをプリフェッチし、もしI/Oがアイドルでないなら、前記第2グループのプリフェッチを遅延させるステップとを含んでもよい。
ある実施の形態では、予測時間Tを計算するステップは、前記システムに関連づけられたメディアデバイスよりも低速のメディアのオペレーションをエミュレートするために前記パラメータを調整するステップを含んでもよい。
本発明の実施の形態によれば、メインプロセッサと、関連づけられたローカルメモリをもつ補助プロセッサと、メインメモリと、メディアデバイスとを含むシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法が実装される。この方法は、a)メディアデバイスに対してデータを転送するために、メインプロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、b)前記入力I/Oリクエストをメインメモリ内に具体化されたスケジュールに挿入するステップと、c)スケジュールと1以上のフィルタにしたがって前記入力I/Oリクエストをサービスするステップとを含み、1以上のフィルタの少なくとも1つは補助プロセッサによって実行される。
本発明の実施の形態は、添付の図面と併せて、以下の詳細な説明を考慮することによって容易に理解される。
本発明の実施の形態に係るファイル入出力システム(FIOS)を実装するシステムを示すブロック図である。 本発明の別の実施の形態に係るFIOSを実装する別のシステムを示すブロック図である。 本発明の実施の形態に係るファイル入出力システム(FIOS)ソフトウェアのブロック図である。 本発明の実施の形態に係るFIOSのオペレーションの流れを例示するデータフロー図である。 本発明の実施の形態に係るFIOSで使用されるソフトウェアスケジューラの例を示すフロー図である。 本発明の実施の形態に係るFIOSにおけるプリフェッチの例を説明する模式図である。 本発明の実施の形態に係る関連づけられたローカルメモリをもつ補助プロセッサを用いたI/Oバッファリングの例を説明するフロー図である。 本発明の実施の形態に係る関連づけられたローカルメモリをもつ補助プロセッサを用いたI/Oバッファリングとデータ変換の例を説明するフロー図である。 本発明の実施の形態とともに用いられるネストしたアーカイブに対するデータ構造を説明するブロック図である。 本発明の実施の形態に係るデアーカイバを説明するフロー図である。
以下の詳細な説明には、説明のための多くの具体的な詳細事項が含まれるが、それらに対する多くの変更や修正も本発明の技術範囲に含まれることは、当業者であれば誰でも理解するであろう。したがって、以下に説明する本発明の例示的な実施の形態は、クレームされた発明の一般性をなんら損なうことなく、また限定も行うことなく記載されている。
本発明の実施の形態は、システム用の全ての入出力が通過する集中型のレイヤを提供するファイル入出力システム(file I/O system: FIOS)によって実装されうる。ファイル入出力システムは、ここの入出力リクエストの最適な処理のための木構造を作成する命令と、入出力リクエストをスケジュールし、入出力リクエストが最も効率的にサービスを提供する順序を決定する命令とを含む。
例として、図1に示すように、コンピュータで実装されたシステム100が本発明の実施の形態に係るファイル入出力システム(file I/O system: FIOS)を実装するように構成されてもよい。例として、一般性を失うことなく、システム100は本発明の実施の形態の実行に適したパーソナルコンピュータ、ビデオゲームのコンソール、PDA(personal digital assistant)、または他のデジタルデバイスとして実装されてもよい。システム100はCPU105と、処理ユニット105に接続するメインメモリ106とを含んでもよい。CPU105はソフトウェアアプリケーションおよび、オプションとしてオペレーティングシステムを実行するように構成されている。セルプロセッサアーキテクチャの例は、「セルブロードバンドエンジンアーキテクチャ」に詳細が記述されている。これは、IBM、ソニー・コンピュータエンタテインメント、東芝の2005年8月8日付けの著作権で保護されており、コピーはhttp://cell.scei.co.jp/からダウンロード可能であり、その内容全体を参照によってここに組み入れる。
メインメモリ106は、CPU105に使用されるアプリケーションおよびデータを格納する。メインメモリ106は、例えばRAM、DRAM、ROMやそれと同様の集積回路の形態であってもよい。コンピュータプログラム101は、CPU105上で実行可能な命令の形態でメインメモリ106内に格納される。プログラム101の命令は他のもの、すなわち以下に記載する特徴を持ったファイル入出力システム(file input/output system: FIOS)で実装するよう構成されてもよい。メモリ106は、例えばスタックまたはキューの形態で、ファイル入出力プログラム101に使用される受信、スケジュール、発行、完了、および解放の入出力リクエストである入出力キュー101Qを含む。それらのキューの例もまた以下に記載される。
例として、FIOSプログラム101は、a)メディアデバイス118に関わる入力される(incoming)入出力(I/O)リクエストをアプリケーション103から受信し、b)その入出力リクエストを完了する予測時間Tを計算し、c)少なくとも部分的に予測時間Tにもとづいてメモリ106内のスケジュールのある位置にその入力された入出力リクエストを挿入し、d)そのスケジュールにしたがって入出力リクエストを実行する命令を含む。
FIOSプログラム101は、インタラクティブな環境を実装するように構成された命令とともに機能する。一例として、そのような命令は、ビデオゲームプログラムのような、メインプログラム103のサブルーチンまたは呼び出し可能な関数である。あるいは、メインプログラム103は、仮想世界とインタフェースをもつためのプログラムである。メインプログラム103は、ビデオディスプレイ上でカメラPOV(視点)からシミュレートされた環境の一部のシーンを表示し、シミュレートされた環境とのユーザの相互作用の間、カメラ経路に沿ってカメラPOVの動きに応じてカメラPOVが変化するにつれてシーンを変化させるように構成される。メインプログラムは、物理シミュレーション104とカメラ管理107に対する命令を含む。メインプログラム103は、FIOSプログラム101、物理シミュレーション命令104、カメラ管理命令107、および広告インプレッション報告命令109をたとえば関数またはサブルーチンとして呼び出してもよい。
クライアントシステム100はさらに、入出力(I/O)装置111、電源(P/S)112、クロック(CLK)113およびキャッシュ114などの公知のサポート機能510を備えてもよい。クライアントシステム100は、アプリケーションとデータ用の不揮発性のストレージを提供するハードディスクのような高速ストレージ115をさらに備えてもよい。高速ストレージ115は、他のものの間で、より遅いメディアデバイス118から読み出されたファイル116の一時的または長期間のストレージに使用されてもよい。さらに、高速ストレージ115上のファイル116は、より遅いメディアデバイス116以外の他のソースから来てもよい。限定されるものではないが、例えば、ファイル116はオペレーティングシステムのファイル、アプリケーションによって作成されたテンポラリファイル、写真、音声、映像のようなユーザのデータ、ダウンロードされたコンテンツ、その他を含んでもよい。例として、高速ストレージ115は固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリデバイス、あるいはテープドライブであってもよい。より遅いメディアデバイス118は、例えばCD−ROMドライブ、DVD−ROMドライブ、HD−DVD(high-definition digital versatile disc)ドライブ、Blu−Ray(登録商標)ドライブ、UMDドライブ、または他の光学ストレージデバイス等の大容量光学ディスクドライブであってもよい。メディアデバイス118からのプリフェッチファイル116は、メインメモリ106に素早く読み出されるために、高速ストレージ115のハードウェアキャッシュに一時的に格納されてもよい。
1またはそれ以上の入力デバイス120は、1またはそれ以上のユーザからのユーザ入力をシステム100に伝えるために使われてもよい。例として、1またはそれ以上のユーザ入力デバイス120は入出力エレメント111を経由してクライアントデバイス100と接続されていてもよい。適切な入力デバイス120の例は、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、光学ペン、静止または動画カメラ、および/またはマイクロフォンを含む。クライアントデバイス100は電子通信ネットワーク127を介してコミュニケーションを促進するためのネットワークインタフェース125を含んでもよい。ネットワークインタフェース125はローカルエリアネットワークおよびインターネットのようなワイドエリアネットワーク上の有線または無線通信を実装するように構成されていてもよい。システム100は、データを送信および受信し、および/またはネットワーク127を介して1またはそれ以上のメッセージパケット126を通じたファイルをリクエストしてもよい。
システム100は、グラフィックプロセッシングユニット(GPU)135とグラフィックスメモリ140とを有するグラフィックス・サブシステム130を更に含む。グラフィックスメモリ140は、出力イメージの各画素に対する画素データを格納するために使われるディスプレイメモリ(例えばフレーム・バッファ)を含む。グラフィックスメモリ140は、GPU135と同じデバイス内に統合されてもよく、別のデバイスとしてGPU135に結合されてもよく、メモリ106内に実装されてもよい。画素データは、CPU105から直接グラフィックスメモリ140に提供される。あるいは、CPU105は、所望の出力イメージを定めるデータやインストラクションをGPU135に提供する。GPU135はそれを用いて1またはそれ以上の出力イメージの画素データを生成する。所望出力イメージを定めるデータやインストラクションは、メモリ106やグラフィックスメモリ140に格納される。ある実施の形態では、GPU135は、例えば、適当なプログラミングまたはハードウェア・コンフィギュレーションによって構成され、シーンのためにジオメトリ、ライティング(照明)、シェーディング、テクスチャリング、モーション、および/またはカメラパラメータを定めるインストラクションとデータから出力イメージに対する画素データを生成するための3Dレンダリング機能をもつ。GPU135は、シェーダプログラムを実行することができるプログラム可能な実行ユニットを更に含む。
グラフィックス・サブシステム130は、表示装置150で表示されるべきグラフィックスメモリ140からのイメージに対する画素データを周期的に出力する。表示装置150は、システム100からの信号に応じてビジュアル情報を表示することができる任意のデバイスであり、CRT、LCD、プラズマ、およびOLEDディスプレイを含む。コンピュータシステム100は、表示装置150にアナログまたはデジタル信号を提供する。一例として、表示装置150は、テキスト、数字、グラフィカルシンボル、または画像を表示するCRTまたはフラットパネルスクリーンを含む。さらに、ディスプレイ150は、可聴もしくは検知可能な音を出すオーディオスピーカーを含んでもよい。そのような音の生成を容易にするために、クライアントデバイス100は、CPU105、メモリ106、および/またはストレージ115によって提供されたインストラクションおよび/またはデータからアナログまたはデジタル音声出力を生成するために適したオーディオプロセッサ155を更に含む。
CPU105、メモリ106、支援機能110、データストレージデバイス115、ユーザ入力デバイス120、ネットワークインタフェース125、およびオーディオプロセッサ155を含むシステム100の構成要素は、データバス160を介して互いに機能的に接続されている。これらの構成要素は、ハードウェア、ソフトウェアまたはファームウェア、あるいはこれらのうちの2つ以上の組合せで実装される。
本発明のある実施の形態は、セルプロセッサアーキテクチャやそれと類似するプロセッサアーキテクチャをうまく利用する。図2は、本発明の別の実施の形態に係るファイル入出力システムを実装するセルプロセッサ200を示す。セルプロセッサ200は、メインメモリ202、ひとつのパワープロセッサ要素(power processor element:PPE)204、および8つのシナジスティックプロセッサ要素(synergistic processor element:SPE)206を備える。図4の例では、セルプロセッサ400は、1個のPPE404と8個のSPE406とを備える。このような構成では、7個のSPE406が並列処理に用いられ、1個は他の7個の一つが故障したときのバックアップとして確保されている。例示として、PPE204は、関連するキャッシュを持った64ビットのパワーPCプロセッサユニット(PPU)であってもよい。PPE204は、システム管理リソース(例えば、メモリ保護テーブルなど)にアクセス可能な汎用処理装置である。ハードウェアリソースは、PPEに見られるように実アドレス空間に明示的にマップされてもよい。したがって、PPEは適当な実効アドレス値を用いて、直接これらのリソースのいずれにでもアドレス指定できる。PPE204の主な機能は、セルプロセッサ200のSPE206に対するタスク管理とタスク割り当てである。ハードウェアリソースは、PPE204に見られるように実アドレス空間に明示的にマップされてもよい。したがって、PPE204は適当な実効アドレス値を用いて、直接これらのリソースのいずれにでもアドレス指定できる。PPE204の主な機能は、異なるSPE206に対するタスク管理とタスク割り当てである。PPUはFIOSプログラム205のコード化された命令を実行する。
なんらシステム管理機能を果たさないSPU206は、PPE204よりは簡単な構造のコンピュータ装置である。SPE206のそれぞれは、ときにシナジスティックプロセッサユニット(synergistic processor unit:SPU)として参照されるプロセッサユニットと、関連するローカル記憶領域LS(local store)とを含む。SPU206は、一般にSIMD(single instruction, multiple data)機能を有し、通常はデータ処理を行い、割り当てられたタスクを行うために(PPE204により設定されたアクセス特性にしたがって)要求されたデータ転送を開始する。SPE206はファイル入出力プログラム101の一部を実装するローカルストア命令207を自身のローカルストア内に格納する。SPU206の目的は、より高いコンピュータ装置密度を要求するアプリケーションを可能として、提供された命令セットを有効に利用できるようにすることである。本例では8個のSPEが示されているが、セルプロセッサ200は任意の数のSPEを用いて設定される。図2を参照すると、メモリ202、PPE204、およびSPE206は、リングタイプの要素相互接続バス210を介して、お互いにおよび入出力デバイス208と通信可能である。メモリ202は、メモリインタフェースコントローラ(memory interface controller:MIC)を介してPPE204およびSPE206からアクセスされる。
メモリ202は、以下に記載するような受信(incoming)、スケジュール、発行、完了、解放、およびプリフェッチキュー等の入出力キュー203を含む。メモリ202は、本明細書に記載されているFIOSプログラム101と同様の特徴を持っているFIOSプログラム209の部分も含む。SPE206の少なくとも1つは、以下に述べるデータ圧縮解凍を実装するように構成されたコード207をローカルストア内に有する。PPE204は内部キャッシュ(L1)および外部キャッシュ(L2)を含んでもよい。PPEはこの内部キャッシュ(L1)にFIOSプログラム205の部分を格納する。FIOSプログラム205とSPEに実装されたファイル転送命令207、またはその一部とはまた、必要なときにSPE206とPPE204によってアクセスされるためにメモリ202に格納されてもよい。
例として、FIOSプログラム101/205は、ストレージデバイス115のようなハードウェアとのインタフェースを容易にするためにメディアスタックを含んでもよい。メディアスタックは図3に示すように実装される。具体的には、メディアスタック300は、スケジューラ302、1またはそれ以上のメディアフィルタレイヤ304、デバイスメディアレイヤ306、プロセッサファイルシステム(FS)読み込みレイヤ308、およびハードウェアレイヤ310を含んでもよい。デバイスメディアレイヤ306(ときどきメディアアクセスレイヤと呼ばれる)は、メディアフィルタレイヤ304から受け取ったメディアリクエストに応答し、要求されたデータを受け取り、そのリプライをスタックに返すように構成される。
メディアフィルタレイヤ304は、デアーカイバレイヤ301、RAMキャッシュレイヤ303、スケジューラキャッシュレイヤ305、オーバレイレイヤ307、カタログキャッシュレイヤ309、1以上のデータ変換レイヤ311、シミュレートされたデータレイヤ313、および速度エミュレーションレイヤ315を含む。
デアーカイバ301は、圧縮されたアーカイバから特定のアセットファイルを抽出することを手助けするのに用いられてもよい。RAMキャッシュレイヤ303は、例えばメインメモリ106、202内にデータをキャッシュすることを実装するために用いられてもよい。スケジューラキャッシュ305は、光学ディスクのようなより遅いソースからのデータを一時的に格納するための、単純なディスクからディスクへの(disc-to-disc)キャッシュであってもよい。本明細書で用いられているように、「スケジューラキャッシュ」という用語は、メディアデバイス118へのアクセスよりも速いアクセスであるストレージメディア内への一時的なデータの格納をいう。スケジューラキャッシュ305内の全てのデータがプリフェッチされる必要はなく、いくらかは要求に応じて読み出されてキャッシュ内にコピーされてもよい。
限定されるわけではないが、例として、スケジューラキャッシュレイヤ305は、そのような一時的な格納場所を生み出すために高速ストレージメディア115を利用する。高速ストレージメディアがハードディスクドライブ(hard disk drive: HDD)である特別なケースでは、スケジューラキャッシュ305はときにハードディスクドライブキャッシュと呼ばれる。
スケジューラキャッシュ305は、単一のファイルまたは多数のファイルとして保持されてもよい。加えて、スケジューラキャッシュ305のコンテンツは、欠ける部分のない全体のファイルである必要はない。多数のファイルのキャッシュは、多くのデータを犠牲にすることなく必要なときにインテリジェントにディスクスペースを空けるために、いくつかの個々のファイルを消去することによって部分的に消去されてもよい。対称的に、単一ファイルのキャッシュは、典型的には切り捨てられるかあるいは完全に消去される。複数ファイルのキャッシュは典型的には追加の帳簿作業(bookkeeping work)を要求するため、単一ファイルのキャッシュは複数ファイルのキャッシュよりも高いパフォーマンスを提供する。帳簿作業は追加の入出力を要求し、ホストファイルシステム自体の内部で行われる。
オーバーレイレイヤ307は、以下で述べられるように、ファイルシステムレベルにおいてファイルおよびディレクトリの任意のオーバーレイを可能にするために用いられてもよい。カタログキャッシュレイヤ309は、プロセッサユニットまたはセルプロセッサのためのオペレーティングシステムが適切にキャッシュしないであろうデータ(例えばファイルの存在やサイズ、格納場所等)をキャッシュするために用いられてもよい。データ変換レイヤ311は、メディアデバイス118から読み出したり、メディアデバイス118に書き込まれるデータに暗号、暗号解読、圧縮または圧縮伸張のようなデータ変換を実行する。シミュレートされたデータレイヤ313は、たとえば、そのようなシミュレートされたデータを要求するI/Oリクエストに対してゼロまたは乱数を生成するために使われる。速度エミュレーションレイヤ315は、たとえばソフトウェアの開発過程で、以下で説明するように、メディアデバイスの異なる速度をシミュレートするために用いられる。
スケジューラ302のオペレーションは、以下に述べられる図4を参照することで理解されよう。クライアントアプリケーションの観点から、入出力リクエスト403は比較的直接的な方法で実行される。例えば、ビデオゲームのようなアプリケーション401内のスレッド402は、関数(例えば、readFile())を呼び出すことによってFIOS101/205を通して入出力をリクエストしてもよい。この関数は、FIOSリクエスト403およびリクエストが完了されるべき期限を特定してもよい。この関数は、バッファ405へのポインタを提供してもよい。そのような実装は、I/Oリクエスト403に対するI/Oオペレーションの構造体を自動的に割り当て、新しく割り当てられたオペレーションを受信(incoming)キュー404に移動させる。例として、受信キューはFIFO(first-in-first-out)キューであり、キュー404内に最初に置かれたオペレーションが、スケジューラ302によって最初にスケジューリングされるオペレーションである。受信キュー404内へのリクエスト403の挿入は、非同期の入出力を要求するときにスレッドがブロックされることを防ぐために、アトミックな操作(atomic operation)によって実装されてもよい。ある実施の形態では、受信キュー404は、アトミックな交換(atomic exchange)とともに補助プロセッサ105Bにしたがうアトミックなスタック(atomic stack)の形態であってもよい。
限定されないが、例として、入出力リクエスト403が読み込み命令の場合、クライアントアプリケーション401はメディアデバイスから読み込んだデータを受信するためのバッファ405を提供してもよい。入出力リクエストが完了したとき、クライアントアプリケーションは提供したバッファから読み出されたデータを読み込んでもよい。クライアントが入出力リクエスト403の処理を終了したとき、クライアントは、将来の入出力での使用においてリソースが利用可能となるように、オペレーションの構造体の割り当てを解除(de-allocate)してもよい。
入出力リクエスト403は、スケジューラ303がまだ起動していない場合、スケジューラ303を起動してもよい。その後、アプリケーション401は入出力リクエスト403が完了するまで待機してもよい。例えば、クライアントアプリケーション401は、アトミックなメソッド(atomic method、例えばisDone())を用いて周期的にポーリングしてもよい。もう一つの方法としては、クライアントは、入出力リクエスト403が完了したときにファイル入出力プログラム101が呼び出すコールバック関数411を待ってもよい。
受信キュー404内に入出力リクエスト403が挿入された後に、FIOSプログラム101/205はスケジュール挿入407を実行するためにスケジューラ302を呼び出してもよい。スケジューラによって実装された演算の順序は図5を参照することで理解されるであろう。502で示すように、スケジューラ302は、扱うべき入出力がない場合、スリープ(例えば、依然として起動していない)状態であってもよい。新しい入出力リクエスト403が受信キュー404に入ると、スケジューラはスリープを解除してそれを扱う。ひとたびスケジューラがスリープを解除(あるいは既に解除)すると、受信キュー内の新しいオペレーションに気づいて、そのリクエストをスケジューリングキュー406内の適切な場所に移動する。
503に示すように、入出力リクエスト403のキューの位置を決定するために、スケジューラ302はオプションとして、例えばデバイスメディアレイヤ306やFIOSスタック300内の他のレイヤに問い合わせることにより、メディアデバイスの現在の状態を決定してもよい。状態データは、FIOSスタック300によって扱われるメディアデバイスのタイプおよびスタック内にある様々なレイヤに依存して変わりうる。例としては、もっとも最近にアクセスされた論理ブロックアドレス(logical block address: LBA)、RAMキャッシュの最後にアクセスされたパスおよびオフセット、現在のディスクレイヤ、先頭の位置、ストリーミングのモード、およびストリーミングではないモード(non-streaming mode)が含まれる。
本発明の実施の形態によれば、スケジューラ302はメディアデバイスのパフォーマンスモデル302Aに基づいてもよい。現存の入出力スケジューラとは異なり、ドライブモデル(drive model)は、リクエスト403の最適なスケジュールを決定する際にメディアデバイス118のパフォーマンスに関するデータを考慮に入れる。ドライブモデルを用いて入出力リクエストをスケジューリングすることは、CDを生成する際のマスタ化処理の逆と比較されてもよい。パフォーマンスモデル302Aは、オーバーヘッド、ディスクの移動時間、読み込み時間、およびそれと同様のもののような要素を考慮するように構成されていてもよい。パフォーマンスモデル302Aは、スループット、レーザの細かな揺れ(wiggles)、読み取りヘッドの動き、レーザの変更、およびリクエストのオーバーヘッドのようなメディアデバイス118の任意の複雑な特性をモデル化してもよい。パフォーマンスモデル302Aはまた、入出力リクエストによって引き起こされたメディアデバイス118によって読み込まれたり書き込まれたりする特定のメディアの他のパラメータを考慮に入れてもよい。例えば、パフォーマンスモデル302Aは、デバイスが単一のレイヤのディスクを読み込んでいるのか、あるいは多数のレイヤのディスク(例えばBlu−ray(登録商標)DMDのような二重のレイヤのディスク)を読み込んでいるのかを考慮してもよい。
スケジューラ302はまた任意であるが、符号504で示すように、新しいI/Oオペレーションの時間要件、優先度、および見込まれる効率性を調べる。符号506で示すように、スケジューラは、受信I/Oリクエストを完了する予測時間Tを計算するように構成される。好ましい実施の形態によれば、スケジューラ302は、メディアデバイス118に関するパラメータとI/Oリクエスト403に関する係数を変数としてもつ性能特性式(performance characteristic equation;PCE)にしたがって、I/Oリクエストを実行するための予測時間Tを決定してもよい。
PCEは次の一般的な形式である。
=Af(x)+Bf(y)+Cf(z)+Df(w)+Ef(v)+...
ここで、A、B、C、DおよびEは係数であり、x、y、z、wおよびvはメディアデバイスの性能特性に関するパラメータを表し、f(x)、f(y)、f(z)、f(w)およびf(v)はx、y、z、wおよびvの関数である。一例として、限定しないが、PCEは1以上の項の和の形式の線形式であり、各項はパラメータ値(x、y、zなど)を表す変数を乗じた係数(A、B、Cなど)である。そのような式は次の形式である。
=Ax+By+Cz+Dw+Ev+...
上記式は任意の数の項目を有してもよい。変数は、要求されたタスクを実行するための時間に影響するメディアデバイスの任意のパラメータに対応する。そのようなパラメータの例には、これに限定しないが、オーバーヘッド、シーク時間、データ転送レートが含まれる。実際上、PCEは3より大きい数の項目、たとえば10以上の項目を用いる。たとえば、一つの読み取り(リード)オペレーションを記述するためにはしばしば6つの重要な項目が必要である。1.ファイルオープン、2.オーバーヘッド、3.シーク、4.転送、5.圧縮解凍、6.ファイルクローズ。他のオペレーション(オープン、クローズ、アンリンク(unlink)、リードディレクトリ(read directory))には、典型的には異なる項目の集合が必要である。
線形式の代わりとして、1以上の項の和であり、各項は何乗かした対応する変数によって乗じた係数(A)である一般的な多項式にPCEを拡張してもよい。たとえば、PCEは次の形式をもつ。
=Ax+By+Cz+Dw10+Ev−2...
別の代案として、1以上の項の和として表され、各項は対応する変数の任意の関数によって乗じた係数(A)である一般的な式にPCEを拡張してもよい。たとえば、PCEは次の形式をもつ。
=Ax+Blogy+Ce+D(w+2w+1)+...
単純な例として、線形PCEはT=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を完了した後で最終ステートを決定する。たとえば、10セクタが1000番から読み取られるなら、最終ステートは、読み取りヘッドがセクタ1010で終わることを示す。
PCEはまたI/Oリクエストを書き込むためのありうる異なるシナリオを考慮に入れてもよい。たとえば、メディアデバイス118が複数のレイヤ媒体を用いるなら、PCEは、あるレイヤから別のレイヤに切り替えて読み取りヘッドを動かす予測時間Tに与える影響を考慮に入れる。
ある実施の形態において、任意のI/Oリクエストに対する現実にかかった時間Tを測定し、PCEを反復して解いて未知変数の値を求めるためにPCE係数とともに用いてもよい。これにより、モデルを現実のドライブ性能で絶えず更新することができる。
いったん予測時間Tが計算されると、スケジューラ302は同様の方法でスケジュールキュー406における他のリクエストに対する予測時間を決定する。この処理は、符号507に示すように、リクエスト403に対する現実の時間と最適なスケジュールキューの順序が決定されるまで、複数の異なるキュー順序で反復して繰り返される。リクエスト403に対する初期状態は、スケジュール順位における以前のリクエストに対する最終状態から決定され、スケジュール順位における次のリクエストに対する初期状態は、リクエスト403の最終状態から決定される。
スケジューラ302は、スケジューリングキュー内のリクエストを検証して、既にキュー内にあるリクエストに対してリクエスト403の特性を比較する。スケジューラ302は、キュー内におけるリクエスト403の考え得る各位置を試し、優先度を無視していること、期限を過ぎること、およびタイミングの判断を探す。スケジューラ302は、リクエストされた入出力オペレーションがいずれも期限を過ぎない順序を探すことによって、考え得る最適な新しいキューの順序を決定してもよい。もし1またはそれ以上のオペレーションが絶対に期限を途過するという場合、スケジューラは異なる基準を用いてキューの順序を決定してもよい。スケジュールキュー406内のリクエストの順序に影響を与える追加の基準は、限定はされないが、入出力リクエストの優先度、ストリームバッファの状態、および要求されるレイテンシを含んでもよい。ある実施の形態では、T計算に対するPCE係数は、別のPCE係数計算に対する初期メディア状態として使うことができる更新されたメディア状態を返すために使われる。
一例によれば、スケジューラ302は、異なる挿入順列(permutation)を調べる。たとえば、オペレーション1、2、3を含む既存スケジュールにオペレーション4を挿入する。各順列は異なる合計時間Tをもたらす。ありうる順列と時間には以下がある。
4,1,2,3→T
1,4,2,3→T
1,2,4,3→T
1,2,3,4→T
スケジューラ302は、どの順列が最小予測合計時間Tを生成するかを決め、この順列を好ましいものとして使う。
さらに、スケジューラ302は、たとえば、スケジュールされた各アイテムに対する時間を加算することにより、徒過が予測される期限を探し、これにより、いずれかのスケジュールされたアイテムが自分の期限を徒過することになるかどうかを調べる。これには、スケジュールされた各オペレーションに対する完了時間を決定し、その完了時間をそのオペレーションに対する期限と比較する。いずれかの期限が徒過されるならば、オペレーションはキュー内のより早い位置に再スケジュールされる。
ある実施の形態では、例えば期限が全て解決できない場合、優先度が使用される。例えば、ある期限が否応なく徒過する場合、最良のキューの順序は、最も優先度の低いリクエストがその期限を徒過する順序であろう。前述の考察を満たす多数の可能なキューの順序がある場合、同じ優先度である期限を徒過するリクエストの数が最小となるキューの順序が最良の順序であろう。前述した考察を全て満たす多数の可能なキューの順序がある場合、可能な限り少ない時間で全てのキューを実行するキューの順序が最良の順序であろう。いくつかの場合、高い優先度のリクエストが期限に間に合う限りにおいて、低い優先度のリクエストは高い優先度のリクエストの前にスケジューリングされてもよい。
前述した考察を全て等しく満たす多数の可能なキューの順序がある場合、スケジュールキュー406内の最新のリクエストはキューの末尾に来る順序が最良の順序であろう。スケジューラ302がキューに新しいオペレーションを挿入するために合計キュー実行時間を見積もらなければならない場合は、多数の異なるファクタを考慮する。たとえば、スケジューラは、キュー順序の評価の直前にスケジューラ302が取り出したデバイスドライバの現在の状態を考慮に入れる。それに加えて、スケジューラ302は、メディアフィルタレイヤとFIOSスタック300における他のレイヤのよって報告された性能係数を考慮する。これらの値には、たとえば、ヘッドの動き、ヘッドアライメント、DMAセットアップ、データ転送レート、ストレージレイヤに対するレイヤ変更などが含まれる。これらの値は、I/O性能のランタイム測定によって供給されるので、見積もりを可能な限り真実なものにすることができる。
ひとたびスケジューラ302がリクエスト403におけるオペレーションに対してキュー406内の最適な位置を決定すると、図4の407および図5の508に示されるように、オペレーションはそこに挿入される。図4を再び参照すると、もし入出力リクエストを実行可能なリソースが存在すれば、409に示されるように、スケジューラ302はスケジュールキュー406内の最初のオペレーションを発行キュー408に移動する。オペレーションの関連づけられたメディアリクエストあ発行キュー408から実行される。メディアリクエストを実行するために、スケジューラ302は、FIOSスタック300内の最初のレイヤにリクエストを渡す。
スケジューラ302以下の各レイヤは、それよりも上のレイヤから渡されたメディアリクエスト403を見る。適宜、レイヤはそのデータを処理する。例えば、リクエストが読み出し(read)オペレーションの場合、デアーカイバレイヤ301は開かれているアーカイブのコンテンツに対して与えられたパスネームを確認し、もしファイルを見つけた場合、圧縮されたデータの読み出し(read)にそのリクエストを再マッピングする。FIOSスタック300の各レイヤは、リクエストが最終的にハードウェアレイヤ310に到達するまで、処理されたあるいは処理されていないメディアリクエストを次の下位のレイヤに渡す。ハードウェアレイヤ310がリクエストに応答するとき、その応答はスタック300内の各レイヤを下から上に向かって進み、各レイヤは適宜読み出したデータを処理する。例えば、デアーカイバレイヤは返されたデータは解凍されなければならないことを知っているので、応答をスタックに返す前にデータを解凍する。応答は最終的にスケジューラ302に戻されて完了する。
読み出されたデータがスタックに戻るとき、スケジューラ302がそれを受信して入出力オペレーションを完了キューに移動する。完了キューはアプリケーション401へのコールバック関数の契機となる(コールバックがアプリケーションによって設定されていた場合)。別の方法として、アプリケーション401は入出力オペレーションが完了したか否かを決定するためにFIOSスタック300をポーリングしてもよい。ひとたび入出力オペレーションが完了すると、フリーオペレーションプール412に移動される。フリーオペレーションプール412は使用されていない入出力オペレーション構造体の集合を含む。そのようなオペレーションには、クライアントアプリケーションに割り当てられていなかったリものや、クライアントアプリケーションによって使用された後、再び使用するために解放されたものが含まれる。クライアントアプリケーションが入出力リクエストを作ると、スケジューラ302はこのプールからクライアントに入出力オペレーションを割り当てる。フリー入出力プール412はスタックとして実装されてもよい。フリー入出力リクエストはフリー入出力プール412からポップされ、受信キュー404にプッシュされる。このような方法で、フリー入出力リクエストは再利用される。
本発明の実施の形態によれば、スケジューラ302は以下のようにスケジュールループを動作する。
1.入出力の完了を調べる。
2.新しい入出力リクエストを発行する。
3.入出力コールバックを発行する(もしあれば)。
4.スケジュールに挿入する(受信からスケジュールに挿入する)。
5.再度新規に発行する。
6.予想される期限の途過を調べる。
7.1に戻る。
各反復におけるスケジュールの挿入の数は、ある最大数(例えば16)で制限されていてもよい。
本発明のある実施の形態では、補助プロセッサユニット105B(例えばSPE206)が、受信する入出力用のリクエストを、メインプロセッサ105AまたはPPE204に関してアトミックな交換を通じて受信キュー404に追加することによって、自分自身に入出力をリクエストすることができる。例えば、従来型のセルプロセッサの実装において、SPE206はいずれの入出力能力も持っていない。しかしながら、受信キュー404が共通のデータ要素である場合、補助プロセッサ105Bは、メインプロセッサ105との標準的なアトミックな交換およびメインプロセッサ105に通知することを通じて、入出力リクエストをキューに追加することができる。
多くの従来技術における実装では、補助プロセッサ105Bが即時に処理するデータを必要とする場合、そのデータはメインメモリになければならない。これとは対称的に、本発明の実施の形態では、補助プロセッサ105Bはファイル入出力システムメディアスタック300に、ハードメディアデバイス118やネットワーク127を介して得た所望のデータを取りに行かせる。
限定するわけではないが、例として、受信キュー404、完了キュー410、およびフリー(解放)プール412はアトミックなスタックであってもよい。補助プロセッサ105Bはフリープール412からオペレーションをポップし、オペレーションのパスとオフセットを書き込み、受信キュー406にオペレーションをプッシュし、さらに同期を実行し、スケジューラ302をウェイクアップする。補助プロセッサ105Bは入出力オペレーションの完了のための間欠的なポーリングの間に別の仕事を行ってもよい。
例として、セルプロセッサシステム200内において、入出力リクエストはSPE206によって、次のタイプの命令シーケンスを用いてサービスされる。
Op = pop(FREE)
Op path = …..
Offset = …..
Push (op, incoming)
SPE206によってリクエストされたデータは、PPE204によってアドレス可能な場所であればどこでも送信される。SPE206がロックされている場合、FIOS300はSPE206のローカルストア(local store: LS)にデータを直接書き込むことができる。ある実施の形態では、ひとつのSPE206はデアーカイバに他のSPEを用いて圧縮解凍するようリクエストしてもよい。これは例えばプロセッサ間の遠隔手続呼び出し(remote procedure call: RPC)を用いて実装されてもよい。この例では、SPE206がPPE204に何かをするように要求する。より従来型の遠隔手続呼び出しではこれと逆である。
[プリフェッチ]
ある実施の形態では、スケジューラキャッシュ305(例えばハードディスクキャッシュ)は、ファイルが後に素早く読み出せるように、メディアデバイスからのファイルをストレージデバイス115内のキャッシュ117にプリフェッチするために用いられる。そのような場合、プリフェッチオペレーション413は発行キュー402に直接挿入されてもよい。プリフェッチは、PowerPCのCPUアーキテクチャにおける「dcbt」命令のような多くの種類のキャッシュによって実装される標準的な手動プリフェッチであってもよい。本発明の実施の形態によれば、プリフェッチは上述のスケジューラループの一部としてキューに入れられ、かつ実行されてもよい。プリフェッチは、比較的高いレイテンシでかつ低いスループットを伴う、他の入出力リクエストが完了しているときにアクセスされなければならない比較的遅いソースメディア(例えばBlu−ray(登録商標)やUMD)の仕事の手助けをする。
スケジューラ302は、メディアデバイス118がアイドル状態で、かつ他の入出力リクエストを邪魔しない、使用されていない時期にのみ実行するような、比較的低い優先度のプリフェッチを実装するように構成されてもよい。例えば、システム300は遅いメディアデバイス(例えばBlu−ray(登録商用)ディスク(BD)のような光学ディスク)と、ハードディスクのようなより高速なストレージデバイス115とを持っているとする。スケジューラキャッシュレイヤ305は、光学ディスクドライブからハードディスクへの非同期なコピーのために用いられてもよい。ファイルが後にアクセスされるとき、入り低速な光学ディスクのスピード(例えば8MiB/s)の代わりに、より高速なハードディスクドライブのスピード(例えば20MiB/S)で読み込まれる。
キャッシュプリフェッチは通常ハードディスクキャッシュで行われるが、プリフェッチはメインメモリ106、202で行われてもよい。プリフェッチオペレーションは、スケジューリングが完了した後に受信された順序でスケジュールキュー406の末尾に含まれてもよい。ある実施の形態では、プリフェッチオペレーションは、必要なときに遅延されてもよい。ある実施の形態では、スケジューラ302によって使用される性能特性式には、状態情報の一部として、キャッシュ117に格納されるものについての情報が含まれる。
プリフェッチオペレーショントは他の入出力オペレーションと同様の方法ではスケジューリングされない。プリフェッチオペレーションは、スケジュールキュー406が空のときのみ実行される別個のプリフェッチキュー413に保管される。プリフェッチオペレーションは必要があれば遅延されてもよい。そうでなければ、プリフェッチは受信された順序で実行してもよい。スケジューラ302はキューされたプリフェッチリクエストを保持し、入出力サブシステムが特定の長さの時間だけアイドル状態であるときにのみそれらのプリフェッチリクエストを実行する。これにより、プリフェッチが通常の入出力リクエストを邪魔するのを防ぐ。加えて、プリフェッチは単一のキャッシュブロックには限定されず、任意のサイズでよく、キャッシュにファイルのはじめから最後まで全体をロードすることを伝える特別な「全ファイル(whole-file)」値を渡してもよい。さらに、プリフェッチは任意のサイズでよいが、プリフェッチは、FIOSスタック300がアイドル状態を継続しているかを調べるためにスケジューラ302に戻る前には、せいぜいひとつのキャッシュブロックしか満たされないように実装されてもよい。
FIOSスタック300は、不必要なプリフェッチを回避する方法でプリフェッチを実装するように構成される。たとえば、図6に示すように、どんなブロックもキャッシュ601にないならば、FIOSスケジューラキャッシュレイヤ305は、最初のブロックを埋めて、アイドル状態をチェックするために戻る。もしストレージデバイス115上のキャッシュ117にブロック1からNがあるならば、(N+1)番目のブロックがメディアデバイス118からのデータで埋められる。スケジューラキャッシュレイヤ305はアイドル状態をチェックするために戻る。このプロセスは受信キューに新しいI/Oが到着するまで繰り返される。これらの機能は任意の数のプリフェッチがキューされることを可能にするため、通常のスケジュールされたI/Oリクエストを妨げることなく、アプリケーションがメディアデバイス118からストレージデバイス115(またはメインメモリ106)へ大きな量のデータを高速かつ効率的にプリフェッチすることができるようになる。
たとえば、ゲームアプリケーションにおいて、ゲームデータはしばしば、メディアデバイス118によって読まれるCD−ROMまたはHD−DVDのようなメディアに格納されている。ゲームは、プレイヤが特定の行き先に動いていることを判定し、60秒もすればそこに到着するであろうと計算する。その時間の間、FIOSスタック300は、メディアデバイスからその行き先に関してプリフェッチする。プレイヤが向きを変えて異なる行き先に向かうことを決定したなら、アプリケーションはそのプリフェッチをキャンセルする。他の実施の形態では、アプリケーションは、キャッシュ117にある必要とされるデータが上書きされないように防ぐために事前通知を利用する。
上述のキャッシュプリフェッチは、ビデオゲームのような入出力駆動型(I/O driven)のアプリケーションや、現代的なビデオゲームコンソールのような特定の入出力を要するプラットフォームにおける入出力のパフォーマンスを向上しうる。特に、ゲームデータはしばしば光学ディスクやネットワークファイルサーバのような低速なメディアに格納されるが、ゲームはハードディスクドライブのような高速なローカルストレージへのアクセスをもってもよい。
[補助プロセッサを用いたデータ変換]
別の実施の形態によれば,FIOSは,メインプロセッサと,関連づけられたローカルメモリをもつ補助プロセッサとを利用するあるプロセッサアーキテクチャを活用する。たとえば,圧縮伸張または暗号解読のようなデータ変換のためにそのような実施の形態が用いられる。比較のために,ある以前のアーカイブ解凍システムは,標準的なバックグランドスレッドの中で動作する(zlibのような)単純な圧縮伸張アルゴリズムを用いてきた。本発明の実施の形態は,それとは対照的に,標準的なデコンプレッサ(decompressor)実装と,セル(Cell)プロセッサアーキテクチャのような関連づけられたローカルメモリをもつ補助プロセッサを含むプロセッサアーキテクチャを活用するように構成された非標準的な実装の両方を可能にする抽象的なコーデックインタフェースを含む。そのような実施の形態によれば,デコンプレッサオブジェクトが多数のフラグと制約条件を設定することが可能になり、デアーカイバ(de-archiver)301は,それを活用して、メモリ使用と速度を最適化する。特別な取り扱いをすることになるこれらの制約条件と環境の多くは、ゲームプログラミング、ファイルシステムI/O圧縮伸張、またはシステム100のアーキテクチャにとって固有のものである。
ビデオゲームアプリケーションのようなあるアプリケーションは,限られた量の利用可能なメモリをもち,可能な限り少ないメモリを用いることが望ましい。一つの共通の定式化は,I/O圧縮伸張のために3つのI/Oバッファをもつことである。一つのバッファは読み取りによって使われ,2つまでの一時バッファ(一つは入力用,もう一つは出力用)はデータ変換オペレーション(たとえば圧縮伸張や暗号解読)によって使われる。一例としてこれに限定しないが,ある実施の形態は,データ変換のために関連付けられたローカルメモリ(たとえばセルプロセッサ200におけるSPE206)をもつ補助プロセッサを用いることにより,一時バッファ全体を使用することを回避してもよい。
たとえば,圧縮伸張がメインプロセッサ(たとえば,PPE204)によって扱われるなら,典型的には、圧縮されたデータを一時的に格納するために一つのバッファが必要であり、伸張されたデータを一時的に格納するために別のバッファが必要である。十分なローカルメモリ106Bをもった補助プロセッサ105Bを利用できるなら、一時的なバッファの代わりにローカルメモリ106Bを用いて同じ圧縮伸張を行うことができる。圧縮されたデータと伸張されたデータの両方をローカルメモリ106Bに格納してもよい。一例として、あるセルプロセッサアーキテクチャにおいて、SPE206は256キロバイトの容量のローカルストアを有する。これは、圧縮された入力、伸張された出力、および圧縮伸張アルゴリズムに対するコードのために十分なメモリスペースである。比較すれば、圧縮伸張がメインプロセッサ105A(たとえば、PPE204)によって扱われるなら、圧縮されたデータは第1バッファに読み込まれ、伸張され、伸張されたデータは第2バッファに書き込まれる。その後、伸張されたデータは、第2バッファから宛先へコピーされる。
図7Aおよび7Bは、補助プロセッサを利用してデータ変換を実装するものの中で2つの例を示す。具体的には、図7Aにおいて説明されるように、I/Oリクエストを遂行する過程で、メインプロセッサ105A上で動作するFIOS300が、たとえば、データ変換レイヤ311を介してデータ変換を起動する。符号702で示すように、メインプロセッサ105Aは補助プロセッサ105Bをセットアップする。具体的には、メインプロセッサ105Aは補助プロセッサ105Bに命じて、補助プロセッサのローカルメモリ106Bにデータ変換を埋め込むためのコード化された命令701をロードさせる。符号704で示すように、その後、メインプロセッサまたは補助プロセッサはFIOSスタック300を検査して、メディアデバイス118からメインメモリ106にデータ703を転送する。補助プロセッサ105Bはその後、符号706に示すようにデータ703をローカルメモリ106Bにロードする
次に補助プロセッサは、符号708で示すように、データ703に変換を実行し、変換されたデータ705を生成し、これをローカルメモリ106Bに格納する。一例として、コード化された命令701の実行により、データ703は暗号解読または圧縮伸張される。変換されたデータ705は、符号710で示すように、メインメモリ106に転送される。あるいは、変換されたデータ705は、他の宛先、たとえばストレージデバイス115に配信される。I/Oリクエストによって特定されるすべてのデータが処理されるまで、オペレーションの前述のシーケンスをデータの次のブロックに対して繰り返してもよい。いったん入力データ703がローカルメモリ106Bに転送されると、そのデータは、新しい入力データまたは変換されたデータ705によって、メインメモリにおいて上書きされる。
一例として、これに限定しないが、図2で図示したようなセルプロセッサアーキテクチャを用いて、図7Aのデータ圧縮伸張を実装してもよい。SPUプログラミングの特徴(データがSPE206のローカルストアLSにストリーム伝送され、その後、いったん処理が完了するとストリーム返送される)は、ファイルシステムI/O圧縮伸張の要求と組み合わされ、I/O性能を改良する機会を与える。たとえば、圧縮伸張のためにSPE206を用いることにより、付加的なバッファを解放することの結果、性能が37Mbpsから42Mbpsに改善する。ソニープレイステーション2において使用されるプロセッサアーキテクチャを用いて類似した圧縮伸張を実装してもよい。そのような場合、メインプロセッサはエモーションエンジン(EE)と呼ばれ、補助プロセッサの一つは、関連づけられたローカルメモリをもつI/Oプロセッサ(IOP)として知られる。そのような場合、デアーカイバ301はEE上で動作し、圧縮伸張は、図7Aに図示された方法にしたがってIOP上で実行される。あるいは、図7Aに図示されて技術は、独立してアドレス可能なメモリをもつ2つのプロセッサが関わる分散コンピューティングアーキテクチャに対して使用することもできる。
前述の例は、変換レイヤによって実装されたデータ変換を用いているが、図7Aに関して説明した方法は、メディアフィルタレイヤ304のいずれかを実装する際に用いることもできることに留意する。それとは対照的に、先行技術のファイルI/Oシステムは典型的には、メインプロセッサ(たとえば、セルプロセッサの例ではPPU)で実装される。
代替的な実装では、メディアサービス118から読まれたデータの宛先が低速メモリ(たとえば、ビデオランダムアクセスメモリ(VRAM)のようなグラフィックスメモリ140)であり、コーデックがその出力にランダムアクセスを実行する必要がある場合、FIOSデアーカイバは、一時的な出力バッファを割り当てる必要がある。しかし、コーデックがランダムアクセスする必要がないなら(この例で言えば、たとえばSPU実装されたデコンプレッサの場合)、FIOSデアーカイバ301は、一時的な出力バッファを割り当てることを避けて、データ703を圧縮伸張して直接、宛先に送ることができる。さらに、ファイルシステム圧縮伸張には「スロップ(slop)」すなわち未使用バイトが必要である。すなわち、64キロバイト全体を圧縮するとき、ほんのわずかなバイトが必要とされる。コーデックが、圧縮されたブロックの一部を出力することができる(この例では、SPU実装されたデコンプレッサを用いて)ことを示しているなら、FIOSデアーカイバは一時的な出力バッファを割り当てることを回避できる。それに加えて、関連づけられたローカルメモリ106Bをもつ補助プロセッサ105Bを上述の環境の任意のすべての組み合わせで用いることができる。
図7Bは、補助プロセッサ105Bとローカルメモリ106Bを低速グラフィックスメモリ340とともに使用する例を示す。FIOS300はメディアデバイス118からグラフィックスメモリ340(たとえば、VRAM)へデータを読み出す。バッファを用いたVRAMへのデータ転送は低速になる傾向がある。しかし、VRAMデータをあるタイプの補助プロセッサのローカルメモリ(たとえば、SPE206のローカルストアLS)に読み込むことは問題ではない。図7Bに示す例では、FIOS300は主としてメインプロセッサ105A上で実装される。未変換データ703はグラフィックスメモリ340から、補助プロセッサ105Bに関連づけられたローカルメモリ106Bに転送される。FIOS301は、補助プロセッサ105Bによって実行するために変換命令701をローカルメモリ106Bにロードする。補助プロセッサ105Bは、命令701を実行することによってデータ703を変換されたデータに変換し、変換されたデータ705を生成する。変換されたデータはその後、グラフィックスメモリ340に転送される。この実施の形態のバリエーションの中で、未変換(たとえば暗号化または圧縮された)データ703は、メディアデバイス118から読み出され、ローカルメモリ106Bに転送される前にメインメモリ106のバッファに格納される。
[ネストしたアーカイブ]
以前のFIOS実装には、ランダムアクセスデアーカイブが含まれており、それによって、圧縮されたアーカイブのコンテンツがファイルシステム階層に仮想的に現れ、読み出しと圧縮伸張をオーバーラップさせることによって最適に効率化した方法でこれらのアーカイブからデータを読み出すことができた。本発明の実施の形態は、単一のデアーカイバレイヤ301をもち、性能ペナルティのないネストした(入れ子になった)アーカイブを取り扱う能力をもつことにより、このシステムを改善するものである。ここで使われるネストしたアーカイブという用語は、他のアーカイブ内に格納されるアーカイブのことを言い、他のアーカイブはさらにネストの任意の深いレベルにまで別のアーカイブに格納されていてもよい。
ネストしたアーカイブの支援は、ゲームI/Oおよびデータレイアウトの固有の要求を満たすために特に有益である。ネストしたアーカイブの使用は、スケジューラ302によって使用されるドライブモデル302Aを用いることと相乗作用がある。具体的には、大きなファイルは、ドライブヘッドの動きのより良いモデルを考慮に入れる。ネストしたアーカイブの支援は、圧縮されたアーカイブフォーマットがランダムアクセスであるならば、大いに役立つ。それとは対照的に、典型的には圧縮されたアーカイブはランダムアクセスではない。たとえば、zip、gzip、7z等の圧縮フォーマットは典型的には、アーカイブの始まりから線形アクセスすることが必要である。
ここで「アーカイブ」という用語は、単一の大きなファイルに結合された複数のデータファイルの集合のことである。ソースデータは変更されることなく格納されるか、圧縮または暗号化のような1以上のデータ変換がデータの任意の部分に適用される。インデックス(ときには目次と呼ばれる)は、アーカイブ内のパスおよびオフセットのような、ソースファイルの少なくともある一面を記述するものであり、アーカイブとともに維持されることで、ファイルを個別に調べてアクセスすることができるようになる。「ネストしたアーカイブ」という用語は、1以上のソースデータファイルが別のアーカイブ(またはネストしたアーカイブ)であるようなアーカイブのことである。このネスト構造のおかげで、ソースデータの所与のブロックは、それに適用された1以上のデータ変換を有する。たとえば、2つのレベル(レベル1とレベル2)をもつビデオゲームアプリケーションは、「level1.psarc」と「level2.psarc」と名付けられた2つのアーカイブを含む「game.psarc」と名付けられたネストしたアーカイブを用いる。これは、ゲーム開発者がデバッグやテストの目的で単一のアーカイブ(「level1.psarc」や「level2.psarc」など)を用いることを可能にし、いつも大きな「game.psarc」というアーカイブを生成するために時間を費やさなくてもよくなることで開発を容易にする。
開発者はネストしたアーカイブを生成することができるが、従来のI/Oリーダは、複数のレベルをもつアーカイブを読むことができないか、効率的には読むことができない。これを克服するために、アーカイブは図8に示すように構成される。特に、外側のアーカイブ800は、ゲームの個別のレベルに対するデータをもったファイルが含まれる内側のアーカイブ801、802を含む。一例として、これに限られないが、内側のアーカイブ801、802は、そのレベルで利用可能な地図、武器やそのレベルで出会う敵のような特定のゲームレベルに関連するデータを含む。内側のアーカイブ801、802に対するデータは、個別に圧縮され、共通するデータ803とともにバンドルされる。外側のアーカイブ800内のファイルは、ブロック単位で圧縮される。各アーカイブは、デアーカイバが、内側のアーカイブ801、802における任意の場所を含めて、外側のアーカイブ800内の任意の場所の任意のデータブロックを見つけることを可能にするインデックスを含む。インデックスは、アーカイブに対する目次と等価なものとみなすことができる。
FIOS300がアーカイブにある特定のファイルに対するリクエストを発行するとき、リクエストは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は、コンテンツのパス(または部分的なパス)のハッシュのリストをもつ。ハッシュリストは、アーカイブに対する目次(table of contents;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、オフセット120000、長さ30016、暗号解読+zlib圧縮伸張のような形式をもつ。スタックの制限を避けるために再帰よりもループでネストを解消する。ネストがいったん解消されると、メディアデバイス118からデータが転送される。一例として、これに限られないが、デアーカイバ311は、符号905で示すようにブロック単位でデータを繰り返し読み出して変換する。具体的には、デアーカイバは、符号906で示すようにデータのブロックを読み出し、その後、符号908で示すように読み出されたブロックにデータ変換を適用する。ネストしたアーカイブの複数のレベルが単一のインタリーブした読み取り−変換ループに解消され、もっとも外側のアーカイブからブロックを読み出すことで、ソースメディアを最大限効率的に利用する。各ブロックが読み取られ、変換された後、符号910に示すように、望ましい部分が適当な宛先、たとえば、メインメモリ106、ストレージデバイス115または他の場所にコピーされる。ブロックの望ましい部分は任意のサイズであり、たとえば、1バイトのように小さくても、ブロック全体であってもよい。
[オーバレイレイヤ]
上述のように、FIOSスタック300におけるメディアフィルタレイヤ304は、オーバレイレイヤ307を含む。本発明の実施の形態によれば、オーバレイレイヤ307は、ファイルシステムレベルにおいてファイルとディレクトリの任意のオーバレイができるように構成される。一般的なコンセプトは、より一層柔軟性があるという点を除けば、Unix(登録商標)のユニオン(union)マウントと比較することができる。典型的なユニオンマウントは、あるファイルシステムにおけるディレクトリを別のファイルシステムの全内容とマージすることにより実現される。オーバレイレイヤ307は同様のことをするが、もっと柔軟であり、たくさんの特徴がある。たとえば、オーバレイレイヤ307は、ディレクトリ、ファイルまたはファイル内のバイトのレンジの粒度で動作する。ディレクトリは隠され、そのコンテンツはオーバレイレイヤ307を用いて置き換えられる。さらに、オーバレイレイヤ307は、プライマリデータソースから要求されるファイルをセカンダリデータソースからの他のファイルで置き換えるために使われる。セカンダリデータソースは、ファイルまたはディレクトリであり、それは、プライマリデータソースと同じメディアまたは別のメディア上にある。さらに、第2データソースは仮想的なデータソースであり、データがコールバックによって指定されてもよい。この特定の文脈において、「コールバック」という用語は、他のコードへの引数として渡される実行可能なコードのことである。
さらに、オーバレイを生成するアプリケーションは、オーバレイがオーバレイレイヤ307によってどのようにして、いつ適用されるべきかの基準を特定する。たとえば、アプリケーション103が、ディレクトリBをディレクトリA上にオーバレイしているならば、基準は、「オーバレイ」=最初にB内のファイルを探す、「アンダーレイ」=最初にA内のファイルを探し、次にB内のファイルを探す、「より新しい」=両方の場所にファイルが存在するなら、より最新の更新日をもつ方を使う、「より古い」=両方の場所にファイルが存在するなら、より古い更新日をもつ方を使うなどである。
オーバレイレイヤ307は、特定のソースから別のソースへのI/Oリードに対するリクエストの任意のマッピングを可能にするように構成される。たとえば、メディアデバイス118から特定のファイルを読み出すリクエストは、ストレージデバイス115などにある対応するファイルにマップされる。ファイル内の特定のバイトから全体のディレクトリまでの範囲のそのような特徴データを用いていることは、隠されているか、入れ替えられている。どのディレクトリ、ファイル、またはバイトを置き換える必要があるかを特定することにより、オーバレイレイヤ307は、特定のI/Oリクエストを処理するためにFIOSスタック300によってなされなければならない仕事量を最小化することができる。
オーバレイレイヤ307は、たとえば、ソフトウェアおよび/またはデータに対するアップデートを実装するために使われる。多くの先行技術のアップデートシステムでは、実行可能なリンク可能ファイル(executable linkable file;ELF)がメディアデバイス118からストレージデバイス115にコピーされ、更新されたコードまたはデータでパッチが当てられる。本発明の実施の形態を用いれば、これとは対照的に、アプリケーション103が、メディアデバイス118からのデータや、ストレージデバイス115のような他の場所からの他のバイトレンジを用いて、あるバイトレンジを埋めるようにFIOS101に指示する。したがって、パッチを当てるために全体のファイルをコピーする必要がない。その代わり、パッチを当てることは、I/Oシステムレベルで実装される。
たいていの先行するパッチの実装は、ファイル全体を置き換えることにもとづいている。これは実装するにはもっとも単純な方法であり、したがって、もっとも普通の方法によるものである。オーバレイレイヤ307によって実装される強化したパッチは、それとは対照的に、圧縮され、かつ、暗号化されたアーカイブ内でパッチを当てるといった、より複雑で有益なパターンを可能にする。
[速度エミュレーションレイヤ]
本発明のある実施の形態では、速度エミュレーションレイヤ315は、低速I/Oデバイスの性能をエミュレートするために開発過程でより速いストレージの速度を低下させるために用いられる。速度エミュレーションレイヤ315は、低速I/Oデバイスのシーク時間、スループット、および他の性能特性のモデルを利用する。たとえば、速度エミュレーションレイヤ315は、ストレージデバイス115(たとえばハードディスクドライブ)を低速化して、HD―DVDやブルーレイ(登録商標)ドライブのようなメディアデバイス118の低速のシークタイムおよび/またはスループットをエミュレートする。
本発明の実施の形態にしたがって、速度エミュレーションレイヤ315は、以前のセッションの間に集めたドライブ性能データを将来のセッションに与えることによって実装される。上述のように、スケジューラ302によって使用される性能モデルは、スループット、レーザの小刻みな動き、リードヘッドの動き、レイヤの変更、およびリクエストのオーバーヘッドのような複雑なドライブの特徴を適宜モデル化するように構成される。速度エミュレーションレイヤ315はこの情報を用いて、特定のメディアデバイスの高度に正確なエミュレーションを提供する。このエミュレーションは、ランタイム性能にもとづくため、シーク時間のようなより複雑な詳細を無視してスループットを単純に合わせようとする単純かつ素朴なエミュレーションレイヤよりもずっと正確である。
本発明の実施の形態は、かなりの量のI/Oを利用するアプリケーションとシステムにおける改良されたI/O性能を提供する。上述のように、本発明の実施の形態は、ビデオゲームアプリケーションおよびビデオゲームシステムにおいて特に有益である。しかしながら、本発明の実施の形態はそのようなアプリケーションやシステムに限定されるものではない。
本発明の好ましい実施の形態を完全な形で説明してきたが、いろいろな代替物、変形、等価物を用いることができる。したがって、本発明の範囲は、上記の説明を参照して決められるものではなく、請求項により決められるべきであり、均等物の全範囲も含まれる。ここで述べた特徴はいずれも、好ましいかどうかを問わず、他の特徴と組み合わせてもよい。請求項において、明示的に断らない限り、各項目は1またはそれ以上の数量である。請求項において「〜のための手段」のような語句を用いて明示的に記載する場合を除いて、請求項がミーンズ・プラス・ファンクションの限定を含むものと解してはならない。

Claims (34)

  1. プロセッサユニット、メモリ、およびメディアデバイスをもつシステムにおいて、前記プロセッサユニットは、メインプロセッサと、関連づけられたローカルメモリをもつ補助プロセッサとを含み、メディアデバイスに対する入出力(I/O)をハンドリングする方法であって、
    a)メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストを完了するための予測時間Tを計算するステップと、
    c)前記入力I/Oリクエストのスケジュール内の位置が予測時間Tに少なくとも部分的に依存するように、前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入するステップと、
    d)メディアデバイスからローカルメモリにデータを転送することによって、前記スケジュールにしたがって前記入力I/Oリクエストをサービスし、補助プロセッサを用いてローカルメモリのデータを変換するステップとを含み、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とする方法。
  2. ステップb)は、メディアデバイスのパラメータと前記I/Oリクエストから決定される係数を用いた性能特性式(PCE)にしたがって予測時刻Tを計算するステップを含む請求項1の方法。
  3. 前記パラメータは、リクエストオーバーヘッドx、ヘッド運動レートy、およびスループットzを含む請求項2の方法。
  4. 前記係数は、オーバーヘッド係数A、ヘッド移動距離B、および転送データ量Cを含む請求項3の方法。
  5. 前記性能特性式は、T=Ax+By+Czの形である請求項4の方法。
  6. ステップc)は、前記スケジュール内の前記複数の異なるI/Oリクエストに対する異なる係数をもつ前記性能特性式を繰り返すことで前記複数のI/Oリクエストをサービスするための前記合計時間Tを決定するステップを含む請求項2の方法。
  7. 前記合計時間Tの最適値の値は、前記複数のI/Oリクエストの2以上の異なる順序に対する合計時間Tの最小値である請求項1の方法。
  8. ステップb)は、I/Oリクエストに対してかかった現実の時間Taを測定するステップと、前記現実の時間Taを前記係数とともに用いて、未知パラメータの値に対してPCEを反復して解くステップとを含む請求項2の方法。
  9. ステップd)は、圧縮されたネストしたアーカイブから特定のデータを抽出するステップをさらに含む請求項1の方法。
  10. 前記システムはさらにグラフィックスプロセッサと関連づけられたグラフィックスメモリとを含み、ステップd)は、メディアデバイスからグラフィックスメモリにデータを読み込むステップと、グラフィックスメモリからローカルメモリにデータを転送するステップと、補助プロセッサを用いてデータ上でデータ変換を実行して、変換されたデータを生成するステップと、変換されたデータをグラフィックスメモリに返送するステップとを含む請求項1の方法。
  11. 前記プライマリデータユニットのソースと前記セカンダリデータソースは同じメディア上にある請求項10の方法。
  12. 前記プライマリデータユニットのソースと前記セカンダリデータソースは異なるメディア上にある請求項10の方法。
  13. 前記セカンダリデータソースは仮想的なデータソースである請求項10の方法。
  14. セカンダリデータユニットはコールバックによって指定される請求項13の方法。
  15. 前記システムは高速ストレージデバイスをさらに含み、ステップd)は、メディアデバイスから高速ストレージデバイスへ1以上のデータユニットをプリフェッチするステップと、それに続いて高速ストレージデバイスからそのデータユニットを転送するステップとを含む請求項1の方法。
  16. 高速ストレージデバイスはハードディスクドライブである請求項15の方法。
  17. メディアデバイスは大容量の光ディスクドライブである請求項16の方法。
  18. 1以上のデータユニットをプリフェッチするステップは、I/Oがアイドルであるとき、ある時間間隔の間、1以上のデータユニットをプリフェッチする請求項15の方法。
  19. 1以上のデータユニットをプリフェッチするステップは、メディアデバイスから1以上のデータユニットの第1グループをプリフェッチするステップと、メディアデバイスがアイドルかどうかを調べるステップと、もしI/Oがアイドルなら、メディアデバイスから1以上のデータユニットの第2グループをプリフェッチし、もしI/Oがアイドルでないなら、前記第2グループのプリフェッチを遅延させるステップとを含む請求項18の方法。
  20. ステップb)は、前記システムに関連づけられたメディアデバイスよりも低速のメディアのオペレーションをエミュレートするために前記メディアデバイスのパラメータを調整するステップを含む請求項1の方法。
  21. プロセッサユニットと、
    前記プロセッサユニットと結合したメモリと、
    前記プロセッサユニットと結合したメディアデバイスと、
    前記メモリに具体化されたプロセッサ実行可能な命令セットとを含むシステムであって、
    前記命令は実行されたときに、メディアデバイスに対する入出力(I/O)をハンドリングする方法を実行するように構成され、前記方法は、
    a)メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストを完了するための予測時間Tを計算するステップと、
    c)前記入力I/Oリクエストのスケジュール内の位置が予測時間Tに少なくとも部分的に依存するように、前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入するステップと、
    d)前記スケジュールにしたがって前記入力I/Oリクエストをサービスするステップとを含み、
    前記プロセッサ実行可能な命令セットは、デアーカイバレイヤ、RAMキャッシュレイヤ、スケジューラキャッシュレイヤ、オーバレイレイヤ、カタログキャッシュレイヤ、データ変換レイヤ、またはシミュレートされたデータレイヤを含む1以上のメディアフィルタレイヤをさらに含み、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とするシステム。
  22. メインプロセッサと、関連づけられたローカルメモリをもつ補助プロセッサと、メインメモリと、メディアデバイスとを含むシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法であって、
    a)メディアデバイスに対してデータを転送するために、メインプロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストをメインメモリ内に具体化されたスケジュールに挿入するステップと、
    c)スケジュールと1以上のフィルタにしたがって前記入力I/Oリクエストをサービスするステップとを含み、1以上のフィルタの少なくとも1つは補助プロセッサによって実行され、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とする方法。
  23. プロセッサユニット、メモリ、およびメディアデバイスをもつシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法であって、
    a)メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストを完了するための予測時間Tを計算するステップと、
    c)前記入力I/Oリクエストのスケジュール内の位置が予測時間Tに少なくとも部分的に依存するように、前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入するステップと、
    d)前記スケジュールにしたがって前記入力I/Oリクエストを実行するステップとを含み、ステップd)は、圧縮されたネストしたアーカイブから特定のデータを抽出するステップを含み、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とする方法。
  24. プロセッサユニット、メモリ、およびメディアデバイスをもつシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法であって、
    a)メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストを完了するための予測時間Tを計算するステップと、
    c)前記入力I/Oリクエストのスケジュール内の位置が予測時間Tに少なくとも部分的に依存するように、前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入するステップと、
    d)前記スケジュールにしたがって前記入力I/Oリクエストを実行するステップとを含み、ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられ、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とする方法。
  25. 前記プライマリデータユニットのソースと前記セカンダリデータソースは同じメディア上にある請求項24の方法。
  26. 前記プライマリデータユニットのソースと前記セカンダリデータソースは異なるメディア上にある請求項24の方法。
  27. 前記セカンダリデータソースは仮想的なデータソースである請求項24の方法。
  28. セカンダリデータユニットはコールバックによって指定される請求項27の方法。
  29. プロセッサユニット、メモリ、高速ストレージデバイス、およびメディアデバイスをもつシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法であって、
    a)メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストを完了するための予測時間Tを計算するステップと、
    c)前記入力I/Oリクエストのスケジュール内の位置が予測時間Tに少なくとも部分的に依存するように、前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入するステップと、
    d)前記スケジュールにしたがって前記入力I/Oリクエストを実行するステップとを含み、ステップd)は、メディアデバイスから高速ストレージデバイスへ1以上のデータユニットをプリフェッチするステップと、それに続いて高速ストレージデバイスからそのデータユニットを転送するステップとを含み、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とする方法。
  30. 高速ストレージデバイスはハードディスクドライブである請求項29の方法。
  31. メディアデバイスは大容量の光ディスクドライブである請求項30の方法。
  32. 1以上のデータユニットをプリフェッチするステップは、I/Oがアイドルであるとき、ある時間間隔の間、1以上のデータユニットをプリフェッチする請求項31の方法。
  33. 1以上のデータユニットをプリフェッチするステップは、メディアデバイスから1以上のデータユニットの第1グループをプリフェッチするステップと、メディアデバイスがアイドルかどうかを調べるステップと、もしI/Oがアイドルなら、メディアデバイスから1以上のデータユニットの第2グループをプリフェッチし、もしI/Oがアイドルでないなら、前記第2グループのプリフェッチを遅延させるステップとを含む請求項31の方法。
  34. プロセッサユニット、メモリ、高速ストレージデバイス、およびメディアデバイスをもつシステムにおいて、メディアデバイスに対する入出力(I/O)をハンドリングする方法であって、
    a)メディアデバイスに対してデータを転送するために、プロセッサ上で動作するアプリケーションから入力I/Oリクエストを受け取るステップと、
    b)前記入力I/Oリクエストを完了するための予測時間Tを計算するステップと、
    c)前記入力I/Oリクエストのスケジュール内の位置が予測時間Tに少なくとも部分的に依存するように、前記入力I/Oリクエストをメモリ内に具体化されたスケジュールに挿入するステップと、
    d)前記スケジュールにしたがって前記入力I/Oリクエストを実行するステップとを含み、ステップb)は、前記システムに関連づけられたメディアデバイスよりも低速のメディアのオペレーションをエミュレートするために前記メディアデバイスのパラメータを調整するステップを含み、
    前記入力I/Oリクエストを前記スケジュールに挿入するステップは、
    複数の異なるI/Oリクエストをサービスするための合計時間Tを決定するステップと、
    前記複数のI/Oリクエストの2以上の異なる順序に対して前記合計時間Tの2以上の異なる値を計算するステップと、
    前記合計時間の最適値にもとづいて前記入力I/Oリクエストを前記スケジュールに挿入するステップとを含み、
    ステップd)は、データオーバレイを実行するステップを含み、メディアデバイスとメモリ間で転送されるプライマリデータユニットは、セカンダリデータソースからのセカンダリデータユニットで置き換えられることを特徴とする方法。
JP2011511688A 2008-05-30 2009-05-08 ファイル入出力スケジューラ Active JP5385977B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/130,892 2008-05-30
US12/130,892 US8504736B2 (en) 2008-05-30 2008-05-30 File input/output scheduler
PCT/US2009/043387 WO2009148764A1 (en) 2008-05-30 2009-05-08 File input/output scheduler

Publications (2)

Publication Number Publication Date
JP2011525010A JP2011525010A (ja) 2011-09-08
JP5385977B2 true JP5385977B2 (ja) 2014-01-08

Family

ID=41381486

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011511688A Active JP5385977B2 (ja) 2008-05-30 2009-05-08 ファイル入出力スケジューラ

Country Status (6)

Country Link
US (1) US8504736B2 (ja)
EP (1) EP2301002A4 (ja)
JP (1) JP5385977B2 (ja)
KR (1) KR101238163B1 (ja)
CN (1) CN102047305B (ja)
WO (1) WO2009148764A1 (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
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
KR20150035602A (ko) * 2012-06-29 2015-04-06 해피 클라우드 인코포레이티드 데이터 저장 디바이스에 데이터세트의 기입 관리
US8983237B2 (en) 2012-08-22 2015-03-17 Adobe Systems Incorporated Non-destructive collaborative editing
US9390155B2 (en) 2012-08-22 2016-07-12 Adobe Systems Incorporated Accessing content in a content-aware mesh
US9514157B2 (en) * 2012-08-22 2016-12-06 Adobe Systems Incorporated Multi-dimensional browsing of content
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请求的调度方法、系统、电子设备及介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
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
US7206866B2 (en) * 2003-08-20 2007-04-17 Microsoft Corporation Continuous media priority aware storage scheduler
US7590522B2 (en) * 2004-06-14 2009-09-15 Hewlett-Packard Development Company, L.P. Virtual mass storage device for server management information
US7260703B1 (en) 2004-08-20 2007-08-21 Sun Microsystems, Inc. Method and apparatus for I/O scheduling
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
US8504736B2 (en) * 2008-05-30 2013-08-06 Sony Computer Entertainment America Inc. File input/output scheduler

Also Published As

Publication number Publication date
CN102047305A (zh) 2011-05-04
US20090300642A1 (en) 2009-12-03
JP2011525010A (ja) 2011-09-08
WO2009148764A1 (en) 2009-12-10
EP2301002A4 (en) 2016-05-25
EP2301002A1 (en) 2011-03-30
KR20110019763A (ko) 2011-02-28
CN102047305B (zh) 2014-06-25
US8504736B2 (en) 2013-08-06
KR101238163B1 (ko) 2013-03-11

Similar Documents

Publication Publication Date Title
JP5385977B2 (ja) ファイル入出力スケジューラ
JP5292473B2 (ja) 即時的にデータをチャンクにすることを用いたファイル入出力スケジューリング
US8244935B2 (en) Write aggregation using optional I/O requests
KR101979621B1 (ko) 다운로드 가능한 컨텐츠의 전송을 최적화하는 시스템 및 장치
US7305537B1 (en) Method and system for I/O scheduler activations
US9582919B2 (en) Automatic run-time identification of textures
US20220004405A1 (en) 3D API Redirection for Virtual Desktop Infrastructure
US6665747B1 (en) Method and apparatus for interfacing with a secondary storage system
JP2002202902A (ja) パーティション作成方法および削除方法、プログラムを記録した記録媒体、情報処理装置
US20150126288A1 (en) Information processing device, program, and recording medium
JP4634477B2 (ja) メディア・ファイルの中断のない再生方法
US20200310962A1 (en) Ordering data updates for improving garbage collection being performed while performing the set of data updates
US20150126284A1 (en) Information processing device, data structure of game data, and recording medium
TWI750676B (zh) 用於圖形處理之資產感知計算架構
US7376679B2 (en) Facilitating delayed block allocation in a distributed file system
US10052555B2 (en) Information processing device, data structure of game data, and recording medium
EP4020197B1 (en) Methods and apparatus for loading of a container image
JP5953808B2 (ja) 乱数処理装置、乱数処理方法、及びプログラム
JP6529678B2 (ja) アプリケーションの実行を加速する方法及びデバイス
CN117581209A (zh) 将数据从非易失性存储器传送到过程加速器的系统和方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130507

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130618

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130904

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131001

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131004

R150 Certificate of patent or registration of utility model

Ref document number: 5385977

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250