(57)【要約】      （修正有）【課題】データが永続的なストレージデバイスに書き込まれること及び読み出されることを可能にするインターフェースを提供する。【解決手段】データを書き込む際にｐｉｎｎｅｄメモリを用いるための例示的な手法は、ブロックデバイスインターフェースでデータのメモリロケーションを含むデータ書き込み命令を受信することと、データをｐｉｎｎｅｄメモリにコピーすることと、ベクトルプロセッサによりデータに１つ以上の可逆変換を行うことと、ｐｉｎｎｅｄメモリからのデータを１つ以上のストレージデバイスに非同期的に書き込むこととを含む。データのｐｉｎｎｅｄメモリは、ｐｉｎｎｅｄメモリでのロケーションに対応し、ベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能である。【選択図】図１
2020038649.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
ブロックデバイスインターフェースでデータのメモリロケーションを含むデータ書き込み命令を受信することと、
前記データをｐｉｎｎｅｄメモリにコピーすることと、
ベクトルプロセッサにより前記データに１つ以上の可逆変換を行うことと、
前記ｐｉｎｎｅｄメモリからの前記データを１つ以上のストレージデバイスに非同期的に書き込むことと、
を含み、前記データの前記ｐｉｎｎｅｄメモリがｐｉｎｎｅｄメモリでのロケーションに対応し、前記ｐｉｎｎｅｄメモリが前記ベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能である、
方法。
【請求項２】
前記データに１つ以上の可逆変換を行う前に、前記データが書き込まれていることを確認することをさらに含む、請求項１に記載の方法。
【請求項３】
前記ｐｉｎｎｅｄメモリがライトバックキャッシュとして構成される、請求項１又は請求項２に記載の方法。
【請求項４】
前記ｐｉｎｎｅｄメモリからの前記データを１つ以上のストレージデバイスに非同期的に書き込むことが、
前記データに関連する前記ライトバックキャッシュの一部がダーティであると判断することと、
前記データを１つ以上のストレージデバイスに書き込むことと、
前記ライトバックキャッシュの前記一部をクリーンとしてマークすることと、
を含む、請求項３に記載の方法。
【請求項５】
前記ライトバックキャッシュが複数のパーティションを備え、各パーティションがソースと関連付けられる、請求項３又は請求項４に記載の方法。
【請求項６】
前記ｐｉｎｎｅｄメモリが不揮発性メモリに対応する、請求項１〜請求項５のいずれか１項に記載の方法。
【請求項７】
前記不揮発性メモリが複数の不揮発性メモリユニットを備え、
前記ｐｉｎｎｅｄメモリでの前記データが、前記複数の不揮発性メモリユニットのそれぞれにある、請求項６に記載の方法。
【請求項８】
前記複数の不揮発性メモリユニットが、ＮＶ−ＤＩＭＭの１つ以上のペアを備える、請求項７に記載の方法。
【請求項９】
前記複数の不揮発性メモリユニットのうちの第１のメモリユニットが交換されていると判断することと、
前記複数の不揮発性メモリユニットのうちの別のメモリユニットからのデータを前記複数の不揮発性メモリユニットのうちの第１のメモリユニットにミラーリングすることと、
をさらに含む、請求項７又は請求項８に記載の方法。
【請求項１０】
前記ブロックデバイスインターフェースが、メタデバイスのためのブロックデバイスインターフェースを含み、前記メタデバイスが前記１つ以上のストレージデバイスに対応する、請求項１〜請求項９のいずれか１項に記載の方法。
【請求項１１】
前記データ書き込み命令を受信することが、
前記１つ以上のストレージデバイス上に記憶されたデータの修正命令を受信することと、
前記１つ以上のストレージデバイス上に記憶されたデータを不揮発性ライトバックキャッシュに読み出すことと、
を含み、前記データを不揮発性ライトバックキャッシュに書き込むことが、
前記命令に基づいて前記不揮発性ライトバックキャッシュでの前記データを修正することを含む、請求項１〜請求項１０のいずれか１項に記載の方法。
【請求項１２】
前記ブロックデバイスインターフェースを提供することをさらに含む、請求項１〜請求項１１のいずれかに記載の方法。
【請求項１３】
ベクトルプロセッサにより前記データに１つ以上の可逆変換を行うことが、暗号化、エンコーディング、圧縮、重複排除、又はロギングのうちの１つ以上を含む、請求項１〜請求項１２のいずれか１項に記載の方法。
【請求項１４】
方法であって、
ブロックデバイスインターフェースで１つ以上のストレージデバイスからのデータ読み出し命令を受信することと、
前記１つ以上のストレージデバイスからの前記データをメモリロケーションに書き込むことと、
ベクトルプロセッサにより前記メモリロケーションにある前記データに１つ以上の可逆変換を行うことと、
を含み、前記データの前記メモリロケーションがｐｉｎｎｅｄメモリでのロケーションに対応し、前記ｐｉｎｎｅｄメモリが前記ベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能である、方法。
【請求項１５】
前記ｐｉｎｎｅｄメモリが不揮発性メモリに対応する、請求項１４に記載の方法。
【請求項１６】
前記ブロックデバイスインターフェースが、メタデバイスのためのブロックデバイスインターフェースを含み、前記メタデバイスが前記１つ以上のストレージデバイスに対応する、請求項１４又は請求項１５に記載の方法。
【請求項１７】
前記ブロックデバイスインターフェースを提供することをさらに含む、請求項１４〜請求項１６のいずれか１項に記載の方法。
【請求項１８】
ベクトルプロセッサにより前記データに１つ以上の可逆変換を行うことが、復号、デコーディング、解凍、非重複排除、又はロギングのうちの１つ以上を含む、請求項１４〜請求項１７のいずれか１項に記載の方法。
【請求項１９】
システムであって、
１つ以上のベクトルプロセッサと、
１つ以上のＣＰＵと、
ｐｉｎｎｅｄメモリを備えるメモリと、
を備え、前記メモリが、前記１つ以上のベクトルプロセッサ及び／又は前記１つ以上のＣＰＵにより実行されるときに、前記１つ以上のベクトルプロセッサ及び／又は前記１つ以上のＣＰＵを、請求項１〜請求項１８のいずれか１項に記載の方法を行うように構成する命令を備える、システム。
【請求項２０】
１つ以上のプロセッサにより実行されるときに、前記１つ以上のプロセッサに請求項１〜請求項１８のいずれか１項に記載の方法を行わせる命令を備える、１つ以上の一時的でないコンピュータ可読媒体。
【請求項２１】
１つ以上のベクトルプロセッサ及び／又は前記１つ以上のＣＰＵにより実行されるときに、１つ以上のベクトルプロセッサ及び／又は前記１つ以上のＣＰＵに請求項１〜請求項１８のいずれか１項に記載の方法を行わせる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性ｐｉｎｎｅｄメモリを用いるブロックデバイスインターフェースに関する。
【背景技術】
【０００２】
データは、永続的なストレージデバイスに記憶される場合がある。ドライバは、データが永続的なストレージデバイスに書き込まれる及び読み出されることを可能にするためのインターフェースを提供することができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
第１の例示的な実施形態において、ブロックデバイスインターフェースでデータのメモリロケーションを含むデータ書き込み命令を受信することと、データをｐｉｎｎｅｄメモリにコピーすることと、ベクトルプロセッサによりデータに１つ以上の可逆変換を行うことと、ｐｉｎｎｅｄメモリからのデータを１つ以上のストレージデバイスに非同期的に書き込むこととを含み、データのｐｉｎｎｅｄメモリがｐｉｎｎｅｄメモリでのロケーションに対応し、ｐｉｎｎｅｄメモリがベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能である、方法が提供される。
【０００４】
第２の例示的な実施形態において、ブロックデバイスインターフェースで１つ以上のストレージデバイスからのデータ読み出し命令を受信することと、１つ以上のストレージデバイスからのデータをメモリロケーションに書き込むことと、ベクトルプロセッサによりメモリロケーションにあるデータに１つ以上の可逆変換を行うこととを含み、データのメモリロケーションがｐｉｎｎｅｄメモリでのロケーションに対応し、ｐｉｎｎｅｄメモリがベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能である、方法が提供される。
【０００５】
単なる例として特定の実施形態を示す図面を参照しながら説明がなされる。しかしながら、これらは単に例示するために提供される。
【図面の簡単な説明】
【０００６】
【図１】データを書き込む際にｐｉｎｎｅｄメモリを用いるための例示的な手法を示す図である。
【図２】ライトバックキャッシュからのデータを１つ以上のストレージデバイスに書き込むための例示的な手法を示す図である。
【図３】パーティション化されたキャッシュの使用例を示す図である。
【図４】データを読み出す際にｐｉｎｎｅｄメモリを用いるための例示的な手法を示す図である。
【図５】例示的なシステムを示す図である。
【図６】例示的なＧＰＵを示す図である。
【発明を実施するための形態】
【０００７】
いくつかの実施形態では、データ書き込み命令が、最初にブロックデバイスインターフェースで受信される。命令は、記憶されることとなるデータのメモリロケーションを含む。このメモリロケーションは、ベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能なメモリであるｐｉｎｎｅｄメモリにあり得る。ベクトルプロセッサは、次いで、データに１つ以上の可逆変換を行うことができる。データは、次いで、ｐｉｎｎｅｄメモリでのメモリロケーションから１つ以上のストレージデバイスに非同期的に書き込まれる。
【０００８】
このケースでは、「非同期的に」とは、データがメモリに書き込まれることとデータが１つ以上のストレージデバイスに書き込まれることが必ずしもすぐに連続しているものではないことを指す。すなわち、データがメモリに書き込まれると、該データが１つ以上のストレージデバイスに書き込まれるまでに或る量の時間が経過し得る。或る場合には、これは直ちになされ得るが、必ずしもそうである必要はない。これはデータがメモリに書き込まれるときに該データが１つ以上のストレージデバイスに同時に（又は直後に）書き込まれる同期書き込みとは対照的である。
【０００９】
ｐｉｎｎｅｄメモリ
ｐｉｎｎｅｄメモリは、複数のタイプのプロセッサによりダイレクトメモリアクセスでアクセス可能なメモリの一部である。或るケースでは、ｐｉｎｎｅｄメモリは、メインメモリに物理的に存在するユニファイドメモリであり得る。ｐｉｎｎｅｄメモリは、ベクトルプロセッサ（ＧＰＵなど）及び１つ以上の他のプロセッサ（ＣＰＵなど）によりバスで直接アクセス可能であり得る。このようにして、両方のプロセッサは、メモリをコピーする必要なくメモリの同じデータで動作し得る。これは「ゼロコピー」と呼ばれ得る。
【００１０】
これは、各プロセッサ又はプロセッサタイプに関連するメモリにデータをコピーする必要がある非ｐｉｎｎｅｄメモリとは対照的であり得る。例えば、データがＣＰＵに関連するメモリに記憶された場合、ＧＰＵがデータを処理することができる前にＧＰＵに関連するメモリにデータをコピーする必要がある。
【００１１】
したがって、ｐｉｎｎｅｄメモリの使用は、プロセッサ又はプロセッサタイプを切り替えるときのオーバーヘッドを減少させることができる。
【００１２】
いくつかの実施形態では、ｐｉｎｎｅｄメモリは、１つ以上の不揮発性メモリチップを備える不揮発性メモリの物理的一部である。これに関して、「不揮発性」とは、メモリが電力なしでも記憶したデータを維持することを意味すると考えてよい。これは、データを保持するために電力が絶えず維持されなければならない揮発性メモリとは対照的である。
【００１３】
ｐｉｎｎｅｄメモリは、ライトバックキャッシュとして構成され得る。これは、データが新しいデータで上書きされることになるまで（又は少なくとも或る相当な期間にわたって）データを保つキャッシュと考えられてよい。すなわち、データは、キャッシュからストレージデバイスへできるだけ遅く書き込まれてよい。
【００１４】
メモリは、通常は、基礎をなすストレージデバイスよりもはるかにより速い書き込み速度を提供する。したがって、ストレージデバイスへの書き込みを遅らせることにより、ストレージデバイスの速度がより遅くても書き込み速度は遅くならない。さらに、既にメモリにあるデータの繰返しの書き込みは、ストレージデバイスからデータを検索する必要がないので速いものとなる。
【００１５】
キャッシュは不揮発性であるため、電源異常があってもデータは失われない。キャッシュは、必要に応じてリカバリーのために別個のシステムへ移動されてもよい。これは、データをメモリに相当な期間にわたって維持するリスクを低減することができる。
【００１６】
したがって、これらの手法は、最小限のデータ損失リスクで顕著に向上した書き込み速度を提供する。
【００１７】
インターフェース
使用中に、プログラム又はシステムによる使用のためのインターフェースが提供され得る。インターフェースは、ブロックデバイスドライバであり得る。ブロックデバイスドライバは、固定サイズのブロックで動作する基礎デバイスとの相互作用を可能にするように構成されたドライバである。例えば、ストレージデバイスは、通常は、５１２バイト又は４０９６バイトのブロックで動作する。システムは、次いで、ブロックデバイスドライバを用いてストレージデバイスと（例えば、デバイスにデータを書き込むこと又はデバイスからデータを読み出すことにより）相互作用することができる。
【００１８】
或るケースでは、単一の基礎デバイスは存在しなくてもよい。代わりに、インターフェースがメタデバイスに基づいて動作してよい。メタデバイスは、インターフェースを用いるプログラムの観点からデバイスであるかのように存在することができる。
【００１９】
しかしながら、メタデバイスは、プログラムから隠れている１つ以上のストレージデバイスにマップされてよい。例えば、ドライバは、データを単一のメタデバイス上に記憶する要求を、データをすべてのデバイスにわたるストライプに記憶することへ変換してよい。このようにして、ドライバは、ハードウェアの詳細を隠すことができる。
【００２０】
インターフェースは、１つ以上のＣＰＵ上で実行するドライバとして提供されてよい。加えて又は代替的に、インターフェースは、ＧＰＵなどのベクトルプロセッサ上で長く実行するカーネルとして実行してよい。これにより、ベクトルプロセッサ上で実行するカーネルがＣＰＵの介在なしにインターフェースと直接インターフェースすることが可能となる。
【００２１】
書き込み
図１は、データを書き込む際にｐｉｎｎｅｄメモリを用いるための例示的な手法を示す。
【００２２】
ステップ１０１で、ブロックデバイスインターフェースがデータ書き込み命令を受信する。データ書き込み命令は、インターフェースの関数呼び出しとして受信されてよい。データは、メモリロケーションを参照する命令で指定されてよい。データ書き込み命令はまた、データの書き込み先を含んでいてよい。これは、ストレージデバイスのうちの１つ以上でのロケーションへの参照であってよい。
【００２３】
データのメモリロケーションは、ｐｉｎｎｅｄメモリでのロケーションに対応し得る。すなわち、データは、ベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能なメモリロケーションに記憶される。このように、ドライバは、ベクトルプロセッサ又は別のプロセッサ（ＣＰＵなど）上で実行することができる。
【００２４】
しかしながら、或るケースでは、メモリロケーションは、メインメモリ（すなわち、ベクトルプロセッサによりアクセス可能ではないメモリ）にあってもよい。
【００２５】
ステップ１０２で、データがｐｉｎｎｅｄメモリにコピーされる。
【００２６】
コピープロセス中に、データに１つ以上の変換が行われてよい。例えば、１つの変換は、データの暗号化又はエンコーディングを含むことができる。これは、メインメモリでのデータが暗号化又はエンコードされていなくても、ｐｉｎｎｅｄメモリでのデータが暗号化又はエンコードされることを可能にし得る。このような変換は、書き込みプロセスを著しく遅くしないように比較的速いものであり得る。
【００２７】
ステップ１０２は、命令でのメモリロケーションがｐｉｎｎｅｄメモリに無い場合にのみ生じ得る。すなわち、ステップ１０２は、要求で示されるデータが既にｐｉｎｎｅｄメモリに有る場合には省略されてよい。
【００２８】
ステップ１０３で、データのチェックサムが計算される。チェックサムの目的は、書き込まれたデータがその後検索されるデータであるかを検証することである。これは、ビットロットのリスク或いはデータが不意に変化するリスクを回避することができる。チェックサムは、データの変化が気付かれない確率が極めて低くなるように、暗号ハッシュであってよい。計算されると、チェックサムは、キャッシュに、例えばデータと同じロケーションに記憶することができる。
【００２９】
チェックサムの計算は、書き込みプロセスを著しく遅くしないように比較的速いものであり得る。
【００３０】
或るケースでは、ステップ１０３は省略されてよい。例えば、或る実装では、チェックサムは不要と考えられる場合があり、又はチェックサムに関連するオーバーヘッドは望ましくないとみなされる場合がある。
【００３１】
ステップ１０４で、データが書き込まれていることが確認される。これは、例えば、成功値を命令の送信元に戻すことを含み得る。或るケースでは、これは、命令で指定された宛先ロケーションにデータが書き込まれていることを確認することを含み得る。このようにして、キャッシュの使用は、ユーザにトランスペアレントである。ユーザの視点からは、データは、指定のストレージデバイスに記憶されている。これは、互換性を提供し、他の方法ではキャッシュの使用に関連する場合がある複雑さを要約する。
【００３２】
ステップ１０４は、ｐｉｎｎｅｄメモリが不揮発性メモリに対応する場合に特に有益であり得る。不揮発性メモリは電力損失に耐えるので、データが不揮発性メモリに書き込まれると、データ損失の機会の存在は無視でき得る。したがって、データが永続的なストレージデバイスに実際に書き込まれる前に該データが書き込まれていることを確認することにより、潜在的なデータ損失のリスクなしに非常に速いデータスループットを提供することができる。
【００３３】
ステップ１０５で、ベクトルプロセッサがデータに１つ以上の変換を行う。これらの変換は、逆関数を行うことにより元の内容に戻すことができるように、可逆変換とすることができる。例えば、暗号化、エンコーディング、圧縮、重複排除、及びさらなる情報の追加は、逆関数によりオリジナルの情報を得ることができるので、普通は可逆関数である。変換は、所定の順序で行われてよい。例えば、暗号化は、エンコーディングの前に行われてよい。
【００３４】
これらの変換は、ステップ１０４でデータが書き込まれていることが確認された後で行われるため、ユーザの視点からは、書き込みプロセスに遅れを生じさせない。これは、知覚される書き込み速度の低下をもたらさずに、比較的頑健な計算集約型の変換が行われることを可能にし得る。
【００３５】
１つの変換は、データを暗号化することであり得る。これは、ＲＳＡ、ＡＥＳ、又は任意の他の適切な暗号化アルゴリズムを用いて行うことができる。これは、基礎をなすストレージデバイスに障害が起きた場合にデータが読み出されることを回避し得る。
【００３６】
別の変換は、データをデータフラグメントへ分割する前に誤り訂正符号の使用を通じてデータにパリティ情報を付加することによりデータをエンコードすることであり得る。これは、いくつかのフラグメントが誤っている場合であっても、フラグメントに基づいてオリジナルデータが再作成されることを可能にする。この誤り訂正符号は、フラグメントのうちのいくつかが完全に失われる場合であってもオリジナルデータの再作成を可能にする、消失訂正符号であり得る。
【００３７】
リード・ソロモン符号が、消失訂正符号の例である。ブロックなどの、１つのデータが、いくつかの符号語を形成するべくリード・ソロモンアルゴリズムを用いてエンコードされる。各符号語はｎ個の記号を備え、これらのうちのｋ個は、オリジナルデータからの情報を伝え、残りは、計算され、オリジナルデータを復元するのに用いることができる。各符号語は、データフラグメントを形成するべく分解することができる。パリティｎ−ｋは、データのタイプ、システムのデフォルト、ユーザの好み、又は任意の他の適切な手法に基づいて選択され得る。リード・ソロモン符号がどのように機能するかにより、ｎ−ｋ個までのフラグメントが失われる場合であっても、オリジナルデータを依然として得ることができる。
【００３８】
例えば、２：１パリティを用いるリード・ソロモン符号に関して、２ユニットのオリジナルデータにつき１ユニットのパリティ情報が付加されている。これは、１つのフラグメントが失われる場合であっても、任意の２つの他のフラグメントからオリジナルデータを再生成できることを意味する。１５：５パリティは、１５ユニットのオリジナルデータにつき５ユニットのパリティが付加されていることを指す。５個のフラグメントが失われる場合、残りの２０個のフラグメントのうち１５個からオリジナルデータを再生成することができる。
【００３９】
したがって、ベクトルプロセッサは、データをエンコードすることによりｎ個のデータフラグメントを形成してよく、ゆえに、データフラグメントのうちの任意のｋ個（ｋはｎ以下）を、データを再生成するのに用いることができる。
【００４０】
より高いパリティは、通常は、データが回復不能となるまでにより多数のデータフラグメントを失うことができることを意味する。加えて、パリティデータと実際のデータのより高い比は、所与のレジリエンスのために記憶されるデータの総量を減少し得る。しかしながら、より高いパリティは、通常は、エンコーディングに必要とされる計算レベルを指数関数的に増加させる傾向がある。
【００４１】
加えて、これは、データに基づいて暗号ハッシュ又は非暗号ハッシュを計算し、これをデータの一部としてエンコーディングすることを含んでよい。
【００４２】
さらなる変換は、ストレージイベントをイベント・ログに記録することであり得る。これは、データのタイムスタンプ及び暗号ハッシュを含み得る。ロギングは記憶されるデータに影響しないが、変換の順序上、データの変換として取り扱うことができる。
【００４３】
或るケースでは、ＰＣＴ公開番号ＷＯ２０１９／０４０４１８により説明されるディクショナリベースのデータ圧縮方法が用いられ得る。
【００４４】
変換を行うのにベクトルプロセッサを用いることにより、ＣＰＵを用いることに比べてより効率よく比較的高品質の変換を行うことができる。例えば、エンコーディングの場合には、高レベルのパリティが用いられ得る。加えて、これは、変換がストレージプロセスを著しく遅くしないように（例えば、ストレージに数ミリ秒未満の時間を追加することにより）実質的にリアルタイムで行うことができる。
【００４５】
或るケースでは、ｐｉｎｎｅｄメモリは、ライトバックキャッシュとして動作するように構成される。
【００４６】
データを書き込む際に、ドライバが、データが書き込まれるべきキャッシュでのロケーションを決定することになる。キャッシュに未使用の領域が存在する場合、データはそこに書き込まれてよい。未使用の領域が存在しない場合、ドライバが、既存のデータのうちのいくつかを、キャッシュから１つ以上のストレージデバイスに移動してよい。
【００４７】
キャッシュでのロケーションが決定されると、キャッシュのこのロケーションにデータが書き込まれる。
【００４８】
ドライバ（又はキャッシュ内）にあるメタデータが、これを反映するべく更新されてよい。例えば、マッピングは、命令で宛先ロケーションに記憶されることを意図されたデータがキャッシュでのそれぞれのロケーションに記憶されることを示すべく更新されてよい。加えて、キャッシュでのロケーションは、そこに記憶されたデータを１つ以上のストレージデバイスに最初に移動しないと上書きできないことを示すべくダーティとしてマークされてよい。
【００４９】
ステップ１０６で、ドライバが、ｐｉｎｎｅｄメモリからのデータを１つ以上のストレージデバイスに非同期的に書き込む。
【００５０】
これは、データがキャッシュからストレージデバイスに移動されなければならないとドライバが判断することに応答して行われ得る。ドライバは、これに関して１つ以上のヒューリスティックスに依存し得る。例えば、ドライバは、データの古さ、データが最近いつ使用されたか、及びデータが使用される可能性のうちの１つ以上に基づいてｍとなるデータを選択してよい。
【００５１】
これは非同期であり、ゆえに、ステップ１０５とステップ１０６との間に実質的な時間が存在し得る。ステップ１０６は、新しいデータがキャッシュに書き込まれる必要があるときにのみ行われ得る。このようにして、キャッシュは、「遅延書き込み」パラダイムで動作する。代替的に、或るケースでは、データは、例えば書き込まれるデータが移動するのに最良のデータであるとヒューリスティックに判断される場合に、キャッシュから直ちに移動され得る。
【００５２】
ドライバが、データをストレージデバイスのうちの１つ以上に書き込む。１つ以上のストレージデバイスは、ステップ１０１で受信されメタデータに記録された最初の命令で指定されたストレージデバイスであり得る。
【００５３】
ステップ１０６がその後ステップ１０３と非同期的に行われるので、通常のストレージデバイスに関連する遅延は、普通の使用ではユーザには分からない。すなわち、ドライバは、データがより低いストレージデバイス速度ではなくはるかにより高いキャッシュ速度で記憶される様相を呈する。
【００５４】
しかし、特にキャッシュが不揮発性の場合、これは必ずしもデータ損失の大きなリスクをもたらさない。加えて、不揮発性メモリの使用は、「ライトホール」現象を軽減する又はなくすことができる。すなわち、揮発性メモリの場合に、メモリからストレージデバイスへのデータの転送中に電力損失が存在すると、ディスク上のデータがメモリから適正に転送されたかどうかを判断するのは不可能なことがある。しかしながら、不揮発性メモリでは、電力が回復したときにデータ損失なしに転送プロセスを再開することができる。
【００５５】
したがって、ユーザは、どのような実質的な欠点もなしに、より高性能の書き込みを享受し得る。
【００５６】
クリーニング
ステップ１０６で述べたように、新しいデータが書き込まれる必要があるときに、ドライバが、データをキャッシュから１つ以上のストレージデバイスへ選択的に移動する。
【００５７】
キャッシュのブロックがクリーンと判断されると、データは、１つ以上のストレージデバイスに移動される。
【００５８】
図２は、ライトバックキャッシュからのデータを１つ以上のストレージデバイスに書き込むための例示的な手法を示す。これは、ステップ１０５を実施するのに用いられ得る。
【００５９】
ステップ２０１で、ドライバが、１つ以上のストレージデバイスに移動されるべきキャッシュの１つ以上のブロックにあるデータを選択する。キャッシュでの移動されるべきデータの選択は、いくつかの変数を用いるヒューリスティックスに従ってなされ得る。例えば、これは、データの経過時間、データの直近の使用、データの期待される使用の可能性、又はブロックにあるデータ間の関係性に基づいていてよい。
【００６０】
ステップ２０２で、ドライバが、データを１つ以上のストレージデバイスに書き込む。これは、ドライバが１つ以上のストレージデバイスのストレージコントローラと相互作用することによる従来の様態で行われ得る。
【００６１】
１つ以上のストレージデバイスの選択は、移動されるべきデータに関する以前に記憶されたメタデータに基づいていてよい。すなわち、データが最初にキャッシュに記憶されたときに、データのキャッシュロケーションとデータの最後のストレージデバイスロケーションとをマップするべくメタデータが更新され得る。このようなケースでは、このストレージデバイスロケーションが、１つ以上のストレージデバイスを選択するのに用いられ得る。
【００６２】
ステップ２０３で、データが１つ以上のストレージデバイスに書き込まれた後で、ドライバが、キャッシュの対応するブロックをクリーンとしてマークする。これは、キャッシュの一部が再使用されることを可能にする。ドライバはまた、例えばキャッシュでのロケーションとデータとのマッピングを除去することにより、データがもはやキャッシュに記憶されないことを示すべくメタデータを更新してよい。
【００６３】
このようにして、データは、必要なときにキャッシュから１つ以上のストレージデバイスに移動される。
【００６４】
或るケースでは、キャッシュは、或るレベルのクリーン容量を保つように構成されてよい。すなわち、キャッシュがデータを移動せずに所定量のデータを記憶できるようにデータがキャッシュから移動されてよい。例えば、キャッシュの総容量の５０％がクリーンとして保たれるべきであり得る。これは、既にキャッシュにあるデータに関する向上した読み出し及び修正パフォーマンスを依然として可能にしながら、書き込みの向上したバーストパフォーマンスを可能にする。
【００６５】
パーティショニング
上で述べたように、不揮発性ライトバックキャッシュは、すべてのユーザが利用可能な共通のリソースとして取り扱われてよい。しかしながら、或るケースでは、１人のユーザが一度に大量のデータを書き込んでキャッシュを独占する場合がある。キャッシュが一杯になると、他のユーザはその恩恵が受けられない場合がある。
【００６６】
このリスクを軽減するために、不揮発性ライトバックキャッシュは、ソース（ユーザ又はユーザのグループなど）によりパーティション化されてよい。各パーティションは、キャッシング及び容量のために独立して動作することができる。
【００６７】
図３は、パーティション化されたキャッシュの使用例を示す。
【００６８】
ステップ３０１で、ドライバが、データ書き込み命令を受信する。これは、ステップ１０１と同じであり得る。しかしながら、このケースでは、命令は、命令のソース（ユーザ又はユーザグループなど）を指定する。
【００６９】
ステップ３０２で、ドライバがデータをライトバックキャッシュのパーティションに書き込み、パーティションはソースと関連付けられる。これは、データが該パーティションにのみ書き込まれること以外は、ステップ１０２と同じであり得る。パーティションが不十分なクリーン領域を有する場合、データは、（キャッシュにおけるすべての他のパーティションが未使用の場合であっても）該パーティションから１つ以上のストレージデバイスに移動されることになる。
【００７０】
ステップ３０３で、ドライバが、データのチェックサムを計算する。チェックサムは、次いで、キャッシュのパーティションに記憶することができる。これは、チェックサムが該パーティションにのみ書き込まれ得ること以外は、ステップ１０３と同じであり得る。
【００７１】
ステップ３０４で、ドライバが、データが書き込まれていることを確認する。これは、ステップ１０４と同じであり得る。
【００７２】
ステップ３０５で、ベクトルプロセッサが、データに１つ以上の可逆変換を行う。これは、ステップ１０５と同じであり得る。
【００７３】
ステップ３０６で、ドライバが、ｐｉｎｎｅｄメモリからのデータを１つ以上のストレージデバイスに非同期的に書き込む。これは、ステップ１０６と同じであり得る。
【００７４】
このように、キャッシュに対する単一のソース（１人のユーザ又はユーザのグループなど）の影響がそれらのパーティションに実質的に限定される。これは、複数のユーザのための高レベルのサービスの質を保ち、且つ、バーストを受けての全体的なパフォーマンスの低下を回避することができる。
【００７５】
読み出し
図４は、データを読み出す際にｐｉｎｎｅｄメモリをどのように用いることができるかに関する例示的な手法を示す。これは図１に示した手法の補足である。
【００７６】
ステップ４０１で、ブロックデバイスインターフェースが、１つ以上のストレージデバイスからのデータ読み出し命令を受信する。データ読み出し命令は、インターフェースの関数呼び出しとして受信され得る。命令は、１つ以上のストレージデバイス上のロケーションを参照する又はメタデバイスを参照するデータを指定し得る。
【００７７】
ステップ４０２で、データが１つ以上のストレージデバイスからメモリロケーションに検索される。ブロックデバイスインターフェースがメタデバイスに対応する場合、これは、基礎となる物理ストレージデバイスからデータを検索することを含み得る。
【００７８】
データのメモリロケーションは、ｐｉｎｎｅｄメモリでのロケーションに対応する。すなわち、データは、ベクトルプロセッサ及び１つ以上の他のプロセッサによりアクセス可能なメモリロケーションに記憶される。このように、ドライバは、ベクトルプロセッサ又は別のプロセッサ（ＣＰＵなど）上で実行し得る。
【００７９】
ステップ４０３で、データのチェックサムが計算される。これは、以前に計算されたデータのチェックサムと比較することができる。これは、ストレージデバイスから検索されたデータがストレージデバイスに記憶されたデータと同じであることを検証する。或るケースでは、ステップ４０３は省略されてよい。例えば、或る実装では、チェックサムの検証は、不要と考えられる場合があり、又はチェックサムの検証に関連するオーバーヘッドは望ましくないとみなされる場合がある。
【００８０】
ステップ４０４で、ベクトルプロセッサがデータに１つ以上の変換を行う。これらの変換は、オリジナルデータを回復するべくステップ１０２で行われた変換の逆であってよい。例えば、ステップ１０２で行われた変換を逆にするべく、復号、デコーディング、解凍、非重複排除、及びさらなる情報の除去が行われてよい。変換は、所定の順序で行われてよい。例えば、デコーディングは、復号の前に行われてよい。
【００８１】
ステップ４０５で、データがメインメモリにコピーされる。
【００８２】
これは、ｐｉｎｎｅｄメモリがむやみに占領されることを回避する。しかしながら、或るケースでは、ステップ４０５は省略されてよい。
【００８３】
ステップ４０６で、データが読み出されていることが確認される。これは、例えば、メモリロケーションを命令の送信元に戻すことを含み得る。
【００８４】
このようにして、図１の手法を用いて記憶されたデータが検索され得る。
【００８５】
システム
図５は、上記の方法を実施するのに用いられ得る例示的なシステムを示す。
【００８６】
システム１０００は、ＣＰＵ（中央処理装置）１０１０、メインメモリ１０２０、１つ以上の周辺機器１０３０、及びＧＰＵ（グラフィックス処理装置）１０５０を備える。ＣＰＵ１０１０、メインメモリ１０２０、周辺機器１０３０、及びＧＰＵ１０５０は、バス１０４０で接続される。ＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）トポロジーの場合には、バス１０４０は、ルートコンプレックスを含み、周辺機器１０３０及びＧＰＵ１０５０のそれぞれは、ＰＣＩｅエンドポイントである。ＧＰＵ１０５０は、バス１０４０で周辺機器１０３０と直接通信することができる。或るケースでは、１つよりも多いＣＰＵ１０１０及び／又は１つよりも多いＧＰＵ１０５０が設けられる。
【００８７】
メインメモリ１０２０は、不揮発性ライトバックキャッシュとして動作するように構成された不揮発性メモリチップを備える。これは、フラッシュメモリ単独の使用又は従来の揮発性メモリと組み合わせた使用を含み得る。不揮発性メモリチップは、不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ）として構成されてよい。メインメモリ１０２０は、不揮発性ライトバックキャッシュとして用いられない従来の揮発性メモリをさらに備えてよい。
【００８８】
或るケースでは、メインメモリ１０２０は、一対のＮＶＤＩＭＭなどの不揮発性メモリモジュールの１つ以上のペアを備える。使用中に、不揮発性メモリモジュールのうちの一方に書き込まれたデータが、他方にミラーリングされる。これは、データ損失の場合に或る程度のレジリエンスを提供することができ、各不揮発性メモリモジュールは、キャッシュでのデータの完全なセットを格納する。
【００８９】
ペアのうちの一方が交換されるとき、データが、新しいモジュールに自動的にミラーリングされ得る。これは、キャッシュを拡張するための単純なプロセスを可能にする。ペアのうちの第１のモジュールが新しいより大きいものと交換されることがある。自動ミラーリングが完了すると、ペアのうちの第２のモジュールを新しいより大きいものと交換することができる。これにより、データ又は機能を失わずにキャッシュが（新しいより大きいサイズに）拡張される。
【００９０】
或るケースでは、不揮発性メモリモジュールのうちの１つ以上は、ブロックがそれらの間で交互に配置されるようにスパンニングされてよい。スパンニングとミラーリングは組み合わされてよい。例えば、４つの不揮発性メモリモジュールのうちの第１及び第２のモジュールがスパンニングされてよく、第１及び第２のモジュールは第３及び第４のモジュールにミラーリングされてよい。
【００９１】
周辺機器１０３０は、永続的なストレージデバイス（ハードディスクドライブ、ソリッドステートドライブなど）、ストレージコントローラ（ＲＡＩＤコントローラなど）、ネットワークコントローラ（ネットワークインターフェースカードなど）、スイッチ（さらなる周辺機器を接続するように構成されたＰＣＩｅスイッチなど）、又は様々なデバイスのいずれかを含み得る。
【００９２】
メインメモリ１０２０及び任意のストレージデバイスの典型的特徴は、メインメモリがランダムライトに関してはるかにより速い傾向があることである。したがって、メインメモリへのデータユニットの書き込みは、通常は、ストレージデバイスへのデータユニットの書き込みよりもはるかにより速く解決することができる。しかしながら、ストレージデバイスは、より安価且つより大型となる傾向があり、したがって、一般的な長期のストレージの目的にはより良い。
【００９３】
周辺機器１０３０及びＧＰＵ１０５０は、バス１０４０を介するメインメモリ１０２０へのアクセスを有し得る。これは、周辺機器１０３０又はＧＰＵ１０５０が、ＤＭＡ（ダイレクトメモリアクセス）を通じてメインメモリからデータを読み出す及びデータを書き込むことを可能にし得る。これは、メインメモリ１０２０からのデータを周辺機器１０３０又はＧＰＵ１０５０のローカルメモリにコピーすることを含み得る。
【００９４】
或るケースでは、ＣＰＵ１０１０及びＧＰＵ１０５０のメモリ領域は、ユニファイド仮想メモリを介して共有することができる。これにより、メインメモリ１０２０とローカルメモリとの間でデータをコピーする必要なくＣＰＵとＧＰＵとの間で単一のメモリアドレスへのポインタを受け渡すことが可能となる。
【００９５】
コンピュータシステム５００が、上記の方法を実施するのに用いられ得る。例えば、ＣＰＵ１０１０又はＧＰＵ１０５０は、ストレージデバイス周辺機器１０３０のうちの１つ以上へのドライバとして動作するプログラムを実行し得る。
【００９６】
ベクトルプロセッサ
ベクトルプロセッサは、命令がデータのアレイで実行されるプロセッサである。これは、スカラーであり、命令を単一のデータアイテムで実行する、従来のＣＰＵとは対照的であり得る。これは、ベクトルプロセッサが従来のスカラーＣＰＵよりもはるかにより速く大量のデータを処理することを可能にし得る。
【００９７】
ベクトルプロセッサの一例はＧＰＵである。しかしながら、ベクトルプロセッサは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）などの他の形態で実装されてもよい。
【００９８】
ベクトルプロセッサとして動作する例示的なＧＰＵ９５０が図６に示される。このようなＧＰＵ９５０は、上記の手法のいずれかにおいてベクトルプロセッサとして用いられ得る。
【００９９】
ＧＰＵ９５０は、通常は１から３０までの間のいくつかのＳＭ（ストリーミングマルチプロセッサ）９５１を備える。各ＳＭ９５１は、共有メモリ９５２及び命令ユニット９５３を有する。
【０１００】
各ＳＭ９５１は、いくつかの、例えば８個の、ＳＰ（ストリーミングプロセッサ）９５４を備える。各ＳＰ９５４は、共有メモリ９５２へのアクセスを有し、且つ、一組のレジスタ９５５を有する。各ＳＰ９５４は、ＧＰＵのグローバルメモリ９５６へのアクセスも有し得る。このグローバルメモリ９５６は、コンピュータシステムのメインメモリ９２０にマッピングされ得る。
【０１０１】
ＳＭ９５１内のＳＰ９５４は、同じ命令ユニット９５３からの命令を受信する。このようにして、ＳＭ内の各ＳＰ９５４は、通常は、同じ命令を同時に処理する。
【０１０２】
ＧＰＵ９５０は、プログラム又は関数であり得るカーネルを実行するように構成することができる。カーネルは、ＣＵＤＡプラットフォームを利用し得る。カーネルは、プリセット閾値を超えて実行する場合にウォッチドッグタイマがカーネルを機能しないようにし得るので、一般に、比較的短寿命（すなわち、秒のオーダー）である。しかしながら、或るケースでは、カーネルは、実行が終わるまで無期限に実行することができるという点で長時間実行し得る。カーネルは、ＧＰＵ上で実行するが、通常は、ローカル又はリモートＣＰＵにより開始される。
【０１０３】
カーネルは、カーネルに対応するグリッドを実行するＧＰＵ９５０により実行される。グリッドは、いくつかのブロックからなる。通常は、グリッドのブロック間に同期は存在しない。
【０１０４】
各ＳＭ９５１は、グリッドのブロックを実行することができる。通常、ＳＭ９５１は、複数のブロックを同時に実行することができる。ＳＭ９５１上のブロックの数は、共有メモリ９５２の容量により制限され得る。通常、ブロックは、カーネルの実行中に１つのＳＭ９５１から別のＳＭ９５１へ移動しない。
【０１０５】
各ＳＰ９５４は、ブロックのスレッドを実行することができる。或るケースでは、１つのＳＰ９５４は、複数のスレッドを同時に処理することができる。スレッドは、通常、いくつかの命令を含む計算である。各命令の実行には、いくつかの、例えば４サイクルかかる場合がある。この待ち時間により、ＳＰ９５４は、一度に複数のスレッドを実行することができる。すなわち、１つのスレッドが実行されている間に、別のスレッドを開始することができる。スレッドは、ＳＭ９５１の共有メモリ９５２を介して互いに通信し得る。
【０１０６】
ＧＰＵ９５０は、ＳＩＭＤ（シングルインストラクション、マルチプルデータ）アーキテクチャを有し得る。これは、ＧＰＵ９５０がワープに基づいて動作し得ることを意味する。各ワープは、ロックステップで、しかし随意的に異なるデータで、同じ命令を実行するブロック内のいくつかのスレッドを備える。例えば、ワープの各スレッドは、異なるメモリアドレスに記憶された数値に加算命令を実行し得る。加えて、ワープ内の各スレッドは、データをメモリから同時にフェッチするように構成されてよい。
【０１０７】
ワープはＳＭ９５１上に常駐し、ゆえに、ワープの各スレッドは、ＳＭ９５１内の異なるＳＰ９５４により実行され得る。ワープサイズ（すなわち、ロックステップで実行することができるワープ内のスレッドの数）は、３２などの所定の値であり得る。ＳＭ９５１は、複数の常駐ワープを有し得る。
【０１０８】
このようにして、単一のカーネルが、ＧＰＵ上で利用可能な多数のプロセッサの容量を使用することができる。これにより、カーネルが他の処理ユニットと比較して顕著により速く実行され得る。
【０１０９】
解釈
いくつかの方法が上記で説明されている。これらの方法のいずれかは、コンピュータプログラムを形成し得る一連の命令により具体化され得ることが理解されるであろう。これらの命令又はこのコンピュータプログラムは、一時的でないものであり得るコンピュータ可読媒体上に記憶され得る。実行されるときに、これらの命令又はこのプログラムは、ＣＰＵ又はＧＰＵなどのプロセッサに、説明した方法を行わせてよい。
【０１１０】
手法がプロセッサにより実装されるものとして説明されているが、これは、複数のプロセッサを含み得る。すなわち、少なくともプロセッサの場合には、単数形は、複数形を含むと解釈されるべきである。方法が複数のステップを含む場合、異なるステップ又はステップの異なる部分が異なるプロセッサにより行われてよい。或るケースでは、１つのステップは、第１のタイプのプロセッサにより行われてよく（例えば、大きいデータセットの処理は、ＧＰＵにより行われてよい）、別のステップは、第２のタイプのプロセッサにより行われてよい（ＣＰＵにより行われるメタデータルックアップなど）。
【０１１１】
方法の中のステップの順序は、１つのステップが、行われている別のステップに依存する、又は文脈が他を必要とする場合を除き、ステップが順序を変えて又は並行して行われるように変更されてよい。
【０１１２】
「備える、含む（ｃｏｍｐｒｉｓｅｓ）」という用語及び他の文法上の形態は、他の方法で言及されない限り包括的な意味を有することを意図している。すなわち、それらは、列挙したコンポーネントの包含、及びもしかすると他の指定されていないコンポーネント又は要素の包含を意味すると受け取られるべきである。
【０１１３】
本発明が特定の実施形態の説明により図面を参照して解説されているが、本発明は、このような詳細に制約されることを意図していない。さらなる利点及び修正が当業者にはすぐに分かるであろう。したがって、本発明のそのより広い態様は、具体的な詳細、代表的な装置及び方法、並びに示され説明された具体例に限定されない。したがって、一般的発明概念の精神又は範囲から逸脱することなくこのような詳細からの逸脱がなされてよい。
【図１】
2020038649.tif 000003
【図２】
2020038649.tif 000004
【図３】
2020038649.tif 000005
【図４】
2020038649.tif 000006
【図５】
2020038649.tif 000007
【図６】
2020038649.tif 000008
【外国語明細書】
2020038649000001.pdf