説明

データを書き込むための方法、システム、およびコンピュータ・プログラム(データを書き込むためのスライディング書き込みウィンドウ・メカニズム)

【課題】 データを書き込むための様々な実施形態を提供する。
【解決手段】 一実施形態では、複数の書き込み間隔に配置されたデータは複数のバッファにロードされ、複数のバッファの全体は書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成される。データは順不同にストレージ・システムに到達する可能性があり、前記バッファに適切にロードすることにより、データはストレージ・メディアに書き込まれる前に順次、順序付けられる。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージ・メディアにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、コンピュータに関し、詳細には、スライディング書き込みウィンドウ・メカニズム(sliding write window mechanism)を使用してデータを書き込むためにプロセッサ・デバイスを使用するコンピュータ環境における方法、システム、およびコンピュータ・プログラム(computer program product)に関する。
【背景技術】
【0002】
企業、政府機関、またはその他のエンティティで使用可能なものなどのエンタープライズ・データ処理配置では、情報はしばしばサーバ上に保管され、たとえば、ネットワークを介してユーザによってアクセスされる。この情報は、プログラムあるいは処理すべきデータまたはその両方などの任意のタイプの情報を含むことができる。自分のパーソナル・コンピュータ、ワークステーションなど(一般に「コンピュータ」)を使用するユーザは、自分のコンピュータによって、処理すべき情報を検索し、それに加えて、たとえば、リモート・サーバ上に情報を保管できるようにする。
【0003】
一般に、サーバは、典型的にいくつかのディスク・ストレージ・ユニットを含む大容量記憶サブシステムにデータを保管する。データはファイルなどの単位で保管される。サーバでは、1つのファイルが1つのディスク・ストレージ・ユニット上に保管される場合もあれば、代わって、1つのファイルの複数部分が複数のディスク・ストレージ・ユニット上に保管される場合もある。冗長性を提供し、パフォーマンスを高めるために、多くのストレージ・デバイスは冗長ディスク・アレイ(RAID)トポロジに構成することができ、その場合、ストレージ・ボリュームはRAIDランクで編成される。ある企業のコンピュータ・ネットワークは、相互に離れ、ビジネス・ユーザからも離れて位置する複数のストレージ・ネットワークを有する可能性がある。また、これらのストレージ・ネットワークは異なるタイプのシステム上で処理される場合もある。仕事を正確に実行するために、ビジネス・ユーザは、すべてのストレージ・ネットワーク内に含まれるデータに対して高速かつ確実にアクセスする必要がある場合がある。このデータへのアクセスはリアルタイムで行われるので、記憶操作(書き込みまたは読み取りなど)は可能な限り迅速に行われることが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【0004】
当技術分野の現状を考慮して、ライタ(writer)(たとえば、スレッド/プロセス)がストレージ・システムに順次データを書き込み、その書き込み操作がそれぞれの生成順序とは異なる順序でストレージ・システムに到達する可能性があるコンピュータ環境においてストレージにデータを効率よく書き込む方法が必要である。一例は、ライタがネットワークによりストレージ・システムにデータを送信するシステムであり、ネットワーク・メッセージ・パッキング書き込み操作はそれぞれの生成順序とは異なる順序でストレージ・システムに到達する可能性がある。
【課題を解決するための手段】
【0005】
したがって、データを書き込むための様々な実施形態が提供される。一実施形態では、一例としてのみ、複数の書き込み間隔(write interval)に配置されたデータは複数のバッファにロードされ、複数のバッファの全体は書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成される。データは順不同にストレージ・システムに到達する可能性があり、前記バッファに適切にロードすることにより、データはストレージ・メディアに書き込まれる前に順次、順序付けられる。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージ・メディアにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。
【0006】
上記の模範的な方法実施形態に加えて、その他の模範的なシステムおよびコンピュータ・プログラム(computer product)実施形態が提供され、関連の利点を提供する。
【0007】
本発明の利点が容易に理解されるように、添付図面に例示されている特定の諸実施形態を参照することにより、上記で簡単に記述した本発明についてより詳細な記述を提供する。これらの図面が本発明の諸実施形態を描写しており、したがって、その範囲を制限するものと見なすべきではないことを理解して、添付図面の使用により具体性および詳細さを追加して本発明について記述し説明する。
【図面の簡単な説明】
【0008】
【図1】本発明の諸態様を実装することができる模範的なコンピューティング環境のブロック図である。
【図2】本発明の諸態様を実装することができるコンピューティング環境における模範的な処理装置のブロック図である。
【図3】本発明の諸態様を実装することができる模範的なコンピューティング環境における追加の模範的な処理装置のブロック図である。
【図4】ストレージ・システム内の模範的なスライディング書き込みウィンドウ・メカニズムのブロック図である。
【図5】ストレージ・システム内のスライディング書き込みウィンドウ・メカニズムを使用してデータを書き込むための模範的な方法の流れ図である。
【図6】ストレージ・システム内のスライディング書き込みウィンドウ・メカニズムを使用してデータを書き込むための模範的な方法の流れ図である。
【発明を実施するための形態】
【0009】
以下の説明および請求された主題全体を通して、例示されている諸実施形態に関する以下の用語が記載されている。「ライタ(writer)」、「複数のライタ(writers)」、「単一ライタ(single writer)」、または「複数の単一ライタ(single writers)」は、ストレージ・システムに対して書き込み間隔を生成して発行することによりストレージ・システムに順次データを書き込むスレッドまたはプロセスを指すためのものである。
【0010】
「書き込み間隔(write interval)」は、ライタによってストレージ・システムに順次書き込まれるデータ・セットからのデータの間隔を指すためのものである。書き込み間隔は順次データ・セット内のその開始オフセットおよびサイズによって指定される。順次書き込みシーケンスで生成される間、書き込み間隔は相互に交差することはない。書き込み間隔のサイズは書き込み操作間で異なる可能性がある。
【0011】
「バッファ間隔(buffer interval)」は、スライディング書き込みウィンドウ内のメモリ・バッファに関連付けられることを指すためのものであり、書き込まれるデータ・セットに関してバッファがカバーする間隔を表す。バッファ間隔は、順次データ・セット内のその開始オフセットおよびサイズと、バッファ・コンテキストによって指定される。バッファ間隔が着信データでいっぱいになると、それをストレージにフラッシュすることができ、そのバッファ・コンテキストをリリースして他の場所で再利用することができる。バッファ間隔の境界は交差せず、このようなバッファ間隔はすべて同じサイズを有する。バッファ間隔は書き込み間隔と交差する可能性がある。
【0012】
「チャンク間隔(chunk interval)」は、バッファ間隔の1セクションを指すためのものであり、書き込まれるデータ・セットに関してその開始オフセットおよびサイズによって指定される。チャンク間隔は、ストレージにフラッシュされる前にメモリ・バッファ内に保管されたデータに対して何らかの操作を実行するために使用することができる。本出願では、システム巡回冗長検査(CRC)は着信データに基づいて計算され、チャンク間隔に基づいて実行される。
【0013】
「フラッシャ(flusher)」は、その着信データ内容が完全であるメモリ・バッファをスライディング書き込みウィンドウから収集し、その内容をストレージ・メディア、ストレージ・デバイス、ストレージ環境、または記憶媒体にフラッシュするスレッドまたはプロセスを指すためのものである。単一ライタは、フラッシャのこのような機能を実行するためのフラッシャになるように適合させることができる。
【0014】
「スライディング書き込みウィンドウ(sliding writewindow)」は、それぞれが1つのバッファ間隔に関連付けられた一定数の連続メモリ・バッファを保持することを指すためのものである。したがって、スライディング書き込みウィンドウは、その収容バッファ間隔の開始オフセットのうちの最低のものであるその開始オフセットと、その収容バッファの全サイズであるサイズによって指定された集合ウィンドウ間隔(aggregated window interval)に関連付けられる。ライタまたは単一ライタは、(おそらく、順不同に発行された)書き込み間隔に関連する書き込み操作を発行し、その書き込み間隔はウィンドウ間隔内に完全に収まる。その間隔が現行ウィンドウ間隔内に完全に収まらない書き込み操作は、ウィンドウが十分に順方向にスライドするまで、ライタによって発行することができない。ウィンドウ内の1つまたは複数の開始および連続バッファ間隔が着信データで満たされると、これらのバッファは、バッファ間隔内容をストレージ・メディア、ストレージ・デバイス、ストレージ環境、あるいは記憶媒体、またはこれらの組み合わせにフラッシュするように処理される。スライディング書き込みウィンドウはフラッシュされたバッファの全サイズに応じて空のバッファを取得し、スライディング書き込みウィンドウはフラッシュされたバッファのサイズに応じて順方向にスライドする(すなわち、その開始オフセットはフラッシュされたバッファのサイズだけ増分される)。ライタが許容書き込み操作を計算するために、スライディング書き込みウィンドウはその境界をライタに公示または伝達する。
【0015】
例示されている諸実施形態のメカニズムは、ストレージ環境にデータを書き込むためのスライディング書き込みウィンドウ・メカニズムの効率的で最小限の相互排除実装例を提供するものである。ストレージ・システムによって使用されるスライディング書き込みウィンドウは本質的に1組のメモリ・バッファであって、着信書き込みデータを保管し、ストレージに書き込まれる前に着信データを適切に順序付けるために使用されるものである。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、スライディング書き込みウィンドウに書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。
【0016】
例示されている諸実施形態のメカニズムはスライディング書き込みウィンドウの実装例に関し、これは、ライタの書き込みデータを挿入するためにウィンドウのメカニズムおよびバッファにアクセスするライタ間の相互排除を効率よく最小限にするものである。したがって、スライディング書き込みウィンドウにアクセスするための相互排除を最小限にすると、スライディング書き込みウィンドウ内にボトルネックが存在する可能性を大幅に低減することができ、全体的なシステム・パフォーマンスを高めることができる。ストレージ・システムに関連して、スライディング書き込みウィンドウ・メカニズムの主な機能は、おそらくネットワークによりライタからの着信書き込みデータを順序付け、十分大きい順次間隔のデータをストレージにフラッシュできるようにすることである。例示されている諸実施形態のメカニズムは、スライディング書き込みウィンドウ・メカニズムにデータを発行する同時ライタ間の相互排除を最小限にし、このようにしてスライディング書き込みウィンドウを使用するストレージ・システムのパフォーマンスを大幅に高めるものである。加えて、例示されている諸実施形態のメカニズムは、チャンク間隔に基づいて(たとえば、巡回冗長検査「CRC」の)効率的な同時計算を容易にし、このようにしてパフォーマンスをさらに高めるものである。
【0017】
次に図1を参照すると、本発明の諸態様を実装することができる模範的なコンピューティング環境を示すブロック図が描写されている。図1、図2、および図3は、本発明の諸実施形態を実装することができるデータ処理環境の模範的な図として提供されている。図1、図2、および図3は模範的なものに過ぎず、本発明の諸態様または諸実施形態を実装することができる環境に関する制限を断言または暗示するためのものではないことを認識されたい。本発明の精神および範囲を逸脱せずに、描写されている諸実施形態に対して多くの変更を行うことができる。
【0018】
図1は、本発明の諸態様を実装することができるデータ処理システムのネットワークの図表現を描写している。ネットワーク・データ処理システム100は、本発明の諸実施形態を実装することができるコンピュータのネットワークである。ネットワーク・データ処理システム100はネットワーク102を含み、これは、ネットワーク・データ処理システム100内にまとめて接続された様々なデバイスおよびコンピュータ間の通信リンクを提供するために使用される媒体である。ネットワーク102は、ワイヤ、ワイヤレス通信リンク、または光ファイバ・ケーブルなどの接続を含むことができる。
【0019】
描写されている例では、サーバ104およびサーバ106はストレージ・ユニット108とともにネットワーク102に接続する。加えて、クライアント110、112、および114はネットワーク102に接続する。これらのクライアント110、112、および114は、たとえば、パーソナル・コンピュータまたはネットワーク・コンピュータにすることができる。描写されている例では、サーバ104は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータをクライアント110、112、および114に提供する。この例では、クライアント110、112、および114はサーバ104に対するクライアントである。ネットワーク・データ処理システム100は、図示されていない追加のサーバ、クライアント、およびその他のデバイスを含むこともできる。
【0020】
描写されている例では、ネットワーク・データ処理システム100は、相互に通信するために伝送制御プロトコル/インターネット・プロトコル(TCP/IP)というプロトコル・スイートを使用するネットワークおよびゲートウェイの世界的集合を表すネットワーク102を含むインターネットである。インターネットの中心には、データおよびメッセージを経路指定する数千台の商用、行政、教育、およびその他のコンピュータ・システムからなる、大ノードまたはホスト・コンピュータ間の高速データ通信回線のバックボーンがある。当然のことながら、ネットワーク・データ処理システム100は、たとえば、イントラネット、ローカル・エリア・ネットワーク(LAN)、または広域ネットワーク(WAN)など、いくつかの異なるタイプのネットワークとして実装することもできる。図1は、本発明の種々の実施形態に関するアーキテクチャ上の制限としてではなく、一例として示されている。
【0021】
図2は、本発明の諸態様を実装することができる模範的なコンピューティング環境の一部分200を示すブロック図である。データ処理システム200は、図1のサーバ104またはクライアント108などのコンピュータの一例であり、そこには本発明の諸実施形態に関するプロセスを実装するコンピュータ使用可能コードまたは命令が位置することができる。
【0022】
描写されている例では、データ処理システム200は、ノースブリッジおよびメモリ・コントローラ・ハブ(MCH)208とサウスブリッジおよび入出力(I/O)コントローラ・ハブ(ICH)210とを含むハブ・アーキテクチャを使用する。処理装置202、メイン・メモリ204、およびグラフィックス・プロセッサ218はノースブリッジおよびメモリ・コントローラ・ハブ208に接続されている。グラフィックス・プロセッサ218は、アクセラレィテッド・グラフィックス・ポート(AGP)を介してノースブリッジおよびメモリ・コントローラ・ハブ208に接続することができる。
【0023】
描写されている例では、ローカル・エリア・ネットワーク(LAN)アダプタ212、オーディオ・アダプタ216、キーボードおよびマウス・アダプタ220、モデム222、読み取り専用メモリ(ROM)224、ハード・ディスク(HDD)226、CD−ROMドライブ230、ユニバーサル・シリアル・バス(USB)ポートおよびその他の通信ポート232、ならびにPCI/PCIeデバイス234はバス238を介してサウスブリッジおよび入出力コントローラ・ハブ210に接続する。PCI/PCIeデバイスは、たとえば、ノートブック・コンピュータ用のイーサネット・アダプタ、アドイン・カード、およびPCカードを含むことができる。PCIはカード・バス・コントローラを使用するが、PCIeは使用しない。ROM224は、たとえば、フラッシュ・バイナリ入出力システム(BIOS)にすることができる。
【0024】
ハード・ディスク226およびCD−ROMドライブ230は、バス240を介してサウスブリッジおよび入出力コントローラ・ハブ210に接続する。ハード・ディスク226およびCD−ROMドライブ230は、たとえば、インテグレーテッド・ドライブ・エレクトロニクス(IDE)またはシリアル・アドバンスト・テクノロジー・アタッチメント(SATA)インターフェースを使用することができる。スーパー入出力(SIO)デバイス236はサウスブリッジおよび入出力コントローラ・ハブ210に接続することができる。
【0025】
オペレーティング・システムは、処理装置202上で実行され、図2および図3のデータ処理システム200内の様々なコンポーネントを調整し、その制御を行う。クライアントとして、オペレーティング・システムは、当業者に知られている市販のオペレーティング・システムにすることができる。サーバとして、データ処理システム200は、たとえば、拡張対話式エグゼクティブ(AIX(R))オペレーティング・システムまたはLINUXオペレーティング・システムを実行するIBM(R)のeServer(TM)pSeries(R)コンピュータ・システムにすることができる。データ処理システム200は、処理装置202内の複数のプロセッサを含む対称型マルチプロセッサ(SMP)システムにすることができる。
【0026】
代わって、単一プロセッサ・システムを使用することもできる。オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラム用の命令は、ハード・ディスク226などのストレージ・デバイス上に位置し、処理装置202による実行のためにメイン・メモリ204にロードすることができる。本発明の諸実施形態に関するプロセスは、コンピュータ使用可能プログラム・コードを使用する処理装置202によって実行され、そのコードは、たとえば、メイン・メモリ204、読み取り専用メモリ224などのメモリ内、あるいは1つまたは複数の周辺装置226および230内に位置することができる。
【0027】
当業者であれば、図1、図2、および図3のハードウェアは実装例次第で様々になる可能性があることを認識するであろう。図1、図2、および図3に描写されているハードウィーに加えてまたはその代わりに、フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどのその他の内部ハードウェアまたは周辺装置を使用することもできる。また、本発明のプロセスはマルチプロセッサ・データ処理システムに適用することもできる。いくつかの例示的な例として、データ処理システム200は携帯情報端末(PDA)にすることができ、これは、オペレーティング・システム・ファイルあるいはユーザ生成データまたはその両方を保管するための不揮発性メモリを提供するためにフラッシュ・メモリによって構成される。
【0028】
バス・システムは、図2に示されているバス238またはバス240などの1つまたは複数のバスで構成することができる。当然のことながら、バス・システムは、そのファブリックまたはアーキテクチャに付加された種々のコンポーネントまたはデバイス間のデータの転送を可能にする任意のタイプの通信ファブリックまたはアーキテクチャを使用して実装することができる。通信ユニットは、図2のモデム222またはネットワーク・アダプタ212など、データを送受信するために使用される1つまたは複数のデバイスを含むことができる。メモリは、たとえば、メイン・メモリ204、読み取り専用メモリ224、または図2のノースブリッジおよびメモリ・コントローラ・ハブ208内で検出されるようなキャッシュにすることができる。図1、図2、および図3に描写されている例ならびに上記の諸例はアーキテクチャ上の制限を暗示するためのものではない。たとえば、データ処理システム200は、PDAの形を取ることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話機にすることもできる。
【0029】
次に図3を参照すると、本発明の諸態様を実装することができる模範的なコンピューティング環境の一部分50のブロック図が描写されている。例示されている実施形態では、一部分50は、プロセッサ52と、ランダム・アクセス・メモリ(RAM)などのメモリ54とを含む。一部分50は、便宜上例示されていない複数のコンポーネントに動作可能に結合することができ、このようなコンポーネントとしては、グラフィカル・ユーザ・インターフェース上のユーザに対してウィンドウなどの画像を提示するディスプレイ、キーボード、マウス、プリンタなどを含むがこれらに限定されない。当然のことながら、当業者であれば、上記のコンポーネントまたは任意の数の異なるコンポーネント、周辺装置、およびその他のデバイスの任意の組み合わせを図3とともに使用できることを認識するであろう。
【0030】
例示されている実施形態では、図3のプロセッサ52は、メモリ54に保管されたオペレーティング・システム(OS)56(たとえば、AIX、z/OS、OS/2、LINUX、UNIX、WINDOWS、MAC OS)の制御下で動作し、入力およびコマンドを受け入れて結果を提示するためにユーザとのインターフェースを取る。本発明の一実施形態では、OS56は本発明による機能を容易にする。このために、OS56は書き込みモジュール22と読み取りモジュール62とを含み、これらは上記の模範的な方法における様々なプロセスおよびメカニズムを実行するために適合させることができる。
【0031】
書き込みモジュール22、読み取りモジュール62、および単一ライタ65は、ネットワークから送信されるデータを読み書きし、ストレージ・システムに対して書き込み間隔を生成して発行することにより順次データをストレージ・システムに書き込むスレッドまたはプロセスを読み書きするためのコマンドを実行することができる。書き込みモジュール22、読み取りモジュール62、および単一ライタ65は、図4にも記載されるように、スライディング書き込みウィンドウ304(以下の図4)がスライディング書き込みウィンドウ304のバッファ64に着信書き込みデータを保管するとき、ならびにスライディング書き込みウィンドウ304内の1つまたは複数の開始および連続バッファ64(たとえば、スライディング書き込みウィンドウ304内の第1のバッファ64から始まる一連のバッファ)がデータで完全に満たされたときに、スライディング書き込みウィンドウ304がこの情報を単一ライタ65に伝達し、次に単一ライタ65がフラッシャの役割を引き受けるように構成し設計することができる。また、バッファ64は、上記の模範的な方法における様々なプロセスおよびメカニズムを実行するために適合させることもできる。バッファ64は、着信書き込みデータおよび書き込み間隔を保管し、ストレージ・メディアまたはストレージ環境に書き込まれる前に着信データを適切に順序付けるために使用することができ、その機能については以下の図4に記載する。
【0032】
一実施形態では、オペレーティング・システム56、書き込みモジュール22、読み取りモジュール、単一ライタ65、およびバッファ64を実装する命令はコンピュータ可読媒体に有形に実施され、そのコンピュータ可読媒体としては、Zipドライブ、ディスク、ハード・ディスク、DVD/CD−ROM、デジタル・テープ、ソリッド・ステート・ドライブ(SSD)などの1つまたは複数の固定または取り外し可能データ・ストレージ・デバイスを含むことができる。さらに、オペレーティング・システム56、書き込みモジュール22、読み取りモジュール、およびバッファ64は、コンピューティング・ストレージ環境によって読み取られ実行されたときに、本発明を実装するかあるいは使用するかまたはその両方を行うために必要な諸ステップを実行するための命令を含む。また、オペレーティング・システム56、書き込みモジュール22、読み取りモジュール、単一ライタ65、およびバッファ64は、メモリ54に有形に実施するか、あるいは様々なコンポーネントを介して図1に記載されているネットワークによって送信またはアクセスするか、またはその両方を行うことができる。このため、本明細書で使用する可能性のある「装置(article of manufacture)」、「プログラム・ストレージ・デバイス」、および「コンピュータ・プログラム」という用語は、任意のコンピュータ可読デバイスまたはメディアからアクセス可能あるいは操作可能またはその両方であるコンピュータ・プログラムを包含するためのものである。
【0033】
例示されている諸実施形態に関するメカニズムは、たとえば、前に記載したSANまたはNASなどのコンピューティング・デバイスのネットワークを含む分散コンピュータ・システムを管理するための機能を含む、1つまたは複数の関連ソフトウェア・アプリケーション・プログラム58を含むことができる。したがって、プロセッサ52は1つまたは複数のストレージ管理プロセッサ(SMP)を含むことができる。アプリケーション・プログラム58は、単一コンピュータ内で、またはコンピューティング・デバイスのネットワークを含む分散コンピュータ・システムの一部として動作することができる。ネットワークは、ローカル・エリア・ネットワークあるいはインターネット接続(たとえば、仮想私設網(VPN)接続を介して、公用または安全なものになる可能性がある)またはその両方を介して接続されたか、もしくは、ファイバ・チャネルSANまたは当業者によって理解されるその他の既知のネットワーク・タイプを介して接続された1つまたは複数のコンピュータを包含することができる。
【0034】
図4は、例示されている諸実施形態の様々な態様を取り入れた模範的なスライディング書き込みウィンドウ機能300のブロック図である。スライディング書き込みウィンドウ304は書き込み間隔302の形で着信書き込みデータをバッファ64(図3)に保管し、バッファ64はバッファ間隔306に関連付けられている。前に示した通り、バッファ間隔は順次データ・セット内のその開始オフセットおよびサイズと、バッファ・コンテキストによって指定される。したがって、各バッファ間隔306は、部分的に、図示の通り、バッファ・コンテキスト308によって指定される。同じく、前に示した通り、チャンク間隔はバッファ間隔の一セクションであり、書き込まれるデータ・セットに関してその開始オフセットおよびサイズによって指定される。複数のチャンク間隔310は(単一バッファ間隔に関する一例として示されている)各バッファ間隔306の複数セクションである。
【0035】
1つまたは複数の開始および連続バッファ64(すなわち、ウィンドウ内の第1のバッファ64から始まる一連のバッファ)がデータで完全に満たされたときに、スライディング書き込みウィンドウ304はこの情報を単一ライタ(図3の65)に伝達し、次に単一ライタ65がフラッシャの役割を引き受ける。フラッシャは、入手可能な限り多くの完全バッファ64を収集しているクリティカル・セクションに入り、これらのバッファ64またはバッファ間隔に対する参照をバッファ64の適切な順序でフラッシュ待ち行列(flushing queue)に挿入し、クリティカル・セクションを終了する。
【0036】
次にフラッシャは、フラッシュ待ち行列から(バッファ64の順序で)バッファ64の参照を取り出し、参照されたバッファ64の内容をストレージ・メディアまたは記憶媒体にフラッシュする。次にフラッシャは、空のバッファ64を取得し、クリティカル・セクションに入り、これらのバッファ64をスライディング書き込みウィンドウ304に追加する。スライディング書き込みウィンドウにバッファ64を追加する操作およびそこからバッファ64を除去する操作と、着信データを書き込むためのスライディング書き込みウィンドウ304内の位置を計算し、次にスライディング書き込みウィンドウ304とスライディング書き込みウィンドウを含むバッファ64が満たされているレベルを示す操作との間で相互排除が適用される。したがって、クリティカル・セクション内で高速メモリ操作のみが実行されるように相互排除が最小限になる。本発明のメカニズムにより、スライディング書き込みウィンドウ・メカニズム304内のボトルネックの除去が可能になり、ストレージ・システムの全体的なパフォーマンスが向上する。
【0037】
次に図5および図6を参照すると、スライディング書き込みウィンドウ・メカニズムの効率的で最小限の相互排除実装例としてデータを書き込むための模範的な方法500の流れ図が提示されている。方法500は始まり(ステップ501)、データはネットワークから書き込み間隔にロードされる(ステップ502)。この方法はクリティカル・セクションに入る(ステップ504)。この方法は、所与の書き込み間隔に対応しなければならないそのバッファ間隔を計算して返すスライディング書き込みウィンドウ・メカニズムに書き込み間隔を提供し(ステップ506)、次にクリティカル・セクションを出る(ステップ508)。次にこの方法は第1の戻りバッファ間隔を考慮する(ステップ509)。書き込み間隔のデータはバッファ間隔の開始オフセットに応じてバッファ・コンテキストにコピーされる(ステップ510)。次にこの方法はバッファ間隔内の第1のチャンク間隔を考慮する(ステップ512)。この方法は考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分する(ステップ514)。この方法は、考慮したチャンク間隔内の占有バイトの新しい数がチャンク・サイズに等しいかどうかを判断する(ステップ516)。考慮したチャンク間隔内の占有バイトの新しい数がチャンク・サイズに等しくない場合、この方法はバッファ内の追加のチャンク間隔の有無をチェックする(ステップ528)。バッファ内に追加のチャンク間隔がある場合、この方法は循環して戻り(ステップ528)、考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分する(ステップ514)。考慮したチャンク間隔内の占有バイトの新しい数がチャンク・サイズに等しい場合(ステップ516)、この方法はチャンクのCRC値を計算し、計算した値を考慮したチャンク間隔のプロパティに割り当てる(ステップ518)。
【0038】
もう一度、この方法はクリティカル・セクションに入る(ステップ520)。クリティカル・セクションでは(ステップ520)、この方法は考慮したバッファ間隔のうちの完全チャンク間隔の数を1だけ増分する(ステップ521)。この方法は、バッファ間隔内の完全チャンク間隔の数の新しい値がバッファ間隔内のチャンク間隔の数に等しいかどうか、ならびに考慮したバッファ間隔がスライディング書き込みウィンドウ間隔内の第1の間隔であるかどうかを判断する(ステップ522)。ステップ522の条件が該当しない場合、この方法はクリティカル・セクションを出る(ステップ526)。ステップ522の条件が該当する場合、この方法は、正確に1つのスレッドで設定されるフラグを設定して、第1のバッファ間隔がフラッシュの準備ができていることを示し(ステップ524)、次にクリティカル・セクションを出る(ステップ526)。次に、この方法は、前述の通り、バッファ間隔内に追加のチャンク間隔があるかどうかを判断する(ステップ528)。バッファ間隔内に追加のチャンク間隔がある場合、この方法は循環して戻り(ステップ528)、考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分する(ステップ514)。バッファ間隔内に追加のチャンク間隔がまったくない場合、この方法は追加のバッファ間隔があるかどうかを判断する(ステップ530)。追加のバッファ間隔がある場合、書き込み間隔のデータはバッファ間隔の開始オフセットに応じてバッファ・コンテキストにコピーされる(ステップ510)。追加のバッファ間隔がまったくない場合(ステップ530)、この方法は第1のバッファ間隔が完全であることを示すフラグが設定されているかどうかを判断し(ステップ532)、設定されていない場合、この方法は終了する(ステップ552)。
【0039】
フラグが設定されている場合(ステップ532)、この方法はクリティカル・セクションに入る(ステップ534)。スライディング書き込みウィンドウ内のバッファ間隔がスキャンされ、スライディング書き込みウィンドウ内の常駐順序に基づいて、第1のバッファからフラッシュ待ち行列まで、完全な連続バッファ間隔に参照が追加される(ステップ536)。スライディング書き込みウィンドウから抽出されたバッファ間隔の全サイズだけ開始オフセットを増分することにより、スライディング書き込みウィンドウが順方向に移動する(ステップ538)。この方法はクリティカル・セクションを出る(ステップ540)。バッファ間隔順序に基づいて、フラッシュ待ち行列からバッファ間隔が抽出される(ステップ542)。抽出されるバッファ間隔の数は、現在の実行スレッドによってフラッシュ待ち行列に挿入されたバッファ間隔の数に等しい(ステップ542)。新しい空のバッファ間隔が取得される(ステップ544)。取得されるバッファ間隔の数は現在の実行スレッドによってフラッシュされるバッファ間隔の数である。この方法はクリティカル・セクションに入り(ステップ546)、取得したバッファ間隔がスライディング書き込みウィンドウに追加される。スライディング書き込みウィンドウ内にいずれかのバッファ間隔が存在する場合、取得したバッファ間隔は既存のバッファ間隔の次の順序に置かれる。したがって、スライディング書き込みウィンドウのサイズは追加されたバッファ間隔の全サイズだけ増加する。この方法はクリティカル・セクションを出て(ステップ550)、この方法は終了する(ステップ552)。
【0040】
例示されている諸実施形態の一態様では、単一ライタはクリティカル・セクションに入り、単一ライタの書き込み間隔をスライディング書き込みウィンドウに提供し、スライディング書き込みウィンドウは所与の書き込み間隔に対応することになるバッファ間隔を計算して返す。スライディング書き込みウィンドウは並行してロールフォワードされる可能性があるので、バッファ間隔を返すためにスライディング書き込みウィンドウによって実行される高速計算はクリティカル・セクションの内部で行われる。次にクリティカル・セクションを出る。
【0041】
戻りバッファ間隔のそれぞれについて、例示されている諸実施形態のメカニズムはクリティカル・セクションの外部で操作を実行することができる。単一ライタは、バッファ間隔開始オフセットに応じて、単一ライタの書き込み間隔のデータをバッファ・コンテキストに書き込むかまたはコピーする。データ・コピーはより長い操作であるので、クリティカル・セクションの外部で実行される。単一ライタは、スライディング書き込みウィンドウの所与のバッファ間隔内への単一ライタの書き込み間隔の書き込みが完了したことをスライディング書き込みウィンドウに通知する。単一ライタは、バッファ間隔内部のチャンク間隔について繰り返し、各チャンク間隔について、このチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新される(この値は事前にゼロに初期設定される)。アトミック操作は、特定の操作の間中、インスタント・ロック(instant locking)によって実装される。新しい値が一定のチャンク・サイズに到達した場合、このチャンクの巡回冗長検査「CRC」値が計算される。これは、クリティカル・セクションの外部で行われる、より長い操作である。この計算の結果は、関連チャンク間隔のプロパティ内に設定される。
【0042】
クリティカル・セクションの外部でいくつかの操作を実行すると、例示されている諸実施形態のメカニズムはクリティカル・セクションを再確立するかまたはそこに再び入ることができる。次に、関連バッファ間隔の完全チャンク間隔の数は1だけ増分される。完全チャンク間隔の数の新しい値が1つのバッファ間隔内のチャンク間隔の定数に到達した場合、ならびに、関連のバッファ間隔が現在のスライディング・ウィンドウ内の第1の間隔である場合、操作は、単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示す。書き込み間隔は交差しないので、正確に1つの単一ライタは、第1のバッファ間隔がフラッシュの準備ができているという指示を受信する。次にクリティカル・セクションを出る。
【0043】
スライディング書き込みウィンドウ・メカニズムによって提供されたすべてのバッファ間隔を処理すると、単一ライタは、第1のバッファ間隔が完全であることを示すフラグが設定されているかどうかをチェックし、そうである場合、単一ライタは続行し、フラッシャの役割を引き受け、もう一度、クリティカル・セクションに入る。フラッシャは、スライディング書き込みウィンドウ内のバッファ間隔をスキャンし、そのバッファがスライディング書き込みウィンドウ内に常駐する順序で、完全な(すなわち、そのチャンク間隔がすべて完全である)第1のバッファからフラッシュ待ち行列まで、連続バッファ間隔に参照を追加する。プロセス内のこの時点では少なくとも1つの完全バッファ間隔が存在することになる。
【0044】
次に、スライディング書き込みウィンドウは、スライディング書き込みウィンドウから抽出されたバッファ間隔の全サイズだけその開始オフセットを増分することにより、順方向に移動する。新しいバッファの取得が行われていないので、この段階でスライディング書き込みウィンドウのサイズが低減される。次にクリティカル・セクションを出る。
【0045】
クリティカル・セクションの外部で、フラッシュ待ち行列からバッファ間隔が抽出される。現在の実行スレッドによって抽出されたバッファ間隔の数は、現在の実行スレッドによってフラッシュ待ち行列に挿入されたバッファ間隔の数に等しい。バッファ間隔は、フラッシュ待ち行列内に置かれた順序でフラッシュ待ち行列から抽出される。また、バッファ間隔の数のそれぞれについて、バッファ間隔の内容をストレージ・メディアにフラッシュすることができ、そのチャンクのCRC値は(読み取り操作の将来の検証のために)保管される。依然としてクリティカル・セクションの外部にある間に、空のバッファ間隔が取得される。取得されたバッファ間隔の数は現在の実行スレッドによってフラッシュされたバッファの数である。
【0046】
もう一度、例示されている諸実施形態のメカニズムはクリティカル・セクションに再び入ることができる。取得された空のバッファ間隔は、スライディング書き込みウィンドウに追加され、ウィンドウ内の既存のバッファの次に置かれる。スライディング書き込みウィンドウのサイズはそれに応じて増加する。次にクリティカル・セクションを出る。
【0047】
当業者であれば認識するように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラムとして実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェア態様とハードウェア態様を結合した実施形態の形を取ることができ、このような実施形態は一般に本明細書ではいずれも「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、コンピュータ可読プログラム・コードがそこに実施されている1つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラムの形を取ることもできる。
【0048】
1つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体システム、装置、あるいはデバイス、もしくはこれらの任意の適切な組み合わせにすることができるが、これらに限定されないものである。コンピュータ可読記憶媒体のより具体的な例(非網羅的リスト)としては、1つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラム可能読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、またはこれらの任意の適切な組み合わせを含むであろう。本書に関連して、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管可能な任意の有形媒体にすることができる。
【0049】
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、RFなど、またはこれらの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語ならびに「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続される場合もあれば、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して接続が行われる場合もある。
【0050】
本発明の諸実施形態による方法、装置(システム)、およびコンピュータ・プログラムの流れ図あるいはブロック図またはその両方に関連して、本発明の諸態様について説明してきた。流れ図あるいはブロック図またはその両方の各ブロックならびに流れ図あるいはブロック図またはその両方の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実装可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、マシンを生産するために汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供することができ、それにより、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令は流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/動作を実装するための手段を作成することになる。
【0051】
また、これらのコンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに対して特定の方法で機能するよう指示することができるコンピュータ可読媒体に保管することもでき、それにより、コンピュータ可読媒体に保管された命令は流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/動作を実装する命令を含む装置(article of manufacture)を生産することになる。また、これらのコンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードして、コンピュータによって実装されるプロセスを生成するためにコンピュータ、その他のプログラマブル装置、またはその他のデバイス上で一連の動作ステップを実行させることができ、それにより、コンピュータまたはその他のプログラマブル装置上で実行される命令は流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/動作を実装するためのプロセスを提供することになる。
【0052】
上記の図面内の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラムについて可能な実装例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能(複数も可)を実装するための1つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実装例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることにも留意されたい。たとえば、連続して示されている2つのブロックは、関係する機能に応じて、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックならびにブロック図あるいは流れ図またはその両方の複数ブロックの組み合わせは、指定の機能または動作を実行する特殊目的ハードウェアベースのシステムによって、または特殊目的ハードウェアとコンピュータ命令の組み合わせによって、実装可能であることも留意されるであろう。
【0053】
本発明の1つまたは複数の実施形態について詳細に例示してきたが、当業者であれば、特許請求の範囲に明記された本発明の範囲を逸脱せずに、これらの諸実施形態に対して変更および適応が可能であることを認識するであろう。
【符号の説明】
【0054】
300 スライディング書き込みウィンドウ機能
302 書き込み間隔
304 スライディング書き込みウィンドウ
306 バッファ間隔
308 バッファ・コンテキスト
310 チャンク間隔

