以下の説明は、如何なる当業者も実施形態を作成し使用できるようにするために提示され、特定の用途及びその要件の文脈で提供される。開示される実施形態に対する種々の変更は、当業者に容易に明らかになり、本明細書に定義される一般原理は、本開示の趣旨及び範囲から逸脱することなく他の実施形態及び用途に適用されてもよい。したがって、本発明は、示される実施形態に限定されず、本明細書に開示される原理及び特徴と一致する最も広い範囲が付与される。
この詳細な説明に述べるデータ構造及びコードは、典型的には、コンピュータ可読記憶媒体に記憶され、そのコンピュータ可読記憶媒体は、コンピュータシステムによって使用するためのコード及び/又はデータを記憶することができる任意のデバイス又は媒体でもよい。コンピュータ可読記憶媒体には、揮発性メモリ、不揮発性メモリ、ディスクドライブや磁気テープ、CD(コンパクトディスク)、DVD(デジタル多用途ディスク若しくはデジタルビデオディスク)などの磁気及び光記憶デバイス、又は現在既知若しくは今後開発されるコード及び/若しくはデータを記憶できる他の媒体が挙げられるが、これらに限定されない。
詳細な説明の節で述べる方法及びプロセスは、前述のようなコンピュータ可読記憶媒体に記憶することができるコード及び/又はデータとして実施することができる。コンピュータシステムが、コンピュータ可読記憶媒体に記憶されたコード及び/又はデータを読み取り、執行するとき、コンピュータシステムは、データ構造及びコードとして実施され、コンピュータ可読記憶媒体内に記憶された方法及びプロセスを実行する。
更に、本明細書で述べる方法及びプロセスは、ハードウェアモジュール又は装置に含まれてもよい。これらのモジュール又は装置には、特定用途向け集積回路(ASIC)チップ、フィールドプログラマブルゲートアレイ(FPGA)、特定の時間に特定のソフトウェアモジュール若しくはコードを執行する専用若しくは共用プロセッサ、及び/又は現在既知若しくは今後開発される他のプログラム可能な論理デバイスが挙げられることがあるが、これらに限定されない。ハードウェアモジュール又は装置は、活性化されたとき、そこに含まれる方法及びプロセスを実行する。
開示される実施形態は、コンピュータシステム内のデータを転送するための方法及びシステムを提供する。図1に示されるように、コンピュータシステムは、ソリッドステートドライブ(SSD)及び/又はハイブリッドハードドライブ(HHD)などの記憶デバイス142を含んでもよい。記憶デバイス142は、SSD内のフラッシュチップ及び/又はアレイのディスク(例えば、独立ディスクの冗長アレイ(RAID))などの1つ以上の記憶ユニット132〜140を含むことがある。
記憶デバイス142は、コンピュータシステム内のホスト100のためのデータを記憶することがある。図1に示されるように、ホスト100は、プロセッサ110及びメモリ120を含むことがある。更に、ホスト100は、バス130を介して記憶デバイス142用の記憶デバイスコントローラ122と通信することによって、記憶ユニット132〜140にデータを読み書きしてもよい。例えば、プロセッサ110は、バス130を介してデータの要求を記憶デバイスコントローラ122に送信することによって、記憶デバイス142に格納されたデータを取得してもよい。記憶デバイスコントローラ122は、1つ以上の記憶ユニット132〜140からデータを読み取り、そのデータをバス130を介してプロセッサ110及び/又はメモリ120内の1つ以上のロケーションに転送することによって、要求を処理してもよい。
当業者は、ホスト100と記憶デバイス142との間のデータ転送速度が、バス130の待ち時間及び/又は帯域幅によって制限されることがあることを理解するであろう。例えば、バス130は、記憶デバイス142からホスト100に最大6Gビット/秒の速度でデータをシリアルに転送するシリアルATA(SATA)バスに対応してもよい。しかしながら、バス130を介するデータ転送速度は、8b/10b符号化オーバヘッド、並びにデータの送信前のデータのエラー訂正及び/又は検出によって限定されることがある。その結果、データは、記憶デバイス142とホスト100との間で、550MB/秒以下の実効スループットで転送されることがある。
他方、記憶デバイスコントローラ122は、複数の記憶ユニット132〜140上でデータストライピング及び/又はインタリーブを実施することによって、記憶デバイス142の速度を高めてもよい。また、記憶デバイスコントローラ122は、記憶ユニット132〜140に並列に読み書き操作を行なってもよく、したがって、バス130のデータ転送速度を超える有効な読み/書き速度に達する。換言すると、バス130は、ホスト100と記憶デバイス142との間のデータの転送のボトルネックとなることがある。
1つ以上の実施形態では、図1のシステムは、バス130の待ち時間を短縮することによってホスト100と記憶デバイス142との間のデータの送信を容易にする。例えば、図2に関して後述されるように、記憶デバイスコントローラ122は、データのブロックを記憶ユニット132〜140から読み取るとすぐにデータのブロックをホスト100に転送することによって、ホスト100からのデータの要求を処理してもよい。その際に、記憶デバイスコントローラ122は、新しく読み取ったブロックを、PCIエクスプレス(PCIe)インタフェースなどのインタフェースの1つ以上のレーンを介して、メモリ120に送ってもよい。
1つ以上の実施形態では、図1のシステムは、また、バス130の帯域幅を大きくすることによってホスト100と記憶デバイス142との間のデータの送信を容易にしてもよい。例えば、記憶デバイスコントローラ122は、128b/130b符号化を利用してもよく、インタフェースを介したデータの転送と関連するオーバヘッドを短縮させる。
新しく読み取ったブロックが、ホスト100に転送されるとき、記憶デバイスコントローラ122は、ブロックのエラー検出を同時に実行してもよい。ブロックにエラーが検出された場合、記憶デバイスコントローラ122は、他のブロックをホスト100に転送している間にエラー訂正を行なってエラーを除去してもよい。エラーが除去された後で、記憶デバイスコントローラ122は、ブロックをホスト100に順不同に再転送してもよい(例えば、1つ以上の他の新しく読み取ったブロックを転送した後)。ブロックがすべてエラーなしにホストに転送された後、記憶デバイスコントローラ122は、ホストに完了信号を送信して要求を完了してもよい。同時に高速インタフェースを介してブロックを送りブロックのエラー制御を行なうことによって、記憶デバイスコントローラ122は、記憶デバイス142からホスト100へのデータ送信の待ち時間を短縮してもよい。
図2は、一実施形態による記憶デバイス142からホスト100へのデータの転送を示す。データ転送は、記憶デバイス142上の1組のブロック212〜218を読み取るホスト100からの要求によって開始されてもよい。次に、要求は、インタフェース200を介して送信され、記憶デバイスコントローラ122内の通信機構202によって受け取られてもよい。例えば、要求は、ホスト100内のルートコンプレックスからPCIeインタフェースを介して記憶デバイスコントローラ122内のPCIeデバイスに送られてもよい。
要求を処理するために、記憶デバイスコントローラ122は、記憶デバイス142内の1つ以上の記憶ユニット(例えば、フラッシュチップ、ディスクなど)からブロック212〜218を読み取ってもよい。例えば、記憶デバイスコントローラ122は、SSDの複数のフラッシュチップ上のブロック212〜218をストライピング及び/又はインタリーブしてもよい。ブロック212〜218の後続の読み取りの際に、記憶デバイスコントローラ122は、フラッシュチップから各ブロックのデータを並列に取り出すことによって、記憶デバイス142と関連した読み取り速度を高めてもよい。
ブロックを読み取った後で、通信機構202は、インタフェース200を介してブロックをホスト100に転送してもよい。例えば、通信機構202は、ブロックのデータを含む1組の書き込みコマンドをPCIeインタフェースを介して発行することによって、ブロックを転送してもよい。書き込みコマンドは、ホスト100内のメモリ(例えば、図1のメモリ120)の対応ブロック220〜226を更新するために、ホスト100内のルートコンプレックスによって受け取られ、メモリコントローラに回送され、メモリコントローラによって使用されてもよい。
ブロックが、ホスト100に転送されている間、記憶デバイスコントローラ122内のエラー検出装置204は、ブロックのエラー検出を実行してもよい。例えば、エラー検出装置204は、リード・ソロモン符号及び/又は他のエラー訂正符号(ECC)などのブロックに追加された冗長データを調べてもよく、ブロックがエラーを含むかどうか判定する。ブロックにエラーがなく、ブロックがホスト100に首尾よく転送された場合、記憶デバイスコントローラ122は、ブロックの読み取り及び転送を終了してもよい。
しかしながら、エラー検出装置204によってブロック内に1つ以上のエラーが検出された場合、記憶デバイスコントローラ122内のエラー訂正装置206が、ブロックにエラー訂正を実行してもよく、エラーを除去する。例えば、エラー訂正装置206は、冗長データを調べてエラーを探し、エラー値を訂正してもよい。エラー訂正装置206は、ブロックからエラーを除去する間、通信機構202が、記憶デバイス142から読み取った他のブロックをホスト100に転送し続けてもよく、エラー検出装置204が、ブロックにエラー検出を実行してもよい。新しく読み取ったブロックの転送は、前に読み取ったブロックのエラー制御の完了に依存しないので、エラー訂正装置206は、より強力なECCを利用してもよく、記憶デバイス142からホスト100へのブロックの転送の待ち時間を実質的に長くすることなく、前に読み取ったブロックのエラーを訂正する。
エラー訂正装置206が、ブロックからエラーを除去した後で、通信機構202は、ホスト100にブロックを再転送してもよく、記憶デバイス142からホスト100への正確なデータの送信を容易にする。ブロックが再転送される前に他のブロックがホスト100に転送されることがあるので、ブロックは、順不同に再転送してもよい。例えば、記憶デバイスコントローラ122は、記憶デバイス142からブロック212〜218を昇順で読み取ってもよい。ブロック212が、インタフェース200(例えば、PCIeインタフェース)を介してホスト100に転送され、ブロック220に書き込まれるとき、エラー検出装置204は、ブロック212内にエラーを検出してもよい。次に、エラー訂正装置206は、ブロック214〜218が、ホスト100に転送され、エラーなしにブロック222〜226に書き込まれる間にブロック212にエラー訂正を実行してもよい。最後に、ブロック212からエラーが除去され、ブロック214〜218がホスト100に首尾よく転送された後で、ブロック212が、ホスト100に再転送され、ブロック220内のエラーデータを上書きするために使用されてもよい。
記憶デバイスコントローラ122内のエラー追跡装置208は、更に、ブロック内に検出されたエラーを追跡してもよい。エラー訂正の際に、エラー追跡装置208は、ブロックをキューや連結リストなどのデータ構造210に追加してもよい。ブロックからすべてのエラーが除去された後(例えば、エラー検出装置204とエラー訂正装置206との間の1回以上の繰り返し後)、エラー追跡装置208は、データ構造210からブロックを除去してもよい。したがって、エラー追跡装置208は、エラーと共にホスト100に転送され、ブロックにエラー訂正が実行された後でホスト100への再転送を必要とするブロックのリストを維持してもよい。
次に、記憶デバイスコントローラ122がエラー追跡装置208を使用して要求の完了状態を追跡してもよい。例えば、記憶デバイスコントローラ122は、ホスト100によって要求されたブロック212〜218の別のリストを維持してもよい。各ブロックが、読み取られ、ホスト100に転送されたとき、記憶デバイスコントローラ122は、リストからブロックを除去してもよい。他方、エラー検出装置204がブロック内にエラーを検出した場合には、ブロックは、データ構造210に追加されてもよい。すべてのブロック212〜218が読み取られてホスト100に転送された後で、リストが空にされてもよく、一方、データ構造210は、ホスト100への再転送を必要とするブロックを含んでもよい。次に、ブロックからエラーが除去されたときにブロックがデータ構造210から除去されてもよく、そのブロックは、エラーなしにホスト100に再転送される。リスト及びデータ構造210が両方とも空になった後(例えば、すべてのブロック212〜218がエラーなしにホスト100に転送された後)で、記憶デバイスコントローラ122は、ホスト100に完了信号を送信してもよく、要求を完了する。
その結果、記憶デバイスコントローラ122は、インタフェース200を介して並列性、順不同なデータ転送及び/又は繰り返しデータ転送を利用してもよく、ホスト100と記憶デバイス142との間の通信を改善する。まず、記憶デバイスコントローラ122は、記憶デバイス142内の複数の記憶ユニットからデータを同時に読み取り、そのデータをインタフェース200の複数レーンを介して並列に送ることによって、ホスト100へのデータ転送の帯域幅を大きくしてもよい。次に、記憶デバイスコントローラ122は、同時にブロックをホスト100に転送し、ブロックのエラー検出及び/又は訂正を実行してもよく、これにより、エラー制御が行なわれた後でホスト100へのデータの送信と関連した待ち時間を短縮する。最後に、エラーが検出されブロックから除去された後で、記憶デバイスコントローラ122が、ホスト100へのブロックの転送を順不同に繰り返してもよく、記憶デバイス142からエラーのないデータをホスト100に提供する。
当業者は、記憶デバイスコントローラ122が様々な方法で実現されてもよいことを理解するであろう。例えば、通信機構202、エラー検出装置204、エラー訂正装置206、及びエラー追跡装置208が、単一回路及び/又は構成要素によって提供されてもよい。あるいは、記憶デバイスコントローラ122は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、マイクロコントローラ、及び/又はマイクロプロセッサなどの一体型及び別個の構成要素の他の組み合わせを利用してもよい。更に、記憶デバイスコントローラ122は、SSD、HHD並びに/又は他のタイプの回転式及び/又は非回転式記憶デバイスを含む様々な記憶デバイスに読み書きを実行するように構成されてもよい。
図3は、記憶デバイスから一実施形態によるホストにデータを転送するプロセスを示すフローチャートを示す。1つ以上の実施形態では、1つ以上の工程が、省略され、繰り返され、及び/又は異なる順序で実行されてもよい。したがって、図3に示される工程の特定の配列は、実施形態の範囲を限定するように解釈されるべきでない。
最初に、ホストから1組のブロックを読み取る要求を受け取る(動作302)。ホストは、コンピュータシステム内にプロセッサ及び/又はメモリを含んでもよい。次に、ブロックは、記憶デバイスからブロックを読み取り次第、ホストとのインタフェースを介して転送される(動作304)。例えば、ブロックは、SSD内の1組のフラッシュチップから並列に読み取られ、PCIeインタフェースの1つ以上のレーンを介してルートコンプレックスに転送されてもよい。ルートコンプレックスは、メモリコントローラにブロックを回送し、メモリコントローラは、ブロックをホスト上のメモリに書き込んでもよい。
ブロックがホストに転送されるときに同時にブロック上のエラー検出が実行され(動作306)、ブロック内にエラーが検出される(動作308)。ブロック内にエラーが検出されない場合、ブロックの処理は、ブロックがホストに転送された後で完了してもよい。エラーが検出された場合、ブロックにエラー訂正が実行されてエラーが除去される(動作310)。更に、ブロックのエラー訂正が追跡される(動作312)。例えば、エラー訂正の際に、ブロックはデータ構造に追加されてもよい。ブロックからすべてのエラーが除去された後で、ブロックはデータ構造から除去されてもよい。ブロックにエラー訂正が実行された後、ブロックは、ホストに順不同(例えば、後続のブロックがホストに転送された後)に再転送される(動作314)。
ホストへのブロックの転送は、続いてもよい(動作316)。例えば、すべての要求されたブロックがエラーなしにホストに転送されるまで、ブロックが転送され続けてもよい。ブロック転送が続く場合、新しく読み取られた各ブロックが、ホストに転送され(動作304)、ブロックに同時にエラー検出が実行されて(動作306)、ブロック内にエラーが検出される(動作308)。エラーが検出された場合、ブロックにエラー訂正が実行され(動作310)、追跡され(動作312)、続いてブロックは、ブロックからエラーが除去された後でホストに再転送される(動作314)。最後に、すべてのブロックが、エラーなしにホストに転送された後で、完了信号がホストに送信されて(動作318)、要求の処理を完結する。
図4は、一実施形態によるコンピュータシステム400を示す。コンピュータシステム400は、プロセッサ402、メモリ404、記憶デバイス406、及び/又は電子計算デバイス内に見られる他の構成要素を含む装置に相当してもよい。プロセッサ402は、コンピュータシステム400内に他のプロセッサとの並列処理及び/又はマルチスレッド動作に対応してもよい。コンピュータシステム400は、また、キーボード408、マウス410、及び表示装置412などの入出力(I/O)装置を含んでもよい。
コンピュータシステム400は、本実施形態の様々な構成要素を執行する機能を有してもよい。詳細には、コンピュータシステム400は、コンピュータシステム400上のハードウェア及びソフトウェアリソースの使用を調整するオペレーティングシステム(図示せず)、並びにユーザのための専用タスクを実行する1つ以上のアプリケーションを含んでもよい。ユーザのためのタスクを実行するために、アプリケーションは、オペレーティングシステムからコンピュータシステム400上のハードウェアリソースの使用を取得し、並びにオペレーティングシステムによって提供されるハードウェア及び/又はソフトウェアフレームワークによってユーザと対話してもよい。
1つ以上の実施形態では、コンピュータシステム400は、記憶デバイスからホストにデータを転送するためのシステムを提供する。該システムは、ホストから1組のブロックを読み取る要求を受け取る通信機構を含んでもよい。次に、記憶デバイスから1組のブロックからの各ブロックを読み取り次第、通信機構は、ホストとのインタフェースを介してブロックを転送してもよい。該システムは、また、ブロックを読み取り次第ブロックにエラー検出を実行するエラー検出装置と、及びブロック内にエラーが検出された場合にブロックにエラー訂正を実行するエラー訂正装置とを含んでもよい。次に、ブロックからエラーが除去された後で、通信機構は、ブロックをホストに再転送してもよい。
システムは、更に、ブロック内に検出されたエラーを追跡するエラー追跡装置を含んでもよい。例えば、エラー追跡装置は、エラーを含む各ブロックをデータ構造に追加してもよい。ブロックからエラーが除去された後で、エラー追跡装置は、データ構造からブロックを除去してもよい。最後に、ブロックがすべてエラーなしにホストに転送された後(例えば、データ構造が空になった後)で、通信機構は、ホストに完了信号を送信してもよく、ホストへのデータの転送を完了する。
更に、コンピュータシステム400の1つ以上の構成要素は、リモートに配置され、ネットワークを介して他の構成要素に接続されてもよい。また、本実施形態の一部分(例えば、通信機構、エラー検出装置、エラー訂正装置、エラー追跡装置など)は、また、実施形態を実現する分散システムの様々なノードに配置されてもよい。例えば、本実施形態は、リモート記憶デバイスとホストとの間でデータを転送するクラウドコンピューティングシステムを使用して実現されてもよい。
様々な実施形態の以上の説明は、例示及び説明のためにのみ提示されてきた。これらの説明は、網羅的でもなく本発明を開示された形態に限定するものでもない。したがって、多くの改良及び変形が当業者には明らかであろう。更に、上記の開示は、本発明を限定するものではない。