以下では、本発明の技術分野における通常の知識を有する者が本発明を容易に実施することができるように、本発明の実施形態を明確かつ詳細に説明する。
図1は、本発明の実施形態によるストレージシステムを示すブロック図である。図1を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。1つ以上の実施形態では、ストレージ装置120は、以下で説明するような計算ストレージ装置(computational storage device)であり得る。
一実施形態では、ストレージシステム100は、モバイルフォン(mobile phone)、スマートフォン(smart phone)、タブレットPC(tablet personal computer)、ウェアラブル機器、ヘルスケア機器又はIOT(internet of things:モノのインターネット)機器のようなモバイル(mobile)システムであり得る。一実施形態では、ストレージシステム100は、パーソナルコンピュータ(personal computer)、ラップトップ(laptop)コンピュータ、サーバ(server)、メディアプレーヤー(media player)のようなコンピューティング装置であるか、又はナビゲーション(navigation)のような車両用機器(automotive device)などのようなシステムであり得る。
一実施形態では、ストレージ装置120は、従来のストレージ装置の一般的な機能(例えば、データ保存及び出力)に加えて、多様な演算動作を遂行するように構成される計算ストレージ装置(computational storage device)であり得る。以下では、説明の便宜のため、ストレージ装置及び計算ストレージ装置の用語が併用される。
ホスト装置110は、ストレージ装置120にデータを格納するか、又はストレージ装置120に格納されたデータを読み取ることができる。ホスト装置110は、ホストコントローラ111及びホストメモリ112を含み得る。ホストコントローラ111は、ストレージ装置120を制御するように構成されてもよい。一実施形態では、ホストコントローラ111は、所定のインターフェースに基づいてストレージ装置120と通信することができる。所定のインターフェースは、NVMe標準規格に基づくインターフェースであり得るが、本発明の範囲はこれに限定されるものではない。
ホストメモリ112は、ホスト装置110のバッファメモリ、動作メモリ又はシステムメモリであり得る。例えば、ホストメモリ112は、ホスト装置110が動作するために必要かつ多様な情報を格納するように構成され得る。ホストメモリ112は、ストレージ装置120に転送するデータ又はストレージ装置120から受信するデータを一時的に格納するためのバッファメモリとして使用されてもよい。一実施形態では、ホストメモリ112は、ストレージ装置120によるアクセスを支援することができる。
一実施形態では、ホストコントローラ111及びホストメモリ112のそれぞれは、別個の半導体チップで実装されてもよい。あるいは、一実施形態では、ホストコントローラ111及びホストメモリ112は、単一の半導体チップに集積されてもよく、又はマルチチップパッケージで実装されてもよい。例えば、ホストコントローラ111は、アプリケーションプロセッサ(Application Processor)に設けられる多数のモジュールのうち、いずれか1つであり得る。アプリケーションプロセッサは、システムオンチップ(System on Chip:SoC)で実装され得る。ホストメモリ112は、アプリケーションプロセッサ内に設けられる組み込みメモリであってもよいし、又はアプリケーションプロセッサの外部に配置される不揮発性メモリ装置、揮発性メモリ装置、不揮発性メモリモジュール又は揮発性メモリモジュールであってもよい。
ストレージ装置120は、ホスト装置110からの要請に応じてデータを格納するか、又は格納されたデータを出力するように構成される記憶媒体であり得る。一実施形態では、ストレージ装置120は、SSD(Solid State Drive)、組み込みメモリ及び取り外し可能な外部メモリのうち、少なくとも1つを含み得る。ストレージ装置120がSSDである場合、ストレージ装置120は、NVMe(non-volatile memory express)標準規格に準拠する装置であり得る。ストレージ装置120が組み込みメモリ又は外部(external)メモリである場合、ストレージ装置120は、UFS(universal flash express)標準規格又はeMMC(embedded multi-media card)標準規格に準拠する装置であり得る。ホスト装置110とストレージ装置120は、それぞれ採用された標準プロトコルによるパケットを生成し、これを送ることができる。
ストレージ装置120は、ストレージコントローラCTRL及び不揮発性メモリ(NVM)装置119を含み得る。ストレージコントローラCTRLは、中央処理ユニット(CPU:central processing unit)121、計算エンジン(computation engine)122、フラッシュ変換レイヤー(FTL:flash translation layer)123、コントローラメモリ124、パケットマネージャー125、エラー訂正コード(ECC:error correction code)エンジン126(例えば、エラー訂正プロセッサ)、AES(advanced encryption standard)エンジン127(例えば、AESプロセッサ)、ホストインターフェースブロック128(例えば、ホストインターフェース回路)、メモリインターフェースブロック129(例えば、メモリインターフェース回路)及びシステムバスBUSを含み得る。一実施形態では、ストレージコントローラCTRLに含まれる多様な構成要素のそれぞれは、IP(Intellectual property)ブロック又は機能ブロックで実装されることがあり、ソフトウェア形態、ハードウェア形態、ファームウェア形態又はそれらの組み合わせの形態で実施される。
CPU121は、ストレージコントローラCTRLの諸般の動作を制御することができる。例えば、CPU121は、ストレージコントローラCTRLで駆動される多様なファームウェア又はソフトウェアを駆動するように構成され得る。
計算エンジン122は、ストレージコントローラCTRLで遂行される多様な演算動作を遂行するか、又はストレージコントローラCTRL上で遂行されるアプリケーション又は演算プログラムを駆動するように構成され得る。一実施形態では、計算エンジン122は、ホスト装置110上で駆動されるホストアプリケーションのいくつかの機能を遂行するように構成され得る。一実施形態では、内部アプリケーションは、暗号化動作、フィルタリング動作、機械学習のためのコンボリューション演算などのような多様なデータ演算動作を遂行するように構成され得る。
一実施形態では、CPU121と計算エンジン122は別個の機能ブロックとして示されているが、本発明の範囲はこれに限定されるものではない。例えば、CPU121及び計算エンジン122のそれぞれは、別途のプロセッサコアで実施されることがある。あるいは、CPU121及び計算エンジン122は、1つのプロセッサコアで実施されてもよく、又は複数のプロセッサコアを含むマルチコアプロセッサで実装されてもよい。
FTL123は、不揮発性メモリ装置119を効率的に使用するための多様なメンテナンス動作を遂行することができる。例えば、メンテナンスは、アドレスマッピング動作、ウェアレベリング動作、ガベージコレクション動作などを含み得る。
アドレスマッピング動作は、ホスト装置110によって管理される論理アドレス(logical address)と、不揮発性メモリ装置119の物理アドレス(physical address)とを互いに変換又はマッピングする動作であり得る。
ウェアレベリング動作は、不揮発性メモリ装置119に含まれる複数のメモリブロックの使用頻度又は使用回数を均一化する動作を指すことができ、物理ブロックの消去カウントをバランシングするファームウェア技術を通じて、又はハードウェアを介して実施される。一実施形態では、ウェアレベリング動作によって、不揮発性メモリ装置119の複数のメモリブロックのそれぞれが均一に使用されることによって、特定のメモリブロックの過度の劣化が防止され、それによって不揮発性メモリ装置119の寿命が向上する。
ガベージコレクション動作は、不揮発性メモリ装置119のソースメモリブロックの有効データをターゲットメモリブロックにコピーした後、ソースメモリブロックを消去(erase)することにより、不揮発性メモリ装置119の利用可能なメモリブロック又は自由メモリブロックを確保する動作を指すことができる。
一実施形態では、FTL123は、ファームウェア又はソフトウェアの形態で実施され、コントローラメモリ124又は別途の動作メモリ(図示せず)に格納されてもよい。CPU121は、コントローラメモリ124又は別個の動作メモリ(図示せず)に格納されたFTL123を駆動することにより、上述された多様なメンテナンス動作を行うことができる。一実施形態では、FTL123は、上述された多様なメンテナンス動作を遂行するように構成される多様なハードウェア自動化回路によって実施される。すなわち、FTL123はハードウェアで実現され、ハードウェアを介して上述した多様なメンテナンス動作を行うことができる。
コントローラメモリ124は、ストレージコントローラCTRLのバッファメモリ又は動作メモリとして動作することができる。例えば、コントローラメモリ124は、ホスト装置110又は不揮発性メモリ装置119から受信されたデータを一時的に記憶することができる。あるいは、コントローラメモリ124は、ストレージコントローラCTRLが動作するために必要かつ多様な情報又はプログラムコードを格納することができる。CPU121は、コントローラメモリ124に格納された情報又はプログラムコードに基づいて多様な諸般の動作を遂行することができる。
一実施形態では、コントローラメモリ124は、計算エンジン122によって使用されるデータ、又は計算エンジン122によって駆動されるアプリケーションに対するプログラムコードを格納するように構成され得る。計算エンジン122は、コントローラメモリ124に格納されたプログラムコードを実行するか、又はコントローラメモリ124に格納されたデータに対する多様な演算を遂行することができる。
図面の簡潔さ及び説明の便宜のために、コントローラメモリ124がストレージコントローラCTRLに含まれるように示されているが、本発明の範囲はこれに限定されるものではない。コントローラメモリ124は、ストレージコントローラCTRLの外部に配置された別途のメモリモジュール又はメモリ装置であり得る。ストレージコントローラCTRLは、外部に配置されたメモリモジュール又はメモリ装置を制御するように構成されるメモリコントローラ(図示せず)をさらに含み得る。
パケットマネージャー125は、ホスト装置110から受信されたパケット(packet)をパーシング(parsing)するか、又はホスト装置110に転送されるデータのパケット(packet)を生成するように構成され得る。一実施形態では、パケットは、ホスト装置110とストレージ装置120との間のインターフェース規約に基づいて生成されてもよい。
ECCエンジン126は、不揮発性メモリ装置119から読み出されるデータに対するエラー検出及び訂正機能を遂行することができる。例えば、ECCエンジン126は、不揮発性メモリ装置119に格納される書き込みデータに対してパリティビット(parity bits)を生成することができる。生成されたパリティビットは、書き込みデータと共に不揮発性メモリ装置119に格納されてもよい。その後、不揮発性メモリ装置119に対する読み取り動作時に、ECCエンジン126は、読み取りデータ及び対応するパリティビットを用いて読み取りデータのエラーを訂正し、エラー訂正された読み取りデータを出力することができる。
AESエンジン127は、ストレージコントローラCTRLに入力されるデータに対する暗号化(encryption)動作及び復号(decryption)動作のうち、少なくとも一方を、対称鍵アルゴリズム(symmetric-key algorithm)を用いて遂行することができる。
ストレージコントローラCTRLは、ホストインターフェースブロック128を介してホスト装置110と通信することができる。以下では、本発明の実施形態を容易に説明するために、ホストインターフェースブロック128は、NVMe(nonvolatile memory express)標準規格によるインターフェースを支援すると仮定する。しかし、本発明の範囲はこれに限定されるものではなく、ホストインターフェースブロック128は、ATA(Advanced Technology Attachment)インターフェース、SATA(Serial ATA)インターフェース、e-SATA(external SATA)インターフェース、SCSI(Small Computer Small Interface)インターフェース、SAS(Serial Attached SCSI)インターフェース、PCI(Peripheral Component Interconnection)インターフェース、PCIe(PCI express)インターフェース、IEEE 1394、USB(universal serial bus)インターフェース、SD(secure digital)カードインターフェース、MMC(multi-media card)インターフェース、eMMC(embedded MMC)インターフェース、UFS(Universal Flash Storage)インターフェース、eUFS(embedded UFS)インターフェース又はCF(compact flash)カードインターフェースなどのような多様なインターフェースのうち、少なくとも1つを支援するように構成され得る。
ストレージコントローラCTRLは、メモリインターフェースブロック129を介して不揮発性メモリ装置119と通信することができる。一実施形態では、メモリインターフェースブロック129は、トグル(toggle)インターフェース又はオンフィ(Open NAND Flash Interface:ONFI)インターフェースなどのようなフラッシュインターフェースを支援するように構成され得る。しかし、本発明の範囲はこれに限定されるものではない。
ストレージコントローラCTRLに含まれる多様な構成要素は、システムバスBUSを介して互いに通信することができる。システムバスBUSは、ASB(Advanced System Bus)、APB(Advanced Peripheral Bus)、AHB(Advanced High Performance Bus)、AXI(Advanced eXtensible Interface)などのような多様なシステムバスを含み得る。
不揮発性メモリ装置119は、ストレージコントローラCTRLの制御に応じて、データを格納するか、格納されたデータを出力するか、又は格納されたデータを消去するように構成される。一実施形態では、不揮発性メモリ装置119は、2次元又は3次元のNAND型フラッシュメモリ装置であり得るが、本発明の範囲はこれに限定されず、不揮発性メモリ装置119はMRAM(Magnetic RAM)、スピン伝達トルクMRAM(Spin-Transfer Torque MRAM)、Conductive bridging RAM(CBRAM)、FeRAM(Ferroelectric RAM)、PRAM(Phase RAM)、抵抗変化型メモリ(Resistive RAM)及び他の多様な種類のメモリに基づくメモリ装置であり得る。一実施形態では、不揮発性メモリ装置119は、複数の不揮発性メモリを含むことができ、複数の不揮発性メモリのそれぞれは別途のチップ、別途のパッケージで実現されることがある。ストレージコントローラCTRLは、複数のチャネルを介して不揮発性メモリ装置119の複数の不揮発性メモリとそれぞれ通信することができる。
上述したように、本発明によるストレージ装置120は、ストレージコントローラCTRLの計算エンジン122を用いて多様なアプリケーションを実行することにより、多様な演算動作を遂行することができる。この場合、ホスト装置110で行われる演算負担を軽減することができるため、ストレージシステム100の全体的な性能を向上させ得る。
図2は、図1のストレージシステムの動作を説明するための図である。説明の便宜上、ストレージシステム100の動作を説明するのに不要な構成要素は省略される。
図1及び図2を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。ホスト装置110及びストレージ装置120の概略的構成及び動作は前述されたため、これに対する詳細な説明は省略する。
一実施形態では、ホスト装置110は、プロセッサ(図示せず)を含むことができ、プロセッサはホストアプリケーションAPP_hを駆動することができる。ホストアプリケーションAPP_hは、ホストオペレーティングシステムOS_h上で駆動されるプログラムを指すことができる。ホストアプリケーションAPP_hは、ストレージ装置120にデータを格納するか、又はストレージ装置120に格納されたデータを読み取ることができる。すなわち、ホストアプリケーションAPP_hは、ストレージ装置120に対する入出力(I/O)を発行(issue)することができる。以下で、ホスト装置110のホストアプリケーションAAP_hによって発行される入出力I/OをホストI/Oと称する。
ホストオペレーティングシステムOS_hは、ホストファイルシステムFS_h及びホストNVMeドライバDR_hを含み得る。ホストファイルシステムFS_hは、ホストオペレーティングシステムOS_h上で、ストレージ装置120の記憶空間を管理又は組織化するように構成され得る。ホストNVMeドライバDR_hは、ホストファイルシステムFS_hを介して組織化されるホストI/Oをホストコマンドとして、ストレージ装置120に第1インターフェースIF1を介して伝達することができる。一実施形態では、ホストNVMeドライバDR_hは、NVMe標準規格を支援するように構成されてもよく、図1のホストコントローラ111によって制御又は駆動されてもよい。この場合、第1インターフェースIF1は、NVMe標準規格に基づくインターフェースであり得る。
ストレージコントローラCTRLは、FTL123、ホストインターフェースブロック128及びメモリインターフェースブロック129を含み得る。ストレージコントローラCTRLは、第1インターフェースIF1を介してホストNVMeドライバDR_hからホストコマンドを受信し、受信されたホストコマンドに対応する動作を行うことができる。
例えば、ホストインターフェースブロック128は、物理ポート128a及びNVMeエンジン128bを含み得る。物理ポート128aは、PCIe(Peripheral Component Interconnect Express)規約による物理信号を送受信するように構成される回路又は物理レイヤーであり得る。
NVMeエンジン128bは、物理ポート128aを介して受信された信号を処理するか、又は物理ポート128aを介してホストNVMeドライバDR_hに信号を伝達するように構成され得る。一実施形態では、NVMeエンジン128bは、物理ポート128aを介して受信された信号を処理するように構成され得る。一実施形態では、NVMeエンジン128bは、ホスト装置110とストレージ装置120(又はNVMサブシステム)との間のインターフェースを提供するNVMeコントローラであり得る。一実施形態では、NVMeエンジン128bは、NVMeインターフェースを支援するように構成される物理機能(PF:physical function)ブロックであり得る。
FTL123は、NVMeエンジン128bから信号を受信し、受信された信号に基づいて多様なメンテナンス動作を遂行することができる。FTL123の動作は前述されたため、これに対する詳細な説明は省略する。FTL123は、メモリインターフェースブロック129を介して不揮発性メモリ装置119に格納されたデータを読み取るか、又は不揮発性メモリ装置119にデータを格納することができる。
上述したように、ホスト装置110のホストアプリケーションAPP_hによって発生されるホストI/Oは、ホストファイルシステムFS_h、ホストNVMeドライバDR_h、物理ポート128a、NVMeエンジン128b、FTL123及びメモリインターフェースブロック129を介して処理される。
一実施形態では、ストレージ装置120は、内部アプリケーションAPP_iを駆動することによって多様な演算動作を遂行するように構成され得る。例えば、ストレージ装置120のストレージコントローラCTRLは、内部アプリケーションAPP_iを駆動することができる。内部アプリケーションAPP_iは、内部オペレーティングシステム又はファームウェア(以下、「内部オペレーティングシステム」と称する)OS_i上で駆動される。内部アプリケーションAPP_i及び内部オペレーティングシステムOS_iは、図1を参照して説明された計算(演算)エンジン122によって駆動される。
一実施形態では、ストレージコントローラCTRLで駆動される内部アプリケーションAPP_i及び内部オペレーティングシステムOS_iは、ホスト装置110で駆動されるホストアプリケーションAPP_h及びホストオペレーティングシステムOS_hと異なってもよい。例えば、内部アプリケーションAPP_iは、ホストアプリケーションAAP_hと物理的又は論理的に区分され、内部オペレーティングシステムOS_iは、ホストオペレーティングシステムOS_hと物理的又は論理的に区分され得る。あるいは、内部アプリケーションAPP_i及び内部オペレーティングシステムOS_iは、ストレージ装置120内部の構成要素(例えば、ストレージコントローラCTRLの計算エンジン122)によって駆動され、ホストアプリケーションOS_h 及びホストオペレーティングシステムOS_hは、ホスト装置110の内部構成要素(例えば、ホスト装置110のプロセッサ)によって駆動され得る。
一実施形態では、内部アプリケーションAPP_i及び内部オペレーティングシステムOS_iは、ストレージコントローラCTRLのストレージ機能を遂行するために必要なプログラムとは異なる構成であり得る。ストレージコントローラCTRLのストレージ機能は、ホスト装置110からのホストコマンドに応答してデータを格納するか、データを読み取るか、又は不揮発性メモリ装置119の記憶空間を管理する機能を指すことができる。すなわち、本発明の実施形態によるストレージ装置120は、従来の一般的なストレージ装置と比較して、内部アプリケーションAPP_i及び内部オペレーティングシステムOS_iをさらに備えることができ、それによって追加の演算動作を遂行するように構成されてもよい。
内部アプリケーションAPP_iが駆動されるにつれて、内部アプリケーションAPP_iからI/Oが発行され得る。以下で、内部アプリケーションAPP_iによって発行されるI/Oを内部I/Oと称する。内部アプリケーションAPP_iによって発行される内部I/Oは、内部オペレーティングシステムOS_iの内部ファイルシステムFS_i及び専用ドライバdr_dを介してFTL123に伝達され得る。一実施形態では、内部ファイルシステムFS_iは、ストレージコントローラCTRLの内部オペレーティングシステムOS_iによって管理又は使用される構成であり、ホスト装置110のホストファイルシステムFS_hと区分される構成であり得る。
一実施形態では、専用ドライバdr_dは、専用インターフェースif_dを介してFTL123と通信することができる。専用ドライバdr_dは、FTL123との通信のために別個に実現されるソフトウェア、ファームウェア又はハードウェアの構成であり得る。
一実施形態では、ストレージコントローラCTRL内の構成要素間の通信は、システムバスBUS又は個別的な通信方式を通じて実施され得る。例えば、NVMeエンジン128bとFTL123との間の通信、FTL123とメモリインターフェースブロック129との間の通信、及び専用ドライバdr_dとFTL123との間の通信のそれぞれは、システムバスBUS又は個別的な通信方式を通じて実施され得る。
図3は、図1のストレージシステムを示すブロック図である。説明の便宜のために、前述された構成要素の詳細な説明は省略する。図1及び図3を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。ホスト装置110は、ホストオペレーティングシステムOS_h及びホストアプリケーションAPP_hを駆動することができる。
一実施形態では、ストレージコントローラCTRLは、内部オペレーティングシステムOS_i上で内部アプリケーションAPP_iを駆動することができる。内部オペレーティングシステムOS_i上で、内部アプリケーションAPP_iは、計算エンジン122によって駆動され得る。内部オペレーティングシステムOS_iは、内部アプリケーションAPP_iから発行される内部I/Oを内部ファイルシステムFS_i及び内部NVMeドライバDR_iを介して処理される。内部NVMeドライバDR_iは、第2インターフェースIF2を介してNVMeエンジン128bと通信することができる。
すなわち、図3の実施形態では、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行される内部I/Oは、内部ファイルシステムFS_i、内部NVMeドライバDR_i、NVMeエンジン128b、FTL123及びメモリインターフェースブロック129を介して処理される。
図3を参照して説明された実施形態では、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行されるI/Oは、内部オペレーティングシステムOS_iの内部NVMeドライバDR_iを介してNVMeエンジン128bに提供される。すなわち、ホスト装置110のホストアプリケーションAPP_hからのホストI/O、及びストレージコントローラCTRLの内部アプリケーションAPP_iからの内部I/Oは、同じNVMeエンジン128bを経由して処理されるか、又は同じNVMeエンジン128bを共有し得る。この場合、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行される内部I/Oを処理するように構成される構成要素を実現又は設計するための負担を軽減することができる。
例えば、図2を参照して説明された実施形態では、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行される内部I/Oは、内部オペレーティングシステムOS_iの専用ドライバdr_dを介してFTL123に提供される。この場合、FTL123と直接通信するように構成される専用ドライバdr_d、及びFTL123と専用ドライバdr_dとの間の直接通信を実現するための設計負担が増加する。
一方、図3の実施形態では、ストレージコントローラCTRLの内部NVMeドライバDR_iは、第2インターフェースIF2を介してNVMeエンジン128bと通信することができる。このとき、内部NVMeドライバDR_iは、ホストNVMeドライバDR_hと実質的に類似したソフトウェアレイヤー又はハードウェアレイヤーを有し得る。すなわち、ストレージコントローラCTRLの内部NVMeドライバDR_iは、従来のNVMeドライバと類似した構造を有するため、追加の設計負担がない。第2インターフェースIF2は、第1インターフェースと同じ標準規格(例えば、NVMe規格又はPCIe規格)に基づくインターフェースであり得る。すなわち、内部オペレーティングシステムOS_iのドライバとFTL123との間の通信のための別途のインターフェース又は専用インターフェースを追加的に設計する負担が軽減される。一実施形態では、第2インターフェースIF2はシステムバスBUSを介して仮想化されたインターフェースであり得る。
上述したように、本発明の実施形態によるストレージ装置120は、内部アプリケーションAPP_iを介して多様な演算動作を遂行することができる。ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行されるI/Oは、ストレージコントローラCTRLの内部NVMeドライバDR_iを介してNVMeエンジン128bに提供され得る。NVMeエンジン128bは、ホスト装置110との通信を支援するように構成され得る。すなわち、ストレージコントローラCTRLによって発行されるI/Oは、ホスト装置110によって発行されるI/Oと同じ経路を通って処理されてもよい。したがって、ストレージコントローラCTRLの内部構成に対する設計負担を軽減することができる。
図4は、図3のストレージシステムの動作を説明するためのフローチャートである。説明の便宜のために、前述された構成要素に対する詳細な説明は省略する。図3及び図4を参照すると、段階S110において、ホストアプリケーションAPP_hは、ホストI/Oを発行することができる。例えば、ホストアプリケーションAPP_hは、動作に必要なデータをストレージ装置120から獲得したり、ストレージ装置120にデータを格納したりするためのホストI/Oを発行することができる。
段階S120において、ホストI/Oに対応するホスト要請RQ_hをホストアプリケーションAPP_hからホストNVMeドライバDR_hに提供することができる。一実施形態では、ホスト要請RQ_hは、ホストI/OがホストオペレーティングシステムOS_hのホストファイルシステムFS_hによって組織化される情報であり得る。段階S130において、ホストNVMeドライバDR_hは、ホスト要請RQ_hに応答して、ホスト要請RQ_hに対応するホストコマンドCMD_hを、第1インターフェースIF1を介してホストインターフェースブロック128に転送することができる。
段階S140において、ホストインターフェースブロック128、FTL123及びメモリインターフェースブロック129は、受信されたホストコマンドCMD_hを処理することができる。例えば、ホストインターフェースブロック128、FTL123及びメモリインターフェースブロック129は、ホストコマンドCMD_hに対応する動作を遂行することができる。
段階S150において、ホストインターフェースブロック128は、ホストコマンドCMD_hが処理されたことを示すホスト応答RES_hをホストNVMeドライバDR_hに提供することができる。
段階S160において、ホストNVMeドライバDR_hは、ホスト応答RES_hに応答して、ホスト出力OUT_h(例えば、ホストI/Oに対する結果)をホストアプリケーションAPP_hに提供することができる。
段階S210において、ストレージコントローラCTRLの内部アプリケーションAPP_iによって内部I/Oを発行することができる。例えば、内部アプリケーションAPP_iは、多様な演算動作を遂行する過程で、不揮発性メモリ装置119に格納されたデータを読み取るか、又は不揮発性メモリ装置119にデータを格納するための内部I/Oを発行することができる。
段階S220において、内部I/Oによって対応する内部要請RQ_iを内部NVMeドライバDR_iに提供することができる。一実施形態では、内部要請RQ_iは、内部I/Oが内部オペレーティングシステムOS_iの内部ファイルシステムFS_iによって組織化される情報であり得る。
段階S230において、内部NVMeドライバDR_iは、内部要請RQ_iに応答して、内部要請RQ_iに対応する内部コマンドCMD_iを、第2インターフェースIF2を介して、ホストインターフェースブロック128に転送することができる。
段階S240において、ホストインターフェースブロック128、FTL123及びメモリインターフェースブロック129は、受信された内部コマンドCMD_iを処理することができる。例えば、ホストインターフェースブロック128、FTL123及びメモリインターフェースブロック129は、内部コマンドCMD_iに対応する動作を遂行することができる。
段階S250において、ホストインターフェースブロック128は、内部コマンドCMD_iが処理されたことを示す内部応答RES_iを内部NVMeドライバDR_iに提供することができる。
段階S260において、内部NVMeドライバDR_iは、内部応答RES_iに応答して、内部出力OUT_i(例えば、内部I/Oに対する結果)を内部アプリケーションAPP_iに提供することができる。
上述したように、ホスト装置110から発行されるホストI/O及びストレージコントローラCTRLから発行された内部I/Oは、両方ともストレージ装置120のホストインターフェースブロック128、FTL123及びメモリインターフェースブロック129を介して処理され得る。すなわち、ホストI/O及び内部I/Oが同じI/O経路を通って処理されるため、内部I/O処理を別途の専用ドライバ及び専用インターフェースに対する設計負担を軽減することができる。
図5は、図1のFTLを示すブロック図である。一実施形態では、図5を参照して、FTL123の少なくとも一部の機能がハードウェアで実現されるか、又は自動化される実施形態が説明されているが、本発明の範囲はこれに限定されるものではない。例えば、FTL123はソフトウェアで実現され、ストレージコントローラCTRLのCPU121によって駆動される。
図1及び図5を参照すると、FTL123は、FTLアクセラレータ123a、読み取りバッファ回路123b、書き込みバッファ回路123c及びエラーマネージャー123dを含み得る。一実施形態では、FTLアクセラレータ123a、読み取りバッファ回路123b、書き込みバッファ回路123c及びエラーマネージャー123dのそれぞれは、FTL123の少なくとも一部の機能を自動化するように構成されるハードウェア回路として実装され得る。
FTLアクセラレータ123aは、FTL123のアドレスマッピング又はブロック割り当てなどのような機能を自動化するように構成されるハードウェア回路であり得る。FTLアクセラレータ123aは、NVMeエンジン128bから提供される情報に基づいてアドレスマッピング又はブロック割り当てを遂行することができる。例えば、FTLアクセラレータ123aは、NVMeエンジン128bから提供される論理アドレスを不揮発性メモリ装置119の物理アドレスに変換することができる。変換された物理アドレスに関する情報は、メモリインターフェースブロック129に提供されてもよい。
読み取りバッファ回路123bは、ストレージ装置120の読み取り動作に関連するデータ経路を自動化するように構成されるハードウェア回路であり得る。例えば、読み取りバッファ回路123bは、メモリインターフェースブロック129から提供される読み取りデータを一時的に格納し、一時的に格納された読み取りデータをNVMeエンジン128bに伝達するように構成されるハードウェア回路であり得る。
書き込みバッファ回路123cは、ストレージ装置120の書き込み動作に関連するデータ経路を自動化するように構成されるハードウェア回路であり得る。例えば、書き込みバッファ回路123cは、NVMeエンジン128bから提供される書き込みデータを一時的に格納し、一時的に格納された書き込みデータをメモリインターフェースブロック129に伝達するように構成されるハードウェア回路であり得る。
エラーマネージャー123dは、FTL123の動作中に発生する多様なエラー状況(例えば、データハザード(data hazard))を処理するように構成されるハードウェア回路であり得る。
一実施形態では、読み取りバッファ回路123b、書き込みバッファ回路123c及びエラーマネージャー123dは、FTLアクセラレータ123aの制御に応じて互いにデータ又は情報をやり取りすることができる。
上述したように、FTL123は、一部の機能又は全体の機能を自動化するように構成されるハードウェア回路を介して実現され得る。この場合、FTL123がソフトウェアで実現されている場合と比較して、改善された性能を提供することができる。
一実施形態では、ハードウェア回路を介して自動化されたFTL123は、ホストインターフェースブロック128(又はNVMeエンジン128b)とメモリインターフェースブロック129との間で最適化されるように設計され得る。このとき、図2の実施形態のように、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行される内部I/Oが、専用ドライバdr_dを介してFTL123に直接提供される場合、既存の最適化されたFTL123に対する再設計が要求されるか、又はFTL123の性能が最適化されない可能性がある。
一方、図3の実施形態のように、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行される内部I/Oが、内部NVMeドライバDR_iを介してNVMeエンジン128bに提供される場合、FTL123は、NVMeエンジン128bを介して内部I/Oに関する情報を提供されるため、自動化されたFTL123に対する別途の再設計負担を軽減することができ、自動化されたFTL123の最適の性能を保障することができる。
図6は、図1のストレージシステムを示すブロック図である。ストレージシステム100の内部構成及び動作については前述したため、これに対する詳細な説明は省略する。
図6の実施形態では、内部NVMeドライバDR_iは、物理ポート128aと通信するように構成されてもよい。この場合、第3インターフェースIF3は、第1インターフェースIF1と同じ通信規約を有するか、又は同じ信号ラインを含むように構成され得る。一実施形態では、物理ポート128aはシステムバスBUSに連結されるように構成され、内部NVMeドライバDR_iは、システムバスBUSを介して物理ポート128aと通信することができる。一実施形態では、物理ポート128aは、ホストNVMeドライバDR_hと通信するように構成される第1信号ピン、及び内部NVMeドライバDR_iと通信するように構成される第2信号ピンを含み得る。あるいは、物理ポート128aは、ホストNVMeドライバDR_h及び内部NVMeドライバDR_iと共有される共有信号ピンを含み得る。
図6の実施形態のように、内部NVMeドライバDR_iが物理ポート128aと直接通信する場合、内部NVMeドライバDR_iは、ホストNVMeドライバDR_hと同じハードウェアレイヤー又は同じソフトウェアレイヤーを有し得る。内部NVMeドライバDR_iが物理ポート128aと直接通信するため、内部NVMeドライバDR_iとNVMeエンジン128bとの間の通信仮想化に対する設計負担を軽減することができる。
図7A及び図7Bは、図1のストレージ装置によって管理される記憶空間を説明するための図である。説明の便宜のために、ストレージ装置120の記憶空間の概念図が示されているが、本発明の範囲はこれに限定されるものではない。
まず、図1、図3、図6及び図7Aを参照すると、NVMeエンジン128bは、物理ポート128aを介してホスト装置110から発行されるホストI/O又は内部アプリケーションAPP_iによって発行される内部I/Oを受信することができる。あるいは、NVMeエンジン128bは、内部アプリケーションAPP_iによって発行される内部I/Oを直接受信することができる。
NVMeエンジン128bは、不揮発性メモリ装置119の記憶空間を第1名前空間(namespace)NS1及び第2名前空間NS2として管理することができる。一実施形態では、名前空間は、不揮発性メモリ装置119の記憶空間のうち、論理ブロックでフォーマットされ得る不揮発性メモリのサイズを指すことができる。
第1名前空間NS1は、ホスト装置110のホストアプリケーションAPP_hに対して割り当てられ、第2名前空間NS2は、ストレージコントローラCTRLの内部アプリケーションAPP_iに対して割り当てられる。この場合、NVMeエンジン128bは、ホストI/Oを第1名前空間NS1で処理することができ、内部I/Oを第2名前空間NS2で処理することができる。
一実施形態では、内部アプリケーションAPP_iが、ホストアプリケーションAPP_hによって管理されるデータにアクセスすることができる。この場合、NVMeエンジン128bは、内部アプリケーションAPP_iによって発行される内部I/Oを第1名前空間NS1で処理することができる。あるいは、ホストアプリケーションAPP_hは、内部アプリケーションAPP_iによって管理されるデータにアクセスすることができる。この場合、NVMeエンジン128bは、ホストアプリケーションAPP_hによって発行されるホストI/Oを第2名前空間NS2で処理することができる。
すなわち、本発明の実施形態によれば、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行される内部I/Oが、NVMeエンジン128bを介して処理されるため、追加の設計を負担することなく、内部アプリケーションAPP_iとホストアプリケーションAPP_hとの間のデータ交換が可能である。
次に、図1、図3、図6及び図7Bを参照すると、NVMeエンジン128bは、第1NVMeエンジン128b-1と、第2NVMeエンジン128b-2に分けられる。第1NVMeエンジン128b-1は、物理ポート128aを介してホストNVMeドライバDR_hからホストI/O又はホストコマンドを受信することができる。第1NVMeエンジン128b-1は、受信されたホストI/O又はホストコマンドを処理し、第1名前空間NS1を管理するように構成される。第2NVMeエンジン128b-2は、内部NVMeドライバDR_iから内部I/O又は内部コマンドを直接受信するか、又は物理ポートPTを介して受信することができる。第2NVMeエンジン128b-2は、受信された内部I/O又は内部コマンドを処理し、第2名前空間NS2を管理するように構成され得る。
一実施形態では、第1NVMeエンジン128b-1及び第2NVMeエンジン128b-2は、第3名前空間NS3を共に管理又は共有することができる。一実施形態では、第3名前空間NS3は、内部アプリケーションAPP_iとホストアプリケーションAPP_hとの間で共有されるデータを管理するように構成される記憶空間であり得る。この場合、第3名前空間NS3を通じて内部アプリケーションAPP_iとホストアプリケーションAPP_hとの間でデータを共有し得る。
一実施形態では、第1NVMeエンジン128b-1及び第2NVMeエンジン128b-2は、シングルルートI/O仮想化及び共有化(SR-IOV:Single Root I/O Virtualization and Sharing)を支援するように構成される。第1NVMeエンジン128b-1及び第2NVMeエンジン128b-2のうちの一方は、SR-IOV機能を支援するPCI-express機能である物理機能(PF:物理的機能)であってもよく、もう一方は物理機能によって支援される仮想機能(VF:virtual function)であってもよい。一実施形態では、物理機能PF及び仮想機能VFのNVMサブシステムを共有するNVMeコントローラを支援することができる。
図7A及び図7Bを参照して、ホストコマンド及び内部コマンドが、異なる名前空間に対して処理されることを説明したが、本発明の範囲はこれに限定されるものではない。例えば、NVMeエンジン128bは、不揮発性メモリ装置119を不揮発性メモリセット(NVM set)に分けて管理することができ、ホストコマンド及び内部コマンドは、異なる不揮発性メモリセットに対して処理される。不揮発性メモリセットは、不揮発性メモリ装置119において論理的又は物理的に区切られた不揮発性メモリの集合を指すことができる。一実施形態では、1つの不揮発性メモリセットは、1つ以上の名前空間を含み得る。
図8は、本発明の実施形態によるストレージシステムを示すブロック図である。説明の便宜のために、前述された構成要素に対する詳細な説明は省略する。
一実施形態では、ホスト装置110は、ホスト転送キューSQ_h及びホスト完了キューCQ_hを含むホストメモリ112を有し得る。ホスト転送キューSQ_h及びホスト完了キューCQ_hは、ホストアプリケーションAPP_hによって発行されるホストI/Oを処理するために使用され得る。
例えば、ホストNVMeドライバDR_hは、ホストアプリケーションAPP_hによって発行されるホストI/Oに対応するホストコマンドをホスト転送キューSQ_hにキューイングすることができる。以後、ホストNVMeドライバDR_hは、第1インターフェースIF1を介してNVMeエンジン128bにドアベルシグナリングを転送又は記入することができる。NVMeエンジン128bは、ドアベルシグナリングに応答して、ホストメモリ112のホスト転送キューSQ_hからホストコマンドをフェッチすることができる。NVMeエンジン128bは、フェッチされたホストコマンドを処理し、フェッチされたホストコマンドが処理されたことを示す完了情報をホストメモリ112のホスト完了キューCQ_hにキューイングすることができる。以後、NVMeエンジン128bは、ホストNVMeドライバDR_hに割り込み(インタラプト)を送ることができる。ホストNVMeドライバDR_hは、割り込みに応答して、ホストメモリ112のホスト完了キューCQ_hに格納された完了情報を確認することができる。以後、ホストNVMeドライバDR_hは、完了情報を確認した(又はホスト完了キューCQ_hが解除されたこと)ことを知らせるドアベルをNVMeエンジン128bに転送することができる。
上述したように、ホストアプリケーションAPP_hによって発行されるホストI/Oは、第1インターフェースIF1に対応する規約であるNVMe標準規格によって処理される。しかしながら、本発明の範囲はこれに限定されず、ホストアプリケーションAPP_hによって発行されるホストI/Oは、他の多様なインターフェース標準規格に基づいて処理される。
一実施形態では、ストレージコントローラCTRLのコントローラメモリ124は、内部転送キューSQ_i及び内部完了キューCQ_iを含み得る。内部転送キューSQ_i及び内部完了キューCQ_iは、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行されるI/Oを処理するために使用され得る。
例えば、ストレージコントローラCRTLの内部アプリケーションAPP_iによって発行される内部I/Oは、内部NVMeドライバDR_iを介して処理されてもよい。内部NVMeドライバDR_iは、内部I/Oに対応する内部コマンドを、NVMeエンジン128bを介してコントローラメモリ124の内部転送キューSQ_iにキューイングすることができる。これと共に、内部NVMeドライバDR_iは、NVMeエンジン128bにドアベルシグナリングを提供することができる。NVMeエンジン128bは、ドアベルシグナリングに応答して、コントローラメモリ124の内部転送キューSQ_iにキューイングされた内部コマンドを処理し、これに対する完了情報を内部NVMeドライバDR_iに提供することができるか、又は完了情報をコントローラメモリ124の内部完了キューCQ_iに格納することができる。
上述したように、ホストアプリケーションAAP_hによって発行されるホストI/Oは、ホスト装置110のホストメモリ112に含まれるホスト転送キューSQ_h及びホスト完了キューCQ_hを介して処理される。内部アプリケーションAPP_iによって発行される内部I/Oは、ストレージコントローラCTRLのコントローラメモリ124に含まれる内部転送キューSQ_i及び内部完了キューCQ_iを介して処理される。
一実施形態では、NVMeエンジン128bの観点から、ホストアプリケーションAAP_hによって発行されるホストI/Oは、ホストメモリバッファ(HMB:host memory buffer)機能に基づいて処理されることがあり、内部アプリケーションAPP_iによって発行される内部I/Oは、コントローラメモリバッファ(CMB:controller memory buffer)機能に基づいて処理される。
図9は、本発明の実施形態によるストレージシステムを示すブロック図である。説明の便宜上、いくつかの構成要素が省略されているが、本発明の範囲はこれに限定されるものではない。図9を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。ホスト装置110及びストレージ装置120の内部構成及び動作は、前述されたものと同様であるため、これに対する詳細な説明は省略する。
図9の実施形態では、内部NVMeドライバDR_iは、コントローラメモリ124の内部転送キューSQ_iと内部完了キューCQ_iに直接アクセスすることができる。例えば、図8の実施形態では、内部NVMeドライバDR_iは、NVMeエンジン128bを介してコントローラメモリ124の内部転送キューSQ_iに内部コマンドをキューイングすることができる。一方、図9の実施形態では、内部NVMeドライバDR_iは、コントローラメモリ124の内部転送キューSQ_i及び内部完了キューCQ_iに直接アクセスすることができる。
この場合、内部NVMeドライバDR_iは、第2インターフェースIF2を介して、ホストNVMeドライバDR_hと類似した方式に基づいて内部コマンドを処理することができる。例えば、内部NVMeドライバDR_iは、コントローラメモリ124の内部転送キューSQ_iに内部コマンドをキューイングし、NVMeエンジン128bにドアベルシグナリングを転送又は記入することができる。NVMeエンジン128bは、ドアベルシグナリングに応答して、コントローラメモリ124の内部転送キューSQ_iから内部コマンドをフェッチし、フェッチされた内部コマンドを処理することができる。NVMeエンジン128bは、フェッチされた内部コマンドに対する処理が完了したことを示す完了情報をコントローラメモリ124の内部完了キューCQ_iに記入し、内部NVMeドライバDR_iに割り込みを送ることができる。内部NVMeドライバDR_iは、割り込みに応答して、コントローラメモリ124の内部完了キューCQ_iに記入された完了情報を確認することができる。
上述したように、NVMeエンジン128bの観点から、ホストアプリケーションAAP_hによって発行されるホストI/O、及び内部アプリケーションAPP_iによって発行される内部I/Oは、ホストメモリバッファ(HMB:host memory buffer)機能に基づいて処理される。この場合、コントローラメモリ124の一部の領域(例えば、内部転送キューSQ_i及び内部完了キューCQ_iを含む領域)は、NVMeエンジン128bによってホストメモリバッファ(HMB)と類似した機能を有する領域として認識され得る。
一実施形態では、コントローラメモリ124は、コントローラバッファ領域をさらに含み得る。コントローラバッファ領域は、ストレージコントローラCTRLが動作するために必要な多様な情報を格納するか、又は読み取りデータ及び書き込みデータを一時的に格納するように構成され得る。一実施形態では、内部転送キューSQ_i及び内部完了キューCQ_iは、コントローラメモリ124において、コントローラバッファ領域と物理的又は論理的に区切られた領域であり得る。
例えば図9の実施形態では、内部転送キューSQ_i、内部完了キューCQ_i及びコントローラバッファ領域が、同じコントローラメモリ124に含まれるように示されているが、本発明の範囲はこれに限定されるものではない。例えば、内部転送キューSQ_i及び内部完了キューCQ_iは、コントローラメモリ124と物理的に分離される別途のメモリに含まれてもよく、別途のメモリはシステムバスBUS又は専用チャネルを介して内部NVMeドライバDR_iと通信することができる。
図10は、本発明の実施形態によるストレージシステムを示すブロック図である。説明の便宜のために、前述された構成要素に対する詳細な説明は省略する。図10を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。ホスト装置110及びストレージ装置120のそれぞれの構成及び動作については前述したため、これに対する詳細な説明は省略する。
図8の実施形態又は図9の実施形態とは異なり、図10の実施形態では、ホスト転送キューSQ_h及びホスト完了キューCQ_hは、ストレージコントローラCTRLのコントローラメモリ124に含まれてもよい。すなわち、ホスト装置110は、ホストアプリケーションAPP_hによって発行されるホストI/Oをコントローラメモリ124のホスト転送キューSQ_h及びホスト完了キューCQ_hを用いて処理することができる。一実施形態では、ホスト装置110とストレージ装置120との間の第1インターフェースIF1がNVMe標準規格に基づいている場合、ホスト装置110は、NVMe標準規格に定義されたコントローラメモリバッファ(CMB:controller memory buffer)機能に基づいてホストI/Oを処理するように構成される。
上述したように、ホストNVMeドライバDR_h及び内部NVMeドライバDR_iは、同じNVMeエンジン128bを共有するため、NVMeエンジン128bは、ホストNVMeドライバDR_hに関連するホストI/O及び内部NVMeドライバDR_iに関連する内部I/Oを効率的に処理できる。例えば、内部アプリケーションAPP_iによって発行される内部I/Oが、NVMeエンジン128bを経由せず、FTL223を介して直接処理される場合、NVMeエンジン128bは、内部I/Oへのコマンドアービトレーション(command arbitration)を遂行することができない。この場合、内部I/OとホストI/Oとの間のコマンド処理遅延、ハザードケース(hazard case)が発生する可能性がある。一方、内部アプリケーションAPP_iによって発行される内部I/Oが、NVMeエンジン128bを介して処理される場合、NVMeエンジン128bは、ホスト転送キューSQ_h及び内部転送キューSQ_iの両方を管理するため、ホストI/O及び内部I/Oのそれぞれの優先順位に基づいて適切なコマンドアービトレーション(command arbitration)を遂行することができる。この場合、ストレージ装置220の全体的な性能が向上する。
前述された実施形態では、ホスト転送キューSQ_h、ホスト完了キューCQ_h、内部転送キューSQ_i、内部完了キューCQ_iなどが説明されたが、本発明の範囲はこれに限定されるものではない。ホストメモリ112又はコントローラメモリ124は、ストレージ装置120に対する多様な管理動作のためにホスト装置110によって発行されるホスト管理コマンド(admin command)をキューイングするように構成されるホスト管理キュー(admin queue)、管理コマンドに対する完了情報をキューイングするように構成されるホスト管理完了キュー(admin completion queue)をさらに含み得る。あるいは、ホストメモリ112又はコントローラメモリ124は、ストレージ装置120に対する多様な管理動作のためにストレージコントローラCTRLによって発行される内部管理コマンド(admin command)をキューイングするように構成される内部管理キュー(admin queue)、内部管理コマンドに対する完了情報をキューイングするように構成される内部管理完了キュー(admin completion queue)をさらに含み得る。
図11は、本発明の実施形態によるストレージシステムを示すブロック図である。説明の便宜上、いくつかの構成要素が省略されているが、本発明の範囲はこれに限定されるものではない。図11を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。ホスト装置110及びストレージ装置120の構成要素は前述されたため、これに対する詳細な説明は省略する。
図11に示すように、ホスト装置110は、ホストアプリケーションAPP_hによって発行されるホストI/Oに対応する信号(例えば、ホストコマンド)をストレージコントローラCTRLの物理ポート128aに提供することができる。物理ポート128aを介して受信された信号は、内部アプリケーションAPP_iに提供されてもよい。内部アプリケーションAPP_iは、物理ポート128aを介して提供された信号(すなわち、ホストコマンド)を、内部NVMeドライバDR_iを介して処理する。
例えば、内部アプリケーションAPP_iは、多様な内部演算動作を遂行することができる。このとき、内部アプリケーションAPP_iによって発行される内部I/Oは、内部ファイルシステムFS_i及び内部NVMeドライバDR_iを介してNVMeエンジン128bに提供され得る。内部アプリケーションAPP_iは、物理ポート128aを介して受信された信号(すなわち、ホストコマンド)をさらに処理することができる。この場合、内部アプリケーションAPP_iは、受信された信号(すなわち、ホストコマンド)を、内部ファイルシステムFS_iを経由せずに、内部NVMeドライバDR_iを介してNVMeエンジン128bに提供することができる。これは、物理ポート128aを介して受信された信号(すなわち、ホストコマンド)は、ホストファイルシステムFS_hを通じて既に組織化された信号であるため、内部ファイルシステムFS_iを通じてさらに組織化する必要がないからである。
つまり、ストレージコントローラCTRLの内部アプリケーションAPP_iは、内部I/Oを内部ファイルシステムFS_i及び内部NVMeドライバDR_iを介して処理することができ、ホストI/O又はホストコマンドを、内部ファイルシステムFS_iを経由することなく、内部NVMeドライバDR_iを介して処理することができる。
図12は、図11のストレージコントローラの動作を示すフローチャートである。図11及び図12を参照すると、段階S212において、ストレージコントローラCTRLはホストコマンドCMD_hを受信するか、又は内部I/Oを生成することができる。例えば、ストレージコントローラCTRLは、物理ポート128aを介してホスト装置110からホストコマンドCMD_hを受信することができる。受信されたホストコマンドCMD_hは、内部アプリケーションAPP_iに伝達されてもよい。あるいは、ストレージコントローラCTRLは、内部I/Oを生成してもよい。前述したように、内部I/Oは、ストレージコントローラCTRLの内部アプリケーションAPP_iによって発行されてもよい。一実施形態では、内部アプリケーションAPP_iは、独自の演算動作のために内部I/Oを発行するか、又はホストコマンドCMD_hに応答して又はホストコマンドCMD_hを処理するために内部I/Oを発行することができる。
段階S222において、ストレージコントローラCTRLは、ホストコマンドCMD_h又は内部I/Oが内部動作に関連するものであるか否かを判定することができる。例えば、ストレージコントローラCTRLの処理される動作が、内部動作に関連するのか、ホスト動作(すなわち、ホストI/Oに対応する動作)であるかを判定することができる。一実施形態では、ストレージコントローラCTRLは、内部アプリケーションAPP_iによって発生される内部I/Oを内部動作に関連すると判定し、物理ポート128aを介して受信されたホストコマンドをホスト動作に関連するものと判定することができる。あるいは、ストレージコントローラCTRLは、処理される動作に関連する名前空間に基づいて、内部動作であるかホスト動作であるかを判定することができる。
処理される動作が内部動作に関連する場合、段階S232において、ストレージコントローラCTRLは、内部ファイルシステムFS_i及び内部NVMeドライバDR_iを使用して内部コマンドCMD_iを生成することができる。例えば、ストレージコントローラCTRLは、処理される動作に関する情報(例えば、内部I/O又はホストコマンド)を内部ファイルシステムFS_iで組織化し、組織化された情報を内部NVMeドライバ DR_iを介して第2インターフェースIF2に適した信号に変換することができる。
処理される動作が内部動作に関連していない場合、又は処理される動作がホスト動作に関連する場合、段階S242において、ストレージコントローラCTRLは、処理される動作に関する情報(例えば、ホストコマンド)を、内部ファイルシステムFS_iを経由せずに、内部NVMeドライバDR_iを使用して内部コマンドCMD_iを生成することができる。例えば、処理される動作が内部動作に関連していない場合、又は処理される動作がホスト動作に関連する場合、関連情報(例えば、ホストコマンド)は、ホストファイルシステムFS_hによって既に組織化された情報であり得る。一実施形態では、説明の便宜のために、内部NVMeドライバDR_iによって生成されるコマンドが、内部コマンドであると説明されているが、本発明の範囲はこれに限定されるものではない。
段階S252において、ストレージコントローラCTRLは、NVMeエンジン128b及びFTL123を使用して生成される内部コマンドCMD_iを処理することができる。すなわち、ホストI/Oに対応する動作及び内部I/Oに対応する動作の両方がNVMeエンジン128b及びFTL123を用いて処理されるため、ストレージ装置320の設計負担を軽減することができる。
図13は、本発明の実施形態によるストレージシステムを示す図である。説明の便宜のために、前述された構成要素に対する詳細な説明は省略する。図13を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。ストレージシステム100の構成要素は前述されたため、これに対する詳細な説明は省略する。
一実施形態では、内部アプリケーションAPP_iは、ホスト装置110の制御によって動作することができる。例えば、ホスト装置110は、物理ポート128aを介してストレージコントローラCTRLの内部アプリケーションAPP_iを制御するための情報、信号又はコマンドを提供することができる。NVMeエンジン128bは、物理ポート128aを介して受信された情報、信号又はコマンドを内部アプリケーションAPP_iに提供することができる。
一実施形態では、物理ポート128aを介して受信された情報、信号又はコマンドは、内部アプリケーションAPP_iに対するロード、実行、入力、出力などのように内部アプリケーションAPP_iを駆動するのに必要な動作に関連付けられる。内部アプリケーションAPP_iは、物理ポート128aを介して受信された情報、信号又はコマンドに応答して動作することができる。例えば、内部アプリケーションAPP_iは、受信された情報、信号又はコマンドに応答して内部I/Oを生成することができる。生成された内部I/Oは、内部ファイルシステムFS_i、内部NVMeドライバDR_i、内部NVMeエンジン128b、FTL123及びメモリインターフェースブロック429を介して処理される。
一実施形態では、物理ポート128aを介して受信された情報、信号又はコマンドがホスト動作(例えば、ストレージ装置120に対する読み取り動作、書き込み動作など)に関連する場合、NVMeエンジン128bは、物理ポート128aを介して受信された情報、信号又はコマンドを、内部アプリケーションAPP_iを経由せずに直接FLT123を介して処理することができる。
上述したように、ストレージ装置120はホスト装置110の制御によって内部アプリケーションAPP_iを駆動することができ、内部アプリケーションAPP_iによって発行される内部I/Oは、内部NVMeドライバDR_i及びNVMeエンジン128bを使用して処理される。
図14~図16は、ホスト装置の制御によるストレージ装置の動作(例えば、内部アプリケーション駆動)を説明するための図である。図面の簡潔さ及び説明の便宜のために、いくつかの構成要素は省略されているが、本発明の範囲はこれに限定されるものではない。
図14~図16を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。一実施形態では、ホスト装置110及びストレージ装置120は、所定のインターフェース標準規格に基づいて互いに通信することができる。所定のインターフェース標準規格はNVMeインターフェース標準規格であり得るが、本発明の範囲はこれに限定されるものではない。ストレージ装置520は、ストレージコントローラCTRL及び不揮発性メモリ装置119を含み得る。ストレージコントローラCTRLはコントローラメモリ124を含み得る。
コントローラメモリ124は、第1領域RG1及び第2領域RG2を含み得る。一実施形態では、第1領域RG1は、ストレージコントローラCTRLで駆動される内部アプリケーションAPP_iに関連する情報又はプログラムコードを格納するように構成され得る。第2領域RG2は、ストレージコントローラCTRLで駆動される内部アプリケーションAPP_iによって管理又は使用されるデータを格納するように構成され得る。
一実施形態では、第1及び第2の領域RG1、RG2は、コントローラメモリ124内で物理的又は論理的に区分される。一実施形態では、第1及び第2の領域RG1、RG2はストレージコントローラCTRLによって区分又は管理され、第1及び第2の領域RG1、RG2に関する情報はホスト装置110に提供される。一実施形態では、第1及び第2の領域RG1、RG2は、ホスト装置110によって管理又は区分されてもよい。ストレージシステム100の他の構成要素は、前述されたものと類似するため、これに対する詳細な説明は省略する。
一実施形態では、ホスト装置110は、ストレージ装置120で実行される内部アプリケーションをロードするように構成され得る。
例えば、図14に示すように、ホスト装置110は、第1アプリケーションAPP1又は第1アプリケーションAPP1に関連するプログラムコードを含み得る。ホスト装置110は、ロードコマンドLOAD及び第1アプリケーションAPP1をストレージコントローラCTRLに転送(A1段階)することにより、ストレージコントローラCTRLのコントローラメモリ124に、第1アプリケーションAPP1をロードすることができる。ホスト装置110から受信された第1アプリケーションAPP1は、ストレージコントローラCTRLのコントローラメモリ124の第1領域RG1に格納・駆動される。
あるいは、図15に示すように、第1アプリケーションAPP1は不揮発性メモリ装置119に格納されてもよい。この場合、ホスト装置110は、ストレージコントローラCTRLにロードコマンドLOADを転送(B1段階)することができる。ストレージコントローラCTRLは、ロードコマンドLOADに応答して、不揮発性メモリ装置119に格納された第1アプリケーションAPP1をコントローラメモリ124の第1領域RG1にロードする(B2段階)することができる。
一実施形態では、ストレージコントローラCTRLが不揮発性メモリ装置119から第1アプリケーションAPP1をロードする動作は、前述された内部I/O処理と類似した方式で遂行され得る。すなわち、ストレージコントローラCTRLは、ホスト装置110からのロードコマンドLOADに応答して、不揮発性メモリ装置119から第1アプリケーションAPP1をロードするための内部I/Oを生成し、生成された内部I/Oは、図1~図13を参照して説明された動作方法に基づいて処理され得る。より詳細な例として、内部I/Oは、ホスト装置110からロードコマンドLOADを受信するように構成されるストレージコントローラCTRLのホストインターフェースブロックを介して処理され得る。
一実施形態では、ストレージコントローラCTRLは、ホスト装置110の制御に従って内部アプリケーションを駆動して多様な動作を遂行するように構成され得る。例えば、図16に示すように、ホスト装置110は、第1読み取りコマンドREAD1をストレージコントローラCTRLに転送することができる(C1段階)。第1読み取りコマンドREAD1は、第1アプリケーションAPP1によって処理される第1データDT1を読み取るためのコマンドであり得る。ストレージコントローラCTRLは、第1読み取りコマンドREAD1に応答して、不揮発性メモリ装置119から第1データDT1を読み取ることができる(C2段階)。第1データDT1は、コントローラメモリ124の第2領域RG2に格納されてもよい。
一実施形態では、図16の第1読み取りコマンドREAD1は、ホスト装置110によるノーマル読み取り動作(例えば、ホスト装置110がストレージ装置120からデータを読み取るための動作)のためのノーマル読み取りコマンドと異なる場合がある。例えば、図16の第1読み取りコマンドREAD1は、ストレージコントローラCTRLによって駆動される第1アプリケーションAPP1により処理される第1データDT1をコントローラメモリ124の第2領域RG2にロードするためのコマンドであり得る。この場合、ストレージコントローラCTRLは、第1読み取りコマンドREAD1に応答して内部I/Oを生成し、図1~図13を参照して説明された動作方法に基づいて内部I/Oを処理することができる。
ホスト装置110は、ストレージコントローラCTRLに実行コマンドEXEを送ることができる(D1段階)。実行コマンドEXEは、ストレージコントローラCTRLによる第1アプリケーションAPP1の実行を開始するためのコマンドであり得る。ストレージコントローラCTRLは、実行コマンドEXEに応答して第1アプリケーションAPP1を実行することができる。例えば、ストレージコントローラCTRLの制御に応じて、第1データDT1を第1アプリケーションAPP1に提供することができる(D2段階)。第1アプリケーションAPP1は、第1データDT1に対する演算を遂行し、演算の結果として第2データDT2を生成及び出力することができる(D3段階)。第2データDT2は、コントローラメモリ124の第2領域RG2に格納されてもよい。
一実施形態では、第1アプリケーションAPP1がコントローラメモリ124に直接アクセスするように構成される場合(例えば、図9を参照して説明したのと同様に、第1アプリケーションAPP1を駆動する計算エンジンがコントローラメモリ124に直接アクセスできる場合)、第1アプリケーションAPP1又は計算エンジンは、別途の内部I/O生成なしにコントローラメモリ124にアクセスすることができる。あるいは、第1アプリケーションAPP1がコントローラメモリ124に直接アクセスできない場合(例えば、図8を参照して説明したのと同様に、第1アプリケーションAPP1を駆動する計算エンジンがNVMeエンジンを経由してコントローラメモリ124にアクセスできる場合)、第1アプリケーションAPP1又は計算エンジンは内部I/Oを生成し、生成された内部I/Oは図1~図13を参照して説明された方法に基づいて処理される。
ホスト装置110は、第2読み取りコマンドREAD2をストレージコントローラCTRLに転送することができる(E1段階)。ストレージコントローラCTRLは、第2読み取りコマンドREAD2に応答して、コントローラメモリ124の第2領域RG2に格納された第2データDT2をホスト装置110に転送することができる(E2段階)。一実施形態では、第2読み取りコマンドREAD2は、ストレージコントローラCTRLの内部アプリケーション(すなわち、第1アプリケーションAPP1)の介入なしに遂行される読み取り動作であり得る。
上述したように、本発明の実施形態によるストレージ装置は、多様な演算動作を遂行するように構成される内部アプリケーションを駆動することができる。このとき、内部アプリケーションによって発行される内部I/Oは、内部NVMeドライバを介してNVMeエンジンに提供される。すなわち、ストレージ装置内で駆動される内部アプリケーションが、ホスト装置とNVMeエンジンを共有するため、追加の設計負担なしにホストI/O及び内部I/Oを効率的に処理することができる。
図17は、本発明の実施形態によるストレージシステムを示すブロック図である。前述された実施形態では、ストレージ装置は、1つのストレージコントローラCTRLを介して内部アプリケーションAPP_iを実行することによって、多様な演算動作を遂行し、不揮発性メモリ装置119を制御する。しかしながら、本発明の範囲はこれに限定されず、ストレージ装置は、演算動作を遂行するように構成される演算コントローラを別途に設けることができる。
図17を参照すると、ストレージシステム100は、ホスト装置110及びストレージ装置120を含み得る。一実施形態では、ストレージ装置120は、演算機能を有する計算ストレージ装置(computational storage device)であり得る。
ホスト装置110は、計算ストレージ装置120に格納されたデータを読み取るか、又は計算ストレージ装置120にデータを格納するように構成されてもよい。あるいは、ホスト装置110は、計算ストレージ装置120が特定の演算動作を遂行するように、計算ストレージ装置120に演算要請を提供することができる。
計算ストレージ装置120は、演算コントローラ1211(例えば、演算プロセッサ)、ストレージコントローラCTRL、第1メモリ1221、第2メモリ1222及び不揮発性メモリ装置119を含み得る。
演算コントローラ1211は、ホスト装置110の要請に応じて動作することができる。例えば、演算コントローラ1211は、ホスト装置110の要請に従って演算動作を遂行するか、又はホスト装置110の要請をストレージコントローラCTRLに伝達するように構成され得る。一実施形態では、演算コントローラ1211は、ホスト装置110と所定のインターフェースを介して通信することができる。所定のインターフェースは、NVMe標準規格に準拠したインターフェースであり得るが、本発明の範囲はこれに限定されるものではない。この場合、ホスト装置110は、演算コントローラ1211のNVMeドライバDR_hcと通信するように構成されるNVMeドライバDR_hを含み得る。
第1メモリ1221は、演算コントローラ1211のバッファメモリ又は動作メモリとして使用されてもよい。例えば、第1メモリ1221は、演算コントローラ1211によって実行される内部アプリケーションに対するプログラムコードを格納するか、又は演算コントローラ1211によって使用又は管理されるデータを格納するように構成され得る。
ストレージコントローラCTRLは、演算コントローラ1211からの要請又はコマンドに基づいて不揮発性メモリ装置119を制御するように構成され得る。一実施形態では、ストレージコントローラCTRLは、演算コントローラ1211とNVMeインターフェース標準規格による通信を遂行することができる。すなわち、ストレージコントローラCTRLは、ホスト装置110によって発生されるホストI/O、及び演算コントローラ1211によって発生される内部I/Oを同じ経路を通って処理するように構成される。
図18は、本発明の実施形態によるストレージシステムを示すブロック図である。図18を参照すると、ストレージ装置120(例えば、計算ストレージ装置)は、演算コントローラ1211、ストレージコントローラCTRL、メモリ2220、及び不揮発性メモリ装置119を含み得る。ホスト装置110及び計算ストレージ装置120の構成要素については前述したため、これに対する詳細な説明は省略する。
一実施形態では、演算コントローラ1211及びストレージコントローラCTRLは、メモリ2220を共有するように構成され得る。この場合、演算コントローラ1211及びストレージコントローラCTRLは、メモリ2220を介してデータを交換することができる。演算コントローラ1211及びストレージコントローラCTRLがメモリ2220を共有することを除けば、ストレージシステム100の動作は前述されたのと同様であるため、これに対する詳細な説明は省略する。
図19は、本発明の実施形態によるストレージシステムを示すブロック図である。図19を参照すると、ストレージ装置120(例えば、計算ストレージ装置)は、演算コントローラ1211、ストレージコントローラCTRL、メモリ1222及び不揮発性メモリ装置119を含み得る。ホスト装置110及び計算ストレージ装置120の構成要素については前述したため、これに対する詳細な説明は省略する。
一実施形態では、ストレージコントローラCTRLは、第2メモリ1222にアクセスするように構成されてもよく、演算コントローラ1211はストレージコントローラCTRLを経由してメモリ1222にアクセスするように構成されてもよい。残りの動作は前述したのと同様であるため、これに対する詳細な説明は省略する。
図20は、本発明の実施形態によるストレージシステムを示すブロック図である。図20を参照すると、ストレージ装置120(例えば、計算ストレージ装置)は、演算コントローラ1211、ストレージコントローラCTRL、第1メモリ1221、第2メモリ1222及び不揮発性メモリ装置119を含み得る。ホスト装置110及び計算ストレージ装置120の構成要素については前述したため、これに対する詳細な説明は省略する。
一実施形態では、ホスト装置110は、計算ストレージ装置120の演算コントローラ1211及びストレージコントローラCTRLのそれぞれと個別に通信することができる。例えば、ホスト装置110は、第1インターフェースに基づいてストレージコントローラCTRLと通信することにより、不揮発性メモリ装置119に格納されたデータを読み取るか、又は不揮発性メモリ装置119にデータを格納することができる。
ホスト装置110は、第3インターフェースに基づいて演算コントローラ1211と通信することにより、演算コントローラ1211を制御することができる。演算コントローラ1211は、ホスト装置110の制御に応じて、内部アプリケーションを駆動したり、内部アプリケーションの駆動に応じた結果データをホスト装置110に転送したりすることができる。
一実施形態では、ストレージコントローラCTRLは、NVMe標準規格に従って通信を支援するように構成されるNVMeエンジンを含み得る。ホスト装置110はホストNVMeドライバを含むことができ、ホストNVMeドライバはストレージコントローラCTRLのNVMeエンジンと通信することができる。演算コントローラ1211は内部NVMeドライバを含むことができ、内部NVMeドライバはストレージコントローラCTRLのNVMeエンジンと通信することができる。すなわち、ホスト装置110及び演算コントローラ1211は、ストレージコントローラCTRLのNVMeエンジン(又はホストインターフェースブロック)を共有するように構成されてもよい。
図21は、本発明の実施形態によるストレージシステムを示すブロック図である。図21を参照すると、ストレージ装置120(例えば、計算ストレージ装置)は、演算コントローラ1211、ストレージコントローラCTRL、第1メモリ1221、第2メモリ1222、スイッチ5230及び不揮発性メモリ装置119を含み得る。ホスト装置110及び計算ストレージ装置120の構成要素については前述したため、これに対する詳細な説明は省略する。
一実施形態では、ホスト装置110は、計算ストレージ装置120のスイッチ5230と通信するように構成されてもよい。スイッチ5230は、ホスト装置110から受信された情報(例えば、コマンド、データなど)を演算コントローラ1211又はストレージコントローラCTRLに提供するか、又は演算コントローラ1211及びストレージコントローラCTRLから受信された情報(例えば、データ)をホスト装置110に伝達するように構成されてもよい。例えば、ホスト装置110から受信された情報(例えば、コマンド、データなど)が演算コントローラ1211に関連する場合、スイッチ5230はホスト装置110から受信された情報を演算コントローラ1211で提供することができる。演算コントローラ1211は、受信された情報に応答して、対応する演算動作を遂行することができる。一実施形態では、スイッチ5230は、PCIe信号をスイッチング又はルーティングするように構成されるPCIeスイッチであり得る。
一実施形態では、演算コントローラ1211の演算動作は、ストレージコントローラCTRLを経由して遂行されてもよく、この場合、演算コントローラ1211から発行される内部I/Oに対応する内部コマンドは、ストレージコントローラCTRLのNVMeエンジンにより処理され得る。一実施形態では、演算コントローラ1211とストレージコントローラCTRLはスイッチ5230を介して互いに通信することができる。あるいは、演算コントローラ1211とストレージコントローラCTRLは、別途の通信チャネルを介して互いに通信することができる。
上述したように、本発明の実施形態によるストレージ装置は、多様な演算動作を内部的に遂行するように構成される計算ストレージ装置であり得る。計算ストレージ装置は、演算コントローラ及びストレージコントローラを含み得る。演算コントローラは、計算ストレージ装置の内部で多様な演算を遂行するように構成されるか、又は多様な演算を支援する内部アプリケーションを駆動するように構成されてもよい。ストレージコントローラは、計算ストレージ装置に含まれる不揮発性メモリ装置にアクセスするように構成されてもよい。このとき、演算コントローラとホスト装置は、ストレージコントローラのホストインターフェースブロックを互いに共有することができ、これにより、追加の設計を負担することなく、計算ストレージ装置の性能が向上する。
図17~図21を参照して、計算ストレージ装置が2つのコントローラ(例えば、演算コントローラ及びストレージコントローラ)を含む実施形態が説明されたが、本発明の範囲はこれに限定されるものではない。例えば、前述したように、計算ストレージ装置は、異なる演算機能を遂行するように構成される複数の演算コントローラ、及び不揮発性メモリ装置にアクセスするように構成されるストレージコントローラを含み得る。あるいは、計算ストレージ装置は、多様な演算機能及び不揮発性メモリ装置へのアクセスを遂行するように構成される統合コントローラを含み得る。したがって、前述された実施形態は単なる例示であり、本発明の範囲はこれに限定されるものではないことを理解するはずであろ。
図22は、本発明の実施形態によるストレージコントローラと不揮発性メモリ装置との間の通信を説明するための図である。図22を参照して、ストレージコントローラCTRLと不揮発性メモリ装置119との間の1つの通信チャネル60が説明されるが、本発明の範囲はこれに限定されず、ストレージコントローラCTRL及び他の不揮発性メモリ装置は、図22を参照して説明されたチャネルと同様の他のチャネル(すなわち、複数のチャネル)を介して互いに通信することができる。
ストレージコントローラCTRLは、第1インターフェース回路IFC_1を含み得る。一実施形態では、第1インターフェース回路IFC_1は、前述されたメモリインターフェースブロックに含まれる回路であり得る。
第1インターフェース回路IFC_1は、第1~第8の信号ピンP11~P18を含み得る。ストレージコントローラCTRLは、第1インターフェース回路IFC_1の複数の信号ピンP11~P18を介して多様な信号を不揮発性メモリ装置119に転送することができる。例えば、ストレージコントローラCTRLは、第1ピンP11を介してチップイネーブル信号nCEを不揮発性メモリ装置119に転送することができ、第2ピンP12を介してコマンドラッチイネーブル信号CLEを不揮発性メモリ装置119に転送することができ、第3ピンP13を介してアドレスラッチイネーブル信号ALEを不揮発性メモリ装置119に転送することができ、第4ピンP14を介して書き込みイネーブル信号nWEを不揮発性メモリ装置119に転送することができ、第5ピンP15を介して読み取りイネーブル信号nREを不揮発性メモリ装置119に転送することができ、第6ピンP16を介してデータストローブ信号DQSを不揮発性メモリ装置119とやり取りすることができ、第7ピンP17を介してデータ信号DQを不揮発性メモリ装置119とやり取りすることができ、第8ピンP18を介してレディ信号(又はビジー信号)nR/Bを不揮発性メモリ装置119から受信することができる。一実施形態では、第7ピンP17は、実施方式に応じて複数のピンを含み得る。
不揮発性メモリ装置119は、第2インターフェース回路IFC_2、制御ロジック回路CL及びメモリセルアレイMCAを含み得る。第2インターフェース回路IFC_2は、第1~第8の信号ピンP21~P28を含み得る。第2インターフェース回路IFC_2は、第1~第8のピンP21~P28を介してストレージコントローラCTRLから多様な信号を受信することができる。ストレージコントローラCTRLと不揮発性メモリ装置119との間の多様な信号については前述したため、これに対する詳細な説明は省略する。
第2インターフェース回路IFC_2は、書き込みイネーブル信号nWEのトグルタイミングに基づいてコマンドラッチイネーブル信号CLEのイネーブル区間(例えばハイレベル状態)で受信されるデータ信号DQからコマンドCMDを獲得することができる。第2インターフェース回路IFC_2は、書き込みイネーブル信号nWEのトグルタイミングに基づいてアドレスラッチイネーブル信号ALEのイネーブル区間(例えばハイレベル状態)で受信されるデータ信号DQからアドレスADDRを獲得することができる。
一実施形態では、書き込みイネーブル信号nWEは、固定(static)状態(例えば、ハイ(high)レベル又はロー(low)レベル)を維持してから、ハイレベルとローレベルとの間でトグルすることができる。例えば、書き込みイネーブル信号nWEは、コマンドCMD又はアドレスADDRが転送される区間でトグルすることができる。したがって、第2インターフェース回路IFC_2は、書き込みイネーブル信号nWEのトグルタイミングに基づいてコマンドCMD又はアドレスADDRを獲得することができる。
不揮発性メモリ装置119のデータDATA出力動作において、第2インターフェース回路IFC_2は、データDATAを出力する前に第5ピンP15を介してトグルする読み取りイネーブル信号nREを受信することができる。第2インターフェース回路IFC_2は、読み取りイネーブル信号nREのトグリングに基づいてトグルするデータストローブ信号DQSを生成することができる。例えば、第2インターフェース回路IFC_2は、読み取りイネーブル信号nREのトグリングスタート時間を基準に所定のディレイ(例えば、tDQSRE)後に、トグルし始めるデータストローブ信号DQSを生成することができる。第2インターフェース回路IFC_2は、データストローブ信号DQSのトグルタイミングに同期してデータDATAを含むデータ信号DQを送ることができる。これにより、データDATAは、データストローブ信号DQSのトグルタイミングに合わせてストレージコントローラCTRLに転送され得る。
不揮発性メモリ装置119のデータDATA入力動作において、メモリインターフェース回路IFC_2は、ストレージコントローラCTRLからデータDATAを含むデータ信号DQと共にトグルするデータストローブ信号DQSを受信することができる。第2インターフェース回路IFC_2は、データストローブ信号DQSのトグルタイミングに基づいてデータ信号DQからデータDATAを獲得することができる。例えば、第2インターフェース回路IFC_2は、データストローブ信号DQSの立ち上がりエッジと立ち下がりエッジでデータ信号DQをサンプリングすることによってデータDATAを獲得することができる。
第2インターフェース回路IFC_2は、第8ピンP18を介してレディ/ビジー出力信号nR/BをストレージコントローラCTRLに転送することができる。不揮発性メモリ装置119がビジー状態である場合(すなわち、内部動作が遂行中である場合)、第2インターフェース回路IFC_2は、ビジー状態を示すレディ/ビジー出力信号nR/BをストレージコントローラCTRLに転送することができる。不揮発性メモリ装置119がレディ状態である場合(すなわち、内部動作が行われないか完了した場合)、第2インターフェース回路IFC_2は、レディ状態を示すレディ/ビジー出力信号nR/Bをメモリコントローラ400に送ることができる。
制御ロジック回路CLは、不揮発性メモリ装置119の各種動作を全体的に制御することができる。制御ロジック回路CLは、第2インターフェース回路IFC_2から獲得されたコマンド/アドレスCMD/ADDRを受信することができる。制御ロジック回路CLは、受信されたコマンド/アドレスCMD/ADDRに従って不揮発性メモリ装置119の他の構成要素を制御するための制御信号を生成することができる。
メモリセルアレイMCAは、制御ロジック回路CLの制御に従って第2インターフェース回路IFC_2から獲得されたデータDATAを格納することができる。メモリセルアレイMCAは、制御ロジック回路CLの制御に従って格納されたデータDATAを第2インターフェース回路IFC_2に出力することができる。
メモリセルアレイMCAは、複数のメモリセルを含み得る。例えば、複数のメモリセルは、フラッシュメモリセルであり得る。しかし、本発明はこれに限定されず、メモリセルは、RRAM(Resistive Random Access Memory)セル、FRAM(登録商標)(Ferroelectric Random Access Memory)セル、PRAM(Phase Change Random Access Memory)セル、TRAM(Thyristor Random Access Memory)セル、MRAM(Magnetic Random Access Memory)セルであり得る。
図23は、本発明の実施形態によるストレージ装置が適用されるシステムを示す図である。図23を参照すると、システム6000は、基本的にモバイルフォン(mobile phone)、スマートフォン(smart phone)、タブレットPC(tablet personal computer)、ウェアラブル機器、ヘルスケア機器又はIOT(internet of things)機器のようなモバイルシステムであり得る。一実施形態では、システム6000は必ずしもモバイルシステムに限定されず、パーソナルコンピュータ(personal computer)、ラップトップ(laptop)コンピュータ、サーバ(server)、メディアプレーヤー(media player)又はナビゲーション(navigation)のような車両用装備(automotive device)などでもあり得る。
システム6000は、メインプロセッサ(main processor)6100、メモリ6200a、6200b及びストレージ装置6300a、6300bを含むことができ、さらにイメージキャプチャ装置(image capturing device)6410、ユーザ入力装置(user input device)6420、センサ6430、通信装置6440、ディスプレイ6450、スピーカー6460、電力供給装置(power supplying device)6470及び接続インターフェース(connecting interface)6480のうち、1つ以上を含み得る。
メインプロセッサ6100は、システム6000の全体的な動作、より具体的にはシステム6000を構成する他の構成要素の動作を制御することができる。このようなメインプロセッサ6100は、汎用プロセッサ、専用プロセッサ又はアプリケーションプロセッサ(application processor)などで実現され得る。
メインプロセッサ6100は、1つ以上のCPUコア6110を含むことができ、メモリ6200a、6200b及び/又はストレージ装置6300a、6300bを制御するためのコントローラ6120をさらに含み得る。実施形態によっては、メインプロセッサ6100は、AI(artificial intelligence)データ演算などのデータの高速演算のための専用回路であるアクセラレータ6130をさらに含み得る。このようなアクセラレータ6130は、GPU(Graphics Processing Unit)、NPU(Neural Processing Unit)及び/又はDPU(Data Processing Unit)などを含むことができ、メインプロセッサ6100の他の構成要素とは物理的に独立した別個のチップとして実装されることもある。
メモリ6200a、6200bは、システム6000の主記憶装置として使用され、SRAM及び/又はDRAMなどの揮発性メモリを含み得るが、フラッシュメモリ、PRAM及び/又はRRAMなどの不揮発性メモリを含むこともできる。メモリ6200a、6200bは、メインプロセッサ6100と同じパッケージ内に実装されることもある。一実施形態では、メモリ6200a、6200bは、前述されたホストメモリとして動作することができる。
ストレージ装置6300a、6300bは、電源の供給有無に関わらずデータを格納する不揮発性ストレージ装置として機能することができ、メモリ6200a、6200bに比べて相対的に大きな記憶容量を有し得る。ストレージ装置6300a、6300bは、ストレージコントローラ6310a、6310bと、ストレージコントローラ6310a、6310bの制御の下にデータを格納する不揮発性メモリ(non-volatile memory:NVM)6320a、6320bとを含み得る。不揮発性メモリ6320a、6320bは、2D(2-dimensional)構造又は3D(3-dimensional)V-NAND(Vertical NAND)構造のフラッシュメモリを含み得るが、PRAM及び/又はRRAMなどの他の種類の不揮発性メモリを含むこともできる。
ストレージ装置6300a、6300bは、メインプロセッサ6100とは物理的に分離された状態でシステム6000に含まれることもあり、メインプロセッサ6100と同じパッケージ内に実装されることもある。なお、ストレージ装置6300a、6300bは、SSD(solid state device)又はメモリカード(memory card)のような形態を有することによって、後述する接続インターフェース6480のようなインターフェースを介してシステム6000の他の構成要素と取り外し可能に結合されることもある。このようなストレージ装置6300a、6300bは、UFS(Universal Flash Storage)、eMMC(embedded multi-media card)又はNVMe(non-volatile memory express)のような標準規約が適用される装置であり得るが、必ずしもこれに限定されるものではない。
一実施形態では、ストレージ装置6300a、6300bは、メインプロセッサ6100の制御に従って多様な演算を遂行するように構成されることがあり、図1~図22を参照して説明された計算ストレージ装置であり得る。一実施形態では、ストレージ装置6300a、6300bは、アクセラレータ3130によって実行される機能のうち、いくつかを実行又は遂行するように構成され得る。
イメージキャプチャ装置6410は、静止画又は動画を撮影することができ、カメラ(camera)、カムコーダ(camcorder)及び/又はウェブカム(webcam)等であり得る。
ユーザ入力装置6420は、システム6000のユーザから入力された多様な種類のデータを受信することができ、タッチパッド(touch pad)、キーパッド(keypad)、キーボード(keyboard)、マウス(mouse)及び/又はマイク(microphone)などであり得る。
センサ6430は、システム6000の外部から獲得され得る多様な類型の物理量を感知し、感知された物理量を電気信号に変換することができる。このようなセンサ6430は、温度センサ、圧力センサ、照度センサ、位置センサ、加速度センサ、バイオセンサ(biosensor)及び/又はジャイロスコープ(gyroscope)センサなどであり得る。
通信装置6440は、多様な通信規約に従ってシステム6000の外部の他の装置との間で信号の送信及び受信を遂行することができる。このような通信装置6440は、アンテナ、トランシーバ(transceiver)及び/又はモデム(MODEM)などを含んで実装され得る。
ディスプレイ6450及びスピーカー6460は、システム6000のユーザにそれぞれ視覚情報及び聴覚情報を出力する出力装置として機能することができる。
電力供給装置6470は、システム6000に内蔵されたバッテリ(図示せず)及び/又は外部電源から供給される電力を適切に変換してシステム6000の各構成要素に供給することができる。
接続インターフェース6480は、システム6000と、システム6000に連結されてシステム6000とデータをやり取りすることができる外部装置との間の連結を提供することができる。接続インターフェース6480は、ATA(Advanced Technology Attachment)、SATA(Serial ATA)、e-SATA(external SATA)、SCSI(Small Computer Small Interface)、SAS(Serial Attached SCSI)、PCI(Peripheral Component Interconnection)、PCIe(PCI express)、NVMe、IEEE 1394、USB(universal serial bus)、SD(secure digital)カード、MMC(multi-media card)、eMMC、UFS、eUFS(embedded Universal Flash Storage)、CF(compact flash)カードインターフェースなどのような多様なインターフェース方式で実現される。
図24は、本発明の実施形態によるストレージ装置が適用されたデータセンタを例として示すブロック図である。データセンタ7000は、多様なデータを維持管理し、多様なデータに対する多様なサービスを提供する施設として、データストレージセンタと呼ばれ得る。データセンタ700は、検索エンジン又はデータベース運用のためのシステムであり得るし、多様な機関で使用されるコンピューティングシステムであり得る。データセンタ7000は、複数のアプリケーションサーバ7100_1~7100_n及び複数のストレージサーバ7200_1~7200_mを含み得る。複数のアプリケーションサーバ7100_1~7100_nの個数及び複数のストレージサーバ7200_1~7200_mの個数は多様に変更され得る。複数のアプリケーションサーバ7100_1~7100_nは、プロセッサ7110_1~7110_n、スイッチ7130_1~7130_n、ストレージ装置7150_1~7150_n及びネットワークNTに連結されたネットワークインターフェースカードNICs7140_1~7140_n)をそれぞれ含み得る。複数のストレージサーバ7200_1~7200_mは、プロセッサ7210_1~7210_m、メモリ7220_1~7220_m、スイッチ7230_1~7230_m、ストレージ装置7250_1~7250_m及びネットワークインターフェースカードNICs7240_1~7240_nをそれぞれ含み得る。ストレージ装置7250_1~7250_mは、コントローラ7251_1~7251_m(図24ではCTRLと称される)、不揮発性メモリNVM7252_1~7252_m、DRAM7253_1~7253_m及びインターフェースI/F7254_1~7254_mをそれぞれ含み得る。
以下では、説明の便宜のために、第1ストレージサーバ7200_1の例示を説明する。残りのストレージサーバ7200_2~7200_m及び複数のアプリケーションサーバ7100_1~7100_nのそれぞれは、第1ストレージサーバ7200_1と類似した構造を有し得る。
第1ストレージサーバ7200_1は、プロセッサ7210_1、メモリ7220_1、スイッチ7230_1、ネットワークインターフェースコネクタ(NIC:network interface connector)7240_1及びストレージ装置7250_1を含み得る。プロセッサ7210_1は、第1ストレージサーバ7200_1の全体的な動作を制御することができる。メモリ7220_1は、プロセッサ7210_1の制御に従って多様なコマンド又はデータを記憶することができる。プロセッサ7210_1は、メモリ7220_1にアクセスして多様なコマンドを実行するか、又はデータを処理するように構成され得る。一実施形態では、メモリ7220_1は、DDR SDRAM(Double Data Rate Synchronous DRAM)、HBM(High Bandwidth Memory)、HMC(Hybrid Memory Cube)、DIMM(Dual In-line Memory Module)、Optane(オプテイン) DIMM又はNVDIMM(Non-Volatile DIMM)のような多様なタイプのメモリ装置のうち、少なくとも1つを含み得る。
一実施形態では、第1ストレージサーバ7200_1に含まれるプロセッサ7210_1の個数及びメモリ7220_1の個数は多様に変更されてもよい。一実施形態では、第1ストレージサーバ7200_1に含まれるプロセッサ7210_1及びメモリ7220_1は、プロセッサメモリペアを構成することができ、第1ストレージサーバ7200_1に含まれるプロセッサメモリペアの個数は多様に変更される。一実施形態では、第1ストレージサーバ7200_1に含まれるプロセッサ7210_1の個数及びメモリ7220_1の個数は、互いに異なってもよい。プロセッサ7210_1は、シングルコアプロセッサ又はマルチコアプロセッサを含み得る。
スイッチ7230_1は、プロセッサ7210_1の制御に応じてプロセッサ7210_1とストレージ装置7250_1との間を選択的に連結するか、又はNIC7240_1とストレージ装置7250_1との間を選択的に連結することができる。
NIC7240_1は、第1ストレージサーバ7200_1をネットワークNTと連結するように構成されてもよい。NIC7240_1は、ネットワークインターフェースカード、ネットワークアダプタなどを含み得る。NIC7240_1は、有線インターフェース、無線インターフェース、Bluetooth(登録商標)インターフェース、光学インターフェースなどによってネットワークNTに連結される。NIC7240_1は、内部メモリ、DSP、ホストバスインターフェースなどを含むことができ、ホストバスインターフェースを介してプロセッサ7210_1又はスイッチ7230_1などと連結される。ホストバスインターフェースは、ATA(Advanced Technology Attachment)、SATA(Serial ATA)、e-SATA(external SATA)、SCSI(Small Computer Small Interface)、SAS(Serial Attached SCSI)、PCI(Peripheral Component Interconnection)、PCIe(PCI express)、NVMe(NVM express)、IEEE 1394、USB(universal serial bus)、SD(secure digital)カード、MMC(multi-media card)、eMMC(embedded multi-media card)、UFS(Universal Flash Storage) 、eUFS(embedded Universal Flash Storage)、CF(compact flash)カードインターフェースなどのような多様なインターフェースのうち、少なくとも1つを含み得る。一実施形態では、NIC7240_1は、プロセッサ7210_1、スイッチ7230_1及びストレージ装置7250_1のうち、少なくとも1つと統合されることもある。
ストレージ装置7250_1は、プロセッサ7210_1の制御に応じてデータを格納したり、格納されたデータを出力したりすることができる。ストレージ装置7250_1は、コントローラ7251_1、不揮発性メモリ7252_1、DRAM7253_1及びインターフェース7254_1を含み得る。一実施形態では、ストレージ装置7250_1は、セキュリティ又はプライバシーのためにSE(Secure Element)をさらに含み得る。
コントローラ7251_1は、ストレージ装置7250_1の諸般動作を制御することができる。一実施形態では、ストレージ装置7250_1はSRAMを含み得る。コントローラ7251_1は、インターフェース7254_1を介して受信された信号に応答して不揮発性メモリ7252_1にデータを記憶するか、又は不揮発性メモリ7252_1に記憶されたデータを出力することができる。一実施形態では、コントローラ7251_1は、トグルインターフェース又はONFIインターフェースに基づいて不揮発性メモリ7252_1を制御するように構成され得る。
DRAM7253_1は、不揮発性メモリ7252_1に記憶されるデータ又は不揮発性メモリ7252_1から読み取られたデータを一時的に記憶するように構成され得る。DRAM7253_1は、コントローラ7251_1が動作するのに必要な多様なデータ(例えば、メタデータ、マッピングデータなど)を記憶するように構成され得る。インターフェース7254_1は、プロセッサ7210_1、スイッチ7230_1又はNIC7240_1とコントローラ7251_1との間の物理的連結を提供することができる。一実施形態では、インターフェース7254_1は、ストレージ装置7250_1を専用ケーブルで直接接続するDAS(Direct Attached Storage)方式で実現され得る。一実施形態では、インターフェース7254_1は、ホストインターフェースバスを介して前述された多様なインターフェースのうち、少なくとも1つに基づいて構成され得る。
上述された第1ストレージサーバ7200_1の構成は、例としてのものであり、本発明の範囲はこれに限定されるものではない。上述された第1ストレージサーバ7200_1の構成は、他のストレージサーバ又は複数のアプリケーションサーバのそれぞれに適用される。一実施形態では、複数のアプリケーションサーバ7100_1~7100_nのそれぞれにおいて、ストレージ装置7150_1は、選択的に省略され得る。
複数のアプリケーションサーバ7100_1~7100_n及び複数のストレージサーバ7200_1~7200_mは、ネットワークNTを通じて互いに通信することができる。ネットワークNTは、FC(Fibre Channel)又はイーサネット(Ethernet)(登録商標)などを用いて実現される。このとき、FCは、比較的高速のデータ転送に使用される媒体であり、高い性能/高い利用可能性を提供する光スイッチを用いることができる。ネットワークNTのアクセス方式に応じて、ストレージサーバ7200_1~7200_mは、ファイルストレージ、ブロックストレージ又はオブジェクトストレージとして提供されてもよい。
一実施形態では、ネットワークNTは、SAN(Storage Area Network)のようなストレージ専用ネットワークであり得る。例えば、SANは、FCネットワークを利用し、FCP(FC Protocol)に従って実施されたFC-SANであり得る。あるいは、SANは、TCP/IPネットワークを利用し、iSCSI(SCSI over TCP/IP又はInternet SCSI)プロトコルに従って実施されたIP-SANであり得る。一実施形態では、ネットワークNTは、TCP/IPネットワークのような一般的なネットワークであり得る。例えば、ネットワークNTは、FCoE(FC over Ethernet)、NAS(Network Attached Storage)、NVMe-oF(NVMe over Fabrics)などのプロトコルに従って実施されてもよい。
一実施形態では、複数のアプリケーションサーバ7100_1~7100_nのうち少なくとも1つは、ネットワークNTを通じて複数のアプリケーションサーバ7100_1~7100_nのうちの少なくとも他の1つ、又は複数のストレージサーバ7200_1~7200_mのうちの少なくとも1つにアクセスするように構成されてもよい。
例えば、第1アプリケーションサーバ7100_1は、ユーザ又はクライアントが要請したデータを、ネットワークNTを通じて複数のストレージサーバ7200_1~7200_mのうちの少なくとも1つに格納することができる。あるいは、第1アプリケーションサーバ7100_1は、ユーザ又はクライアントが要請したデータを、ネットワークNTを通じて複数のストレージサーバ7200_1~7200_mのうちの少なくとも1つから獲得することができる。この場合、第1アプリケーションサーバ7100_1は、ウェブサーバやDBMS(Database Management System)などで実現されてもよい。
すなわち、第1アプリケーションサーバ7100_1のプロセッサ7110_1は、ネットワークNTを通じて、他のアプリケーションサーバ(例えば、7100_n)のメモリ7120_n又はストレージ装置7150_nにアクセスすることができる。あるいは、第1アプリケーションサーバ7100_1のプロセッサ7110_1は、ネットワークNTを通じて、第1ストレージサーバ7200_1のメモリ7220_1又はストレージ装置7250_1にアクセスすることができる。これにより、第1アプリケーションサーバ7100_1は、他のアプリケーションサーバ7100_2~7100_n又は複数のストレージサーバ7200_1~7200_mに格納されたデータに対する多様な動作を遂行することができる。例えば、第1アプリケーションサーバ7100_1は、他のアプリケーションサーバ7100_2~7100_n又は複数のストレージサーバ7200_1~7200_mの間でデータを移動又はコピーするためのコマンドを実行又は発行することができる。この場合、移動又はコピーされるデータは、ストレージサーバ7200_1~7200_mのストレージ装置7250_1~7250_mからストレージサーバ7200_1~7200_mのメモリ7220_1~7220_mを経るか、又は直接アプリケーションサーバ7100_1~7100_nのメモリ7120_1~7120_nに移動され得る。ネットワークNTを通じて伝達されるデータは、セキュリティ又はプライバシーのために暗号化されたデータであり得る。
一実施形態では、ストレージ装置7150_1~7170_n、7250_1~7250_nは、図1~図22を参照して説明された計算ストレージ装置であり得るし、多様な演算動作を遂行するように構成され得る。ストレージ装置7150_1~7170_n、7250_1~7250_nは、図1~図22を参照して説明したように、多様な内部演算を遂行するうちに発生する内部I/Oをそれぞれのインターフェースを介して処理することができる。
上述された内容は、本発明を実施するための具体的な実施形態である。本発明は、上述された実施形態だけでなく、単純に設計変更又は容易変更することができる実施形態も含む。なお、本発明は、実施形態を用いて容易に変形して実施することができる技術も含む。したがって、本発明の範囲は、上述された実施形態に限定されてはならず、後述する特許請求の範囲だけでなく、本発明の特許請求の範囲と均等なものによって定められるべきである。