【特許請求の範囲】
【請求項1】
プロセッサ・デバイスを使用してデータを書き込むための方法であって、
複数の書き込み間隔に配置された前記データを複数のバッファにロードすることであって、前記複数のバッファの全体が前記複数の書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ内に順次、順序付けられることと、
前記スライディング書き込みウィンドウ・メカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも1つに前記データを満たすと同時に前記スライディング書き込みウィンドウ・メカニズム内の前記データを単一ライタに伝達することであって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウ・メカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュ・メカニズムとしての機能的役割を引き受けるように適合されること
を含む、方法。
【請求項2】
前記スライディング書き込みウィンドウ・メカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウ・メカニズム内の位置を計算する操作との間でのみ、クリティカル・セクションを介して相互排除が適用される、請求項1記載の方法。
【請求項3】
前記単一ライタおよび前記スライディング書き込みウィンドウ・メカニズムが、
前記複数の書き込み間隔を前記スライディング書き込みウィンドウ・メカニズムに提供することであって、前記スライディング書き込みウィンドウ・メカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返し、前記複数のバッファ間隔が前記複数のバッファに対応することと、
前記複数のバッファ間隔のうちの1つの関連バッファ間隔の複数の完全チャンク間隔の数を1だけ増分することと、
前記複数のバッファ間隔のうちの少なくとも1つを前記スライディング書き込みウィンドウ・メカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの1つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの1つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウ・メカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの1つを除去するときに減少すること
のうちの少なくとも1つを実行することにより、前記クリティカル・セクションの1つに入る、請求項2記載の方法。
【請求項4】
前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの1つにおいて定数に到達し、前記複数のバッファ間隔のうちの1つが前記スライディング書き込みウィンドウ・メカニズム内の第1の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示す、請求項3記載の方法。
【請求項5】
前記第1のバッファ間隔が完全であることを前記フラグが示す場合に、
前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ間隔をスキャンすることと、
前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第1のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、
前記複数のバッファ間隔が前記スライディング書き込みウィンドウ・メカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、
前記スライディング書き込みウィンドウ・メカニズムから除去された前記複数のバッファ間隔のうちの前記1つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウ・メカニズムを順方向に移動すること
のうちの少なくとも1つを前記単一ライタにより実行することをさらに含む、請求項4記載の方法。
【請求項6】
前記クリティカル・セクションのうちの1つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、
前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファ・コンテキストにデータをコピーすることと、
前記単一ライタにより、前記複数のバッファ間隔のうちの1つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウ・メカニズムに通知することと、
前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタント・ロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、前記値がゼロに初期設定されることと、
フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査(CRC)が計算されることと、
フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数であること
のうちの少なくとも1つを前記クリティカル・セクションのうちの前記1つの外部で実行することをさらに含む、請求項2記載の方法。
【請求項7】
前記単一ライタを、前記スライディング書き込みウィンドウ・メカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させることであって、書き込むべきデータが前記スライディング書き込みウィンドウ・メカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウ・メカニズムに送信することをさらに含む、請求項1記載の方法。
【請求項8】
コンピュータ環境においてデータを書き込むためのシステムであって、
コンピュータ環境において動作可能な少なくとも1つのプロセッサ・デバイスを含み、前記少なくとも1つのプロセッサ・デバイスが、
複数の書き込み間隔に配置された前記データを複数のバッファにロードすることであって、前記複数のバッファの全体が前記書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ内に順次、順序付けられることと、
前記スライディング書き込みウィンドウ・メカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも1つに前記データを満たすと同時に前記スライディング書き込みウィンドウ・メカニズム内の前記データを単一ライタに伝達することであって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウ・メカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュ・メカニズムとしての機能的役割を引き受けるように適合されること
のために適合される、システム。
【請求項9】
前記スライディング書き込みウィンドウ・メカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウ・メカニズム内の位置を計算する操作との間でのみ、クリティカル・セクションを介して相互排除が適用される、請求項8記載のシステム。
【請求項10】
前記単一ライタおよび前記スライディング書き込みウィンドウ・メカニズムが、
前記複数の書き込み間隔を前記スライディング書き込みウィンドウ・メカニズムに提供することであって、前記スライディング書き込みウィンドウ・メカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返すことと、
前記複数のバッファ間隔のうちの1つの関連バッファ間隔の複数の完全チャンク間隔の数を1だけ増分することと、
前記複数のバッファ間隔のうちの少なくとも1つを前記スライディング書き込みウィンドウ・メカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの1つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの1つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウ・メカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの1つを除去するときに減少すること
のうちの少なくとも1つを実行することにより、前記クリティカル・セクションの1つに入ることを容易にするために、前記少なくとも1つのプロセッサ・デバイスがさらに適合される、請求項9記載のシステム。
【請求項11】
前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの1つにおいて定数に到達し、前記複数のバッファ間隔のうちの1つが前記スライディング書き込みウィンドウ・メカニズム内の第1の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示すために、前記少なくとも1つのプロセッサ・デバイスがさらに適合される、請求項10記載のシステム。
【請求項12】
前記第1のバッファ間隔が完全であることを前記フラグが示す場合に、
前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ間隔をスキャンすることと、
前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第1のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、
前記複数のバッファ間隔が前記スライディング書き込みウィンドウ・メカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、
前記スライディング書き込みウィンドウ・メカニズムから除去された前記複数のバッファ間隔のうちの前記1つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウ・メカニズムを順方向に移動すること
のうちの少なくとも1つを前記単一ライタにより実行するために、前記少なくとも1つのプロセッサ・デバイスがさらに適合される、請求項11記載のシステム。
【請求項13】
前記クリティカル・セクションのうちの1つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、
前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファ・コンテキストにデータをコピーすることと、
前記単一ライタにより、前記複数のバッファ間隔のうちの1つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウ・メカニズムに通知することと、
前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタント・ロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、ゼロに初期設定されることと、
フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査(CRC)が計算されることと、
フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数に等しいこと
のうちの少なくとも1つを前記クリティカル・セクションのうちの前記1つの外部で実行するために、前記少なくとも1つのプロセッサ・デバイスがさらに適合される、請求項9記載のシステム。
【請求項14】
前記単一ライタを、前記スライディング書き込みウィンドウ・メカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させ、書き込むべきデータが前記スライディング書き込みウィンドウ・メカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウ・メカニズムに送信するために、前記少なくとも1つのプロセッサ・デバイスがさらに適合される、請求項8記載のシステム。
【請求項15】
プロセッサ・デバイスを使用してコンピュータ環境においてデータを書き込むコンピュータ・プログラムであって、前記コンピュータ・プログラムがそこに保管されたコンピュータ可読プログラム・コード部分を有するコンピュータ可読記憶媒体を含み、前記コンピュータ可読プログラム・コード部分が、
複数の書き込み間隔に配置された前記データを複数のバッファにロードするための第1の実行可能部分であって、前記複数のバッファの全体が前記書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ内に順次、順序付けられる第1の実行可能部分と、
前記スライディング書き込みウィンドウ・メカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも1つに前記データを満たすと同時に前記スライディング書き込みウィンドウ・メカニズム内の前記データを単一ライタに伝達するための第2の実行可能部分であって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウ・メカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュ・メカニズムとしての機能的役割を引き受けるように適合される第2の実行可能部分と
を含む、コンピュータ・プログラム。
【請求項16】
前記スライディング書き込みウィンドウ・メカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウ・メカニズム内の位置を計算する操作との間でのみ、クリティカル・セクションを介して相互排除が適用される、請求項15記載のコンピュータ・プログラム。
【請求項17】
前記単一ライタおよび前記スライディング書き込みウィンドウ・メカニズムが、
前記複数の書き込み間隔を前記スライディング書き込みウィンドウ・メカニズムに提供することであって、前記スライディング書き込みウィンドウ・メカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返すことと、
前記複数のバッファ間隔のうちの1つの関連バッファ間隔の複数の完全チャンク間隔の数を1だけ増分することと、
前記複数のバッファ間隔のうちの少なくとも1つを前記スライディング書き込みウィンドウ・メカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの1つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの1つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウ・メカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの1つを除去するときに減少すること
のうちの少なくとも1つを実行することにより、前記クリティカル・セクションの1つに入ることを容易にするための第3の実行可能部分をさらに含む、請求項16記載のコンピュータ・プログラム。
【請求項18】
前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの1つにおいて定数に到達し、前記複数のバッファ間隔のうちの1つが前記スライディング書き込みウィンドウ・メカニズム内の第1の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示すための第4の実行可能部分をさらに含む、請求項17記載のコンピュータ・プログラム。
【請求項19】
前記第1のバッファ間隔が完全であることを前記フラグが示す場合に、
前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ間隔をスキャンすることと、
前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第1のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、
前記複数のバッファ間隔が前記スライディング書き込みウィンドウ・メカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、
前記スライディング書き込みウィンドウ・メカニズムから除去された前記複数のバッファ間隔のうちの前記1つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウ・メカニズムを順方向に移動すること
のうちの少なくとも1つを前記単一ライタにより実行するための第5の実行可能部分をさらに含む、請求項18記載のコンピュータ・プログラム。
【請求項20】
前記クリティカル・セクションのうちの1つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、
前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファ・コンテキストにデータをコピーすることと、
前記単一ライタにより、前記複数のバッファ間隔のうちの1つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウ・メカニズムに通知することと、
前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタント・ロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、ゼロに初期設定されることと、
フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査(CRC)が計算されることと、
フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数に等しいこと
のうちの少なくとも1つを前記クリティカル・セクションのうちの前記1つの外部で実行するための第3の実行可能部分をさらに含む、請求項16記載のコンピュータ・プログラム。
【請求項21】
前記単一ライタを、前記スライディング書き込みウィンドウ・メカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させるための第3の実行可能部分であって、書き込むべきデータが前記スライディング書き込みウィンドウ・メカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウ・メカニズムに送信する第3の実行可能部分をさらに含む、請求項15記載のコンピュータ・プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2012−113705(P2012−113705A)
【公開日】平成24年6月14日(2012.6.14)
【国際特許分類】
【出願番号】特願2011−245084(P2011−245084)
【出願日】平成23年11月9日(2011.11.9)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
2.Linux
3.UNIX
4.WINDOWS
5.JAVA
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【Fターム(参考)】