(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0005】
本開示は、特定の用途のための実例となる実施形態を参照して本明細書で説明されるが、そのような実施形態は、例示的なものに過ぎないこと、及び添付の特許請求の範囲によって定義される本発明がそうした実施形態に限定されないことを理解されたい。本明細書で提供される教示を利用することができる当業者(複数可)は、本開示の範囲内の追加的な修正、用途、及び実施形態、並びに本開示の実施形態が有用である追加的な分野を認識するであろう。
【0006】
本明細書で説明される技術は、1又は複数のデバイスを使用して、例えばクライアントサーバアーキテクチャにおいて実施することができる。「デバイス(device)」、「デバイス(devices)」、「電子デバイス(electronic device)」、及び「電子デバイス(electronic devices)」という用語は、本開示と一致するクライアント及び/又はサーバとして使用することができる多数の電子デバイスのうちのいずれかを個別的又は集合的に参照するために、本明細書で互換的に使用される。本開示に従って使用することができるデバイスの非限定的な例としては、限定されないが、カメラ、携帯電話、コンピュータ端末、デスクトップコンピュータ、電子読取装置、ファクシミリ装置、キオスク、ネットブックコンピュータ、ノートブックコンピュータ、インターネットデバイス、支払い端末、パーソナルデジタルアシスタント、メディアプレーヤー及び/又はレコーダー、サーバ(例えば、ブレードサーバ、ラックマウントサーバ、これらの組み合わせ、その他)、セットトップボックス、スマートフォン、タブレットパーソナルコンピュータ、ウルトラモバイルパーソナルコンピュータ、有線電話、これらの組み合わせ、並びに同類のものなどの、任意の種類のモバイルデバイス及び/又は固定デバイスが挙げられる。このようなデバイスは、ポータブル又は固定とすることができる
【0007】
「クライアント」及び「クライアントデバイス」という用語は、本開示と一致するクライアント機能を行うことができる1又は複数の電子デバイスを指すように、本明細書で互換的に使用される。対照的に、「サーバ」及び「サーバデバイス」という用語は、本開示と一致するサーバ機能を行うことができる1又は複数の電子デバイスを指すように、本明細書で互換的に使用される。いくつかの実施形態において、サーバデバイスは、1又は複数のサービス(例えば、計算加速サービス)をクライアントなどの別のデバイスに提供するように構成される、ホストシステムの形態とすることができる。このような実施形態において、サーバデバイスは、データセンタ又は他の計算ベースの一部を形成するか、それを含むか、又はその形態とすることができる。「ホストシステム」という用語は、本明細書で「サーバ」及び「サーバデバイス」という用語と互換的に使用される。
【0008】
図1〜
図3は、単一のクライアント及び単一のサーバを含む、本開示に従う例示的なシステムを例示する。このような具体例は、例示のためのもの、任意の数のクライアント及びサーバを使用することができることを理解されたい。実際に、本明細書で説明される技術は、複数(例えば、2、5、10、20、50、100、1000、10,000、又はそれ以上)のクライアント及び/又はサーバデバイスによって実施することができる。更に、サーバの数は、クライアントの数に相関させる必要はない。実際に、いくつかの実施形態において、本明細書で説明される技術は、比較的多数(例えば、100、1,000、10,000)などのクライアントに対する計算加速サービスをサポート及び/又は提供するために、比較的少数(例えば、1つ又は2つ)のサーバを利用する。したがって、本開示は、単数のクライアント及び/又はサーバを指す場合があるが、このような表現は、複数形も含むものと解釈されるべきである。同様に、クライアント又はサーバとしてのデバイスの指定は、明確にするためのものであり、いくつかの実施形態では、クライアントデバイスを、サーバ機能を行うように構成することができること、及びサーバデバイスを、本開示と一致するクライアント機能を行うように構成することができることを理解されたい。
【0009】
本明細書の任意の実施形態において使用されるときに、「モジュール」という用語は、本開示と一致する1又は複数の動作を行うように構成される、ソフトウェア、ファームウェア、回路、及び/又はこれらの組み合わせを指すことができる。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記録されるソフトウェアパッケージ、コード、命令、命令セット、及び/又はデータとして具現化することができる。ファームウェアは、メモリデバイスにおいてハードコードされる(例えば、不揮発性である)コード、命令若しくは命令セット、及び/又はデータとして具現化することができる。「回路」は、本明細書で任意の実施形態において使用されるときに、例えば、単独で、又は任意の組み合わせで、ハードワイヤード回路、1又は複数の個別の命令処理コアを備えるコンピュータプロセッサなどのプログラマブル回路、データマシン回路、プログラマブル回路によって実行される命令を記憶するソフトウェア及び/又はファームウェアを備えることができる。モジュールは、先に定義されたように、1又は複数の電子デバイスの一部を形成する回路として、集合的又は個別的に具現化することができる。いくつかの実施形態において、本明細書で説明される1又は複数のモジュールは、本開示と一致する1又は複数のクライアント機能及び/又はサーバ機能を行うために、ハードウェアにおいて少なくとも部分的に実施される論理の形態とすることができる。
【0010】
「近距離通信ネットワーク」という語句は、本明細書では、互いに比較的近くにあるデバイス間で、すなわち近距離通信を介して、データ信号を送信/受信するための技術を指すために使用される。近距離通信としては、例えば、BLUETOOTH(登録商標)ネットワーク、パーソナルエリアネットワーク(PAN:personal area network)、近距離無線通信、ZigBee(登録商標)ネットワーク、有線Ethernet(登録商標)接続、これらの組み合わせ、及び同類のものを使用したデバイス間の通信が挙げられる。対照的に、「長距離通信ネットワーク」という語句は、本明細書において、互いにかなり離れた距離であるデバイス間で、すなわち長距離通信を使用して、データ信号を送信/受信するための技術を指すために使用される。長距離通信としては、例えば、WiFi(登録商標)ネットワーク、携帯電話ネットワーク(3G、4G、その他、及び同類のもの)が挙げられるがこれらに限定されないワイドエリアネットワーク(WAN:wide area network)、インターネット、電話通信ネットワーク、これらの組み合わせ、及び同類のものを使用したデバイス間の通信が挙げられる。
【0011】
「SSD」、「SSDs」、及び「ソリッドステートドライブ(solid state drive)」という用語は、本明細書において、データを持続的に記憶するために集積回路アセンブリ(例えば、不揮発性ランダムアクセスメモリ(RAM:random access memory)アセンブリ)が使用される、多種多様なデータ記憶デバイスのいずれかを指すために使用される。このような用語はまた、ソリッドステートドライブを、例えば磁気記録媒体を含む、ハードディスクドライブと組み合わせて(例えば、キャッシュとして)使用することができる、いわゆる「ハイブリッド」ドライブも包含する。いずれの事例においても、SSDは、限定されないが、否定及び否定倫理積(NAND:not and)及び/又は否定論理和(NOR:not or)メモリなどのフラッシュメモリ、相変化メモリ(PCM:phase change memory)、3次元クロスポイントメモリ、抵抗メモリ、ナノワイヤメモリ、強誘電体トランジスタランダムアクセスメモリ(FeTRAM:ferro−electric transistor random access memory)、メモリスタ技術、スピン転送トルク(STT:spin transfer torque)−MRAM、又は他のバイトアドレス可能なメモリデバイスを組み込む磁気抵抗ランダムアクセスメモリ(MRAM:magnetoresistive random access memory)メモリ、これらの組み合わせ、及び同類のものなどの、不揮発性メモリを含むものと理解することができる。
【0012】
「計算集約的な動作」という語句は、本明細書において、完了するためにかなりのプロセッササイクルを必要とし得る、多種多様な計算動作のいずれかを指すために使用される。計算集約的な動作の非限定的な例としては、暗号化、暗号解読、圧縮/解凍、ハッシュ計算、低レベルの画像処理アルゴリズム(限定されないが、フィルタ、閾値化、その他など)、DNA配列整合及び検索アルゴリズム、符号化アルゴリズム、復号化アルゴリズム、これらの組み合わせ、及び同類のものが挙げられる。当然、上述した動作は単なる例示であり、他の計算集約的な動作が本開示によって想定され、包含される。
【0013】
背景技術において述べたように、データ暗号化/暗号解読、ビデオ符号化/復号化、ネットワークパケットルーティング、その他などの計算集約的な動作を加速するために、スタンドアロンのハードウェアアクセラレータが開発され、実装されてきた。このようなスタンドアロンのハードウェアアクセラレータは、それらの意図する目的に対しては効果的であり得るが、それらは非常に高価になり得る。したがって、スタンドアロンのハードウェアアクセラレータは、特にサーバが複数のこのようなアクセラレータを含むためのものである場合に、1又は複数のクライアントに対して計算加速サービス(例えば、加速された暗号化、暗号解読、その他)を提供するように構成されるサーバ又は他の計算ベースのコストのかなりの部分に相当し得る。更に、計算集約的な動作の実行は、ある特定のスタンドアロンのハードウェアアクセラレータによって十分にスケーリングすることができない場合がある。すなわち、いくつかの場合において、スタンドアロンのハードウェアアクセラレータの数の増加は、計算集約的な動作の実行の相応する(例えば、1:1)増加をもたらさない場合がある。
【0014】
電子デバイスは、ますますソリッドステートドライブを備えるようになり、ソリッドステートドライブは、全般的に、データの記憶に使用される。このことを考慮すれば、SSDは、高帯域幅(例えば、1秒あたりマルチギガバイト)のハードウェア暗号化/暗号解読エンジンを含む、ハードウェアベースのコントローラを含む(以下、「SSDコントローラ」)。SSDのハードウェア暗号化/暗号解読エンジンは、様々な動作を高速で行うことができるが、多くの場合において、このエンジンは、データ保存時の暗号化及び/若しくは復号化を行うように、並びに/又はドライブの通常の読み出し/書き込みフローの一部としてデータを暗号化/暗号解読するように構成される。例えば、いくつかのSSDは、限定されないが、FIPS Publication197及び/又はISO/IEC18033−3において指定される高度暗号化規格(AES:Advanced Encryption Standard)アルゴリズムなどの1又は複数の暗号化アルゴリズムによって、SSDに記憶されたデータを暗号化/暗号解読するように構成される、ハードウェア暗号化/暗号解読エンジンを含むことができる。既存の技術によって、SSDのハードウェア暗号化/暗号解読エンジンは、このような暗号化/暗号解読を(クライアント又はサーバの汎用プロセッサによって実行される)ソフトウェアにおいて行うよりも、数倍高速にデータ暗号化/暗号解読を行うことができる。
【0015】
多くのSSDのハードウェア暗号化/暗号解読エンジンの実行に注目しているが、典型的なシステムにおいて、SSDコントローラ、具体的には、SSDコントローラのハードウェア暗号化/暗号解読エンジンは、クライアント及び/又はサーバデバイスに、例えば、データ暗号化/暗号解読又は他の計算集約的な動作の実行に利用できない。すなわち、スタンドアロンのハードウェアアクセラレータとは異なり、SSDのハードウェア暗号化/暗号解読エンジンは、全般的に、計算集約的な動作の実行のために、ホストシステム(クライアント又はサーバ)が直接アクセスできない。
【0016】
前述したことを考慮すれば、本開示は、全般的に、多くのSSDに存在する1又は複数のハードウェア加速エンジンを利用する、計算集約的な動作を加速するための技術に関する。具体的には、及び下で説明されるように、本明細書で説明される技術は、SSDのハードウェア加速エンジンをホストシステムに提供することができる。その結果、ホストシステムは、上で識別されるような計算集約的な動作を加速するために、SSDのハードウェア加速エンジン(複数可)を使用することができる。以下から明らかになるように、この様式でのハードウェア加速エンジンの使用は、ソリッドステートドライブの従来のデータ記憶機能について妥協する必要はない。更に、いくつかの実施形態において、本明細書で説明される技術による計算集約的な動作の加速は、SSDの数によってスケーリングすることができる。
【0017】
したがって、本開示の1つの態様は、計算集約的な動作を加速するためのシステムに関する。明確にし、理解を容易にするために、本開示は、加速される計算集約的な動作が暗号化/暗号解読アルゴリズムの、又はそのある一部分の実行である、様々な実施形態の説明に進む。本明細書で説明される技術は、暗号化/暗号解読動作を加速することに限定されるものではないこと、及びこれらの技術は、限定されないが、上記のもの及び/又はそれらの任意の部分を含む、任意の適切なタイプの計算集約的な動作を加速するために使用することができることを理解されたい。
【0018】
これに関して、
図1を参照する。
図1は、本開示と一致する計算集約的な動作を加速するための例示的なシステムのブロック図である。示されるように、システム100は、クライアント101と、サーバ102と、ソリッドステートドライブ(SSD)アレイ103とを含む。
【0019】
クライアント101は、上で定義されたように、任意の適切な電子デバイスとすることができる。限定されることなく、いくつかの実施形態において、クライアント101は、1又は複数の、携帯電話、デスクトップコンピュータ、電子読取装置、ラップトップコンピュータ、セットトップボックス、スマートフォン、タブレットパーソナルコンピュータ、テレビ、又はウルトラモバイルパーソナルコンピュータの形態である。その形態にかかわらず、いくつかの実施形態において、クライアント101(又はそのオペレータ)は、加速が所望される計算集約的な動作(本明細書において「ジョブ」とも称される)を有することができる。例えば、クライアント101(又はそのオペレータ)は、1組のデータを暗号化させることを望み得る。そのような場合において、及び下で詳細に説明されるように、クライアント101は、加速のためにジョブの全て又は一部分(例示的な事例では、暗号化のためにデータの全て又は一部分)をサーバ102に通信するように構成することができる。
【0020】
クライアント101のように、サーバ102は、任意の適切な電子デバイスとすることができる。限定されることなく、サーバ102は、いくつかの実施形態において、1又は複数のブレードサーバ、ラックマウントサーバ、これらの組み合わせ、及び同類のものなどの、1又は複数のサーバコンピュータの形態である。いくつかの例示的な実施形態において、サーバ102は、スタンドアロンのサーバである。他の例示的な実施形態において、サーバ102は、データセンタ又は他の集約した計算ベースに見ることができるような、サーバアレイの1又は複数のサーバとすることができる。いずれの事例においても、サーバ102は、加速のためにクライアント101からジョブを受信し、加速のためにSSDアレイ103の1又は複数のSSDにこのジョブを伝送するように構成することができる。具体的には、及び下で説明されるように、サーバ102は、SSDのハードウェア加速エンジンにジョブの少なくとも一部分を行わせるために、SSDアレイ103の少なくとも1つのSSDに、クライアント101から受信したジョブの全部又は一部分を伝送するように構成することができる。サーバ102は、次いで、ハードウェア加速エンジンによって行われる動作の出力を取り出すか、又は受信し、この出力をクライアント101に通信することができる。
【0021】
SDDアレイ103は、1又は複数のソリッドステートドライブを含むことができる。例示のために、本開示は、(例えば、
図3に示されるように)SSDアレイが1つのSSD又は2つのSSDを含む、様々な実施形態を説明する。このような説明は、単なる例示のためのものであること、及び任意の数のSSDを使用することができることを理解されたい。実際に、本開示は、複数のSSDがSSDアレイ103に含まれる、例えば、SSD103が約2つより多い又は等しい、約5つより多い又は等しい、約10より多い又は等しい、約100より多い又は等しい、約1000より多い又は等しい、又はより多くのSSDを含む実施形態を想定する。ここでも、このような範囲は、単なる例示のためのものである。
【0022】
SSDアレイ103のSSDは、任意の適切なフォームファクタ又は構成とすることができる。適切なSSDのフォームファクタの非限定的な例としては、様々な標準ハードディスクドライブのフォームファクタ(例えば、2.5インチ、3.5インチ、1.8インチ)、モバイルシリアルアドバンストテクノロジーアタッチメントのフォームファクタなどのモバイルフォームファクタ、周辺装置接続インターフェース(PCI:peripheral connect interface)ミニカードのフォームファクタ、モジュール上のディスクのフォームファクタ、ハイブリッドディスクのフォームファクタ、これらの組み合わせ、及び同類のもの、のいずれかであるSSDが挙げられる。いくつかの実施形態において、SSDアレイ103のSSDの1又は複数は、INTEL(登録商標) Corporationによって、例えばシリーズ300以上の呼称で販売されるSSDである。
【0023】
例示のため、及び理解を容易にするために、
図1、
図2、及び
図3は、SSDアレイ103がサーバ102とは別体であるように例示されるシステムを示す。このような場合において、SSDアレイ103は、サーバ102とは別体であるがサーバ102によってアクセス可能である計算ベースの一部とすることができると理解することができる。したがって、例えば、SSDアレイ103は、サーバ102とは別体の計算ベースの一部を形成するか、その形態とするか、又はそれを含むことができる。すなわち、SSDアレイ103は、サーバ102と同じ又は異なるデータセンタ、サーバファーム、ハウジング、その他に収容することができる。当然、このような具体例は、単なる例示のためのものであること、及びSSDアレイがサーバ102と一体的とすることができること、又は別様にはサーバ102の一部を形成することができることを理解されたい。例えば、サーバ102は、SSDアレイ103を含む、又は別様には該SSDアレイと一体的である、1又は複数のラックマウントサーバ及び/又はブレードサーバを含むことができる。このような実施形態において、SSDアレイ103のSSDの1又は複数は、サーバ102に、例えばマザーボード及び/又はその拡張ボードに通信可能に結合することができる。
【0024】
クライアント101、サーバ102、及びソリッドステートドライブアレイ103は、互いに、例えば直接又は随意のネットワーク104を通して、有線通信又は無線通信とすることができる(破線で示す)。限定されることなく、クライアント101及びサーバ102は、いくつかの実施形態において、ネットワーク104を介して互いに通信し、サーバ102及びSSDアレイ103は、直接又はネットワーク104を通して通信する。いずれの事例においても、ネットワーク104は、データを搬送する任意のネットワークとすることができる。ネットワーク104として使用することができる適切なネットワークの非限定的な例としては、上で定義されたような短距離通信ネットワーク及び長距離通信ネットワーク、これらの組み合わせ、及び同類のものが挙げられる。いくつかの実施形態において、ネットワーク104は、BLUETOOTH(登録商標)ネットワーク、ZigBee(登録商標)ネットワーク、近距離無線通信(NFC:near field communications)リンク、有線(例えば、Ethernet(登録商標))接続、これらの組み合わせ、及び同類のものなどの、近距離通信ネットワークである。他の実施形態において、ネットワーク104は、Wi−Fi(登録商標)ネットワーク、セルラー(例えば、3G、4G、その他)ネットワーク、インターネットなどのワイドエリアネットワーク、これらの組み合わせ、及び同類のものなどの長距離通信ネットワークである。
【0025】
以下、
図2を参照する。
図2は、計算集約的な動作を加速するためのシステム100の更なる詳細を含むブロック図を示す。示されるように、クライアント101は、任意の適切なデバイスプラットフォームとすることができる、クライアントデバイスプラットフォーム201を含む。限定されることなく、クライアントデバイスプラットフォーム201は、クライアント101として使用される電子デバイスのタイプと相関することが好ましい。したがって、例えば、クライアント101が携帯電話、スマートフォン、デスクトップコンピュータ、ラップトップコンピュータ、その他である場合、クライアントデバイスプラットフォーム201は、いくつかの実施形態において、それぞれ、携帯電話プラットフォーム、スマートフォンプラットフォーム、デスクトップコンピュータプラットフォーム、ラップトップコンピュータプラットフォーム、その他である。
【0026】
その性質にかかわらず、デバイスプラットフォーム201は、プロセッサ202と、メモリ203と、通信リソース(COMMS:communications resources)204とを含むことができる。プロセッサ202は、任意の適切な汎用プロセッサ又は特定用途向け集積回路とすることができ、また、1つ又は複数のプロセッサコア上で1つ又は複数のスレッドを実行することができる。限定されることなく、プロセッサ202は、いくつかの実施形態において、限定されないが、INTEL(登録商標) Corp.、ADVANCED MICRO DEVICES(登録商標)、ARM(登録商標)、NVIDIA(登録商標)、APPLE(登録商標)、及びSAMSUNG(登録商標)から市販されている汎用プロセッサなどの、汎用プロセッサである。
図2は、シングルプロセッサを含むようにクライアント101を例示しているが、複数のプロセッサを使用することができる。
【0027】
メモリ203は、任意の適切なタイプのコンピュータ可読メモリとすることができる。メモリ203として使用することができる例示的なメモリのタイプとしては、プログラマブルメモリ、不揮発性メモリ、リードオンリーメモリ、電気的プログラマブルメモリ、ランダムアクセスメモリ、フラッシュメモリ(例えば、NAND型又はNOR型メモリ構造を含むことができる)、磁気ディスクメモリ、光ディスクメモリ、相変化メモリ、メモリスタメモリ技術、スピントルク転送メモリ、これらの組み合わせ、及び同類のものが挙げられるが、これらに限定されない。加えて、又は代替的に、メモリ203としては、他の及び/又は後で開発されるタイプのコンピュータ可読メモリを挙げることができる。
【0028】
COMMS204は、下で論じられるように、クライアント101が、サーバ102との間で、又はより具体的には、サーバデバイスプラットフォーム211のCOMMS214との間で少なくともメッセージを送信及び受信することを可能にするように構成される、ハードウェア(すなわち、回路)、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせを含むことができる。COMMS204とCOMMS214との間の通信は、上で全般的に説明したように、近距離及び/又は長距離通信ネットワークを使用して有線又は無線接続を通じて起こすことができる。したがって、COMMS204は、このような通信をサポートするためのハードウェア、例えば、1又は複数の、トランスポンダ、アンテナ、BLUETOOTH(登録商標)チップ、パーソナルエリアネットワークチップ、近距離無線通信チップ、有線及び/又は無線ネットワークインターフェース回路、これらの組み合わせ、並びに同類のものを含むことができる。
【0029】
クライアントデバイスプラットフォーム201は、ジョブインターフェースモジュール(JIM:job interface module)205を更に含む。後で詳細に説明されるように、JIM205は、実行のために、(計算集約的な)ジョブをバッチ処理するように、及び/又はサーバ102に送信するように構成することができる。いずれの事例においても、JIM205は、クライアント101に本開示と一致するジョブ要求動作を行わせるように構成される、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせの形態とすることができる。いくつかの実施形態において、JIM205は、プロセッサ202によって実行されたときに本開示と一致するジョブ要求動作の実行を引き起こす、(例えば、メモリ203に記憶された)コンピュータ可読命令の形態とすることができる。代替的に、又は加えて、いくつかの実施形態において、JIM205は、本開示と一致する1又は複数のクライアント機能を行うために、少なくとも部分的にハードウェアにおいて実施される論理を含むか、又はその形態とすることができる。
【0030】
図2に更に示されるように、サーバ102は、サーバデバイスプラットフォーム211を含む。クライアントデバイスプラットフォーム201のように、サーバデバイスプラットフォーム211は、任意の適切なデバイスプラットフォームとすることができる。限定されることなく、サーバデバイスプラットフォーム211は、サーバ102として使用される電子デバイスのタイプと相関することが好ましい。したがって、例えば、サーバ102がラックマウントサーバプラットフォーム、ブレードサーバプラットフォーム、デスクトップコンピュータプラットフォーム、その他である場合、サーバデバイスプラットフォーム211は、いくつかの実施形態において、それぞれ、ラックマウントサーバプラットフォーム、ブレードサーバプラットフォーム、デスクトップコンピュータプラットフォーム、その他である。サーバデバイスプラットフォーム211は、プロセッサ212と、メモリ213と、COMMS214とを更に含む。このような構成要素の性質及び機能は、クライアントデバイスプラットフォーム201の対応する部分と同じであり、したがって、簡潔にするために再度説明されない。
【0031】
前述の構成要素に加えて、デバイスプラットフォーム211は、ジョブ加速インターフェースモジュール(JAIM:job acceleration interface module)215を含む。下で詳細に説明されるように、JAIMは、全般的に、クライアント101から(計算集約的な)ジョブを受信し、このようなジョブを実行のためにSSDアレイ103の1又は複数のSSDに運搬するように構成することができる。JAIMはまた、SSDアレイ103によって生成された出力を受信し、及び/又は取り出し、そして、該出力をクライアント101に通信するように構成することもできる。このようにして、JAIM215は、SSDのハードウェア加速エンジンをサーバ102に提供することができ、したがって、サーバ102が計算集約的な動作を行うためにこのようなハードウェアを活用することを可能にすることができる。
【0032】
JIM205のように、JAIM215は、サーバ102に本開示と一致するジョブ加速インターフェース動作を行わせるように構成される、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせの形態とすることができる。このような動作としては、例えば、下で論じられるように、クライアント101からジョブ要求及び/又はデータを受信すること、1又は複数のジョブ実行コマンドを生成することと、SSDアレイ103にジョブ実行コマンド(複数可)を伝送すること、(いくつかの実施形態において)SSDアレイ(又はそのSSD)によって生成される出力を要求すること、並びにクライアント101に出力を伝送することを挙げることができる。いくつかの実施形態において、JAIM215は、プロセッサ212によって実行されたときに本開示と一致するジョブ加速インターフェース動作の実行を引き起こす、(例えば、メモリ213に記憶された)コンピュータ可読命令の形態とすることができる。代替的に、又は加えて、いくつかの実施形態において、JAIM215は、本開示と一致する1又は複数のサーバ機能を行うために、少なくとも部分的にハードウェアにおいて実施される論理を含むか、又はその形態とすることができる。
【0033】
いくつかの実施形態において、JAIM215は、過去の、現在の、又は将来開発されるバージョンのシリアルアドバンストテクノロジーアタッチメント(SATA:serial advanced technology attachment)プロトコル、不揮発性メモリエクスプレス(NVMe:non− volatile memory express)プロトコル、シリアルアタッチドスモールコンピュータシステムインタフェース(SAS:small computer systems interface)プロトコル、これらの組み合わせ、及び同類のものなどの、確立された通信プロトコルに従ってSSDアレイ103と通信するように構成することができる。このようなプロトコルは、JAIM215によって発行されているような、本明細書で説明されるコマンド、例えば上記以外のジョブ実行コマンドを説明し、及び/又は実施するために使用することができる、ベンダ固有のコマンドを定義するためのオプションを有する。したがって、JAIM215によって発行されるコマンドが、上述したプロトコルの1又は複数に従うベンダ固有のコマンドとすることができることを理解されたい。
【0034】
上で述べたように、SDDアレイ103は、1又は複数のソリッドステートドライブを含むことができる。この概念は
図3に図示され、該図は、本開示の様々な実施形態と一致するサーバ及びソリッドステートドライブアレイの更なる詳細を示すブロック図である。
図3に示されるように、SSDアレイ103は、SSD3011・・・nを含むように構成することができ、ここで、nは、0である(単一のSSDだけが使用されることを示す)か、又は2以上の整数である。前述と一致して、nは、2〜約5、2〜約10、2〜約50、2〜約100、2〜約1000、その他の範囲とすることができる。限定されることなく、SSDアレイ103は、いくつかの実施形態において、2つ以上のSSD含む。
【0035】
SSD3011、301nは、それぞれ、コントローラ302、302'を含むことができる。
図3に更に示されるように、各コントローラ3011、301nは、ハードウェア加速エンジン(HAE:hardware acceleration engine)303、303'を含むことができる。全般に、HAE303、303'は、本明細書においてデータとも称される、データに対して加速された動作を行うように構成することができる。より具体的には、HAE303、303'は、SSD301、301'(例えば、不揮発性メモリ(NVM:non−volatile memory)304、304')に記憶された、及び/又はサーバ102から受信することができるデータ/データに対して、加速された計算集約的な動作を行うように構成することができる。いくつかの実施形態において、HAE303、303'は、フィールドプログラマブルゲートアレイ(FPGA:field programmable gate array)、特定用途向け集積回路、暗号化/暗号解読加速エンジン、圧縮/解凍エンジン、符号化/復号化エンジン(CODEC:encode/decode engine)、これらの組み合わせ、及び同類のものの形態で構成され、これらのいずれか又は全ては、ハードウェア、ソフトウェア、又はこれらの組み合わせの形態のインターフェースを含むことができる。限定されることなく、HAE303、303'は、いくつかの実施形態において、ハードウェア暗号化/暗号解読エンジンの形態である。適切なハードウェア暗号化/暗号解読エンジンの非限定的な例としては、限定されないがINTEL(登録商標)P3700シリーズのSSDなどの、INTEL(登録商標)Corporationによって販売されているある特定のSSDにおいて利用可能なハードウェア暗号化エンジンが挙げられる。いくつかの実施形態において、HAW303、303'は、データに対する1又は複数の暗号化アルゴリズム(例えば、FIPS197によって指定されるAESアルゴリズム)の実行を加速するように構成される、ハードウェア暗号化/暗号解読エンジンである。
【0036】
後で詳細に説明されるように、コントローラ302は、例えば有線又は無線通信を介して、JAIM215からデータ/データと関連付けられるジョブ実行コマンドを受信することができる。ジョブ実行コマンドに応じて、コントローラ302は、ジョブ要求に従って処理するために、HAE303にデータを転送することができる。HAE303は、ジョブ実行コマンドによって指定される様式で、例えばデータに対して加速された計算集約的な動作を行うことによって、データを処理することができる。SSD3011、301nの構成、及び/又は受信したジョブ実行コマンドの構成に応じて、HAEによって生成された出力は、例えばフロースルーの様式で、サーバ102に通信することができる。すなわち、いくつかの実施形態において、出力は、サーバ102が出力を要求することを必要とせずに、サーバ102に転送することができる。
【0037】
代替的に、又は加えて、いくつかの実施形態において、HAE303、303'の出力は、NVM304、304'又は随意の転送バッファ305、305'などのSSD3011、301nのメモリに記憶することができる。随意の転送バッファ305、305'は、任意の適切な転送バッファとすることができ、いくつかの実施形態では、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)又はスタティックランダムアクセスメモリすなわちSRAM(static random access memory)などの、揮発性メモリを含むか、又はその形態である。
【0038】
限定されることなく、いくつかの実施形態において、SSD3011、301nは、随意の転送バッファ305、305'を含み、JAIM215から受信するジョブ実行コマンドは、コントローラ302、302'(又は、より具体的には、HAE303、303')に、その出力を転送バッファ305に記憶させるように構成される。このような場合において、JAIM215は、サーバ102に、出力要求メッセージ(例えば、読み出しバッファコマンド)をSSD3011、301nに発行させるように更に構成され、SSDアレイ103に、HAE303、303'の出力をサーバ102に提供させる。
【0039】
例示のために、本開示は、以下、加速された暗号化動作を行うために
図1〜
図3に例示されるシステムが使用される、例示的な一実施形態の説明に進む。これに関して、クライアント101及び/又はそのオペレータが、高度暗号化規格などの暗号化アルゴリズムによって、データセット(データ)を暗号化することを望み得ることに留意されたい。これに関して、JIM205は、クライアント101のCOMMS204に、サーバ102のCOMMS214に第1の信号を伝送させるように構成することができる。いくつかの実施形態において、第1の信号は、ジョブ加速要求を含むことができる。とりわけ、ジョブ加速要求は、加速されるジョブのパラメータを指定することができる。
【0040】
このようなパラメータの非限定的な例としては、データのサイズ、データに対して行われる動作(この事例では、他の計算集約的な動作を通した暗号化が想定される)、用いられる暗号化のタイプ(例えば、AES暗号化、SMS4暗号化、その他)、暗号化に使用される1又は複数の鍵、これらの組み合わせ、及び同類のものが挙げられる。当然、前述のリストは、例示ためのものであり、加速される動作は、考慮中の暗号化アルゴリズムに依存し得ることを理解されたい。いくつかの実施形態において、第1の信号はまた、1又は複数の鍵も含むことができ、及び/又はデータの処理に使用される1又は複数のアルゴリズムも指定することができる。例えば、データが単一鍵暗号化プロトコルを使用して暗号化される場合、第1の信号は、データを暗号化するためにHAEによって使用される鍵を含むことができる。代替的に、又は加えて、SSD3011、301nの各々は、データを暗号化するために使用される鍵とともに予め用意しておくことができる。
【0041】
第1の信号はまた、クライアント101に関する情報も含むことができる。例えば、第1の信号は、クライアント101の真正性を検証するためにサーバ102によって使用することができる、クライアント認証情報を含むことができる。適切なクライアント識別情報の非限定的な例としては、クライアント101の識別子、1又は複数のパスワード、1又は複数の鍵(例えば、クライアント101の拡張プライバシー識別子(EPID:enhanced privacy identifier))、1又は複数のハッシュ、それらの組み合わせ、又は同類のものが挙げられる。これらは、当然、単なる例示のためのものであり、サーバ102がクライアント101の真正性を検証することを可能にすることができるのであれば、任意の適切な情報をクライアント認証情報として第1の信号に含むことができる。これに関して、サーバ102は、任意の適切な認証プロトコルを介して、クライアント101の真正性を検証することができる。
【0042】
クライアントの真正性が検証されると、又はこのような検証が必要とされない場合、JAIM215は、サーバ102に、例えばCOMMS214を使用して、クライアント101に第2の信号を伝送させることができる。いくつかの実施形態において、第2の信号は、第1の信号に確認応答し、クライアント101に、サーバ102に直接又はネットワーク104を介してデータを伝送させることができる。
【0043】
この時点で、JAIM215は、ジョブを開始する前に、クライアント101からの全データの受信を待つことができ、又は、データを受信している間に、例えばサーバ102へのインフライト又はストリーミング中に、ジョブを開始することができる。いずれの事例においても、JAIM215は、SSDアレイ1003に第3の信号を送ることによって、ジョブ(この事例では、データの暗号化)の実行を開始することができる。第3の信号は、データに対して行われる動作を詳述するジョブ実行コマンド、並びにSSDアレイ103のSSDの1又は複数によって処理されるデータを含むことができる。この例示的な事例において、例えば、第3の信号は、行われる暗号化動作のタイプを指定するジョブ実行コマンド、並びに暗号化が行われるデータの説明を含むことができる。上で述べたように、ジョブ実行コマンドは、1又は複数の過去の、現在の、又は将来開発されるバージョンのSATA、NVMe、及び/又はSASプロトコルに従う、ベンダ固有のコマンドの形態とすることができる。
【0044】
ジョブ実行コマンドに応じて、SSDアレイ103のSSDのコントローラは、処理のために、ハードウェア加速エンジン(例えば、HAE303、303')に該コントローラが受信したデータの全て又は一部分を伝送するように構成することができる。例えば、HAE303は、サーバ102から受信したジョブ実行コマンドに指定される動作と一致する様式で、又はより具体的には、サーバ102から受信したジョブ実行コマンドに応じてコントローラ302によって生成されたコマンドから、受信したデータを処理することができる。この実施例において、HAE303は、様々な市販のSSDにおいて用いることができるような、ハードウェア暗号化エンジンとすることができる。したがって、SSDによって受信したデータが(例えば、高度暗号化規格又は別の適切な暗号化アルゴリズムを使用して)暗号化される場合、コントローラ302、302'は、HAE303、303'にデータの全て又は一部分を供給することができる。それに応じて、HAE303、303'は、出力を生成するために、データに対してハードウェア加速された暗号化を行うことができる。ジョブ実行コマンドのように、SSDアレイ103のSSDのコントローラによって発行されるコマンドは、例えば1又は複数の過去の、現在の、又は将来開発されるバージョンのSATA、NVM、及び/又はSASプロトコルに従う、ベンダ固有のコマンドの形態とすることができる。
【0045】
いくつかの実施形態において、JAIM215は、サーバ102に、ジョブ実行コマンドを生成させることができ、該ジョブ実行コマンドは、SSDアレイ103のSSD(例えば、SSD 3011、303n)のコントローラ(例えば、コントローラ302、302')に発行される(随意に、ベンダ固有の)読み出し/書き込みコマンドを含むか、それと関連付けられるか、又はその形態である。このような場合において、ジョブ実行コマンドは、不揮発性メモリに対してデータ及び/又は出力を読み出すこと及び/又は書き込むことに加えて、ハードウェア加速エンジン(例えば、HAE303、303')によって、コントローラに、要求された動作の実行を起こさせる。すなわち、ジョブ実行コマンドに応じて、SSDの不揮発性メモリ(例えば、NVM304、304')にHAE303、303'の出力を書き込むことができる。代替的に、又は加えて、出力は、SSDのバッファ(例えば、随意のバッファ305、305')に書き込むことができる。いずれの事例においても、出力が書き込まれると、コントローラ302は、サーバ102に、ジョブの実行が完了したことを示す信号を伝送することができる。このような信号に応じて、JAIM215は、サーバ102に、コントローラ302からの出力の伝送を要求させることができる。したがって、例えば、JAIM215は、サーバ102に、SSDアレイ103の適切なSSDに要求出力コマンドを発行させることができる。要求出力コマンドは、SSDのコントローラに、ハードウェア加速エンジンによって行われる動作の出力を読み出させ、サーバ102に該出力を伝送させるように構成することができる。ジョブ実行コマンドのように、要求出力コマンドは、1又は複数のSAT、NVMe、及び/又はSASプロトコルに従う、ベンダ固有のコマンドとすることができる。次いで、サーバ102は、例えば有線又は無線通信を介して、出力をクライアント101に通信することができる。
【0046】
より全般的には、いくつかの実施形態において、JAIM215は、ジョブ実行コマンドを読み出し/書き込みコマンドの一部として構成することができ、該読み出し/書き込みコマンドは、SSDのコントローラに、処理のために、ハードウェア加速エンジンにジョブと関連して受信したデータを伝送させる。ジョブ実行コマンドに応じて、ハードウェア加速エンジンは、データに対して計算集約的な動作、例えば暗号化、暗号解読、その他を行い、不揮発性メモリ、バッファ/キャッシュ、これらの組み合わせ、及び同類のものなどのSSDのメモリに記憶される出力を生成することができる。限定されることなく、ジョブ実行コマンドは、いくつかの実施形態において、SSDコントローラに、SSDのバッファのハードウェア加速エンジンによって生成された出力を記憶させるように構成される。いずれの事例においても、JAI215は、サーバ102に、SSDアレイ103の適切なSSDに要求出力コマンドを発行させることができる。要求出力コマンドは、読み出しコマンド(例えば、読み出し不揮発性メモリコマンド、読み出しバッファコマンド、これらの組み合わせ、及び同類のもの)を含むか、又はその形態とすることができ、該コマンドは、SSDのコントローラに、SSDの不揮発性メモリ及び/又はバッファ/キャッシュに記憶された出力を読み出させ、該読み出させた出力をサーバ102に提供させる。JAI215は、次いで、サーバ102に、ジョブ出力をクライアント101に通信させることができる。
【0047】
他の非限定的な実施形態において、JAIM215は、サーバ102に、読み出し/書き込みコマンドと関連付けられないジョブ実行コマンドを生成させることができる。先の実施形態のように、ジョブ実行コマンドは、SSDのコントローラコントローラに、処理のために、ハードウェア加速エンジンにジョブと関連して受信したデータを伝送させるように構成することができる。しかしながら、先の実施形態とは異なり、ジョブ実行コマンドは、コントローラに、ハードウェア加速エンジンの出力をバッファ又は不揮発性メモリに記憶させないことができる。むしろ、ジョブ実行コマンドは、コントローラに、出力を不揮発性メモリに記憶することなく、サーバに、又はより具体的にはJAIM215にハードウェア加速エンジンの出力を自動的に運搬させることができる。すなわち、先の実施形態とは異なり、サーバ102(又はより具体的には、JAIM215)は、ハードウェア加速エンジンからの出力を要求する必要はない。むしろ、各SSDは、ハードウェア加速エンジンからの出力をサーバ102に(又はより具体的には、JAIM215に)自動的に提供することができる。このような実施形態では、SSDアレイ103のSSDが、単にジョブ実行コマンドと関連付けられる計算集約的な動作のためのアクセラレータとして作用することができ、データ/データが、フロースルー様式での、アレイの1又は複数のSSDへの入力及びそこからの出力であると理解することができる。出力を受信することに応じて、サーバ102は、次いで、例えば有線又は無線通信を介して、出力をクライアント101に通信することができる。
【0048】
例示及び例証のために、
図3は、ハードウェア加速エンジン303、303'がコントローラ(例えば、コントローラ302、302')と一体的である一実施形態を示すことに留意されたい。このような例証は、単なる例示のためのものであること、及びHAE303、303'は、それぞれ、コントローラ302、302'と一体的である必要はないことを理解されたい。実際に、本開示は、ハードウェア加速エンジンがSSDの内部にある別個の構成要素として形成される実施形態、並びに、ハードウェア加速エンジンがSSDの外部にあるが、最終的にはSSDコントローラによって制御される実施形態を想定する。
【0049】
例えば、いくつかの実施形態において、コントローラ302、302'は、デュアルポートコントローラなどのマルチポートコントローラの形態とすることができる。このような実施形態において、コントローラの第1のポートは、例えばケーブルインターフェースなどの適切なインターフェースを介して、サーバ102に通信可能に結合させることができる。コントローラの別の(例えば、第2の)ポートは、ハードウェア加速エンジンに通信可能に結合させることができ、該ハードウェア加速エンジンは、上で述べたように、コントローラとは別体とすることができ、また、SSDと別体とするか、又はSSDに一体化させることができる。これらの概念は、
図5A及び5Bに例示される。具体的には、
図5Aは、SSD301がデュアルポートコントローラ302'を含む例示的な一実施形態を示し、コントローラ302'の第1のポートは、サーバ102に結合され、コントローラ302'の第2のポートは、ハードウェア加速エンジン303'に結合され、該ハードウェア加速エンジンは、コントローラ302'とは別体であるが、SSD301と一体的である。
図5BのSSD30は、コントローラ302'の第2のポートが、SSD301'の外部にあるハードウェア加速エンジン303''に結合されることを除いて、類似する要素を含む。
図5A及び5Bにおいて、SSD301及び301'は、
図3のSSD3011・・・nと同じ様式で使用することができることを理解されたい。また、
図5A及びBのSSD301及び301'がサーバ102とは別体であるような描写は、例示のためのものであること、及びこのようなSSDは、サーバ102と一体的とすること、又は別様にはその中に組み込むことができることも理解されたい。最後に、HAE303'及び303''は、
図3のHAE303と同じ様式で使用することができること、及びHAE303''は、いくつかの実施形態において、サーバ102と一体的とすること、又は別様にはその中に組み込むことができることを理解されたい。
【0050】
図5A及び5Bの実施形態の動作は、ハードウェア加速エンジンの相対的な場所を除いて、
図1〜
図3と関連して先に上で説明したものと同じである。認識できるように、このような実施形態は、
図3に示される実施形態と比較して、ある特定の利点、すなわち、ハードウェア加速エンジンがSSDコントローラと一体的であるという利点を提供することができる。具体的には、
図3の実施形態は、アクセラレータがコントローラと連動して正しく機能していることを確実にするために、かなりの事前の設計及び妥当性の確認を伴う場合がある。このことを考慮すれば、上で述べられる代替的な手法は、このような課題を回避することができ、また、アクセラレータとコントローラとを一体化することが困難である、又はできない場合の別の経路を提供することができる。
【0051】
理解を容易にするために、前述の実施形態は、1つの又は比較的少数のSSDを含むソリッドステートドライブアレイの文脈で説明した。このような説明は、単なる例示のためのものであること、及び本明細書で説明される技術は、複数のSSDの間でバッチ処理すること、及び/又はスケーリングすることができることに留意されたい。実際に、行われる動作、データのサイズ、及び/又は他の因子に応じて、第3の信号は、SSDアレイ103に、その中の1つ又は複数のSSDによってデータを処理させるように構成することができる。例えば、データのサイズが比較的小さい、又はデータに対して行われる動作が比較的単純である場合に、JAIM215は、第3の信号を、SSDアレイ103に単一のSSDによって全データを処理させるように構成することができる。代替的に、データが比較的大きい、及び/又はデータに対する動作のより高速な実行が所望される場合に、JAIM215は、第3の信号を、各SSDがデータの一部分に対して動作するように、SSDアレイ103に複数のSSDの間でデータを細分化させるように構成することができる。
【0052】
例えばいくつかの実施形態において、及び
図3に示されるように、SSDアレイ103は、少なくとも第1のソリッドステートドライブ(例えば、SSD 3011)及び第2のソリッドステートドライブ(3011)を含む、複数のSSDを含むことができる。このような実施形態において、及び
図3に示されるように、第1のソリッドステートドライブは、第1のコントローラと、第1のハードウェア加速エンジンと、第1の不揮発性メモリとを含むことができ、第2のソリッドステートドライブは、第2のコントローラと、第2のハードウェア加速エンジンと、第2の不揮発性メモリとを含むことができる。
【0053】
このことを考慮すれば、サーバ102のJAIM215は、第1のソリッドステートドライブに第1のジョブ加速コマンド及び該データの第1の部分を伝送し、第2のソリッドステートドライブに第2のジョブ加速コマンド及び該データの第2の部分を伝送するように構成することができる。第1のジョブ加速コマンドは、例えば全般的に上で論じたように、第1のコントローラに、該データの第1の部分に対して第1の加速された動作を実行するために、第1のハードウェア加速エンジンに該データの第1の部分を伝送させるように構成することができる。例えば、第1のハードウェア加速エンジンは、第1の加速された動作の出力を第1の不揮発性メモリに記憶することなく、データの第1の部分に対して第1の加速された動作を実行することができる。同様に、第2のジョブ加速コマンドは、例えば全般的に上で説明したように、第2のコントローラに、該データの第2の部分に対して第2の加速された動作を実行するために、第2のハードウェア加速エンジンに該データの第2の部分を伝送させるように構成することができる。いくつかの実施形態において、第2のハードウェア加速エンジンは、第2の加速された動作の出力を第2の不揮発性メモリに記憶することなく、第2の加速された動作を行うことができる。このような実施形態において、第1のジョブ加速コマンドは、第1のソリッドステートドライブに、該JAIMにデータの第1の部分に対して行われた加速された動作の出力を伝送させるように更に構成することができ、第2のジョブ加速コマンドは、第2のソリッドステートドライブに、該JAIMにデータの第2の部分に対して行われた加速された動作の出力を伝送させるように更に構成することができる。
【0054】
上で述べたように、第1及び第2のソリッドステートドライブの第1及び第2のハードウェア加速エンジンは、それらのそれぞれの出力をSSDの不揮発性メモリに記憶することなく、第1及び第2の加速された動作を行うことができる。このような実施形態は有用であるが、2つ以上のソリッドステートドライブを用いるシステムは、その特定の構成に限定されない。実際に、上で説明した他の実施形態のように、第1及び第2のソリッドステートドライブは、各々、それぞれ第1の転送バッファ及び第2の転送バッファを含むことができる。このような実施形態において、第1及び第2のハードウェア加速エンジンは、それぞれ、第1及び第2の動作の出力を第1及び第2の転送バッファに記憶することができる。次いで、JAIM215は、サーバ102に、1又は複数の要求出力コマンドを発行させることができ、該要求出力コマンドは、第1及び第2のソリッドステートドライブに、第1及び第2の伝送バッファの出力を、それぞれ、サーバ102に提供させるか、又はソリッドステートドライブがサーバ102と一体的である場合は、サーバ102の他の構成要素に提供させる。いずれの事例においても、要求出力コマンドに応じて、SSDは、任意の適切なインターフェースを介して、それらのそれぞれの転送バッファからの出力をサーバ102に提供することができる。例えば、SSDがサーバ102と一体的でない場合には、長距離通信ネットワーク、短距離通信ネットワーク、これらの組み合わせ、及び同類のものを介するなどの適切な通信インターフェースを介して、出力を通信することができる。SSDがサーバ102と一体的である場合には、シリアルアドバンストテクノロジーアタッチメント(SATA)プロトコル、周辺構成要素相互接続(PCI)プロトコル、PCIエクスプレスプロトコルなどの通信プロトコルを介して、出力を通信することができる。
【0055】
当然、本明細書で説明される技術は、1つ又は2つのSSDを含むSSDアレイの使用に限定されない。実際に、上述のことから、当業者は、本明細書で説明される技術が、データに対する計算集約的な動作を処理するために、多数のSSDを使用することができることを認識するであろう。すなわち、計算集約的な動作の実行は、所望に応じて、より多い又はより少ないSSDに対してジョブをバッチ処理することによってスケールアップ又はスケールダウンすることができる。
【0056】
別の本開示の態様は、計算集約的な動作を加速するための方法に関する。これに関して、
図4を参照すると、該図は、本開示と一致する計算集約的な動作を加速する方法の1つの実施形態の例示的な動作のフロー図である。示されるように、本方法は、ブロック401から始まる。本方法は、次いで、随意のブロック402に進むことができ、そこでは、サーバがクライアントからジョブ要求を受信することができる。ブロック402は、破線がその随意の性質を示すが、いくつかの実施形態では、サーバ自体をジョブ要求のソースとすることができることが想定される。すなわち、いくつかの実施形態において、サーバは、ジョブ加速要求を含む第1の信号を生成するように構成される、ジョブインターフェースモジュール(例えば、JIM205など)を含むことができる。
【0057】
本方法は、次いで、随意のブロック403に進むことができ、そこでは、例えば全般的に上で論じたように、クライアント(又はジョブ加速要求を生成する他のエンティティ)が認証されたかどうかに関して判定を行うことができる。認証されていない場合、本方法は、随意のブロック404に進むことができ、そこでは、本方法を続けるかどうかに関して判定を行うことができる。続けない場合、本方法は、ブロック409に進み、終了することができる。続ける場合、本方法は、ブロック402にループバックし、続けることができる。
【0058】
クライアントがブロック403に従って認証された場合、又はブロック402及び/又は403の動作が要求されなかった場合、本方法は、ブロック405に進み、そこでは、例えば全般的に上で論じた様式で、ジョブ実行コマンドを生成し、SSDアレイに送信することができる。先に論じたように、ジョブ実行コマンドは、SSDアレイのSSDのコントローラに、処理のために、ハードウェア加速エンジンにコマンドと関連付けられるデータを送信させることができる。
【0059】
本方法は、次いで、ブロック405に進むことができ、そこでは、SSDアレイのSSDのハードウェア加速エンジンが、そのSSDのバッファ又はメモリに記憶された出力を生成するためのものであるかどうかに関する判定を行うことができる。上で論じたように、SSDのハードウェア加速エンジンの出力は、(例えば、ジョブ実行コマンドが、SSDコントローラに発行された読み出し/書き込みコマンドに含まれるか、その形態であるか、又はそれと関連付けられる場合に)例えば、ジョブ実行コマンドに応じて、SSDのバッファ及び/又は不揮発性メモリに記憶することができる。出力がバッファ又はメモリに記憶される場合、必要に応じて、本方法は、ブロック406に進むことができ、そこでは、必要に応じて出力をSSDバッファ及び/又はメモリから取得することができる。上で論じたように、これは、例えば、サーバによってSSDのコントローラに発行される読み出しコマンド(例えば、読み出しメモリ又は読み出しバッファコマンド)の発行によって達成することができる。しかしながら、出力がSSDのバッファ又はメモリに記憶されない場合、本方法は、ブロック407に進むことができ、そこでは、該出力をSSDから自動的に受信することができる。すなわち、ブロック407に従って、ジョブ実行コマンドを発行するパーティは、例えば出力を要求する追加的なコマンドを発行することを必要とせずに、SSDアレイのSSD(複数可)のハードウェア加速エンジンの出力を自動的に受信することができる。
【0060】
いずれの事例においても、本方法は、次いで、ブロック408に進むことができ、そこでは、加速される追加的な計算集約的な動作があるかどうかに関する判定を行うことができる。ある場合、本方法は、ブロック402にループバックすることができる。ない場合、本方法は、ブロック409に進み、終了することができる。
【実施例】
【0061】
以下の実施例は、更なる実施形態に関する。本開示の以下の実施例は、下に提供されるように、システム、デバイス、方法、実行したときに該方法に基づいてマシンに動作を行わせる命令を記憶するコンピュータ可読記憶媒体、及び/又は該方法に基づいて動作を行うための手段などの対象材料を含むことができる。
【0062】
実施例1:本開示の1つの実施例によれば、計算集約的な動作を加速するためのシステムが提供され、該システムは、コントローラと、ハードウェア加速エンジンと、不揮発性メモリとを含む少なくとも1つのソリッドステートドライブを含み、該コントローラは、サーバからのジョブ実行コマンドの受信に応じて、加速された動作の出力を不揮発性メモリに記憶することなく、データに対する加速された動作の実行のために、ハードウェア加速エンジンにジョブ実行コマンドと関連付けられるデータを伝送し、出力をサーバに提供するように構成される。
【0063】
実施例2:この実施例は、実施例1の特徴のいずれか又は全てを含み、少なくとも1つのソリッドステートドライブが、転送バッファを更に含み、コントローラが、ハードウェア加速エンジンに、転送バッファの出力を記憶させるように更に構成され、コントローラが、サーバからの要求出力メッセージの受信に応じて、出力をサーバに提供するように更に構成される。
【0064】
実施例3:この実施例は、実施例1及び2のいずれか一例の特徴のいずれか又は全てを含み、コントローラが、加速されるジョブのパラメータに従って、ハードウェア加速エンジンに加速された動作を行わせるように更に構成される。
【0065】
実施例4:この実施例は、実施例1〜3のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる1又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも1つを含む。
【0066】
実施例5:この実施例は、実施例1〜3のいずれか一例の特徴のいずれか又は全てを含み、少なくとも1つのソリッドステートドライブが、サーバから離れたソリッドステートドライブアレイに含まれる。
【0067】
実施例6:この実施例は、実施例1〜5のいずれか一例の特徴のいずれか又は全てを含み、少なくとも1つのソリッドステートドライブが、サーバと一体的である。
【0068】
実施例7:この実施例は、実施例1〜6のいずれか一例の特徴のいずれか又は全てを含み、コントローラが、出力をサーバに自動的に提供するように構成される。
【0069】
実施例8:この実施例は、実施例1〜7のいずれか一例の特徴のいずれか又は全てを含み、ハードウェア加速エンジンが、暗号化/暗号解読エンジン、符合化/復号化エンジン、圧縮/解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【0070】
実施例9:この実施例は、実施例1〜8のいずれか一例の特徴のいずれか又は全てを含み、加速された動作が、データの暗号化、データの暗号解読、データの符号化、データの復号化、データの圧縮、及びデータの解凍、又はこれらの組み合わせの少なくとも一部分を含む。
【0071】
実施例10:この実施例は、実施例1〜9のいずれか一例の特徴のいずれか又は全てを含み、少なくとも1つのソリッドステートドライブが、複数のソリッドステートドライブをソリッドステートドライブアレイに含み、該複数のソリッドステートドライブが、少なくとも第1のソリッドステートドライブ及び第2のソリッドステートドライブを含み、第1のソリッドステートドライブが、第1のコントローラと、第1のハードウェア加速エンジンと、第1の不揮発性メモリとを含み、第2のソリッドステートドライブが、第2のコントローラと、第2のハードウェア加速エンジンと、第2の不揮発性メモリとを含み、第1のコントローラが、サーバからのジョブ実行コマンドの受信に応じて、第1の加速された動作の第1の出力を第1の不揮発性メモリに記憶することなく、第1のデータに対して第1の加速された動作を実行するために、第1のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第1のデータを伝送するように構成され、第2のコントローラが、サーバからのジョブ実行コマンドの受信に応じて、第2の加速された動作の第2の出力を第2の不揮発性メモリに記憶することなく、第2のデータに対して第2の加速された動作を実行するために、第2のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第2のデータを伝送するように構成され、第1及び第2のコントローラが、それぞれ、第1及び第2の出力をサーバに提供するように構成される。
【0072】
実施例11:この実施例は、実施例10の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブが、それぞれ、第1の転送バッファ及び第2の転送バッファを含み、第1のコントローラが、第1のハードウェア加速エンジンに、第1の転送バッファに第1の出力を記憶させるように更に構成され、第2のコントローラが、第2のハードウェア加速エンジンに、第2の転送バッファに第2の出力を記憶させるように更に構成され、第1のコントローラが、サーバからの第1の要求出力メッセージの受信に応じて、第1の出力をサーバに提供するように更に構成され、第2のコントローラが、サーバからの第2の要求出力メッセージの受信に応じて、第2の出力をサーバに提供するように更に構成される。
【0073】
実施例12:この実施例は、実施例10又は11のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のコントローラが、第1及び第2のハードウェア加速エンジンに、それぞれ、加速されるジョブのパラメータに従って、第1及び第2の加速された動作を行わせるように更に構成される。
【0074】
実施例13:この実施例は、実施例10〜12のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる1又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも1つを含む。
【0075】
実施例14:この実施例は、実施例10〜13のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブのうちの少なくとも1つが、サーバから離れたソリッドステートドライブアレイに含まれる。
【0076】
実施例15:この実施例は、実施例10〜14のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブのうちの少なくとも1つが、サーバと一体的である。
【0077】
実施例16:この実施例は、実施例10〜15のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のコントローラが、それぞれ、第1及び第2の出力をサーバに自動的に提供するように構成される。
【0078】
実施例17:この実施例は、実施例10〜16のいずれか一例の特徴のいずれか又は全てを含み、第1のハードウェア加速エンジン及び第2のハードウェア加速エンジンが、各々、暗号化/暗号解読エンジン、符合化/復号化エンジン、圧縮/解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【0079】
実施例18:この実施例は、実施例10〜17のいずれか一例の特徴のいずれか又は全てを含み、第1の加速された動作が、データの第1の部分を暗号化すること、データの第1の部分を暗号解読すること、データの第1の部分を符号化すること、データの第1の部分を復号化すること、データの第1の部分を圧縮すること、データの第1の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含み、第2の加速された動作が、データの第2の部分を暗号化すること、データの第2の部分を暗号解読すること、データの第2の部分を符号化すること、データの第2の部分を復号化すること、データの第2の部分を圧縮すること、データの第2の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含む。
【0080】
実施例19:この実施例によれば、計算集約的な動作を加速するための方法が提供され、ソリッドステートドライブのコントローラよって、サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、ソリッドステートドライブのハードウェア加速エンジンにジョブ実行コマンドと関連付けられるデータを伝送することと、出力をソリッドステートドライブの不揮発性メモリに記憶することなく、出力を生成するために、ハードウェア加速エンジンによって、データに対して加速された動作を行うことと、出力をサーバに提供することとを含む。
【0081】
実施例20:この実施例は、実施例19の特徴のいずれか又は全てを含み、ソリッドステートドライブが、転送バッファを更に含み、本方法が、コントローラによって、ハードウェア加速エンジンに、出力を転送バッファに記憶させることと、サーバからの要求出力メッセージの受信に応じて、出力をサーバに提供することとを更に含む。
【0082】
実施例21:この実施例は、実施例19及び20のいずれか一例の特徴のいずれか又は全てを含み、コントローラによって、ハードウェア加速エンジンに、加速されるジョブのパラメータに従って、加速された動作を行わせることを更に含む。
【0083】
実施例22:この実施例は、実施例19〜21のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる1又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも1つを含む。
【0084】
実施例23:この実施例は、実施例19〜22のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバから離れたソリッドステートドライブアレイに含まれる。
【0085】
実施例24:この実施例は、実施例19〜23のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバと一体的である。
【0086】
実施例25:この実施例は、実施例19〜24のいずれか一例の特徴のいずれか又は全てを含み、出力をサーバに自動的に提供することを更に含む。
【0087】
実施例26:この実施例は、実施例19〜25のいずれか一例の特徴のいずれか又は全てを含み、ハードウェア加速エンジンが、暗号化/暗号解読エンジン、符合化/復号化エンジン、圧縮/解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【0088】
実施例27:この実施例は、実施例19〜26のいずれか一例の特徴のいずれか又は全てを含み、加速された動作が、データの暗号化、データの暗号解読、データの符号化、データの復号化、データの圧縮、及びデータの解凍、又はこれらの組み合わせの少なくとも一部分を含む。
【0089】
実施例28:この実施例は、実施例19〜27のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、複数のソリッドステートドライブをソリッドステートドライブアレイに含み、該複数のソリッドステートドライブが、少なくとも第1のソリッドステートドライブ及び第2のソリッドステートドライブを含み、第1のソリッドステートドライブが、第1のコントローラと、第1のハードウェア加速エンジンと、第1の不揮発性メモリとを含み、第2のソリッドステートドライブが、第2のコントローラと、第2のハードウェア加速エンジンと、第2の不揮発性メモリとを含み、本方法が、ジョブ実行コマンドの受信に応じて、第1のコントローラによって、第1の加速された動作の第1の出力を第1の不揮発性メモリに記憶することなく、第1のデータに対して第1の加速された動作を実行するために、第1のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第1のデータを伝送することと、第2のコントローラによって、第2の加速された動作の第2の出力を第2の不揮発性メモリに記憶することなく、第2のデータに対して第2の加速された動作を実行するために、第2のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第2のデータを伝送することと、第1及び第2のコントローラによって、それぞれ、第1及び第2の出力をサーバに提供することとを含む。
【0090】
実施例29:この実施例は、実施例28の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブが、それぞれ、第1の転送バッファ及び第2の転送バッファを含み、本方法が、第1のハードウェア加速エンジンに、第1の出力を第1の転送バッファに記憶させることと、第2のハードウェア加速エンジンに、第2の出力を第2の転送バッファに記憶させることと、サーバからの少なくとも1つの出力要求メッセージに応じて、第1及び第2の出力のうちの少なくとも1つをサーバに提供することとを更に含む。
【0091】
実施例30:この実施例は、実施例28及び29のいずれか一例の特徴のいずれか又は全てを含み、第1のコントローラによって、第1のハードウェア加速エンジンに、加速されるジョブのパラメータに従って、第1の加速された動作を行わせることと、第2のコントローラによって、第2のハードウェア加速エンジンに、パラメータに従って、第2の加速された動作を行わせることとを更に含む。
【0092】
実施例31:この実施例は、実施例28〜30のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる1又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも1つを含む。
【0093】
実施例32:この実施例は、実施例28〜31のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブのうちの少なくとも1つが、サーバから離れたソリッドステートドライブアレイに含まれる。
【0094】
実施例33:この実施例は、実施例28〜32のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブのうちの少なくとも1つが、サーバと一体的である。
【0095】
実施例34:この実施例は、実施例28〜33のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2の出力を、それぞれ、第1及び第2のコントローラによって、サーバに自動的に提供することを更に含む。
【0096】
実施例35:この実施例は、実施例28〜34のいずれか一例の特徴のいずれか又は全てを含み、第1のハードウェア加速エンジン及び第2のハードウェア加速エンジンが、各々、暗号化/暗号解読エンジン、符合化/復号化エンジン、圧縮/解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【0097】
実施例36:この実施例は、実施例28〜35のいずれか一例の特徴のいずれか又は全てを含み、第1の加速された動作が、データの第1の部分を暗号化すること、データの第1の部分を暗号解読すること、データの第1の部分を符号化すること、データの第1の部分を復号化すること、データの第1の部分を圧縮すること、データの第1の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含み、第2の加速された動作が、データの第2の部分を暗号化すること、データの第2の部分を暗号解読すること、データの第2の部分を符号化すること、データの第2の部分を復号化すること、データの第2の部分を圧縮すること、データの第2の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含む。
【0098】
実施例37:この実施例によれば、そこに記憶されるコンピュータ可読命令を有する少なくとも1つのコンピュータ読み出し可能な媒体が提供され、該命令が、ソリッドステートドライブのコントローラによって実行されたときに、サーバからジョブ実行コマンドを受信することに応じて、加速された動作の実行のために、ソリッドステートドライブのハードウェア加速エンジンにジョブ実行コマンドと関連付けられるデータを伝送することと、出力をソリッドステートドライブの不揮発性メモリに記憶することなく、出力を生成するために、ハードウェア加速エンジンによって、データに対して加速された動作を行うことと、出力をサーバに提供することとを含む動作の実行を引き起こす。
【0099】
実施例38:この実施例は、実施例37の特徴のいずれか又は全てを含み、ソリッドステートドライブが、転送バッファ及び命令を更に含み、該命令が、コントローラによって実行されたときに、ハードウェア加速エンジンに、出力を転送バッファに記憶させることと、サーバからの要求出力メッセージの受信に応じて、出力をサーバに提供することとを含む動作の実行を更に引き起こす。
【0100】
実施例39:この実施例は、実施例37及び38のいずれか一例の特徴のいずれか又は全てを含み、命令が、コントローラによって実行されたときに、ハードウェア加速エンジンに、加速されるジョブのパラメータに従って、加速された動作を行わせることを含む動作の実行を更に引き起こす。
【0101】
実施例40:この実施例は、実施例37〜39のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる1又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも1つを含む。
【0102】
実施例41:この実施例は、実施例37〜40のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバから離れたソリッドステートドライブアレイに含まれる。
【0103】
実施例42:この実施例は、実施例37〜41のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、サーバと一体的である。
【0104】
実施例43:この実施例は、実施例37及び42のいずれか一例の特徴のいずれか又は全てを含み、命令が、コントローラによって実行されたときに、出力をサーバに自動的に提供することを含む動作の実行を更に引き起こす。
【0105】
実施例44:この実施例は、実施例37〜43のいずれか一例の特徴のいずれか又は全てを含み、ハードウェア加速エンジンが、暗号化/暗号解読エンジン、符合化/復号化エンジン、圧縮/解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【0106】
実施例45:この実施例は、実施例37〜44のいずれか一例の特徴のいずれか又は全てを含み、加速された動作が、データの暗号化、データの暗号解読、データの符号化、データの復号化、データの圧縮、及びデータの解凍、又はこれらの組み合わせの少なくとも一部分を含む。
【0107】
実施例46:この実施例は、実施例37〜45のいずれか一例の特徴のいずれか又は全てを含み、ソリッドステートドライブが、複数のソリッドステートドライブをソリッドステートドライブアレイに含み、該複数のソリッドステートドライブが、少なくとも第1のソリッドステートドライブ及び第2のソリッドステートドライブを含み、第1のソリッドステートドライブが、第1のコントローラと、第1のハードウェア加速エンジンと、第1の不揮発性メモリとを含み、第2のソリッドステートドライブが、第2のコントローラと、第2のハードウェア加速エンジンと、第2の不揮発性メモリとを含み、命令が、第1及び第2のコントローラによって実行されたときに、第1のコントローラによって、第1の加速された動作の第1の出力を第1の不揮発性メモリに記憶することなく、第1のデータに対して第1の加速された動作を実行するために、第1のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第1のデータを伝送することと、第2のコントローラによって、第2の加速された動作の第2の出力を第2の不揮発性メモリに記憶することなく、第2のデータに対して第2の加速された動作を実行するために、第2のハードウェア加速エンジンにジョブ実行コマンドと関連付けられる第2のデータを伝送することと、第1及び第2のコントローラによって、それぞれ、第1及び第2の出力をサーバに提供することとを含む動作の実行を更に引き起こす。
【0108】
実施例47:この実施例は、実施例46の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブが、それぞれ、第1の転送バッファ及び第2の転送バッファを含み、命令が、第1及び第2のコントローラによって実行されたときに、第1のハードウェア加速エンジンに、第1の出力を第1の転送バッファに記憶することと、第2のハードウェア加速エンジンに、第2の出力を第2の転送バッファに記憶することと、サーバからの少なくとも1つの出力要求メッセージに応じて、第1及び第2の出力のうちの少なくとも1つをサーバに提供することとを含む動作の実行を更に引き起こす。
【0109】
実施例48:この実施例は、実施例46及び47のいずれか一例の特徴のいずれか又は全てを含み、命令が、第1及び第2のコントローラによって実行されたときに、第1のコントローラによって、第1のハードウェア加速エンジンに、加速されるジョブのパラメータに従って、第1の加速された動作を行わせることと、第2のコントローラによって、第2のハードウェア加速エンジンに、パラメータに従って、第2の加速された動作を行わせることとを含む動作の実行を更に引き起こす。
【0110】
実施例49:この実施例は、実施例46〜48のいずれか一例の特徴のいずれか又は全てを含み、パラメータが、データのサイズ、データに対して行われる1又は複数の動作、これらの組み合わせ、及び同類のもの、のうちの少なくとも1つを含む。
【0111】
実施例50:この実施例は、実施例46〜49のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブのうちの少なくとも1つが、サーバから離れたソリッドステートドライブアレイに含まれる。
【0112】
実施例51:この実施例は、実施例46〜50のいずれか一例の特徴のいずれか又は全てを含み、第1及び第2のソリッドステートドライブのうちの少なくとも1つが、サーバと一体的である。
【0113】
実施例52:この実施例は、実施例46〜51のいずれか一例の特徴のいずれか又は全てを含み、命令が、第1及び第2のコントローラによって実行されたときに、第1及び第2の出力を、それぞれ、第1及び第2のコントローラによって、サーバに自動的に提供することを含む動作の実行を更に引き起こす。
【0114】
実施例53:この実施例は、実施例46〜52のいずれか一例の特徴のいずれか又は全てを含み、第1のハードウェア加速エンジン及び第2のハードウェア加速エンジンが、各々、暗号化/暗号解読エンジン、符合化/復号化エンジン、圧縮/解凍エンジン、又はこれらの組み合わせからなる群から選択される。
【0115】
実施例54:この実施例は、実施例46〜53のいずれか一例の特徴のいずれか又は全てを含み、第1の加速された動作が、データの第1の部分を暗号化すること、データの第1の部分を暗号解読すること、データの第1の部分を符号化すること、データの第1の部分を復号化すること、データの第1の部分を圧縮すること、データの第1の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含み、第2の加速された動作が、データの第2の部分を暗号化すること、データの第2の部分を暗号解読すること、データの第2の部分を符号化すること、データの第2の部分を復号化すること、データの第2の部分を圧縮すること、データの第2の部分を解凍すること、又はこれらの組み合わせの少なくとも一部分を含む。
【0116】
実施例55:この実施例によれば、少なくとも1つのソリッドステートディスクのコントローラによって実行されたときに、実施例19〜36のいずれか一例の方法の実行を引き起こすコンピュータ可読命令を含む、少なくとも1つのコンピュータ可読媒体が提供される。
【0117】
本明細書で用いられている用語及び表現は、限定の用語ではなく説明の用語として使用されており、そのような用語及び表現の使用において、図示及び説明された特徴(又はそれらの一部分)の任意の均等物を除外するいかなる意図もなく、特許請求の範囲の範囲内で様々な修正が可能であることが認識される。故に、以下の特許請求の範囲は、全てのそのような均等物を網羅することを意図する。