(57)【特許請求の範囲】
【請求項１】
計算集約的な動作を加速するためのシステムであって、
コントローラと、ハードウェア加速エンジンと、不揮発性メモリとを有する少なくとも１つのソリッドステートドライブを備え、前記コントローラが、
サーバからのジョブ実行コマンドの受信に応じて、加速された動作の出力を前記不揮発性メモリに記憶することなく、データに対する前記加速された動作の実行のために、前記ハードウェア加速エンジンに前記ジョブ実行コマンドと関連付けられる前記データを伝送し、
前記出力を前記サーバに提供し、
前記ハードウェア加速エンジンが、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される、システム。
【請求項２】
計算集約的な動作を加速するためのシステムであって、
コントローラと、ハードウェア加速エンジンと、不揮発性メモリとを有する少なくとも１つのソリッドステートドライブを備え、前記コントローラが、
サーバからのジョブ実行コマンドの受信に応じて、加速された動作の出力を前記不揮発性メモリに記憶することなく、データに対する前記加速された動作の実行のために、前記ハードウェア加速エンジンに前記ジョブ実行コマンドと関連付けられる前記データを伝送し、
前記出力を前記サーバに提供し、
前記加速された動作が、前記データの暗号化、前記データの暗号解読、前記データの符号化、前記データの復号化、前記データの圧縮、及び前記データの解凍、又はこれらの組み合わせの少なくとも一部分を備える、システム。
【請求項３】
前記少なくとも１つのソリッドステートドライブが、転送バッファを更に備え、
前記コントローラが更に、前記ハードウェア加速エンジンに、前記出力を前記転送バッファに記憶させ、
前記コントローラが更に、前記サーバからの要求出力メッセージの受信に応じて、前記出力を前記サーバに提供する、請求項１または２に記載のシステム。
【請求項４】
前記コントローラが更に、加速されるジョブのパラメータに従って、前記ハードウェア加速エンジンに前記加速された動作を行わせる、請求項１から３のいずれか一項に記載のシステム。
【請求項５】
前記パラメータが、前記データのサイズ、前記データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む、請求項４に記載のシステム。
【請求項６】
前記少なくとも１つのソリッドステートドライブが、前記サーバから離れたソリッドステートドライブアレイに含まれる、請求項１から５のいずれか一項に記載のシステム。
【請求項７】
前記少なくとも１つのソリッドステートドライブが、前記サーバと一体的である、請求項１から５のいずれか一項に記載のシステム。
【請求項８】
前記コントローラが、前記出力を前記サーバに自動的に提供する、請求項１から７のいずれか一項に記載のシステム。
【請求項９】
計算集約的な動作を加速するための方法であって、ソリッドステートドライブのコントローラによって、
サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、前記ソリッドステートドライブのハードウェア加速エンジンに前記ジョブ実行コマンドと関連付けられるデータを伝送することと、
出力を前記ソリッドステートドライブの不揮発性メモリに記憶することなく、前記出力を生成するために、前記ハードウェア加速エンジンによって、前記データに対して前記加速された動作を行うことと、
前記出力を前記サーバに提供することと、を含み、
前記ハードウェア加速エンジンが、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される、方法。
【請求項１０】
計算集約的な動作を加速するための方法であって、ソリッドステートドライブのコントローラによって、
サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、前記ソリッドステートドライブのハードウェア加速エンジンに前記ジョブ実行コマンドと関連付けられるデータを伝送することと、
出力を前記ソリッドステートドライブの不揮発性メモリに記憶することなく、前記出力を生成するために、前記ハードウェア加速エンジンによって、前記データに対して前記加速された動作を行うことと、
前記出力を前記サーバに提供することと、を含み、
前記加速された動作が、前記データの暗号化、前記データの暗号解読、前記データの符号化、前記データの復号化、前記データの圧縮、及び前記データの解凍、又はこれらの組み合わせの少なくとも一部分を備える、方法。
【請求項１１】
前記ソリッドステートドライブが、転送バッファを更に備え、前記方法が、前記コントローラによって、
前記ハードウェア加速エンジンに、前記出力を前記転送バッファに記憶させることと、
前記サーバからの要求出力メッセージの受信に応じて、前記出力を前記サーバに提供することと、を更に含む、請求項９または１０に記載の方法。
【請求項１２】
前記コントローラによって、
前記ハードウェア加速エンジンに、加速されるジョブのパラメータに従って、前記加速された動作を行わせることを更に含む、請求項９から１１のいずれか一項に記載の方法。
【請求項１３】
前記パラメータが、前記データのサイズ、前記データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む、請求項１２に記載の方法。
【請求項１４】
前記ソリッドステートドライブが、前記サーバから離れたソリッドステートドライブアレイに含まれる、請求項９から１３のいずれか一項に記載の方法。
【請求項１５】
前記ソリッドステートドライブが、前記サーバと一体的である、請求項９から１３のいずれか一項に記載の方法。
【請求項１６】
前記出力を前記サーバに自動的に提供することを更に含む、請求項９から１５のいずれか一項に記載の方法。
【請求項１７】
ソリッドステートドライブのコントローラに、
サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、前記ソリッドステートドライブのハードウェア加速エンジンに前記ジョブ実行コマンドと関連付けられるデータを伝送する手順と、
出力を前記ソリッドステートドライブの不揮発性メモリに記憶することなく、前記出力を生成するために、前記ハードウェア加速エンジンによって、前記データに対して前記加速された動作を行う手順と、
前記出力を前記サーバに提供する手順と
を実行させ、
前記ハードウェア加速エンジンが、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される、コンピュータプログラム。
【請求項１８】
ソリッドステートドライブのコントローラに、
サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、前記ソリッドステートドライブのハードウェア加速エンジンに前記ジョブ実行コマンドと関連付けられるデータを伝送する手順と、
出力を前記ソリッドステートドライブの不揮発性メモリに記憶することなく、前記出力を生成するために、前記ハードウェア加速エンジンによって、前記データに対して前記加速された動作を行う手順と、
前記出力を前記サーバに提供する手順と
を実行させ、
前記加速された動作が、前記データの暗号化、前記データの暗号解読、前記データの符号化、前記データの復号化、前記データの圧縮、及び前記データの解凍、又はこれらの組み合わせの少なくとも一部分を備える、コンピュータプログラム。
【請求項１９】
前記ソリッドステートドライブが、転送バッファを更に備え、
前記コントローラに、
前記ハードウェア加速エンジンに、前記出力を前記転送バッファに記憶させる手順と、
前記サーバからの要求出力メッセージの受信に応じて、前記出力を前記サーバに提供する手順と
を更に実行させるための、請求項１７または１８に記載のコンピュータプログラム。
【請求項２０】
前記コントローラに、
前記ハードウェア加速エンジンに、加速されるジョブのパラメータに従って、前記加速された動作を行わせる手順を更に実行させるための、請求項１７から１９のいずれか一項に記載のコンピュータプログラム。
【請求項２１】
前記パラメータが、前記データのサイズ、前記データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む、請求項２０に記載のコンピュータプログラム。
【請求項２２】
前記ソリッドステートドライブが、前記サーバから離れたソリッドステートドライブアレイに含まれる、請求項１７から２１のいずれか一項に記載のコンピュータプログラム。
【請求項２３】
前記ソリッドステートドライブが、前記サーバと一体的である、請求項１７から２１のいずれか一項に記載のコンピュータプログラム。
【請求項２４】
前記コントローラに、
前記出力を前記サーバに自動的に提供する手順を更に実行させるための、請求項１７から２３のいずれか一項に記載のコンピュータプログラム。
【請求項２５】
請求項１７から２４のいずれか一項に記載のコンピュータプログラムを記憶する、コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、計算集約的な動作を加速するための技術に関する。具体的には、本開示は、１又は複数のソリッドステートドライブによって計算集約的な動作を加速するための技術に関する。
【背景技術】
【０００２】
暗号化、暗号解読、圧縮／解凍、ハッシュ計算、低レベルの画像処理アルゴリズム（限定されないが、フィルタ、閾値化、その他など）、ＤＮＡ配列整合及び検索アルゴリズム、符号化、復号化アルゴリズム、その他などの計算集約的な動作は、完了するためにかなりの中央演算処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）のサイクル及び／又は他のリソースを必要とし得る。計算集約的な動作に対する必要性及びその複雑さが増すにつれて、そのような動作の実行をＣＰＵから専用のハードウェアにオフロードするための技術が開発されてきた。例えば、計算集約的な暗号化及び暗号解読動作を行うために、スタンドアロンの暗号化及び暗号解読アクセラレータが開発されてきた。このようなアクセラレータは、ある特定の暗号化及び暗号解読動作の特定の実行のために設計することができ、したがって、数多くの事例において、該アクセラレータは、このような動作を汎用プロセッサよりも高速に行うことができる。該アクセラレータはまた、このような動作を行うために必要なＣＰＵサイクルの数を低減させることもでき、したがって、暗号化、暗号解読、又は他の計算集約的な動作がアクセラレータによって行われているときであっても、他の動作のためにＣＰＵを解放することができる。スタンドアロンのハードウェアアクセラレータは、それらの意図する目的に対しては効果的であるが、非常に高コストであり得る。実際に、スタンドアロンのハードウェアアクセラレータのコストは、いくつかの事例において、例えば、複数のスタンドアロンのハードウェアアクセラレータが、加速された計算サービスを１又は複数のクライアントに提供するように構成されるサーバ（本明細書では、「ホストシステム」とも称される）において使用されるときに、極端に高くなり得る。
【発明の概要】
【課題を解決するための手段】
【０００３】
特許請求される主題の実施形態の特徴及び利点は、以下の発明を実施するための形態が進行するにつれて、図面を参照すれば明らかになるはずであり、図面において同じ符号は同じ部分を示す。
【図面の簡単な説明】
【０００４】
【図１】本開示と一致する計算集約的な動作を加速するためのシステムのブロック図である。
【図２】本開示の様々な実施形態と一致する図１のシステムの更に詳細なブロック図である。
【図３】本開示の様々な実施形態と一致するサーバ及びソリッドステートドライブアレイの更なる詳細を示すブロック図である。
【図４】本開示と一致する計算集約的な動作を加速する例示的な方法と一致する例示的な動作のフロー図である。
【図５Ａ】本開示の様々な実施形態と一致する追加的なシステム構成を示す図である。
【図５Ｂ】本開示の様々な実施形態と一致する追加的なシステム構成を示す図である。
【発明を実施するための形態】
【０００５】
本開示は、特定の用途のための実例となる実施形態を参照して本明細書で説明されるが、そのような実施形態は、例示的なものに過ぎないこと、及び添付の特許請求の範囲によって定義される本発明がそうした実施形態に限定されないことを理解されたい。本明細書で提供される教示を利用することができる当業者（複数可）は、本開示の範囲内の追加的な修正、用途、及び実施形態、並びに本開示の実施形態が有用である追加的な分野を認識するであろう。
【０００６】
本明細書で説明される技術は、１又は複数のデバイスを使用して、例えばクライアントサーバアーキテクチャにおいて実施することができる。「デバイス（ｄｅｖｉｃｅ）」、「デバイス（ｄｅｖｉｃｅｓ）」、「電子デバイス（ｅｌｅｃｔｒｏｎｉｃ  ｄｅｖｉｃｅ）」、及び「電子デバイス（ｅｌｅｃｔｒｏｎｉｃ  ｄｅｖｉｃｅｓ）」という用語は、本開示と一致するクライアント及び／又はサーバとして使用することができる多数の電子デバイスのうちのいずれかを個別的又は集合的に参照するために、本明細書で互換的に使用される。本開示に従って使用することができるデバイスの非限定的な例としては、限定されないが、カメラ、携帯電話、コンピュータ端末、デスクトップコンピュータ、電子読取装置、ファクシミリ装置、キオスク、ネットブックコンピュータ、ノートブックコンピュータ、インターネットデバイス、支払い端末、パーソナルデジタルアシスタント、メディアプレーヤー及び／又はレコーダー、サーバ（例えば、ブレードサーバ、ラックマウントサーバ、これらの組み合わせ、その他）、セットトップボックス、スマートフォン、タブレットパーソナルコンピュータ、ウルトラモバイルパーソナルコンピュータ、有線電話、これらの組み合わせ、並びに同類のものなどの、任意の種類のモバイルデバイス及び／又は固定デバイスが挙げられる。このようなデバイスは、ポータブル又は固定とすることができる
【０００７】
「クライアント」及び「クライアントデバイス」という用語は、本開示と一致するクライアント機能を行うことができる１又は複数の電子デバイスを指すように、本明細書で互換的に使用される。対照的に、「サーバ」及び「サーバデバイス」という用語は、本開示と一致するサーバ機能を行うことができる１又は複数の電子デバイスを指すように、本明細書で互換的に使用される。いくつかの実施形態において、サーバデバイスは、１又は複数のサービス（例えば、計算加速サービス）をクライアントなどの別のデバイスに提供するように構成される、ホストシステムの形態とすることができる。このような実施形態において、サーバデバイスは、データセンタ又は他の計算ベースの一部を形成するか、それを含むか、又はその形態とすることができる。「ホストシステム」という用語は、本明細書で「サーバ」及び「サーバデバイス」という用語と互換的に使用される。
【０００８】
図１〜図３は、単一のクライアント及び単一のサーバを含む、本開示に従う例示的なシステムを例示する。このような具体例は、例示のためのもの、任意の数のクライアント及びサーバを使用することができることを理解されたい。実際に、本明細書で説明される技術は、複数（例えば、２、５、１０、２０、５０、１００、１０００、１０，０００、又はそれ以上）のクライアント及び／又はサーバデバイスによって実施することができる。更に、サーバの数は、クライアントの数に相関させる必要はない。実際に、いくつかの実施形態において、本明細書で説明される技術は、比較的多数（例えば、１００、１，０００、１０，０００）などのクライアントに対する計算加速サービスをサポート及び／又は提供するために、比較的少数（例えば、１つ又は２つ）のサーバを利用する。したがって、本開示は、単数のクライアント及び／又はサーバを指す場合があるが、このような表現は、複数形も含むものと解釈されるべきである。同様に、クライアント又はサーバとしてのデバイスの指定は、明確にするためのものであり、いくつかの実施形態では、クライアントデバイスを、サーバ機能を行うように構成することができること、及びサーバデバイスを、本開示と一致するクライアント機能を行うように構成することができることを理解されたい。
【０００９】
本明細書の任意の実施形態において使用されるときに、「モジュール」という用語は、本開示と一致する１又は複数の動作を行うように構成される、ソフトウェア、ファームウェア、回路、及び／又はこれらの組み合わせを指すことができる。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記録されるソフトウェアパッケージ、コード、命令、命令セット、及び／又はデータとして具現化することができる。ファームウェアは、メモリデバイスにおいてハードコードされる（例えば、不揮発性である）コード、命令若しくは命令セット、及び／又はデータとして具現化することができる。「回路」は、本明細書で任意の実施形態において使用されるときに、例えば、単独で、又は任意の組み合わせで、ハードワイヤード回路、１又は複数の個別の命令処理コアを備えるコンピュータプロセッサなどのプログラマブル回路、データマシン回路、プログラマブル回路によって実行される命令を記憶するソフトウェア及び／又はファームウェアを備えることができる。モジュールは、先に定義されたように、１又は複数の電子デバイスの一部を形成する回路として、集合的又は個別的に具現化することができる。いくつかの実施形態において、本明細書で説明される１又は複数のモジュールは、本開示と一致する１又は複数のクライアント機能及び／又はサーバ機能を行うために、ハードウェアにおいて少なくとも部分的に実施される論理の形態とすることができる。
【００１０】
「近距離通信ネットワーク」という語句は、本明細書では、互いに比較的近くにあるデバイス間で、すなわち近距離通信を介して、データ信号を送信／受信するための技術を指すために使用される。近距離通信としては、例えば、ＢＬＵＥＴＯＯＴＨ（登録商標）ネットワーク、パーソナルエリアネットワーク（ＰＡＮ：ｐｅｒｓｏｎａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、近距離無線通信、ＺｉｇＢｅｅ（登録商標）ネットワーク、有線Ｅｔｈｅｒｎｅｔ（登録商標）接続、これらの組み合わせ、及び同類のものを使用したデバイス間の通信が挙げられる。対照的に、「長距離通信ネットワーク」という語句は、本明細書において、互いにかなり離れた距離であるデバイス間で、すなわち長距離通信を使用して、データ信号を送信／受信するための技術を指すために使用される。長距離通信としては、例えば、ＷｉＦｉ（登録商標）ネットワーク、携帯電話ネットワーク（３Ｇ、４Ｇ、その他、及び同類のもの）が挙げられるがこれらに限定されないワイドエリアネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）、インターネット、電話通信ネットワーク、これらの組み合わせ、及び同類のものを使用したデバイス間の通信が挙げられる。
【００１１】
「ＳＳＤ」、「ＳＳＤｓ」、及び「ソリッドステートドライブ（ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅ）」という用語は、本明細書において、データを持続的に記憶するために集積回路アセンブリ（例えば、不揮発性ランダムアクセスメモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）アセンブリ）が使用される、多種多様なデータ記憶デバイスのいずれかを指すために使用される。このような用語はまた、ソリッドステートドライブを、例えば磁気記録媒体を含む、ハードディスクドライブと組み合わせて（例えば、キャッシュとして）使用することができる、いわゆる「ハイブリッド」ドライブも包含する。いずれの事例においても、ＳＳＤは、限定されないが、否定及び否定倫理積（ＮＡＮＤ：ｎｏｔ  ａｎｄ）及び／又は否定論理和（ＮＯＲ：ｎｏｔ  ｏｒ）メモリなどのフラッシュメモリ、相変化メモリ（ＰＣＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）、３次元クロスポイントメモリ、抵抗メモリ、ナノワイヤメモリ、強誘電体トランジスタランダムアクセスメモリ（ＦｅＴＲＡＭ：ｆｅｒｒｏ−ｅｌｅｃｔｒｉｃ  ｔｒａｎｓｉｓｔｏｒ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、メモリスタ技術、スピン転送トルク（ＳＴＴ：ｓｐｉｎ  ｔｒａｎｓｆｅｒ  ｔｏｒｑｕｅ）−ＭＲＡＭ、又は他のバイトアドレス可能なメモリデバイスを組み込む磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ：ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）メモリ、これらの組み合わせ、及び同類のものなどの、不揮発性メモリを含むものと理解することができる。
【００１２】
「計算集約的な動作」という語句は、本明細書において、完了するためにかなりのプロセッササイクルを必要とし得る、多種多様な計算動作のいずれかを指すために使用される。計算集約的な動作の非限定的な例としては、暗号化、暗号解読、圧縮／解凍、ハッシュ計算、低レベルの画像処理アルゴリズム（限定されないが、フィルタ、閾値化、その他など）、ＤＮＡ配列整合及び検索アルゴリズム、符号化アルゴリズム、復号化アルゴリズム、これらの組み合わせ、及び同類のものが挙げられる。当然、上述した動作は単なる例示であり、他の計算集約的な動作が本開示によって想定され、包含される。
【００１３】
背景技術において述べたように、データ暗号化／暗号解読、ビデオ符号化／復号化、ネットワークパケットルーティング、その他などの計算集約的な動作を加速するために、スタンドアロンのハードウェアアクセラレータが開発され、実装されてきた。このようなスタンドアロンのハードウェアアクセラレータは、それらの意図する目的に対しては効果的であり得るが、それらは非常に高価になり得る。したがって、スタンドアロンのハードウェアアクセラレータは、特にサーバが複数のこのようなアクセラレータを含むためのものである場合に、１又は複数のクライアントに対して計算加速サービス（例えば、加速された暗号化、暗号解読、その他）を提供するように構成されるサーバ又は他の計算ベースのコストのかなりの部分に相当し得る。更に、計算集約的な動作の実行は、ある特定のスタンドアロンのハードウェアアクセラレータによって十分にスケーリングすることができない場合がある。すなわち、いくつかの場合において、スタンドアロンのハードウェアアクセラレータの数の増加は、計算集約的な動作の実行の相応する（例えば、１：１）増加をもたらさない場合がある。
【００１４】
電子デバイスは、ますますソリッドステートドライブを備えるようになり、ソリッドステートドライブは、全般的に、データの記憶に使用される。このことを考慮すれば、ＳＳＤは、高帯域幅（例えば、１秒あたりマルチギガバイト）のハードウェア暗号化／暗号解読エンジンを含む、ハードウェアベースのコントローラを含む（以下、「ＳＳＤコントローラ」）。ＳＳＤのハードウェア暗号化／暗号解読エンジンは、様々な動作を高速で行うことができるが、多くの場合において、このエンジンは、データ保存時の暗号化及び／若しくは復号化を行うように、並びに／又はドライブの通常の読み出し／書き込みフローの一部としてデータを暗号化／暗号解読するように構成される。例えば、いくつかのＳＳＤは、限定されないが、ＦＩＰＳ  Ｐｕｂｌｉｃａｔｉｏｎ１９７及び／又はＩＳＯ／ＩＥＣ１８０３３−３において指定される高度暗号化規格（ＡＥＳ：Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）アルゴリズムなどの１又は複数の暗号化アルゴリズムによって、ＳＳＤに記憶されたデータを暗号化／暗号解読するように構成される、ハードウェア暗号化／暗号解読エンジンを含むことができる。既存の技術によって、ＳＳＤのハードウェア暗号化／暗号解読エンジンは、このような暗号化／暗号解読を（クライアント又はサーバの汎用プロセッサによって実行される）ソフトウェアにおいて行うよりも、数倍高速にデータ暗号化／暗号解読を行うことができる。
【００１５】
多くのＳＳＤのハードウェア暗号化／暗号解読エンジンの実行に注目しているが、典型的なシステムにおいて、ＳＳＤコントローラ、具体的には、ＳＳＤコントローラのハードウェア暗号化／暗号解読エンジンは、クライアント及び／又はサーバデバイスに、例えば、データ暗号化／暗号解読又は他の計算集約的な動作の実行に利用できない。すなわち、スタンドアロンのハードウェアアクセラレータとは異なり、ＳＳＤのハードウェア暗号化／暗号解読エンジンは、全般的に、計算集約的な動作の実行のために、ホストシステム（クライアント又はサーバ）が直接アクセスできない。
【００１６】
前述したことを考慮すれば、本開示は、全般的に、多くのＳＳＤに存在する１又は複数のハードウェア加速エンジンを利用する、計算集約的な動作を加速するための技術に関する。具体的には、及び下で説明されるように、本明細書で説明される技術は、ＳＳＤのハードウェア加速エンジンをホストシステムに提供することができる。その結果、ホストシステムは、上で識別されるような計算集約的な動作を加速するために、ＳＳＤのハードウェア加速エンジン（複数可）を使用することができる。以下から明らかになるように、この様式でのハードウェア加速エンジンの使用は、ソリッドステートドライブの従来のデータ記憶機能について妥協する必要はない。更に、いくつかの実施形態において、本明細書で説明される技術による計算集約的な動作の加速は、ＳＳＤの数によってスケーリングすることができる。
【００１７】
したがって、本開示の１つの態様は、計算集約的な動作を加速するためのシステムに関する。明確にし、理解を容易にするために、本開示は、加速される計算集約的な動作が暗号化／暗号解読アルゴリズムの、又はそのある一部分の実行である、様々な実施形態の説明に進む。本明細書で説明される技術は、暗号化／暗号解読動作を加速することに限定されるものではないこと、及びこれらの技術は、限定されないが、上記のもの及び／又はそれらの任意の部分を含む、任意の適切なタイプの計算集約的な動作を加速するために使用することができることを理解されたい。
【００１８】
これに関して、図１を参照する。図１は、本開示と一致する計算集約的な動作を加速するための例示的なシステムのブロック図である。示されるように、システム１００は、クライアント１０１と、サーバ１０２と、ソリッドステートドライブ（ＳＳＤ）アレイ１０３とを含む。
【００１９】
クライアント１０１は、上で定義されたように、任意の適切な電子デバイスとすることができる。限定されることなく、いくつかの実施形態において、クライアント１０１は、１又は複数の、携帯電話、デスクトップコンピュータ、電子読取装置、ラップトップコンピュータ、セットトップボックス、スマートフォン、タブレットパーソナルコンピュータ、テレビ、又はウルトラモバイルパーソナルコンピュータの形態である。その形態にかかわらず、いくつかの実施形態において、クライアント１０１（又はそのオペレータ）は、加速が所望される計算集約的な動作（本明細書において「ジョブ」とも称される）を有することができる。例えば、クライアント１０１（又はそのオペレータ）は、１組のデータを暗号化させることを望み得る。そのような場合において、及び下で詳細に説明されるように、クライアント１０１は、加速のためにジョブの全て又は一部分（例示的な事例では、暗号化のためにデータの全て又は一部分）をサーバ１０２に通信するように構成することができる。
【００２０】
クライアント１０１のように、サーバ１０２は、任意の適切な電子デバイスとすることができる。限定されることなく、サーバ１０２は、いくつかの実施形態において、１又は複数のブレードサーバ、ラックマウントサーバ、これらの組み合わせ、及び同類のものなどの、１又は複数のサーバコンピュータの形態である。いくつかの例示的な実施形態において、サーバ１０２は、スタンドアロンのサーバである。他の例示的な実施形態において、サーバ１０２は、データセンタ又は他の集約した計算ベースに見ることができるような、サーバアレイの１又は複数のサーバとすることができる。いずれの事例においても、サーバ１０２は、加速のためにクライアント１０１からジョブを受信し、加速のためにＳＳＤアレイ１０３の１又は複数のＳＳＤにこのジョブを伝送するように構成することができる。具体的には、及び下で説明されるように、サーバ１０２は、ＳＳＤのハードウェア加速エンジンにジョブの少なくとも一部分を行わせるために、ＳＳＤアレイ１０３の少なくとも１つのＳＳＤに、クライアント１０１から受信したジョブの全部又は一部分を伝送するように構成することができる。サーバ１０２は、次いで、ハードウェア加速エンジンによって行われる動作の出力を取り出すか、又は受信し、この出力をクライアント１０１に通信することができる。
【００２１】
ＳＤＤアレイ１０３は、１又は複数のソリッドステートドライブを含むことができる。例示のために、本開示は、（例えば、図３に示されるように）ＳＳＤアレイが１つのＳＳＤ又は２つのＳＳＤを含む、様々な実施形態を説明する。このような説明は、単なる例示のためのものであること、及び任意の数のＳＳＤを使用することができることを理解されたい。実際に、本開示は、複数のＳＳＤがＳＳＤアレイ１０３に含まれる、例えば、ＳＳＤ１０３が約２つより多い又は等しい、約５つより多い又は等しい、約１０より多い又は等しい、約１００より多い又は等しい、約１０００より多い又は等しい、又はより多くのＳＳＤを含む実施形態を想定する。ここでも、このような範囲は、単なる例示のためのものである。
【００２２】
ＳＳＤアレイ１０３のＳＳＤは、任意の適切なフォームファクタ又は構成とすることができる。適切なＳＳＤのフォームファクタの非限定的な例としては、様々な標準ハードディスクドライブのフォームファクタ（例えば、２．５インチ、３．５インチ、１．８インチ）、モバイルシリアルアドバンストテクノロジーアタッチメントのフォームファクタなどのモバイルフォームファクタ、周辺装置接続インターフェース（ＰＣＩ：ｐｅｒｉｐｈｅｒａｌ  ｃｏｎｎｅｃｔ  ｉｎｔｅｒｆａｃｅ）ミニカードのフォームファクタ、モジュール上のディスクのフォームファクタ、ハイブリッドディスクのフォームファクタ、これらの組み合わせ、及び同類のもの、のいずれかであるＳＳＤが挙げられる。いくつかの実施形態において、ＳＳＤアレイ１０３のＳＳＤの１又は複数は、ＩＮＴＥＬ（登録商標）  Ｃｏｒｐｏｒａｔｉｏｎによって、例えばシリーズ３００以上の呼称で販売されるＳＳＤである。
【００２３】
例示のため、及び理解を容易にするために、図１、図２、及び図３は、ＳＳＤアレイ１０３がサーバ１０２とは別体であるように例示されるシステムを示す。このような場合において、ＳＳＤアレイ１０３は、サーバ１０２とは別体であるがサーバ１０２によってアクセス可能である計算ベースの一部とすることができると理解することができる。したがって、例えば、ＳＳＤアレイ１０３は、サーバ１０２とは別体の計算ベースの一部を形成するか、その形態とするか、又はそれを含むことができる。すなわち、ＳＳＤアレイ１０３は、サーバ１０２と同じ又は異なるデータセンタ、サーバファーム、ハウジング、その他に収容することができる。当然、このような具体例は、単なる例示のためのものであること、及びＳＳＤアレイがサーバ１０２と一体的とすることができること、又は別様にはサーバ１０２の一部を形成することができることを理解されたい。例えば、サーバ１０２は、ＳＳＤアレイ１０３を含む、又は別様には該ＳＳＤアレイと一体的である、１又は複数のラックマウントサーバ及び／又はブレードサーバを含むことができる。このような実施形態において、ＳＳＤアレイ１０３のＳＳＤの１又は複数は、サーバ１０２に、例えばマザーボード及び／又はその拡張ボードに通信可能に結合することができる。
【００２４】
クライアント１０１、サーバ１０２、及びソリッドステートドライブアレイ１０３は、互いに、例えば直接又は随意のネットワーク１０４を通して、有線通信又は無線通信とすることができる（破線で示す）。限定されることなく、クライアント１０１及びサーバ１０２は、いくつかの実施形態において、ネットワーク１０４を介して互いに通信し、サーバ１０２及びＳＳＤアレイ１０３は、直接又はネットワーク１０４を通して通信する。いずれの事例においても、ネットワーク１０４は、データを搬送する任意のネットワークとすることができる。ネットワーク１０４として使用することができる適切なネットワークの非限定的な例としては、上で定義されたような短距離通信ネットワーク及び長距離通信ネットワーク、これらの組み合わせ、及び同類のものが挙げられる。いくつかの実施形態において、ネットワーク１０４は、ＢＬＵＥＴＯＯＴＨ（登録商標）ネットワーク、ＺｉｇＢｅｅ（登録商標）ネットワーク、近距離無線通信（ＮＦＣ：ｎｅａｒ  ｆｉｅｌｄ  ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）リンク、有線（例えば、Ｅｔｈｅｒｎｅｔ（登録商標））接続、これらの組み合わせ、及び同類のものなどの、近距離通信ネットワークである。他の実施形態において、ネットワーク１０４は、Ｗｉ−Ｆｉ（登録商標）ネットワーク、セルラー（例えば、３Ｇ、４Ｇ、その他）ネットワーク、インターネットなどのワイドエリアネットワーク、これらの組み合わせ、及び同類のものなどの長距離通信ネットワークである。
【００２５】
以下、図２を参照する。図２は、計算集約的な動作を加速するためのシステム１００の更なる詳細を含むブロック図を示す。示されるように、クライアント１０１は、任意の適切なデバイスプラットフォームとすることができる、クライアントデバイスプラットフォーム２０１を含む。限定されることなく、クライアントデバイスプラットフォーム２０１は、クライアント１０１として使用される電子デバイスのタイプと相関することが好ましい。したがって、例えば、クライアント１０１が携帯電話、スマートフォン、デスクトップコンピュータ、ラップトップコンピュータ、その他である場合、クライアントデバイスプラットフォーム２０１は、いくつかの実施形態において、それぞれ、携帯電話プラットフォーム、スマートフォンプラットフォーム、デスクトップコンピュータプラットフォーム、ラップトップコンピュータプラットフォーム、その他である。
【００２６】
その性質にかかわらず、デバイスプラットフォーム２０１は、プロセッサ２０２と、メモリ２０３と、通信リソース（ＣＯＭＭＳ：ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｒｅｓｏｕｒｃｅｓ）２０４とを含むことができる。プロセッサ２０２は、任意の適切な汎用プロセッサ又は特定用途向け集積回路とすることができ、また、１つ又は複数のプロセッサコア上で１つ又は複数のスレッドを実行することができる。限定されることなく、プロセッサ２０２は、いくつかの実施形態において、限定されないが、ＩＮＴＥＬ（登録商標）  Ｃｏｒｐ．、ＡＤＶＡＮＣＥＤ  ＭＩＣＲＯ  ＤＥＶＩＣＥＳ（登録商標）、ＡＲＭ（登録商標）、ＮＶＩＤＩＡ（登録商標）、ＡＰＰＬＥ（登録商標）、及びＳＡＭＳＵＮＧ（登録商標）から市販されている汎用プロセッサなどの、汎用プロセッサである。図２は、シングルプロセッサを含むようにクライアント１０１を例示しているが、複数のプロセッサを使用することができる。
【００２７】
メモリ２０３は、任意の適切なタイプのコンピュータ可読メモリとすることができる。メモリ２０３として使用することができる例示的なメモリのタイプとしては、プログラマブルメモリ、不揮発性メモリ、リードオンリーメモリ、電気的プログラマブルメモリ、ランダムアクセスメモリ、フラッシュメモリ（例えば、ＮＡＮＤ型又はＮＯＲ型メモリ構造を含むことができる）、磁気ディスクメモリ、光ディスクメモリ、相変化メモリ、メモリスタメモリ技術、スピントルク転送メモリ、これらの組み合わせ、及び同類のものが挙げられるが、これらに限定されない。加えて、又は代替的に、メモリ２０３としては、他の及び／又は後で開発されるタイプのコンピュータ可読メモリを挙げることができる。
【００２８】
ＣＯＭＭＳ２０４は、下で論じられるように、クライアント１０１が、サーバ１０２との間で、又はより具体的には、サーバデバイスプラットフォーム２１１のＣＯＭＭＳ２１４との間で少なくともメッセージを送信及び受信することを可能にするように構成される、ハードウェア（すなわち、回路）、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせを含むことができる。ＣＯＭＭＳ２０４とＣＯＭＭＳ２１４との間の通信は、上で全般的に説明したように、近距離及び／又は長距離通信ネットワークを使用して有線又は無線接続を通じて起こすことができる。したがって、ＣＯＭＭＳ２０４は、このような通信をサポートするためのハードウェア、例えば、１又は複数の、トランスポンダ、アンテナ、ＢＬＵＥＴＯＯＴＨ（登録商標）チップ、パーソナルエリアネットワークチップ、近距離無線通信チップ、有線及び／又は無線ネットワークインターフェース回路、これらの組み合わせ、並びに同類のものを含むことができる。
【００２９】
クライアントデバイスプラットフォーム２０１は、ジョブインターフェースモジュール（ＪＩＭ：ｊｏｂ  ｉｎｔｅｒｆａｃｅ  ｍｏｄｕｌｅ）２０５を更に含む。後で詳細に説明されるように、ＪＩＭ２０５は、実行のために、（計算集約的な）ジョブをバッチ処理するように、及び／又はサーバ１０２に送信するように構成することができる。いずれの事例においても、ＪＩＭ２０５は、クライアント１０１に本開示と一致するジョブ要求動作を行わせるように構成される、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせの形態とすることができる。いくつかの実施形態において、ＪＩＭ２０５は、プロセッサ２０２によって実行されたときに本開示と一致するジョブ要求動作の実行を引き起こす、（例えば、メモリ２０３に記憶された）コンピュータ可読命令の形態とすることができる。代替的に、又は加えて、いくつかの実施形態において、ＪＩＭ２０５は、本開示と一致する１又は複数のクライアント機能を行うために、少なくとも部分的にハードウェアにおいて実施される論理を含むか、又はその形態とすることができる。
【００３０】
図２に更に示されるように、サーバ１０２は、サーバデバイスプラットフォーム２１１を含む。クライアントデバイスプラットフォーム２０１のように、サーバデバイスプラットフォーム２１１は、任意の適切なデバイスプラットフォームとすることができる。限定されることなく、サーバデバイスプラットフォーム２１１は、サーバ１０２として使用される電子デバイスのタイプと相関することが好ましい。したがって、例えば、サーバ１０２がラックマウントサーバプラットフォーム、ブレードサーバプラットフォーム、デスクトップコンピュータプラットフォーム、その他である場合、サーバデバイスプラットフォーム２１１は、いくつかの実施形態において、それぞれ、ラックマウントサーバプラットフォーム、ブレードサーバプラットフォーム、デスクトップコンピュータプラットフォーム、その他である。サーバデバイスプラットフォーム２１１は、プロセッサ２１２と、メモリ２１３と、ＣＯＭＭＳ２１４とを更に含む。このような構成要素の性質及び機能は、クライアントデバイスプラットフォーム２０１の対応する部分と同じであり、したがって、簡潔にするために再度説明されない。
【００３１】
前述の構成要素に加えて、デバイスプラットフォーム２１１は、ジョブ加速インターフェースモジュール（ＪＡＩＭ：ｊｏｂ  ａｃｃｅｌｅｒａｔｉｏｎ  ｉｎｔｅｒｆａｃｅ  ｍｏｄｕｌｅ）２１５を含む。下で詳細に説明されるように、ＪＡＩＭは、全般的に、クライアント１０１から（計算集約的な）ジョブを受信し、このようなジョブを実行のためにＳＳＤアレイ１０３の１又は複数のＳＳＤに運搬するように構成することができる。ＪＡＩＭはまた、ＳＳＤアレイ１０３によって生成された出力を受信し、及び／又は取り出し、そして、該出力をクライアント１０１に通信するように構成することもできる。このようにして、ＪＡＩＭ２１５は、ＳＳＤのハードウェア加速エンジンをサーバ１０２に提供することができ、したがって、サーバ１０２が計算集約的な動作を行うためにこのようなハードウェアを活用することを可能にすることができる。
【００３２】
ＪＩＭ２０５のように、ＪＡＩＭ２１５は、サーバ１０２に本開示と一致するジョブ加速インターフェース動作を行わせるように構成される、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせの形態とすることができる。このような動作としては、例えば、下で論じられるように、クライアント１０１からジョブ要求及び／又はデータを受信すること、１又は複数のジョブ実行コマンドを生成することと、ＳＳＤアレイ１０３にジョブ実行コマンド（複数可）を伝送すること、（いくつかの実施形態において）ＳＳＤアレイ（又はそのＳＳＤ）によって生成される出力を要求すること、並びにクライアント１０１に出力を伝送することを挙げることができる。いくつかの実施形態において、ＪＡＩＭ２１５は、プロセッサ２１２によって実行されたときに本開示と一致するジョブ加速インターフェース動作の実行を引き起こす、（例えば、メモリ２１３に記憶された）コンピュータ可読命令の形態とすることができる。代替的に、又は加えて、いくつかの実施形態において、ＪＡＩＭ２１５は、本開示と一致する１又は複数のサーバ機能を行うために、少なくとも部分的にハードウェアにおいて実施される論理を含むか、又はその形態とすることができる。
【００３３】
いくつかの実施形態において、ＪＡＩＭ２１５は、過去の、現在の、又は将来開発されるバージョンのシリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ：ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）プロトコル、不揮発性メモリエクスプレス（ＮＶＭｅ：ｎｏｎ−  ｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ  ｅｘｐｒｅｓｓ）プロトコル、シリアルアタッチドスモールコンピュータシステムインタフェース（ＳＡＳ：ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍｓ  ｉｎｔｅｒｆａｃｅ）プロトコル、これらの組み合わせ、及び同類のものなどの、確立された通信プロトコルに従ってＳＳＤアレイ１０３と通信するように構成することができる。このようなプロトコルは、ＪＡＩＭ２１５によって発行されているような、本明細書で説明されるコマンド、例えば上記以外のジョブ実行コマンドを説明し、及び／又は実施するために使用することができる、ベンダ固有のコマンドを定義するためのオプションを有する。したがって、ＪＡＩＭ２１５によって発行されるコマンドが、上述したプロトコルの１又は複数に従うベンダ固有のコマンドとすることができることを理解されたい。
【００３４】
上で述べたように、ＳＤＤアレイ１０３は、１又は複数のソリッドステートドライブを含むことができる。この概念は図３に図示され、該図は、本開示の様々な実施形態と一致するサーバ及びソリッドステートドライブアレイの更なる詳細を示すブロック図である。図３に示されるように、ＳＳＤアレイ１０３は、ＳＳＤ３０１１・・・ｎを含むように構成することができ、ここで、ｎは、０である（単一のＳＳＤだけが使用されることを示す）か、又は２以上の整数である。前述と一致して、ｎは、２〜約５、２〜約１０、２〜約５０、２〜約１００、２〜約１０００、その他の範囲とすることができる。限定されることなく、ＳＳＤアレイ１０３は、いくつかの実施形態において、２つ以上のＳＳＤ含む。
【００３５】
ＳＳＤ３０１１、３０１ｎは、それぞれ、コントローラ３０２、３０２'を含むことができる。図３に更に示されるように、各コントローラ３０１１、３０１ｎは、ハードウェア加速エンジン（ＨＡＥ：ｈａｒｄｗａｒｅ  ａｃｃｅｌｅｒａｔｉｏｎ  ｅｎｇｉｎｅ）３０３、３０３'を含むことができる。全般に、ＨＡＥ３０３、３０３'は、本明細書においてデータとも称される、データに対して加速された動作を行うように構成することができる。より具体的には、ＨＡＥ３０３、３０３'は、ＳＳＤ３０１、３０１'（例えば、不揮発性メモリ（ＮＶＭ：ｎｏｎ−ｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ）３０４、３０４'）に記憶された、及び／又はサーバ１０２から受信することができるデータ／データに対して、加速された計算集約的な動作を行うように構成することができる。いくつかの実施形態において、ＨＡＥ３０３、３０３'は、フィールドプログラマブルゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、特定用途向け集積回路、暗号化／暗号解読加速エンジン、圧縮／解凍エンジン、符号化／復号化エンジン（ＣＯＤＥＣ：ｅｎｃｏｄｅ／ｄｅｃｏｄｅ  ｅｎｇｉｎｅ）、これらの組み合わせ、及び同類のものの形態で構成され、これらのいずれか又は全ては、ハードウェア、ソフトウェア、又はこれらの組み合わせの形態のインターフェースを含むことができる。限定されることなく、ＨＡＥ３０３、３０３'は、いくつかの実施形態において、ハードウェア暗号化／暗号解読エンジンの形態である。適切なハードウェア暗号化／暗号解読エンジンの非限定的な例としては、限定されないがＩＮＴＥＬ（登録商標）Ｐ３７００シリーズのＳＳＤなどの、ＩＮＴＥＬ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎによって販売されているある特定のＳＳＤにおいて利用可能なハードウェア暗号化エンジンが挙げられる。いくつかの実施形態において、ＨＡＷ３０３、３０３'は、データに対する１又は複数の暗号化アルゴリズム（例えば、ＦＩＰＳ１９７によって指定されるＡＥＳアルゴリズム）の実行を加速するように構成される、ハードウェア暗号化／暗号解読エンジンである。
【００３６】
後で詳細に説明されるように、コントローラ３０２は、例えば有線又は無線通信を介して、ＪＡＩＭ２１５からデータ／データと関連付けられるジョブ実行コマンドを受信することができる。ジョブ実行コマンドに応じて、コントローラ３０２は、ジョブ要求に従って処理するために、ＨＡＥ３０３にデータを転送することができる。ＨＡＥ３０３は、ジョブ実行コマンドによって指定される様式で、例えばデータに対して加速された計算集約的な動作を行うことによって、データを処理することができる。ＳＳＤ３０１１、３０１ｎの構成、及び／又は受信したジョブ実行コマンドの構成に応じて、ＨＡＥによって生成された出力は、例えばフロースルーの様式で、サーバ１０２に通信することができる。すなわち、いくつかの実施形態において、出力は、サーバ１０２が出力を要求することを必要とせずに、サーバ１０２に転送することができる。
【００３７】
代替的に、又は加えて、いくつかの実施形態において、ＨＡＥ３０３、３０３'の出力は、ＮＶＭ３０４、３０４'又は随意の転送バッファ３０５、３０５'などのＳＳＤ３０１１、３０１ｎのメモリに記憶することができる。随意の転送バッファ３０５、３０５'は、任意の適切な転送バッファとすることができ、いくつかの実施形態では、ダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）又はスタティックランダムアクセスメモリすなわちＳＲＡＭ（ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）などの、揮発性メモリを含むか、又はその形態である。
【００３８】
限定されることなく、いくつかの実施形態において、ＳＳＤ３０１１、３０１ｎは、随意の転送バッファ３０５、３０５'を含み、ＪＡＩＭ２１５から受信するジョブ実行コマンドは、コントローラ３０２、３０２'（又は、より具体的には、ＨＡＥ３０３、３０３'）に、その出力を転送バッファ３０５に記憶させるように構成される。このような場合において、ＪＡＩＭ２１５は、サーバ１０２に、出力要求メッセージ（例えば、読み出しバッファコマンド）をＳＳＤ３０１１、３０１ｎに発行させるように更に構成され、ＳＳＤアレイ１０３に、ＨＡＥ３０３、３０３'の出力をサーバ１０２に提供させる。
【００３９】
例示のために、本開示は、以下、加速された暗号化動作を行うために図１〜図３に例示されるシステムが使用される、例示的な一実施形態の説明に進む。これに関して、クライアント１０１及び／又はそのオペレータが、高度暗号化規格などの暗号化アルゴリズムによって、データセット（データ）を暗号化することを望み得ることに留意されたい。これに関して、ＪＩＭ２０５は、クライアント１０１のＣＯＭＭＳ２０４に、サーバ１０２のＣＯＭＭＳ２１４に第１の信号を伝送させるように構成することができる。いくつかの実施形態において、第１の信号は、ジョブ加速要求を含むことができる。とりわけ、ジョブ加速要求は、加速されるジョブのパラメータを指定することができる。
【００４０】
このようなパラメータの非限定的な例としては、データのサイズ、データに対して行われる動作（この事例では、他の計算集約的な動作を通した暗号化が想定される）、用いられる暗号化のタイプ（例えば、ＡＥＳ暗号化、ＳＭＳ４暗号化、その他）、暗号化に使用される１又は複数の鍵、これらの組み合わせ、及び同類のものが挙げられる。当然、前述のリストは、例示ためのものであり、加速される動作は、考慮中の暗号化アルゴリズムに依存し得ることを理解されたい。いくつかの実施形態において、第１の信号はまた、１又は複数の鍵も含むことができ、及び／又はデータの処理に使用される１又は複数のアルゴリズムも指定することができる。例えば、データが単一鍵暗号化プロトコルを使用して暗号化される場合、第１の信号は、データを暗号化するためにＨＡＥによって使用される鍵を含むことができる。代替的に、又は加えて、ＳＳＤ３０１１、３０１ｎの各々は、データを暗号化するために使用される鍵とともに予め用意しておくことができる。
【００４１】
第１の信号はまた、クライアント１０１に関する情報も含むことができる。例えば、第１の信号は、クライアント１０１の真正性を検証するためにサーバ１０２によって使用することができる、クライアント認証情報を含むことができる。適切なクライアント識別情報の非限定的な例としては、クライアント１０１の識別子、１又は複数のパスワード、１又は複数の鍵（例えば、クライアント１０１の拡張プライバシー識別子（ＥＰＩＤ：ｅｎｈａｎｃｅｄ  ｐｒｉｖａｃｙ  ｉｄｅｎｔｉｆｉｅｒ））、１又は複数のハッシュ、それらの組み合わせ、又は同類のものが挙げられる。これらは、当然、単なる例示のためのものであり、サーバ１０２がクライアント１０１の真正性を検証することを可能にすることができるのであれば、任意の適切な情報をクライアント認証情報として第１の信号に含むことができる。これに関して、サーバ１０２は、任意の適切な認証プロトコルを介して、クライアント１０１の真正性を検証することができる。
【００４２】
クライアントの真正性が検証されると、又はこのような検証が必要とされない場合、ＪＡＩＭ２１５は、サーバ１０２に、例えばＣＯＭＭＳ２１４を使用して、クライアント１０１に第２の信号を伝送させることができる。いくつかの実施形態において、第２の信号は、第１の信号に確認応答し、クライアント１０１に、サーバ１０２に直接又はネットワーク１０４を介してデータを伝送させることができる。
【００４３】
この時点で、ＪＡＩＭ２１５は、ジョブを開始する前に、クライアント１０１からの全データの受信を待つことができ、又は、データを受信している間に、例えばサーバ１０２へのインフライト又はストリーミング中に、ジョブを開始することができる。いずれの事例においても、ＪＡＩＭ２１５は、ＳＳＤアレイ１００３に第３の信号を送ることによって、ジョブ（この事例では、データの暗号化）の実行を開始することができる。第３の信号は、データに対して行われる動作を詳述するジョブ実行コマンド、並びにＳＳＤアレイ１０３のＳＳＤの１又は複数によって処理されるデータを含むことができる。この例示的な事例において、例えば、第３の信号は、行われる暗号化動作のタイプを指定するジョブ実行コマンド、並びに暗号化が行われるデータの説明を含むことができる。上で述べたように、ジョブ実行コマンドは、１又は複数の過去の、現在の、又は将来開発されるバージョンのＳＡＴＡ、ＮＶＭｅ、及び／又はＳＡＳプロトコルに従う、ベンダ固有のコマンドの形態とすることができる。
【００４４】
ジョブ実行コマンドに応じて、ＳＳＤアレイ１０３のＳＳＤのコントローラは、処理のために、ハードウェア加速エンジン（例えば、ＨＡＥ３０３、３０３'）に該コントローラが受信したデータの全て又は一部分を伝送するように構成することができる。例えば、ＨＡＥ３０３は、サーバ１０２から受信したジョブ実行コマンドに指定される動作と一致する様式で、又はより具体的には、サーバ１０２から受信したジョブ実行コマンドに応じてコントローラ３０２によって生成されたコマンドから、受信したデータを処理することができる。この実施例において、ＨＡＥ３０３は、様々な市販のＳＳＤにおいて用いることができるような、ハードウェア暗号化エンジンとすることができる。したがって、ＳＳＤによって受信したデータが（例えば、高度暗号化規格又は別の適切な暗号化アルゴリズムを使用して）暗号化される場合、コントローラ３０２、３０２'は、ＨＡＥ３０３、３０３'にデータの全て又は一部分を供給することができる。それに応じて、ＨＡＥ３０３、３０３'は、出力を生成するために、データに対してハードウェア加速された暗号化を行うことができる。ジョブ実行コマンドのように、ＳＳＤアレイ１０３のＳＳＤのコントローラによって発行されるコマンドは、例えば１又は複数の過去の、現在の、又は将来開発されるバージョンのＳＡＴＡ、ＮＶＭ、及び／又はＳＡＳプロトコルに従う、ベンダ固有のコマンドの形態とすることができる。
【００４５】
いくつかの実施形態において、ＪＡＩＭ２１５は、サーバ１０２に、ジョブ実行コマンドを生成させることができ、該ジョブ実行コマンドは、ＳＳＤアレイ１０３のＳＳＤ（例えば、ＳＳＤ  ３０１１、３０３ｎ）のコントローラ（例えば、コントローラ３０２、３０２'）に発行される（随意に、ベンダ固有の）読み出し／書き込みコマンドを含むか、それと関連付けられるか、又はその形態である。このような場合において、ジョブ実行コマンドは、不揮発性メモリに対してデータ及び／又は出力を読み出すこと及び／又は書き込むことに加えて、ハードウェア加速エンジン（例えば、ＨＡＥ３０３、３０３'）によって、コントローラに、要求された動作の実行を起こさせる。すなわち、ジョブ実行コマンドに応じて、ＳＳＤの不揮発性メモリ（例えば、ＮＶＭ３０４、３０４'）にＨＡＥ３０３、３０３'の出力を書き込むことができる。代替的に、又は加えて、出力は、ＳＳＤのバッファ（例えば、随意のバッファ３０５、３０５'）に書き込むことができる。いずれの事例においても、出力が書き込まれると、コントローラ３０２は、サーバ１０２に、ジョブの実行が完了したことを示す信号を伝送することができる。このような信号に応じて、ＪＡＩＭ２１５は、サーバ１０２に、コントローラ３０２からの出力の伝送を要求させることができる。したがって、例えば、ＪＡＩＭ２１５は、サーバ１０２に、ＳＳＤアレイ１０３の適切なＳＳＤに要求出力コマンドを発行させることができる。要求出力コマンドは、ＳＳＤのコントローラに、ハードウェア加速エンジンによって行われる動作の出力を読み出させ、サーバ１０２に該出力を伝送させるように構成することができる。ジョブ実行コマンドのように、要求出力コマンドは、１又は複数のＳＡＴ、ＮＶＭｅ、及び／又はＳＡＳプロトコルに従う、ベンダ固有のコマンドとすることができる。次いで、サーバ１０２は、例えば有線又は無線通信を介して、出力をクライアント１０１に通信することができる。
【００４６】
より全般的には、いくつかの実施形態において、ＪＡＩＭ２１５は、ジョブ実行コマンドを読み出し／書き込みコマンドの一部として構成することができ、該読み出し／書き込みコマンドは、ＳＳＤのコントローラに、処理のために、ハードウェア加速エンジンにジョブと関連して受信したデータを伝送させる。ジョブ実行コマンドに応じて、ハードウェア加速エンジンは、データに対して計算集約的な動作、例えば暗号化、暗号解読、その他を行い、不揮発性メモリ、バッファ／キャッシュ、これらの組み合わせ、及び同類のものなどのＳＳＤのメモリに記憶される出力を生成することができる。限定されることなく、ジョブ実行コマンドは、いくつかの実施形態において、ＳＳＤコントローラに、ＳＳＤのバッファのハードウェア加速エンジンによって生成された出力を記憶させるように構成される。いずれの事例においても、ＪＡＩ２１５は、サーバ１０２に、ＳＳＤアレイ１０３の適切なＳＳＤに要求出力コマンドを発行させることができる。要求出力コマンドは、読み出しコマンド（例えば、読み出し不揮発性メモリコマンド、読み出しバッファコマンド、これらの組み合わせ、及び同類のもの）を含むか、又はその形態とすることができ、該コマンドは、ＳＳＤのコントローラに、ＳＳＤの不揮発性メモリ及び／又はバッファ／キャッシュに記憶された出力を読み出させ、該読み出させた出力をサーバ１０２に提供させる。ＪＡＩ２１５は、次いで、サーバ１０２に、ジョブ出力をクライアント１０１に通信させることができる。
【００４７】
他の非限定的な実施形態において、ＪＡＩＭ２１５は、サーバ１０２に、読み出し／書き込みコマンドと関連付けられないジョブ実行コマンドを生成させることができる。先の実施形態のように、ジョブ実行コマンドは、ＳＳＤのコントローラコントローラに、処理のために、ハードウェア加速エンジンにジョブと関連して受信したデータを伝送させるように構成することができる。しかしながら、先の実施形態とは異なり、ジョブ実行コマンドは、コントローラに、ハードウェア加速エンジンの出力をバッファ又は不揮発性メモリに記憶させないことができる。むしろ、ジョブ実行コマンドは、コントローラに、出力を不揮発性メモリに記憶することなく、サーバに、又はより具体的にはＪＡＩＭ２１５にハードウェア加速エンジンの出力を自動的に運搬させることができる。すなわち、先の実施形態とは異なり、サーバ１０２（又はより具体的には、ＪＡＩＭ２１５）は、ハードウェア加速エンジンからの出力を要求する必要はない。むしろ、各ＳＳＤは、ハードウェア加速エンジンからの出力をサーバ１０２に（又はより具体的には、ＪＡＩＭ２１５に）自動的に提供することができる。このような実施形態では、ＳＳＤアレイ１０３のＳＳＤが、単にジョブ実行コマンドと関連付けられる計算集約的な動作のためのアクセラレータとして作用することができ、データ／データが、フロースルー様式での、アレイの１又は複数のＳＳＤへの入力及びそこからの出力であると理解することができる。出力を受信することに応じて、サーバ１０２は、次いで、例えば有線又は無線通信を介して、出力をクライアント１０１に通信することができる。
【００４８】
例示及び例証のために、図３は、ハードウェア加速エンジン３０３、３０３'がコントローラ（例えば、コントローラ３０２、３０２'）と一体的である一実施形態を示すことに留意されたい。このような例証は、単なる例示のためのものであること、及びＨＡＥ３０３、３０３'は、それぞれ、コントローラ３０２、３０２'と一体的である必要はないことを理解されたい。実際に、本開示は、ハードウェア加速エンジンがＳＳＤの内部にある別個の構成要素として形成される実施形態、並びに、ハードウェア加速エンジンがＳＳＤの外部にあるが、最終的にはＳＳＤコントローラによって制御される実施形態を想定する。
【００４９】
例えば、いくつかの実施形態において、コントローラ３０２、３０２'は、デュアルポートコントローラなどのマルチポートコントローラの形態とすることができる。このような実施形態において、コントローラの第１のポートは、例えばケーブルインターフェースなどの適切なインターフェースを介して、サーバ１０２に通信可能に結合させることができる。コントローラの別の（例えば、第２の）ポートは、ハードウェア加速エンジンに通信可能に結合させることができ、該ハードウェア加速エンジンは、上で述べたように、コントローラとは別体とすることができ、また、ＳＳＤと別体とするか、又はＳＳＤに一体化させることができる。これらの概念は、図５Ａ及び５Ｂに例示される。具体的には、図５Ａは、ＳＳＤ３０１がデュアルポートコントローラ３０２'を含む例示的な一実施形態を示し、コントローラ３０２'の第１のポートは、サーバ１０２に結合され、コントローラ３０２'の第２のポートは、ハードウェア加速エンジン３０３'に結合され、該ハードウェア加速エンジンは、コントローラ３０２'とは別体であるが、ＳＳＤ３０１と一体的である。図５ＢのＳＳＤ３０は、コントローラ３０２'の第２のポートが、ＳＳＤ３０１'の外部にあるハードウェア加速エンジン３０３''に結合されることを除いて、類似する要素を含む。図５Ａ及び５Ｂにおいて、ＳＳＤ３０１及び３０１'は、図３のＳＳＤ３０１１・・・ｎと同じ様式で使用することができることを理解されたい。また、図５Ａ及びＢのＳＳＤ３０１及び３０１'がサーバ１０２とは別体であるような描写は、例示のためのものであること、及びこのようなＳＳＤは、サーバ１０２と一体的とすること、又は別様にはその中に組み込むことができることも理解されたい。最後に、ＨＡＥ３０３'及び３０３''は、図３のＨＡＥ３０３と同じ様式で使用することができること、及びＨＡＥ３０３''は、いくつかの実施形態において、サーバ１０２と一体的とすること、又は別様にはその中に組み込むことができることを理解されたい。
【００５０】
図５Ａ及び５Ｂの実施形態の動作は、ハードウェア加速エンジンの相対的な場所を除いて、図１〜図３と関連して先に上で説明したものと同じである。認識できるように、このような実施形態は、図３に示される実施形態と比較して、ある特定の利点、すなわち、ハードウェア加速エンジンがＳＳＤコントローラと一体的であるという利点を提供することができる。具体的には、図３の実施形態は、アクセラレータがコントローラと連動して正しく機能していることを確実にするために、かなりの事前の設計及び妥当性の確認を伴う場合がある。このことを考慮すれば、上で述べられる代替的な手法は、このような課題を回避することができ、また、アクセラレータとコントローラとを一体化することが困難である、又はできない場合の別の経路を提供することができる。
【００５１】
理解を容易にするために、前述の実施形態は、１つの又は比較的少数のＳＳＤを含むソリッドステートドライブアレイの文脈で説明した。このような説明は、単なる例示のためのものであること、及び本明細書で説明される技術は、複数のＳＳＤの間でバッチ処理すること、及び／又はスケーリングすることができることに留意されたい。実際に、行われる動作、データのサイズ、及び／又は他の因子に応じて、第３の信号は、ＳＳＤアレイ１０３に、その中の１つ又は複数のＳＳＤによってデータを処理させるように構成することができる。例えば、データのサイズが比較的小さい、又はデータに対して行われる動作が比較的単純である場合に、ＪＡＩＭ２１５は、第３の信号を、ＳＳＤアレイ１０３に単一のＳＳＤによって全データを処理させるように構成することができる。代替的に、データが比較的大きい、及び／又はデータに対する動作のより高速な実行が所望される場合に、ＪＡＩＭ２１５は、第３の信号を、各ＳＳＤがデータの一部分に対して動作するように、ＳＳＤアレイ１０３に複数のＳＳＤの間でデータを細分化させるように構成することができる。
【００５２】
例えばいくつかの実施形態において、及び図３に示されるように、ＳＳＤアレイ１０３は、少なくとも第１のソリッドステートドライブ（例えば、ＳＳＤ  ３０１１）及び第２のソリッドステートドライブ（３０１１）を含む、複数のＳＳＤを含むことができる。このような実施形態において、及び図３に示されるように、第１のソリッドステートドライブは、第１のコントローラと、第１のハードウェア加速エンジンと、第１の不揮発性メモリとを含むことができ、第２のソリッドステートドライブは、第２のコントローラと、第２のハードウェア加速エンジンと、第２の不揮発性メモリとを含むことができる。
【００５３】
このことを考慮すれば、サーバ１０２のＪＡＩＭ２１５は、第１のソリッドステートドライブに第１のジョブ加速コマンド及び該データの第１の部分を伝送し、第２のソリッドステートドライブに第２のジョブ加速コマンド及び該データの第２の部分を伝送するように構成することができる。第１のジョブ加速コマンドは、例えば全般的に上で論じたように、第１のコントローラに、該データの第１の部分に対して第１の加速された動作を実行するために、第１のハードウェア加速エンジンに該データの第１の部分を伝送させるように構成することができる。例えば、第１のハードウェア加速エンジンは、第１の加速された動作の出力を第１の不揮発性メモリに記憶することなく、データの第１の部分に対して第１の加速された動作を実行することができる。同様に、第２のジョブ加速コマンドは、例えば全般的に上で説明したように、第２のコントローラに、該データの第２の部分に対して第２の加速された動作を実行するために、第２のハードウェア加速エンジンに該データの第２の部分を伝送させるように構成することができる。いくつかの実施形態において、第２のハードウェア加速エンジンは、第２の加速された動作の出力を第２の不揮発性メモリに記憶することなく、第２の加速された動作を行うことができる。このような実施形態において、第１のジョブ加速コマンドは、第１のソリッドステートドライブに、該ＪＡＩＭにデータの第１の部分に対して行われた加速された動作の出力を伝送させるように更に構成することができ、第２のジョブ加速コマンドは、第２のソリッドステートドライブに、該ＪＡＩＭにデータの第２の部分に対して行われた加速された動作の出力を伝送させるように更に構成することができる。
【００５４】
上で述べたように、第１及び第２のソリッドステートドライブの第１及び第２のハードウェア加速エンジンは、それらのそれぞれの出力をＳＳＤの不揮発性メモリに記憶することなく、第１及び第２の加速された動作を行うことができる。このような実施形態は有用であるが、２つ以上のソリッドステートドライブを用いるシステムは、その特定の構成に限定されない。実際に、上で説明した他の実施形態のように、第１及び第２のソリッドステートドライブは、各々、それぞれ第１の転送バッファ及び第２の転送バッファを含むことができる。このような実施形態において、第１及び第２のハードウェア加速エンジンは、それぞれ、第１及び第２の動作の出力を第１及び第２の転送バッファに記憶することができる。次いで、ＪＡＩＭ２１５は、サーバ１０２に、１又は複数の要求出力コマンドを発行させることができ、該要求出力コマンドは、第１及び第２のソリッドステートドライブに、第１及び第２の伝送バッファの出力を、それぞれ、サーバ１０２に提供させるか、又はソリッドステートドライブがサーバ１０２と一体的である場合は、サーバ１０２の他の構成要素に提供させる。いずれの事例においても、要求出力コマンドに応じて、ＳＳＤは、任意の適切なインターフェースを介して、それらのそれぞれの転送バッファからの出力をサーバ１０２に提供することができる。例えば、ＳＳＤがサーバ１０２と一体的でない場合には、長距離通信ネットワーク、短距離通信ネットワーク、これらの組み合わせ、及び同類のものを介するなどの適切な通信インターフェースを介して、出力を通信することができる。ＳＳＤがサーバ１０２と一体的である場合には、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ）プロトコル、周辺構成要素相互接続（ＰＣＩ）プロトコル、ＰＣＩエクスプレスプロトコルなどの通信プロトコルを介して、出力を通信することができる。
【００５５】
当然、本明細書で説明される技術は、１つ又は２つのＳＳＤを含むＳＳＤアレイの使用に限定されない。実際に、上述のことから、当業者は、本明細書で説明される技術が、データに対する計算集約的な動作を処理するために、多数のＳＳＤを使用することができることを認識するであろう。すなわち、計算集約的な動作の実行は、所望に応じて、より多い又はより少ないＳＳＤに対してジョブをバッチ処理することによってスケールアップ又はスケールダウンすることができる。
【００５６】
別の本開示の態様は、計算集約的な動作を加速するための方法に関する。これに関して、図４を参照すると、該図は、本開示と一致する計算集約的な動作を加速する方法の１つの実施形態の例示的な動作のフロー図である。示されるように、本方法は、ブロック４０１から始まる。本方法は、次いで、随意のブロック４０２に進むことができ、そこでは、サーバがクライアントからジョブ要求を受信することができる。ブロック４０２は、破線がその随意の性質を示すが、いくつかの実施形態では、サーバ自体をジョブ要求のソースとすることができることが想定される。すなわち、いくつかの実施形態において、サーバは、ジョブ加速要求を含む第１の信号を生成するように構成される、ジョブインターフェースモジュール（例えば、ＪＩＭ２０５など）を含むことができる。
【００５７】
本方法は、次いで、随意のブロック４０３に進むことができ、そこでは、例えば全般的に上で論じたように、クライアント（又はジョブ加速要求を生成する他のエンティティ）が認証されたかどうかに関して判定を行うことができる。認証されていない場合、本方法は、随意のブロック４０４に進むことができ、そこでは、本方法を続けるかどうかに関して判定を行うことができる。続けない場合、本方法は、ブロック４０９に進み、終了することができる。続ける場合、本方法は、ブロック４０２にループバックし、続けることができる。
【００５８】
クライアントがブロック４０３に従って認証された場合、又はブロック４０２及び／又は４０３の動作が要求されなかった場合、本方法は、ブロック４０５に進み、そこでは、例えば全般的に上で論じた様式で、ジョブ実行コマンドを生成し、ＳＳＤアレイに送信することができる。先に論じたように、ジョブ実行コマンドは、ＳＳＤアレイのＳＳＤのコントローラに、処理のために、ハードウェア加速エンジンにコマンドと関連付けられるデータを送信させることができる。
【００５９】
本方法は、次いで、ブロック４０５に進むことができ、そこでは、ＳＳＤアレイのＳＳＤのハードウェア加速エンジンが、そのＳＳＤのバッファ又はメモリに記憶された出力を生成するためのものであるかどうかに関する判定を行うことができる。上で論じたように、ＳＳＤのハードウェア加速エンジンの出力は、（例えば、ジョブ実行コマンドが、ＳＳＤコントローラに発行された読み出し／書き込みコマンドに含まれるか、その形態であるか、又はそれと関連付けられる場合に）例えば、ジョブ実行コマンドに応じて、ＳＳＤのバッファ及び／又は不揮発性メモリに記憶することができる。出力がバッファ又はメモリに記憶される場合、必要に応じて、本方法は、ブロック４０６に進むことができ、そこでは、必要に応じて出力をＳＳＤバッファ及び／又はメモリから取得することができる。上で論じたように、これは、例えば、サーバによってＳＳＤのコントローラに発行される読み出しコマンド（例えば、読み出しメモリ又は読み出しバッファコマンド）の発行によって達成することができる。しかしながら、出力がＳＳＤのバッファ又はメモリに記憶されない場合、本方法は、ブロック４０７に進むことができ、そこでは、該出力をＳＳＤから自動的に受信することができる。すなわち、ブロック４０７に従って、ジョブ実行コマンドを発行するパーティは、例えば出力を要求する追加的なコマンドを発行することを必要とせずに、ＳＳＤアレイのＳＳＤ（複数可）のハードウェア加速エンジンの出力を自動的に受信することができる。
【００６０】
いずれの事例においても、本方法は、次いで、ブロック４０８に進むことができ、そこでは、加速される追加的な計算集約的な動作があるかどうかに関する判定を行うことができる。ある場合、本方法は、ブロック４０２にループバックすることができる。ない場合、本方法は、ブロック４０９に進み、終了することができる。
【実施例】
【００６１】
以下の実施例は、更なる実施形態に関する。本開示の以下の実施例は、下に提供されるように、システム、デバイス、方法、実行したときに該方法に基づいてマシンに動作を行わせる命令を記憶するコンピュータ可読記憶媒体、及び／又は該方法に基づいて動作を行うための手段などの対象材料を含むことができる。
【００６２】
実施例１：本開示の１つの実施例によれば、計算集約的な動作を加速するためのシステムが提供され、該システムは、コントローラと、ハードウェア加速エンジンと、不揮発性メモリとを含む少なくとも１つのソリッドステートドライブを含み、該コントローラは、サーバからのジョブ実行コマンドの受信に応じて、加速された動作の出力を不揮発性メモリに記憶することなく、データに対する加速された動作の実行のために、ハードウェア加速エンジンにジョブ実行コマンドと関連付けられるデータを伝送し、出力をサーバに提供するように構成される。
【００６３】
実施例２：この実施例は、実施例１の特徴のいずれか又は全てを含み、少なくとも１つのソリッドステートドライブが、転送バッファを更に含み、コントローラが、ハードウェア加速エンジンに、転送バッファの出力を記憶させるように更に構成され、コントローラが、サーバからの要求出力メッセージの受信に応じて、出力をサーバに提供するように更に構成される。
【００６４】
実施例３：この実施例は、実施例１及び２のいずれか一例の特徴のいずれか又は全てを含み、コントローラが、加速されるジョブのパラメータに従って、ハードウェア加速エンジンに加速された動作を行わせるように更に構成される。
【００６５】
実施例４：この実施例は、実施例１〜３のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む。
【００６６】
実施例５：この実施例は、実施例１〜３のいずれか一例の特徴のいずれか又は全てを含み、少なくとも１つのソリッドステートドライブが、サーバから離れたソリッドステートドライブアレイに含まれる。
【００６７】
実施例６：この実施例は、実施例１〜５のいずれか一例の特徴のいずれか又は全てを含み、少なくとも１つのソリッドステートドライブが、サーバと一体的である。
【００６８】
実施例７：この実施例は、実施例１〜６のいずれか一例の特徴のいずれか又は全てを含み、コントローラが、出力をサーバに自動的に提供するように構成される。
【００６９】
実施例８：この実施例は、実施例１〜７のいずれか一例の特徴のいずれか又は全てを含み、ハードウェア加速エンジンが、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【００７０】
実施例９：この実施例は、実施例１〜８のいずれか一例の特徴のいずれか又は全てを含み、加速された動作が、データの暗号化、データの暗号解読、データの符号化、データの復号化、データの圧縮、及びデータの解凍、又はこれらの組み合わせの少なくとも一部分を含む。
【００７１】
実施例１０：この実施例は、実施例１〜９のいずれか一例の特徴のいずれか又は全てを含み、少なくとも１つのソリッドステートドライブが、複数のソリッドステートドライブをソリッドステートドライブアレイに含み、該複数のソリッドステートドライブが、少なくとも第１のソリッドステートドライブ及び第２のソリッドステートドライブを含み、第１のソリッドステートドライブが、第１のコントローラと、第１のハードウェア加速エンジンと、第１の不揮発性メモリとを含み、第２のソリッドステートドライブが、第２のコントローラと、第２のハードウェア加速エンジンと、第２の不揮発性メモリとを含み、第１のコントローラが、サーバからのジョブ実行コマンドの受信に応じて、第１の加速された動作の第１の出力を第１の不揮発性メモリに記憶することなく、第１のデータに対して第１の加速された動作を実行するために、第１のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第１のデータを伝送するように構成され、第２のコントローラが、サーバからのジョブ実行コマンドの受信に応じて、第２の加速された動作の第２の出力を第２の不揮発性メモリに記憶することなく、第２のデータに対して第２の加速された動作を実行するために、第２のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第２のデータを伝送するように構成され、第１及び第２のコントローラが、それぞれ、第１及び第２の出力をサーバに提供するように構成される。
【００７２】
実施例１１：この実施例は、実施例１０の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブが、それぞれ、第１の転送バッファ及び第２の転送バッファを含み、第１のコントローラが、第１のハードウェア加速エンジンに、第１の転送バッファに第１の出力を記憶させるように更に構成され、第２のコントローラが、第２のハードウェア加速エンジンに、第２の転送バッファに第２の出力を記憶させるように更に構成され、第１のコントローラが、サーバからの第１の要求出力メッセージの受信に応じて、第１の出力をサーバに提供するように更に構成され、第２のコントローラが、サーバからの第２の要求出力メッセージの受信に応じて、第２の出力をサーバに提供するように更に構成される。
【００７３】
実施例１２：この実施例は、実施例１０又は１１のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のコントローラが、第１及び第２のハードウェア加速エンジンに、それぞれ、加速されるジョブのパラメータに従って、第１及び第２の加速された動作を行わせるように更に構成される。
【００７４】
実施例１３：この実施例は、実施例１０〜１２のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む。
【００７５】
実施例１４：この実施例は、実施例１０〜１３のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブのうちの少なくとも１つが、サーバから離れたソリッドステートドライブアレイに含まれる。
【００７６】
実施例１５：この実施例は、実施例１０〜１４のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブのうちの少なくとも１つが、サーバと一体的である。
【００７７】
実施例１６：この実施例は、実施例１０〜１５のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のコントローラが、それぞれ、第１及び第２の出力をサーバに自動的に提供するように構成される。
【００７８】
実施例１７：この実施例は、実施例１０〜１６のいずれか一例の特徴のいずれか又は全てを含み、第１のハードウェア加速エンジン及び第２のハードウェア加速エンジンが、各々、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【００７９】
実施例１８：この実施例は、実施例１０〜１７のいずれか一例の特徴のいずれか又は全てを含み、第１の加速された動作が、データの第１の部分を暗号化すること、データの第１の部分を暗号解読すること、データの第１の部分を符号化すること、データの第１の部分を復号化すること、データの第１の部分を圧縮すること、データの第１の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含み、第２の加速された動作が、データの第２の部分を暗号化すること、データの第２の部分を暗号解読すること、データの第２の部分を符号化すること、データの第２の部分を復号化すること、データの第２の部分を圧縮すること、データの第２の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含む。
【００８０】
実施例１９：この実施例によれば、計算集約的な動作を加速するための方法が提供され、ソリッドステートドライブのコントローラよって、サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、ソリッドステートドライブのハードウェア加速エンジンにジョブ実行コマンドと関連付けられるデータを伝送することと、出力をソリッドステートドライブの不揮発性メモリに記憶することなく、出力を生成するために、ハードウェア加速エンジンによって、データに対して加速された動作を行うことと、出力をサーバに提供することとを含む。
【００８１】
実施例２０：この実施例は、実施例１９の特徴のいずれか又は全てを含み、ソリッドステートドライブが、転送バッファを更に含み、本方法が、コントローラによって、ハードウェア加速エンジンに、出力を転送バッファに記憶させることと、サーバからの要求出力メッセージの受信に応じて、出力をサーバに提供することとを更に含む。
【００８２】
実施例２１：この実施例は、実施例１９及び２０のいずれか一例の特徴のいずれか又は全てを含み、コントローラによって、ハードウェア加速エンジンに、加速されるジョブのパラメータに従って、加速された動作を行わせることを更に含む。
【００８３】
実施例２２：この実施例は、実施例１９〜２１のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む。
【００８４】
実施例２３：この実施例は、実施例１９〜２２のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバから離れたソリッドステートドライブアレイに含まれる。
【００８５】
実施例２４：この実施例は、実施例１９〜２３のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバと一体的である。
【００８６】
実施例２５：この実施例は、実施例１９〜２４のいずれか一例の特徴のいずれか又は全てを含み、出力をサーバに自動的に提供することを更に含む。
【００８７】
実施例２６：この実施例は、実施例１９〜２５のいずれか一例の特徴のいずれか又は全てを含み、ハードウェア加速エンジンが、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【００８８】
実施例２７：この実施例は、実施例１９〜２６のいずれか一例の特徴のいずれか又は全てを含み、加速された動作が、データの暗号化、データの暗号解読、データの符号化、データの復号化、データの圧縮、及びデータの解凍、又はこれらの組み合わせの少なくとも一部分を含む。
【００８９】
実施例２８：この実施例は、実施例１９〜２７のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、複数のソリッドステートドライブをソリッドステートドライブアレイに含み、該複数のソリッドステートドライブが、少なくとも第１のソリッドステートドライブ及び第２のソリッドステートドライブを含み、第１のソリッドステートドライブが、第１のコントローラと、第１のハードウェア加速エンジンと、第１の不揮発性メモリとを含み、第２のソリッドステートドライブが、第２のコントローラと、第２のハードウェア加速エンジンと、第２の不揮発性メモリとを含み、本方法が、ジョブ実行コマンドの受信に応じて、第１のコントローラによって、第１の加速された動作の第１の出力を第１の不揮発性メモリに記憶することなく、第１のデータに対して第１の加速された動作を実行するために、第１のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第１のデータを伝送することと、第２のコントローラによって、第２の加速された動作の第２の出力を第２の不揮発性メモリに記憶することなく、第２のデータに対して第２の加速された動作を実行するために、第２のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第２のデータを伝送することと、第１及び第２のコントローラによって、それぞれ、第１及び第２の出力をサーバに提供することとを含む。
【００９０】
実施例２９：この実施例は、実施例２８の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブが、それぞれ、第１の転送バッファ及び第２の転送バッファを含み、本方法が、第１のハードウェア加速エンジンに、第１の出力を第１の転送バッファに記憶させることと、第２のハードウェア加速エンジンに、第２の出力を第２の転送バッファに記憶させることと、サーバからの少なくとも１つの出力要求メッセージに応じて、第１及び第２の出力のうちの少なくとも１つをサーバに提供することとを更に含む。
【００９１】
実施例３０：この実施例は、実施例２８及び２９のいずれか一例の特徴のいずれか又は全てを含み、第１のコントローラによって、第１のハードウェア加速エンジンに、加速されるジョブのパラメータに従って、第１の加速された動作を行わせることと、第２のコントローラによって、第２のハードウェア加速エンジンに、パラメータに従って、第２の加速された動作を行わせることとを更に含む。
【００９２】
実施例３１：この実施例は、実施例２８〜３０のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む。
【００９３】
実施例３２：この実施例は、実施例２８〜３１のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブのうちの少なくとも１つが、サーバから離れたソリッドステートドライブアレイに含まれる。
【００９４】
実施例３３：この実施例は、実施例２８〜３２のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブのうちの少なくとも１つが、サーバと一体的である。
【００９５】
実施例３４：この実施例は、実施例２８〜３３のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２の出力を、それぞれ、第１及び第２のコントローラによって、サーバに自動的に提供することを更に含む。
【００９６】
実施例３５：この実施例は、実施例２８〜３４のいずれか一例の特徴のいずれか又は全てを含み、第１のハードウェア加速エンジン及び第２のハードウェア加速エンジンが、各々、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【００９７】
実施例３６：この実施例は、実施例２８〜３５のいずれか一例の特徴のいずれか又は全てを含み、第１の加速された動作が、データの第１の部分を暗号化すること、データの第１の部分を暗号解読すること、データの第１の部分を符号化すること、データの第１の部分を復号化すること、データの第１の部分を圧縮すること、データの第１の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含み、第２の加速された動作が、データの第２の部分を暗号化すること、データの第２の部分を暗号解読すること、データの第２の部分を符号化すること、データの第２の部分を復号化すること、データの第２の部分を圧縮すること、データの第２の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含む。
【００９８】
実施例３７：この実施例によれば、そこに記憶されるコンピュータ可読命令を有する少なくとも１つのコンピュータ読み出し可能な媒体が提供され、該命令が、ソリッドステートドライブのコントローラによって実行されたときに、サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、ソリッドステートドライブのハードウェア加速エンジンにジョブ実行コマンドと関連付けられるデータを伝送することと、出力をソリッドステートドライブの不揮発性メモリに記憶することなく、出力を生成するために、ハードウェア加速エンジンによって、データに対して加速された動作を行うことと、出力をサーバに提供することとを含む動作の実行を引き起こす。
【００９９】
実施例３８：この実施例は、実施例３７の特徴のいずれか又は全てを含み、ソリッドステートドライブが、転送バッファ及び命令を更に含み、該命令が、コントローラによって実行されたときに、ハードウェア加速エンジンに、出力を転送バッファに記憶させることと、サーバからの要求出力メッセージの受信に応じて、出力をサーバに提供することとを含む動作の実行を更に引き起こす。
【０１００】
実施例３９：この実施例は、実施例３７及び３８のいずれか一例の特徴のいずれか又は全てを含み、命令が、コントローラによって実行されたときに、ハードウェア加速エンジンに、加速されるジョブのパラメータに従って、加速された動作を行わせることを含む動作の実行を更に引き起こす。
【０１０１】
実施例４０：この実施例は、実施例３７〜３９のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む。
【０１０２】
実施例４１：この実施例は、実施例３７〜４０のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバから離れたソリッドステートドライブアレイに含まれる。
【０１０３】
実施例４２：この実施例は、実施例３７〜４１のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバと一体的である。
【０１０４】
実施例４３：この実施例は、実施例３７及び４２のいずれか一例の特徴のいずれか又は全てを含み、命令が、コントローラによって実行されたときに、出力をサーバに自動的に提供することを含む動作の実行を更に引き起こす。
【０１０５】
実施例４４：この実施例は、実施例３７〜４３のいずれか一例の特徴のいずれか又は全てを含み、ハードウェア加速エンジンが、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【０１０６】
実施例４５：この実施例は、実施例３７〜４４のいずれか一例の特徴のいずれか又は全てを含み、加速された動作が、データの暗号化、データの暗号解読、データの符号化、データの復号化、データの圧縮、及びデータの解凍、又はこれらの組み合わせの少なくとも一部分を含む。
【０１０７】
実施例４６：この実施例は、実施例３７〜４５のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、複数のソリッドステートドライブをソリッドステートドライブアレイに含み、該複数のソリッドステートドライブが、少なくとも第１のソリッドステートドライブ及び第２のソリッドステートドライブを含み、第１のソリッドステートドライブが、第１のコントローラと、第１のハードウェア加速エンジンと、第１の不揮発性メモリとを含み、第２のソリッドステートドライブが、第２のコントローラと、第２のハードウェア加速エンジンと、第２の不揮発性メモリとを含み、命令が、第１及び第２のコントローラによって実行されたときに、第１のコントローラによって、第１の加速された動作の第１の出力を第１の不揮発性メモリに記憶することなく、第１のデータに対して第１の加速された動作を実行するために、第１のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第１のデータを伝送することと、第２のコントローラによって、第２の加速された動作の第２の出力を第２の不揮発性メモリに記憶することなく、第２のデータに対して第２の加速された動作を実行するために、第２のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第２のデータを伝送することと、第１及び第２のコントローラによって、それぞれ、第１及び第２の出力をサーバに提供することとを含む動作の実行を更に引き起こす。
【０１０８】
実施例４７：この実施例は、実施例４６の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブが、それぞれ、第１の転送バッファ及び第２の転送バッファを含み、命令が、第１及び第２のコントローラによって実行されたときに、第１のハードウェア加速エンジンに、第１の出力を第１の転送バッファに記憶することと、第２のハードウェア加速エンジンに、第２の出力を第２の転送バッファに記憶することと、サーバからの少なくとも１つの出力要求メッセージに応じて、第１及び第２の出力のうちの少なくとも１つをサーバに提供することとを含む動作の実行を更に引き起こす。
【０１０９】
実施例４８：この実施例は、実施例４６及び４７のいずれか一例の特徴のいずれか又は全てを含み、命令が、第１及び第２のコントローラによって実行されたときに、第１のコントローラによって、第１のハードウェア加速エンジンに、加速されるジョブのパラメータに従って、第１の加速された動作を行わせることと、第２のコントローラによって、第２のハードウェア加速エンジンに、パラメータに従って、第２の加速された動作を行わせることとを含む動作の実行を更に引き起こす。
【０１１０】
実施例４９：この実施例は、実施例４６〜４８のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる１又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも１つを含む。
【０１１１】
実施例５０：この実施例は、実施例４６〜４９のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブのうちの少なくとも１つが、サーバから離れたソリッドステートドライブアレイに含まれる。
【０１１２】
実施例５１：この実施例は、実施例４６〜５０のいずれか一例の特徴のいずれか又は全てを含み、第１及び第２のソリッドステートドライブのうちの少なくとも１つが、サーバと一体的である。
【０１１３】
実施例５２：この実施例は、実施例４６〜５１のいずれか一例の特徴のいずれか又は全てを含み、命令が、第１及び第２のコントローラによって実行されたときに、第１及び第２の出力を、それぞれ、第１及び第２のコントローラによって、サーバに自動的に提供することを含む動作の実行を更に引き起こす。
【０１１４】
実施例５３：この実施例は、実施例４６〜５２のいずれか一例の特徴のいずれか又は全てを含み、第１のハードウェア加速エンジン及び第２のハードウェア加速エンジンが、各々、暗号化／暗号解読エンジン、符合化／復号化エンジン、圧縮／解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【０１１５】
実施例５４：この実施例は、実施例４６〜５３のいずれか一例の特徴のいずれか又は全てを含み、第１の加速された動作が、データの第１の部分を暗号化すること、データの第１の部分を暗号解読すること、データの第１の部分を符号化すること、データの第１の部分を復号化すること、データの第１の部分を圧縮すること、データの第１の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含み、第２の加速された動作が、データの第２の部分を暗号化すること、データの第２の部分を暗号解読すること、データの第２の部分を符号化すること、データの第２の部分を復号化すること、データの第２の部分を圧縮すること、データの第２の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含む。
【０１１６】
実施例５５：この実施例によれば、少なくとも１つのソリッドステートディスクのコントローラによって実行されたときに、実施例１９〜３６のいずれか一例の方法の実行を引き起こすコンピュータ可読命令を含む、少なくとも１つのコンピュータ可読媒体が提供される。
【０１１７】
本明細書で用いられている用語及び表現は、限定の用語ではなく説明の用語として使用されており、そのような用語及び表現の使用において、図示及び説明された特徴（又はそれらの一部分）の任意の均等物を除外するいかなる意図もなく、特許請求の範囲の範囲内で様々な修正が可能であることが認識される。故に、以下の特許請求の範囲は、全てのそのような均等物を網羅することを意図する。
【図１】
0006569962.tif 000002
【図２】
0006569962.tif 000003
【図３】
0006569962.tif 000004
【図４】
0006569962.tif 000005
【図５Ａ】
0006569962.tif 000006
【図５Ｂ】
0006569962.tif 000007