以下、図面を参照しながら各実施形態について説明する。以下の説明において、略同一の機能及び構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
[第1の実施形態]
本実施形態は、ソフトウェア定義型(Software Defined)プラットフォームを備えるメモリ装置について説明する。
ソフトウェア定義型プラットフォームは、例えば、メモリ装置の機能をハードウェアの制御から切り離し、ソフトウェアにより制御を実行する。
本実施形態において、メモリ装置は、例えばSSDであるとするが、メモリカード、ハードディスクドライブ(HDD)、HDDとSSDとを含むハイブリッド型メモリ装置、光ディスク、ストレージ装置、メモリサーバなど様々な種別のメモリ装置でもよい。メモリ装置がSSDの場合には、当該メモリ装置はHDDと同じ通信インタフェースを持つ。
SSDであるメモリ装置は、不揮発性メモリを含む。本実施形態では、不揮発性メモリがNAND型フラッシュメモリを含む場合について説明する。しかしながら、不揮発性メモリは、例えば、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)などNAND型フラッシュメモリではない他の種別のメモリを含むとしてもよい。また、不揮発性メモリは、3次元構造のフラッシュメモリを含むとしてもよい。
不揮発性メモリは、消去単位エリアごとに、データが一括して消去される。消去単位エリアは、複数の書き込み単位エリア及び複数の読み出し単位エリアを含む。不揮発性メモリがNAND型フラッシュメモリの場合、消去単位エリアはブロックに相当する。書き込み単位エリア及び読み出し単位エリアはページに相当する。
本実施形態において、アクセスとは、メモリへデータを書き込むこと、及び、メモリからデータを読み出すことの双方を意味する。
本実施形態において、処理単位は、タスクとする。しかしながら、例えば、ジョブ、プロセス、トランザクション、スレッドなど他の処理単位が用いられてもよい。例えば、スレッドは並列処理に対応した最小の処理単位であり、換言すれば分解すると同時処理できない最小の単位としてもよい。例えば、タスクは1以上のスレッドを含むとしてもよい。例えば、プロセスは1以上のタスクを含むとしてもよい。例えば、トランザクションは矛盾防止のために管理される処理単位であり、1以上のプロセスを含むとしてもよい。例えば、ジョブは情報処理装置又はプログラムに依頼される命令に対して実行される処理の単位としてもよい。
本実施形態において、プログラムは、コンピュータプログラムとする。コンピュータプログラムでは、コンピュータが行うべき処理が順序付けて記述されている。プログラムは、コンピュータで実行されることにより、コマンド、データ、及び、情報の発行及び受付、データ処理及び演算などの各種機能を実現可能である。
本実施形態において、コンピュータとは、例えば、命令にしたがって演算又は処理を実行する機械である。例えば、コンピュータは、メモリとプロセッサとを含む。メモリは、プログラムを記憶する。プロセッサは、メモリに記憶されているプログラムに記述された命令セット(例えば、データの転送、計算、加工、制御、管理)を実行するためのハードウェアである。本実施形態において、コンピュータは、広義に解釈されるべきであり、例えば、情報処理装置、メモリ装置のコントローラ、パーソナルコンピュータ、大型コンピュータ、マイクロコンピュータ、サーバ装置などを含む。本実施形態においては、コンピュータに代えて、複数のコンピュータが連携して動作するコンピュータシステムが用いられてもよい。
図1は、本実施形態に係る情報処理システムの一例を示すブロック図である。
情報処理システム1は、情報処理装置2とメモリ装置3とを含む。情報処理装置2は、メモリ装置3に対応するホスト装置として動作可能である。
メモリ装置3は、情報処理装置2に内蔵されてもよく、情報処理装置2とメモリ装置3とは、ネットワークなどによりデータを送受信可能に接続されるとしてもよい。メモリ装置3は、複数の情報処理装置2と通信可能に接続されてもよい。また、複数のメモリ装置3が、1以上の情報処理装置2と通信可能に接続されてもよい。
メモリ装置3は、制御回路の一例としてのコントローラ4と、不揮発性メモリ5とを含む。コントローラ4と不揮発性メモリ5とは、着脱可能とし、メモリ装置3のメモリ容量は自由に拡張できるとしてもよい。ここで、メモリ容量とは、メモリに書き込み可能な最大のデータ量とする。
コントローラ4のハードウェア部は、インタフェース部6、メモリ7A,7B、プロセッサP0〜PN、メモリコントローラ9を含む。コントローラ4は、例えば不揮発性メモリ5と電気的に接続される。本実施形態においては、コントローラ4が複数のプロセッサP0〜PNを備える場合を例として説明するが、コントローラ4に備えられるプロセッサの数は1以上で自由に変更可能である。
インタフェース部6は、例えば情報処理装置2などのような外部装置からのデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などの受信を制御し、外部装置への送信を制御する。
メモリ7Aは、作業用メモリとして使用される。メモリ7Aは、例えばプロセッサP0〜PNによる処理対象のプログラム、データ、情報などを格納する。メモリ7Aは、例えばDRAM(Dynamic Random Access Memory)又はSRAM(Static Random Access Memory)などのような揮発性メモリでもよく、又は、不揮発性メモリでもよい。
メモリ7Bは例えば不揮発性メモリとする。しかしながら、メモリ7Bの一部は揮発性メモリでもよい。メモリ7Bは、アドレス変換データ10、制御プログラム11、プログラムF0〜FMを格納する。なお、アドレス変換データ10、制御プログラム11、プログラムF0〜FMの一部又は全部は、プロセッサP0〜PN内のメモリ、メモリ7A、不揮発性メモリ5などのような他のメモリに格納されていてもよい。
図1の例では、コントローラ4が複数のプログラムF0〜FMを備える場合を例として説明するが、コントローラ4に備えられるプログラムの数は1以上で自由に変更可能である。
アドレス変換データ10は、書き込みデータ又は読み出しデータの論理アドレス(例えばLogical Block Addressing(LBA))と物理アドレス(例えばPhysical Block Addressing(PBA))とを関係付けたデータであり、例えばLUT(Look Up Table)である。アドレス変換データ10は、テーブル形式のデータ構造を持つとしてもよく、例えばリスト形式などのような他のデータ構造を持つとしてもよい。
本実施形態に係るソフトウェア定義型プラットフォームは、制御プログラム11、コントローラ4のハードウェア部、不揮発性メモリ5を含む。例えば、メモリ装置3がSSDの場合、制御プログラム11、コントローラ4のハードウェア部、不揮発性メモリ5は、ソフトウェア定義型のSSDプラットフォーム(メモリ装置プラットフォーム)である。ソフトウェア定義型のSSDプラットフォームを用いることで、SSDの機能をハードウェアの制御から切り離して、ソフトウェア制御可能である。
本実施形態において、プラットフォームとは、ハードウェア又はソフトウェアを動作させるために必要な基盤となるハードウェア、オペレーティングシステム(OS)、ミドルウェア、それらの組み合わせ、設定、環境などの総体を意味する。
プロセッサP0〜PNは、制御プログラム11及びプログラムF0〜FMを実行する。プロセッサP0〜PNは、それぞれ管理部C0〜CNを備える。しかしながら、プロセッサP0〜PNと管理部C0〜CNとは別構成としてもよい。本実施形態において、プロセッサP0はマスタのプロセッサであり、プロセッサP1〜PNはマスタに従属して動作する従属のプロセッサであるとする。なお、プロセッサP0はマスタのプロセッサとしての機能に加えて、プロセッサP1〜PNと同様に従属のプロセッサとしての機能を含むとしてもよい。例えば、管理部C0〜CNとしては、キューが用いられ、実行待ちタスクは先入先出方式で管理されてもよい。しかしながら、管理部C0〜CNにおける実行待ちタスクは、例えば、複数の実行待ちタスクのうち高優先度のタスクが実行されるなど、他の基準にしたがって管理されてもよい。
制御プログラム11は、ハードウェア部を抽象化する。例えば、ハードウェア部の抽象化は、プログラムF0〜FMと制御プログラム11との間でやり取りされるデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などが特定のインタフェースに準拠することで実現される。例えば、プログラムF0〜FMは、特定のインタフェースに準拠したコマンドを制御プログラム11に発行することで、制御プログラム11によって実現される機能を使用可能である。制御プログラム11は、プログラムF0〜FMによって発行された特定のインタフェースに準拠するコマンドにしたがってハードウェア部に対して処理を実行し、又は、プログラムF0〜FMから受けた特定のインタフェースに準拠する情報をハードウェア部に対応する形式の情報に変換する。
本実施形態において、特定のインタフェースは、例えば、一方のプログラムが他方のプログラムを利用するために定義されている規約及び手順である。より具体的には、特定のインタフェースは、例えば、あるプログラムの機能及び管理するデータなどを、他のプログラムから呼び出し、呼び出された機能及び管理するデータなどを利用するための手順及びデータ形式などを定めた規約である。
制御プログラム11は、プログラムF0〜FMがメモリ装置3の例えばコントローラ4などのようなハードウェア部に非依存となるように、プログラムF0〜FMとハードウェア部との間で基本動作を実現し、ハードウェアの違いを吸収する共通モジュールである。本実施形態において、非依存とは、少なくとも、協働する他方のソフトウェア又はハードウェアが取り替えられたとしても、引き続き利用可能な性質とする。そのため、制御プログラム11は、API(Application Programming Interface)、例えばLBAインタフェースなどの論理インタフェース、及び、例えばPBAインタフェースなどの物理インタフェースに準拠している。例えば、制御プログラム11は、API及び論理インタフェースにより、ハードウェア部に非依存な取り替え可能SSDモジュールとデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。例えば、後で説明する図4のモジュール131〜136は、SSDモジュールでもよい。
本実施形態において、例えば、物理インタフェースは、ハードウェアインタフェースでもよい。
本実施形態において、例えば、論理インタフェースは、ソフトウェアインタフェースでもよく、例えば、物理インタフェースの上に論理的に構成され、例えば、物理インタフェース上のアドレスの追加などに使用される。
例えば、制御プログラム11は、コントローラ4のハードウェア部で実行された場合に、コマンド、情報、データなどを受け取るために定義された特定のインタフェースにしたがってプログラムF0〜FMのうちのいずれかによって発行されたコマンドを受け、コマンドにしたがってコントローラ4のハードウェア部及び不揮発性メモリ5に対する制御を実行するドライバを含み、コントローラ4のハードウェア部に不揮発性メモリ5に対するアクセスを実行させる。
また、制御プログラム11は、不揮発性メモリ5に対する管理情報を管理し、特定のインタフェースにしたがってプログラムF0〜FMのうちのいずれかによって発行された管理情報の出力コマンドを受けた場合に、管理情報を出力コマンドの発行元へ送る。
さらに、制御プログラム11は、特定のインタフェースにしたがってプログラムF0〜FMのうちのいずれかによって発行された不揮発性メモリ5に対する処理の設定情報を受けた場合に、設定情報にしたがって不揮発性メモリ5に対する処理を実行する。
本実施形態において、プログラムF0〜FMは、自由に組み合わせてもよい。
制御プログラム11は、例えばタスクのスケジューリングを行う。これにより、プロセッサP0は、プロセッサP1〜PNに備えられている管理部C1〜CNの状態を監視し、管理部C0で管理されているタスクを、待ち状態のタスクの少ない管理部C1〜CNのいずれかに割り振る。それぞれのプロセッサP1〜PNは、管理部C1〜CNで管理されているタスクを実行する。
本実施形態において、メモリ7A,7Bにおける制御プログラム11の格納位置、プログラムF0〜FMの格納位置、制御プログラム11の作業領域の位置、各プログラムF0〜FMの作業領域の位置は、メモリ装置3の起動時に決定され、その後起動中は再配置されない。これにより、再配置のための時間が不要となり、処理を高速化することができる。
プログラムF0〜FMは、APIを用いることにより、制御プログラム11の機能を利用可能であり、制御プログラム11と連携して動作する。プログラムF0〜FMは、例えば、ファームウェア、アプリケーションプログラム、モジュール、又はハンドラなどのような各種のソフトウェアである。例えば、ハンドラとは、処理リクエストが発生した場合に起動されるプログラムである。本実施形態において、プログラムF0〜FMはファームウェアの場合を例として説明するが、プログラムF0〜FMの種別についてはこれに限定されない。本実施形態において、プログラムF0〜FMは、例えば、メモリ装置3のユーザが作成したプログラムでもよく、メモリ装置3のメーカーが作成したプログラムでもよい。
例えば、プロセッサP0〜PNは、制御プログラム11とプログラムF0〜FMとの協働により、受付部81、アドレス変換部82、書き込み部83、読み出し部84として機能する。
プログラムF0〜FMと制御プログラム11とがメモリ装置3において協働して動作するため、プログラムF0〜FMのソフトウェア開発者は、メモリ装置3のハードウェア部を考慮することなく、プログラムF0〜FMを生成することができる。
メモリコントローラ9は、不揮発性メモリ5に対するアクセスを制御する。
データ書き込み時に、情報処理装置2は、メモリ装置3へ、書き込みコマンドと、書き込みデータと、書き込みデータを示す論理アドレスとを送信する。
プロセッサP0〜PNで実現される受付部81は、情報処理装置2からインタフェース部6経由で、書き込みコマンド、書き込みデータ、論理アドレスを受ける。
アドレス変換部82は、受付部81によって書き込みコマンドが受け付けられた場合に、アドレス変換データ10に対して、書き込みコマンドに付されていた論理アドレスを、不揮発性メモリ5の物理アドレスに変換するための関係付けを行う。
書き込み部83は、メモリコントローラ9経由で、アドレス変換部82によって得られた不揮発性メモリ5の物理アドレスの示す位置に、書き込みデータを書き込む。
データ読み出し時に、情報処理装置2は、メモリ装置3へ、読み出しコマンドと、読み出しデータを示す論理アドレスとを送信する。
受付部81は、情報処理装置2からインタフェース部6経由で、読み出しコマンドと論理アドレスとを受ける。
アドレス変換部82は、受付部81によって読み出しコマンドが受け付けられた場合に、アドレス変換データ10を用いて、読み出しコマンドに付されていた論理アドレスを物理アドレスに変換する。
読み出し部84は、メモリコントローラ9経由で、不揮発性メモリ5の物理アドレスの示す位置から、読み出しデータを読み出す。そして、読み出し部84は、読み出しデータを、インタフェース部6経由で、情報処理装置2に送る。
図2は、本実施形態に係る制御プログラム11の構成の一例を示すブロック図である。
制御プログラム11は、APIに準拠している。このため、プログラムF0〜FMは制御プログラム11の各種の機能を使用可能である。ここで、APIとは、例えば、複数のプログラムが互いにデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取りするために使用する仕様である。APIは、例えば、サブルーチン、データ構造、オブジェクトクラス、変数などの仕様を含む。
また、制御プログラム11は,論理インタフェース、及び物理インタフェースに準拠している。このため、メモリ装置3は、典型的なSSDと同様の動作を実現可能である。ここで、論理インタフェースは、例えば、ソフトウェアとの間で論理アドレスを扱う際の仕様である。物理インタフェースは、例えば、ハードウェアとの間で物理アドレスを扱う際の仕様である。
例えば、制御プログラム11は、モジュール間通信部111、優先制御部112、割り込みハンドラ113、アクセス部114、情報管理部115、ハードウェアドライバ116、処理実行部117を含む。
モジュール間通信部111は、特定のインタフェースにしたがって、例えば、各種のプログラム間でのデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などの送信及び受信を行う。
優先制御部112は、例えば、プログラムF0〜FMの優先度に応じて、実行するプログラムF0〜FMを切り替える。より具体的には、優先制御部112は、例えば、各種のプログラムF0〜FMの優先度をタスク単位で管理し、優先度の高いタスクを優先して実行する。
割り込みハンドラ113は、メモリ装置3のいずれかのハードウェア又はソフトウェアからの割り込みイベントを検知し、検知された割り込みに応じた処理を実行する。
アクセス部114は、不揮発性メモリ5に対する消去、読み出し、書き込みなどの基本動作を制御する。
情報管理部115は、不揮発性メモリ5に対する各種の管理情報115aを管理する。例えば、情報管理部115は、例えば統計情報、集計情報、制御情報などを含む管理情報115aを生成及び管理する。情報管理部115で管理される管理情報115aは、少なくとも、不揮発性メモリ5に対する処理で用いられる設定情報117aの生成に必要な情報である。管理情報115aは、例えば、不揮発性メモリ5に含まれているNAND型フラッシュメモリの各ブロックに対する消去回数、各ブロックに対する消去頻度、各ページに対する読み出し回数、各ページに対する読み出し頻度、各ページに対する書き込み回数、各ページに対する書き込み頻度、各ブロックの大きさ、各ブロック内のページの数、各ページの大きさ、推定書き込み速度、推定書き込み遅延時間、推定読み出し速度、推定読み出し遅延時間、などのうちの少なくとも1つを含む。
情報管理部115は、プログラムF0〜FMのうちのいずれかから管理情報115aの出力コマンドを受けた場合に、出力コマンドの発行元へ管理情報115aを送る。
ハードウェアドライバ116は、メモリ装置3の各種のハードウェアを制御する。ハードウェアドライバ116の種別としては、例えば、インタフェース部6を制御するドライバ、電源を制御するドライバ、タイマーを制御するドライバなどがある。
処理実行部117は、プログラムF0〜FMのうちのいずれかから不揮発性メモリ5に対する処理の設定情報117aを受けた場合に、設定情報117aにしたがって不揮発性メモリ5に対する処理を実行する。
例えば、設定情報117aは、少なくとも、不揮発性メモリ5に対する処理で用いられるパラメータとしてもよい。より具体的には、例えば、設定情報117aは、ガーベージコレクションの実行条件情報であり、処理実行部117は、ガーベージコレクションの実行条件情報にしたがってガーベージコレクションを実行するとしてもよい。また、例えば、設定情報117aは、不揮発性メモリ5のどの位置にどのようなデータを書き込むかの書き込み位置情報であり、処理実行部117は、不揮発性メモリ5における書き込み位置情報の示す位置にデータを書き込むとしてもよい。
図3は、本実施形態に係るメモリ装置3の組み込み状態の一例を示すブロック図である。この図3では、プログラムF0を組み込む場合を例として説明するが、例えばプログラムF1〜FMなどのような他のプログラムを組み込む場合も同様である。
メモリ装置3のメーカーは、メモリ装置3を生成する。メモリ装置3は、初期的には、制御プログラム11、コントローラ4のハードウェア部4H、不揮発性メモリ5を含むソフトウェア定義型のSSDプラットフォームを備える。本実施形態においては、メモリ装置3は、初期的に、ファームウェア又はアプリケーションプログラムなどのようなプログラムF0を備えていなくてもよい。ここで、初期的とは、例えば、製品出荷時、納品時、又は、販売時である。なお、メモリ装置3は、初期的に、ソフトウェア定義型のSSDプラットフォームと協働し、メーカーが推奨する典型的なプログラム又は標準のプログラムを備えているとしてもよい。
また、メーカーは、プログラムF0の開発を支援するソフトウェア開発装置13を、例えばユーザ、顧客、メモリ装置3の購入者、又は、ソフトウェア開発者などのような第三者に、提供又は販売する。本実施形態では、ソフトウェア開発装置13をソフトウェア開発者が使用する場合を例として説明する。
ソフトウェア開発装置13は、不揮発性メモリ5のエミュレータ、メモリ装置3のシミュレータを備える。これにより、例えば、外部ネットワークとは物理的に遮断されているような閉じた開発環境であっても、ソフトウェア開発者は、ソフトウェア開発装置13を用いてプログラムF0の開発を進めることができる。
ソフトウェア開発装置13は、ソフトウェア開発者によるプログラムF0の開発を支援する。ソフトウェア開発者は、例えば、メモリ装置3のユーザ又は購入者などでもよい。本実施形態において、プログラムF0は、例えばユーザ定義の取り替え可能モジュールであり、制御プログラム11の上位層モジュールである。
制御プログラム11は、API及び論理インタフェースに準拠しているため、ソフトウェア開発者は、効率的に、メモリ装置3のユーザ又は購入者の要望に応じたプログラムF0を生成し、プログラムF0を制御プログラム11とともに協働させることが可能である。
プログラムF0が生成されると、メモリ装置3のユーザ、購入者、又は、ソフトウェア開発者は、メモリ装置3に対してプログラムF0を組み込む。
本実施形態においては、制御プログラム11がメモリ装置3に備えられているため、プログラムF0はハードウェア部4Hを意識することなく動作可能である。
ユーザ又は購入者は、自己に適したプログラムF0をメモリ装置3に容易に実装し、使用することができる。
本実施形態においては、不揮発性メモリ5とハードウェア4Hとの間で第1のインタフェース又はプロトコルが適用される。ハードウェア4Hと制御プログラム11との間で第2のインタフェース又はプロトコルが適用される。プログラムF0〜FMと制御プログラム11との間で第3のインタフェース又はプロトコルが適用される。これにより、不揮発性メモリ5、ハードウェア4H、制御プログラム11、プログラムF0〜FMのうちの少なくとも一部が取り替えられても、他のソフトウェア又はハードウェアを引き続き利用可能である。
図4は、本実施形態に係る情報処理システム1の構成要素間の関係の一例を示すブロック図である。
メモリ装置3は、主に2つの抽象化レイヤを備えることにより、取り替え可能SSDモジュール131〜137の開発を支援する。上記プログラムF0〜FMは取り替え可能SSDモジュール133〜136に相当する。
第1の抽象化レイヤは、ソフトウェア定義型のSSDプラットフォームを含む。ソフトウェア定義型のSSDプラットフォームは、制御プログラム11、ハードウェア部4H、不揮発性メモリ5を含む。ソフトウェア定義型のSSDプラットフォームは、例えばメモリ装置3のメーカーによって生成され、メモリ装置3に実装される。第1の抽象化レイヤにおいて、不揮発性メモリ5は、例えば、複数のNAND型フラッシュメモリB0〜BPを含む。
第2の抽象化レイヤは、取り替え可能SSDモジュール131〜137を含む。第2の抽象化レイヤは、上位でメモリ制御を実行する。取り替え可能SSDモジュール131〜136は、例えばAPI及び論理インタフェースにより、制御プログラム11とデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。第2の抽象化レイヤにおいて、割り込みハンドラ137は、制御プログラム11を用いることなく、ハードウェア部4Hと、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。
第2の抽象化レイヤにおいて、SSDモジュール131及び新しいモジュール132は、例えば、メーカーによって生成され、標準のSSDモジュール又は機能としてメモリ装置3に組み込まれる。
モジュール133〜135、ドライバモジュール136、割り込みハンドラ137は、ソフトウェア開発者などの第三者によって生成され、メモリ装置3に組み込まれる。
SSDモジュール131、新しいモジュール132、モジュール133〜135は、例えば情報処理装置2などのような外部装置に備えられているドライバ141〜145との間で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。
ドライバモジュール136、割り込みハンドラ137は、例えばネットワーク機器、撮影装置、又はセンサなどのような外部ハードウェア部146との間で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。ドライバモジュール136は、外部ハードウェア部146を制御可能である。割り込みハンドラ137は、外部ハードウェア部146又はハードウェア部4Hからの割り込みイベントを検知し、検知された割り込みに応じた処理をハードウェア部4H又は外部ハードウェア部146に対して実行する。
さらに、モジュール133〜135とドライバモジュール136は、特定のインタフェースにしたがって、制御プログラム11と、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。
図5は、本実施形態に係る制御プログラム11及びハードウェア部4Hによって実行される処理の一例を示すフローチャートである。
ステップS501において、制御プログラム11は、プログラムF0〜FMのいずれかから、特定のインタフェースにしたがって、アクセスコマンドを受ける。例えば、制御プログラム11は、書き込みコマンド、論理アドレス、書き込みデータを受ける。例えば、制御プログラム11は、読み出しコマンド、論理アドレスを受ける。
ステップS502において、制御プログラム11及びハードウェア部4Hは、アクセスコマンドにしたがって、論理アドレスを物理アドレスに変換し、不揮発性メモリ5に対して書き込みデータの書き込み、又は、読み出しデータの読み出しを行う。制御プログラム11は、不揮発性メモリ5から読み出しデータが読み出された場合に、読み出しデータを、読み出しコマンドの発行元に送る。
ステップS503において、制御プログラム11は、不揮発性メモリ5に対する管理情報115aを生成する。
ステップS504において、制御プログラム11は、プログラムF0〜FMのいずれかから、特定のインタフェースにしたがって、管理情報115aの出力コマンドを受ける。
ステップS505において、制御プログラム11は、出力コマンドにしたがって、管理情報115aを出力コマンドの発行元に送る。
ステップS506において、制御プログラム11は、プログラムF0〜FMのいずれかから、特定のインタフェースにしたがって、処理実行コマンドと設定情報117aとを受ける。
ステップS507において、制御プログラム11及びハードウェア部4Hは、処理実行コマンドと設定情報117aとにしたがって不揮発性メモリ5に対する処理を実行する。
以上説明した本実施形態においては、メモリ装置3のハードウェア部4Hに依存することなく、プログラムF0〜FM、取り替え可能SSDモジュール131〜136を生成し、プログラムF0〜FM、取り替え可能SSDモジュール131〜136をメモリ装置3に組み込み、メモリ装置3を用いることができる。
これにより、メモリ装置3の利便性を向上させることができる。
本実施形態においては、メモリ装置3のハードウェア部4Hが変更又はバージョンアップされた場合であっても、新たなメモリ装置3においてプログラムF0〜FM、取り替え可能SSDモジュール131〜136を継続して使用可能である。
プログラムF0〜FM、取り替え可能SSDモジュール131〜136は、メモリ装置3のハードウェア部4Hを意識することなく、開発することができる。
メモリ装置3のユーザ又は購入者は、もし新たなメモリ装置3を導入する場合であっても、先に生成されたプログラムF0〜FM、取り替え可能SSDモジュール131〜136を新たなメモリ装置3で継続して用いることができる。
したがって、本実施形態においては、メモリ装置3の開発、保守、メンテナンスの労力、費用、時間を削減することができ、開発作業を効率化することができる。
本実施形態においては、メモリ装置3のユーザ又は購入者が自分に適したプログラムF0〜FM、取り替え可能SSDモジュール131〜137を使用することができる。したがって、ユーザは、メモリ装置3の運用に、自己のノウハウを導入容易である。
本実施形態において、メモリ装置3のメーカーは、メモリ装置3を大量に生産・販売することができる。
本実施形態において、ユーザは、例えばファームウェア又はアプリケーションプログラムなどのようなプログラムF0〜FM、取り替え可能SSDモジュール131〜137を独自に開発し、メモリ装置3へプログラムF0〜FM、取り替え可能SSDモジュール131〜137を容易に実装することができる。
本実施形態においては、ネットワーク機器、撮影装置、又は、センサなどの外部ハードウェア部146とメモリ装置3とを容易に接続し、外部ハードウェア部146から受けたデータを不揮発性メモリ5に書き込むことができる。換言すれば、本実施形態においては、メモリ装置3がドライバモジュール136を備えることにより、メモリ装置3が外部ハードウェア部146との間の通信インタフェースを容易に実装することができる。したがって、本実施形態に係るメモリ装置3は、例えば、IoT(Internet of Things)に適している。
本実施形態においては、例えば、メモリ装置3のメーカーは、自社の不揮発性メモリ5を購入・使用するユーザに、安く又は無償で、制御プログラム11、ハードウェア部4H、ソフトウェア開発装置13のうちの少なくとも1つを提供する。これにより、メモリ装置3のメーカーは自社の不揮発性メモリ5の販売を促進することができる。
本実施形態においては、メモリ装置3を販売又は納品する前であっても、ソフトウェア開発者はソフトウェア開発装置13を用いてプログラムF0〜FM、取り替え可能SSDモジュール131〜137を生成することができる。本実施形態において、メモリ装置3のメーカーは、ユーザ又は購入者に固有のプログラムを開発することなく、メモリ装置3を迅速に販売又は納品することができる。したがって、メモリ装置3の製造からユーザ又は購入者へメモリ装置3を納品するまでの期間を短縮することができる。
メモリ装置3のユーザ又は購入者は、ガーベージコレクションの実行条件の変更、ガーベージコレクションの削除、どのようなデータを不揮発性メモリ5のどの位置に書き込むかの決定を、自由に実行させることができ、自己の使用態様に応じて不揮発性メモリ5の寿命を延ばすことができる。
本実施形態において、制御プログラム11の格納位置、プログラムF0〜FMの格納位置、制御プログラム11の作業用領域の位置、各プログラムF0〜FMの作業用領域の位置は、メモリ装置3の起動時に決定され、その後動作中は再配置されない。これにより、プログラム及びデータの再配置が必要なく、メモリ装置3の動作を高速化することができる。
本実施形態においては、不揮発性メモリ5、ハードウェア部4H、制御プログラム11、プログラムF0〜FM、取り替え可能SSDモジュール131〜137のうちの少なくとも一部が取り替えられても、他のソフトウェア又はハードウェアを引き続き利用可能である。例えば、不揮発性メモリ5の開発に伴って、不揮発性メモリ5の世代に変更が生じた場合であっても、既存のプログラムF0〜FM、取り替え可能SSDモジュール131〜137、コントローラ4のハードウェア部4H、及び制御プログラム11を再利用できる。
[第2の実施形態]
本実施形態においては、上記第1の実施形態で説明した情報処理システム1の変形例について説明する。
本実施形態において、メモリ装置3は、仮想マシンごとに、仮想メモリ装置(仮想SSD)を割り当てる。
図6は、本実施形態に係る情報処理システムの構成要素間の関係の一例を示すブロック図である。
本実施形態に係る情報処理システム1Aは、メモリ装置3と仮想マシンVM0〜VMPとを備える。
メモリ装置3は、大きなメモリ容量を持つ。メモリ装置3は、仮想メモリ装置VS0〜VSPと、制御プログラム11と、NAND型フラッシュメモリB0〜BPとを備える。NAND型フラッシュメモリB0〜BPは、上記図1の不揮発性メモリ5に相当する。
仮想メモリ装置VS0〜VSPは、それぞれ仮想マシンVM0〜VMPに対応付けられている。それぞれの仮想メモリ装置VS0〜VSPは、互いに独立して動作可能であり、これにより安定したパフォーマンスを実現する。
制御プログラム11は、標準コマンドセット(Common Command Set)にしたがって、動作可能である。制御プログラム11は、メモリ装置3において、複数の仮想メモリ装置VS0〜VSPと協働する。制御プログラム11は、各仮想メモリ装置VS0〜VSPのパラメータを個別に変更及び管理する。
例えば、制御プログラム11は、仮想メモリ装置VS0〜VSPごとに、メモリ容量、ガーベージコレクションの設定、オーバープロビショニングの設定、メモリの粒度(Granularity)の設定、信頼性(エラー訂正能力)の程度を変更可能である。ここで、ガーベージコレクションとは、プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能である。オーバープロビショニングとは、予備領域を確保することをいう。メモリの粒度とは、例えば、NAND型フラッシュメモリのブロック及びページのサイズ、ハードディスクのセクタのサイズなど、書き込みを行う単位のサイズ、読み出しを行う単位のサイズ、及び、消去を行う単位のサイズを意味する。
制御プログラム11は、各仮想メモリ装置VS0〜VSPの数、各仮想メモリ装置VS0〜VSPのメモリ容量を適宜変更可能である。
制御プログラム11は、仮想メモリ装置VS0〜VSPごとの異なるソフトウェアポートを備える。制御プログラム11は、各仮想メモリ装置VS0〜VSPに対して、NAND型フラッシュメモリB0〜BPを割り当てる。例えば、制御プログラム11は、各仮想メモリ装置VS0〜VSPに対して割り当てられたNAND型フラッシュメモリB0〜BPを、各仮想メモリ装置VS0〜VSPに対応するネームスペースにより管理する。換言すれば、不揮発性メモリ5は複数のネームスペースに分割され、各仮想メモリ装置VS0〜VSPが自己に対応するネームスペースに対応付けられている。
本実施形態において、ネームスペースとは、不揮発性メモリ5に含まれる複数のブロックを区分けすることによって得られるメモリのスペースである。仮想メモリ装置VS0〜VSPごとにネームスペースを割り当てることにより、仮想メモリ装置VS0〜VSPのうちの少なくとも2つの仮想メモリ装置で論理アドレスが重複する場合であっても、ネームスペースの識別情報と論理アドレスとを用いて適切なデータをアクセスすることができる。
以上説明した本実施形態においては、1つのメモリ装置3を複数の仮想メモリ装置VS0〜VSPとして扱うことができ、メモリ装置3の利便性をさらに向上させることができる。
本実施形態においては、ネームスペースを用いて、各仮想メモリ装置VS0〜VSPに対するNAND型フラッシュメモリB0〜BPの割り当てを管理するため、仮想メモリ装置VS0〜VSPからNAND型フラッシュメモリB0〜BPに対するアクセスの精度を向上させることができる。
本実施形態においては、それぞれの仮想メモリ装置VS0〜VSPが互いに独立して動作可能であるため、安定したパフォーマンスを実現することができる。
[第3の実施形態]
本実施形態においては、上記第1及び第2の実施形態の変形例であり、スケジューラを含む制御プログラム11によって複数のプロセッサを制御するメモリ装置について説明する。
図7は、本実施形態に係るメモリ装置3の構成要素間の関係の一例を示すブロック図である。この図7において、制御プログラム11と、モジュール131〜136と、割り込みハンドラ137とは、ソフトウェアとする。ドライバ141〜145及び外部ハードウェア部146は、ハードウェアとする。
メモリ装置3は、制御プログラム11と、ハードウェア部4Hと、複数のNAND型フラッシュメモリB0〜BPとを含む。ハードウェア部4Hは、複数のプロセッサP1〜PNと、メモリ7Aとを含む。
制御プログラム11は、スケジューラ15としての機能を含む。なお、スケジューラ15は、ハードウェアにより実現されてもよい。
メモリ7Aは、複数のプロセッサP1〜PNによって共有される。プロセッサP1〜PNのいずれかがメモリ7Aにデータ、情報、信号、コマンド、メッセージ、リクエスト、指令を格納し、プロセッサP1〜PNのうちの他のプロセッサがメモリ7Aからデータ、情報、信号、コマンド、メッセージ、リクエスト、指令を読み出すことにより、プロセッサP1〜PN間でデータ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取り可能である。
例えば、モジュール131〜136と制御プログラム11との間は、標準化された特定のインタフェースにより、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取り可能とする。
例えば、SSDモジュール131〜136と、外部装置に備えられているドライバ141〜145及び外部ハードウェア部146との間は、独自のインタフェースにより、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取り可能とする。外部ハードウェア部146は、例えば、メモリ装置3に対する外部のメモリ装置としてもよく、外部のNAND型フラッシュメモリとしてもよい。
例えば、複数のNAND型フラッシュメモリB0〜BPは、不揮発性メモリ5のメーカーによって生成される。
例えば、ハードウェア部4Hは、コントローラ4のメーカーによって生成される。
例えば、制御プログラム11は、不揮発性メモリ5のメーカー、コントローラ4のメーカー、又は、第1のソフトウェア開発者によって生成される。
例えば、モジュール131,132は、不揮発性メモリ5のメーカー、コントローラ4のメーカー、又は、第1のソフトウェア開発者によって生成される。
例えば、モジュール133〜135、ドライバモジュール136、割り込みハンドラ137は、第2のソフトウェア開発者によって生成される。
本実施形態において、スケジューラ15は、例えば、どのプロセッサに、どのタスクを実行させるか、を動的に決定する。換言すれば、スケジューラ15は、例えば、動的タスクスケジューラを含む。
以下で、本実施形態に係る制御プログラム11による制御の例について説明する。
図8は、本実施形態に係るプロセッサP0〜P2及びメモリ7Aの関係の一例を示すブロック図である。この図8では、説明を簡略化するためにプロセッサが3つの場合を例として説明するが、プロセッサが4以上の場合も同様である。また、マスタのプロセッサP0が従属のプロセッサとしての機能も含む場合、プロセッサは2以上であればよい。
プロセッサP0〜P2は、それぞれ管理部C0〜C2とスケジューラ150〜152とを備える。プロセッサP0〜P2は、ハードウェア部4Hの他のハードウェアを制御し、これにより不揮発性メモリ5に対する書き込みデータの書き込み、読み出しデータの読み出し、書き込まれたデータの消去を制御する。
管理部C0は、プロセッサP0に対応しており複数の実行待ち処理とその実行順序を管理可能である。
管理部C1は、プロセッサP1で実行される実行待ち処理とその実行順序を管理可能である。
管理部C2は、プロセッサP2で実行される実行待ち処理とその実行順序を管理可能である。
本実施形態において、管理部C1,C2で管理可能な最大のタスク数は、2とするが、3以上でもよい。
スケジューラ15は、プロセッサP0でスケジューリングを行うスケジューラ150と、プロセッサP1でスケジューリングを行うスケジューラ151と、プロセッサP2でスケジューリングを行うスケジューラ152とを含む。しかしながら、スケジューラ15は、分散されることなく、例えばプロセッサP0で集中的に動作してもよい。
スケジューラ150は、マスタスケジューラであり、従属のプロセッサP1,P2の負荷、又は、管理部C1,C2内の実行待ちタスクの数、が均等化されるように、管理部C0の実行待ちタスクをスケジューラ151,152に配分する。
スケジューラ151,152は、従属のスケジューラであり、プロセッサP1,P2の処理時間及び遅延時間を短縮化する。
スケジューラ151,152は、それぞれ管理部C1,C2のタスクの数を求める。
スケジューラ151は、管理部C1で管理されている実行待ちタスクの数が第1のしきい値以下か否か判断し、判断結果をマスタスケジューラ150に送る。
スケジューラ152は、管理部C2で管理されている実行待ちタスクの数が第2のしきい値以下か否か判断し、判断結果をマスタスケジューラ150に送る。
スケジューラ150は、管理部C1で管理されている実行待ちタスクの数が第1のしきい値以下の場合に、管理部C0で管理されている実行待ちタスクを、スケジューラ151に通知する。スケジューラ151は、スケジューラ150から通知された実行待ちタスクを、管理部C1で管理する。
スケジューラ150は、管理部C2で管理されている実行待ちタスクの数が第2のしきい値以下の場合に、管理部C0で管理されている実行待ちタスクを、スケジューラ152に通知する。スケジューラ152は、スケジューラ150から通知された実行待ちタスクを、管理部C2で管理する。
本実施形態において、スケジューラ150は、実行待ちタスクを識別するためのタスク識別情報と、当該実行待ちタスクの実行優先度とを関連付けた優先度情報16をメモリ7Aに格納する。
スケジューラ150は、管理部C0から管理部C1又は管理部C2へ実行待ちタスクの管理先を変更する場合には、優先度情報16を参照し、管理部C0で管理されている高優先度の実行待ちタスクを、管理先が変更されるタスクとして決定する。より具体的には、例えば、スケジューラ150は、最も優先度の高い実行待ちタスクを、管理先が変更されるタスクとして決定してもよい。例えば、スケジューラ150は、管理部C0で管理されている実行待ちタスクの中で、優先度が上位のグループに属する実行待ちタスクのうちのいずれかを、管理先が変更されるタスクとして決定してもよい。例えば、スケジューラ150は、管理部C0で優先度が所定の値以上の実行待ちタスクが管理されている場合には、優先度が所定の値以上の実行待ちタスクを管理先が変更されるタスクとして決定し、管理部C0で優先度が所定の値以上の実行待ちタスクが管理されていない場合には、先入先出方式にしたがって管理先が変更されるタスクを決定してもよい。
以下において、プロセッサP1,P2で同様の処理は、プロセッサP1を用いて説明し、プロセッサP2については説明を省略するか、又は、簡単に説明する。
スケジューラ151は、プロセッサP1でタスク実行が終了した場合に、管理部C1で管理されている次のタスクを実行する。
スケジューラ151は、管理部C1で管理されている次のタスクを実行する場合に、優先度情報16を参照し、管理部C1で管理されている高優先度の実行待ちタスクを、次に実行されるタスクとして決定する。より具体的には、例えば、スケジューラ151は、最も優先度の高いタスクを、次に実行されるタスクとして決定してもよい。例えば、スケジューラ151は、管理部C1で管理されているタスクの中で、優先度が上位のグループに属するタスクのうちのいずれかを、次に実行されるタスクとして決定してもよい。例えば、スケジューラ151は、管理部C1で優先度が所定の値以上のタスクが管理されている場合には、優先度が所定の値以上のタスクを次に実行されるタスクとして決定し、管理部C1で優先度が所定の値以上のタスクが管理されていない場合には、先入先出方式にしたがって次に実行されるタスクを決定してもよい。
スケジューラ151は、プロセッサP1でタスク実行が終了した場合に、タスク実行が終了したことを示すタスク終了情報をスケジューラ150に送る。スケジューラ150は、管理部C0で実行待ちタスクが管理されている場合に、管理先が変更されるタスクを決定し、タスク終了情報を発したスケジューラ151へ管理先が変更されるタスクを通知する。スケジューラ151は、スケジューラ150から通知されたタスクを、管理部C1で管理する。
スケジューラ151は、プロセッサP1で実行されたタスクの次に起動される新たなタスクがプロセッサP1,P2のうちの一方のプロセッサで実行される場合、新たなタスクを一方のプロセッサに対応するスケジューラに通知するとしてもよい。この場合、一方のプロセッサに対応するスケジューラは、一方のプロセッサに対応する管理部に、新たなタスクを管理させる。
スケジューラ151は、プロセッサP1で実行されたタスクの次に起動される新たなタスクがプロセッサP1,P2のうちのいずれでも実行可能な場合、新たなタスクをプロセッサP0に対応するスケジューラ150に通知してもよい。この場合、スケジューラ150は、管理部C0に、新たなタスクを管理させる。
スケジューラ151は、プロセッサP1で実行されたタスクの次に起動される新たなタスクがプロセッサP1,P2のうちのいずれでも実行可能であり、管理部C1で管理されているタスクの数が第1のしきい値以下の場合、新たなタスクをプロセッサP1に対応するスケジューラ151に通知してもよい。この場合、スケジューラ151は、管理部C1に、新たなタスクを管理させる。
スケジューラ151は、プロセッサP1で実行されたタスクの次に起動される新たなタスクがプロセッサP1,P2のうちのいずれでも実行可能であり、管理部C2で管理されているタスクの数が第2のしきい値以下の場合、新たなタスクをプロセッサP2に対応するスケジューラ152に通知してもよい。この場合、スケジューラ152は、管理部C2に、新たなタスクを管理させる。
スケジューラ151は、プロセッサP1で実行されたタスクの次に起動される新たなタスクがプロセッサP1,P2のうちのいずれでも実行可能であり、管理部C2,C3で管理されているタスクの数が第1のしきい値及び第2のしきい値より多い場合、新たなタスクをプロセッサP0に対応するスケジューラ150に通知してもよい。この場合、スケジューラ150は、管理部C0に、新たなタスクを管理させる。
プロセッサP1,P2で実行されるタスクは、ハードウェア部4Hをアクセスするための待ち合わせタスクを含まない。例えば、待ち合わせタスクとは、あるイベントが発生するまで待ち状態となるタスクであってもよい。この場合、プロセッサP1,P2でタスクの実行が開始されると、プロセッサP1,P2で割り込みなどを受け例外処理が発生した場合を除き、中断が生じない。
制御プログラム11は、メモリ装置3の起動時、又は、管理部C1,C2で管理されているタスクがプロセッサP1,P2によって実行される前に、全タスクに対して、必要とされるメモリ7Aのメモリ領域20を割り当てる。
制御プログラム11は、実行されるタスクと当該タスクに割り当てられているメモリ領域20とを関連付けた領域情報17をメモリ7Aに格納する。制御プログラム11は、領域情報17を参照し、タスクを実行する場合に使用されるメモリ領域20を決定する。
制御プログラム11は、プロセッサP1,P2のうちの少なくとも1つを停止する場合に、プロセッサP0に対応する管理部C0から停止されるプロセッサに対応する管理部へのタスクの管理先の変更を止め、プロセッサP0に対応する管理部C0から停止されないプロセッサに対応する管理部へタスクの管理先を変更する。例えば、プロセッサは、電源供給が停止されることにより、停止される。
制御プログラム11は、プロセッサP1が割り込みを受けた場合に、割り込みに続くタスクを、プロセッサP1に対応する管理部C1で管理する。
制御プログラム11は、タスクがハードウェア部4Hの一部で実行される必要がある場合に、タスクと当該タスクの実行で使用されるハードウェア部4Hの一部を識別するためのハードウェア識別情報とを関連付けたハードウェア情報19をメモリ7Aに格納する。制御プログラム11は、ハードウェア情報19を参照し、タスクを実行する場合に当該タスクの実行で使用されるハードウェア部を決定する。そして、制御プログラム11は、決定されたハードウェア部に対応する管理部で、タスクを管理する。具体的には、制御プログラム11は、情報処理装置2からアクセスリクエストとハードウェア識別情報とを受けた場合に、アクセスリクエストに対応するタスクとハードウェア識別情報とを関連付けたハードウェア情報19をメモリ9に格納する。制御プログラム11は、アクセスリクエストに対応するタスクを実行する場合に、ハードウェア識別情報の示すプロセッサに対応する管理部で、当該タスクを管理する。
図9は、本実施形態に係るスケジューラ15の第1の処理の一例を示すフローチャートである。この図9においては、タスクの管理先が管理部C0から管理部C1に変更されるまでの処理を例示している。しかしながら、タスクの管理先が管理部C0から例えば管理部C2などのような他の管理部に変更されるまでの処理も同様である。
ステップS901において、スケジューラ15は、管理部C0でタスクを管理する。
ステップS902において、スケジューラ15は、管理部C1で管理されているタスクの数が第1のしきい値以下か判断する。
管理部C1で管理されているタスクの数が第1のしきい値以下ではない場合、処理はステップS905に移る。
管理部C1で管理されているタスクの数が第1のしきい値以下の場合、ステップS903において、スケジューラ15は、優先度情報16を参照し、管理部C0から管理部C1に管理先が変更されるタスクを選択する。
ステップS904において、スケジューラ15は、選択されたタスクの管理先を管理部C1に変更する。
ステップS905において、スケジューラ15は、処理継続の場合にステップS901に処理を移し、処理継続でない場合に処理を終える。
図10は、スケジューラ15の第2の処理の一例を示すフローチャートである。この図10においては、実行されたタスクの次に起動される新たなタスクが管理部C0〜C2のいずれかに割り当てられるまでの処理を例示している。
ステップS1001において、スケジューラ15は、実行されたタスクの次に起動される新たなタスクが、プロセッサP1で実行されるか、プロセッサP2で実行されるか、プロセッサP1,P2のいずれでも実行可能か、を判断する。
新たなタスクの実行先がプロセッサP1の場合、ステップS1002において、スケジューラ15は、新たなタスクを管理部C1で管理する。
新たなタスクの実行先がプロセッサP2の場合、ステップS1003において、スケジューラ15は、新たなタスクを管理部C2で管理する。
新たなタスクの実行先がプロセッサP1,P2のいずれでも可能な場合、ステップS1004において、スケジューラ15は、新たなタスクを管理部C0で管理する。
図11は、本実施形態に係るタスク間の領域情報の通知状態の一例を示すブロック図である。
第1のタスクT1は、プロセッサP1,P2のいずれかで実行される。メモリ領域181は、第1のタスクT1で使用されるメモリ領域である。
第2のタスクT2は、プロセッサP1,P2のいずれかで実行される。
第2のタスクT2は、第1のタスクT1で使用されるメモリ領域181の一部又は全部を、使用する。この場合、第1のタスクT1は、第2のタスクT2へメモリ領域181の領域情報を、通知する。領域情報は、例えば、メモリ領域181の位置情報を含む。
第1のタスクT1から第2のタスクT2への領域情報の通知は、メモリ装置3の電源が投入され、タスクT1にメモリ領域181が割り当てられた場合に、実行されるとしてもよい。また、第1のタスクT1から第2のタスクT2への領域情報の通知は、第2のタスクT2の起動により実行されるとしてもよい。
本実施形態において、制御プログラム11は、タスクの実行が終了した場合であっても、当該タスクに対応するメモリ領域を他のタスクに割り当てない。また、タスクの実行終了後に同一のタスクを再実行する場合には、同じメモリ領域が再使用される。
タスクは、ブートプログラムのタスクでもよい。この場合、メモリ装置3の電源投入に基づいて、電源投入処理を実行するタスクが、プロセッサP0〜P2の管理部C0〜C2のいずれかで管理される。
ハードウェア部4Hと制御プログラム11とのうちの少なくとも一方は、エラー検出を行うとしてもよい。エラーが検出された場合、エラー訂正処理を実行するタスクが、プロセッサP0〜P2の管理部C0〜C2のいずれかで管理される。
本実施形態において、メモリ装置3の制御プログラム11は、NAND型フラッシュメモリB0〜BPのブロックごとの消去回数、ブロック内のページ数、ブロックサイズ、ページサイズなどのようなメモリ情報を、モジュール131〜136などに送るとしてもよい。
制御プログラム11は、タスクから、NAND型フラッシュメモリB0〜BPの割り当てリクエスト又は解放リクエストを受けた場合に、割り当て処理又は解放処理を実行し、タスクに対して割り当てられた又は解放されたNAND型フラッシュメモリB0〜BPのブロックを、タスクへ通知するとしてもよい。
図12は、本実施形態に係るタスク及びメモリ領域の関係の一例を示すブロック図である。
タスクT1〜T3のうちの少なくとも1つは、他の複数のタスクからリクエストを受けるとしてもよい。
タスクT1が実行されると、タスクT1は、タスクT1の後に実行されるタスクT2にリクエストと当該リクエストを発したタスクT1の識別情報を送る。また、タスクT1は、実行によって得られた情報を、タスクT1に対応するメモリ領域181に格納するか、又は、タスクT2に対応するメモリ領域182に格納する。
タスクT2は、メモリ領域181に格納されている情報、又は、メモリ領域182に格納されている情報を用いて実行される。すると、タスクT2は、タスクT2の後に実行されるタスクT3にリクエストと当該リクエストを発したタスクT2の識別情報を送る。また、タスクT2は、実行によって得られた情報を、タスクT2に対応するメモリ領域182に格納するか、又は、タスクT3に対応するメモリ領域183に格納する。
例えば、タスクT2が複数の他のタスクからリクエストを受ける場合、タスクT1は、リクエストを発したタスクT1の識別情報と、タスクT2の後に実行されるタスクT3の識別情報とを、タスクT2に送る。タスクT2は、タスクT1に対応するメモリ領域181又はタスクT3に対応するメモリ領域183の情報を用いて実行される。そして、タスクT2は、タスクT1に対応するメモリ領域181又はタスクT3に対応するメモリ領域183へ、実行によって得られた情報を格納する。
例えば、タスクT2が複数の他のタスクからリクエストを受ける場合、タスクT1は、リクエストを発したタスクT1の識別情報と、タスクT2の後に実行されるタスクT3の識別情報とを、タスクT2に送る。タスクT2は、タスクT1に対応するメモリ領域181の情報を用いて実行される。そして、タスクT2は、タスクT3に対応するメモリ領域183へ、実行によって得られた情報を格納する。
制御プログラム11は、情報処理装置2からコマンドと後続処理の識別情報とを受けた場合に、コマンド実行後に、後続処理の識別情報で示されるタスクを実行するとしてもよい。これにより、同じコマンドにしたがって処理を実行した後に、後続の処理を切り替えることができる。
例えば、メモリ装置3のハードウェア部4Hは複数の部分に区分けされており、後続処理の識別情報は、ハードウェア部4Hのうちの一部を示すとしてもよい。
後続処理の識別情報は、メモリ装置3内で管理されているコマンドキューのキュー番号としてもよい。
以上説明した本実施形態においては、メモリ装置3で、物理メモリを共有して管理するメモリ共有型並列コンピューティング方式(Symmetric Multiprocessing)が採用される。
本実施形態においては、自動で、モジュール131〜136のスケジューリングを行うことができる。
本実施形態においては、メモリ装置3に対して、外部装置及び外部ハードウェア部136を容易に適用することができる。
本実施形態においては、メモリ装置3の複数のプロセッサP1〜PNを効率的に使用することができ、メモリ装置3の性能を向上させることができる。
本実施形態において、第2のソフトウェア開発者は、タスクのスケジューリングを意識することなく、モジュール133〜136を開発することができる。
本実施形態においては、タスクが実行されると、当該タスクの実行が完了するまで、中断は発生しない。本実施形態においては、処理が完了するまでプロセッサP1,P2間でデータ又は情報のやり取りなどが発生しない。本実施形態においては、タスクの実行開始まではタスクの実行順序を入れ替え可能であるが、タスクの実行を開始した後でタスクの実行順序を入れ替えない。本実施形態においては、例えば、割り込みハンドラ137から割り込みを受ける場合を除き、タスクの実行は中断しない。したがって、本実施形態においては、タスク実行中にタスクのスイッチングが実行されることを低減することができ、処理を高速化することができる。また、本実施形態においては、タスクの総実行時間は変化せず、実行待ち時間のみが変化する。このため、メモリ装置3において発生する遅延時間を安定化させることができる。
本実施形態においては、メモリ7Aの動的な割り当てはメモリ装置3の起動時に実行され、タスクのスイッチング時に割り当ては変更されない。本実施形態においては、関連するタスクの間での情報のやり取りに、共有のメモリ7Aが用いられ、タスク間でメモリ保護は実施されない。本実施形態においては、各タスクが対応するメモリ領域を参照する。本実施形態においては、タスクの中断の発生回数及び発生頻度を減らすことができる。したがって、本実施形態においては、タスクのスイッチングによる遅延時間を減らすことができる。
本実施形態においては、複数のコントローラ4で共通のソフトウェアを使用することができ、ソフトウェアのアップデート及び機能追加が容易である。
[第4の実施形態]
本実施形態においては、上記第1乃至第3の実施形態で説明した情報処理システム1,1Aの詳細構成について説明する。
図13は、本実施形態に係る情報処理システムの詳細構成の一例を示すブロック図である。
情報処理システム1Bは、情報処理装置2とメモリシステム3Bとを含む。
本実施形態に係るメモリシステム3Bは、プログラムF0〜FM、制御プログラム11を実行可能である。
上記第1乃至第3の実施形態に係るメモリ装置3は、メモリシステム3Bに対応する。
メモリ装置3のプロセッサP0〜PNは、CPU(Central Processing Unit)43A,43Bに対応する。
インタフェース部6は、ホストインタフェース41及びホストインタフェースコントローラ42に対応する。
メモリ7A,7Bは、DRAM47に対応する。
アドレス変換データ10は、LUT45に対応する。
メモリコントローラ9は、NANDC(NAND Controller)50に対応する。
情報処理装置2は、メモリシステム3Bのホスト装置として機能する。
メモリシステム3Bのコントローラ4は、フロントエンド4Fと、バックエンド4Bと
を備える。
フロントエンド(ホスト通信部)4Fは、ホストインタフェース41、ホストインタフェースコントローラ42、暗号化/復号化部(Advanced Encryption Standard (AES))44、及びCPU43Fを備える。
ホストインタフェース41は、情報処理装置2との間で、リクエスト(書き込みコマンド、読み出しコマンド、消去コマンドなど)、LBA、データなどを通信する。
ホストインタフェースコントローラ(制御部)42は、CPU43Fの制御にしたがって、上記ホストインタフェース41の通信を制御する。
暗号化/復号化部44は、データ書き込み動作において、ホストインタフェースコントローラ42から送信される書き込みデータ(平文)を暗号化する。暗号化/復号化部44は、データ読み出し動作において、バックエンド4BのリードバッファRBから送信される暗号化された読み出しデータを復号化する。なお、この暗号化/復号化部44を介さずに、書き込みデータ及び読み出しデータを送信することも、必要に応じて可能である。
CPU43Fは、フロントエンド4Fの上記各構成41,42,44を制御し、フロントエンド4Fの全体の動作を制御する。
バックエンド(メモリ通信部)4Bは、ライトバッファWB、リードバッファRB、LUT45、DDRC46、DRAM47、DMAC48、ECC49、ランダマイザRZ、NANDC50、及びCPU43Bを備える。
ライトバッファ(ライトデータ転送部)WBは、情報処理装置2から送信された書き込みデータを一時的に格納する。具体的には、ライトバッファWBは、当該書き込みデータが不揮発性メモリ5に適した所定のデータサイズになるまで、一時的にデータを格納する。
リードバッファ(リードデータ転送部)RBは、不揮発性メモリ5から読み出された読み出しデータを一時的に格納する。具体的には、リードバッファRBにおいて、読み出しデータは、情報処理装置2に適した順序(情報処理装置2が指定した論理アドレスLBAの順序)になるように並び替えられる。
LUT45は、論理アドレスLBAを物理アドレスPBAに変換するためのテーブルである。
DDRC46は、DRAM47におけるDDR(Double Data Rate)を制御する。
DRAM47は、例えば、LUT45を格納する揮発性のメモリである。
DMAC(Direct Memory Access Controller)48は、内部バスIBを介して、書き込みデータや読み出しデータなどを転送する。図13においては1つのDMAC48が図示されているが、コントローラ4は、2以上のDMAC48を備えるとしてもよい。DMAC48は、必要に応じて、コントローラ4内の様々な位置に設定される。
ECC49は、ライトバッファWBから送信される書き込みデータにECC(Error Correcting Code)を付加する。ECC49は、リードバッファRBに送信する際に、付加したECCを用いて、不揮発性メモリ5から読み出した読み出しデータを必要に応じて訂正する。
ランダマイザRZ(又はScrambler)は、データ書き込み動作の際に、書き込みデータが不揮発性メモリ5の特定のページ又はワード線方向などに偏らないように、書き込みデータを分散させる。このように、書き込みデータを分散させることで、書き込み回数を平準化でき、不揮発性メモリ5のメモリセルMCのセル寿命を長期化できる。そのため、不揮発性メモリ5の信頼性を向上できる。また、ランダマイザRZは、データ読み出し動作の際に、書き込み時のランダマイズ処理の逆処理を実行し、元のデータを復元する。
NANDC50は、所定の速度の要求を満たすため、複数のチャンネル(ここでは、4つのチャンネルCH0〜CH3)を用いて、並列に不揮発性メモリ5にアクセスする。
CPU43Bは、バックエンド4Bの上記各構成(45〜50,RZ)を制御し、バックエンド4Bの全体の動作を制御する。
なお、図13に示したコントローラ4の構成は例示であり、この構成に限定されることはない。
図14は、本実施形態に係るストレージシステムの一例を示す斜視図である。
ストレージシステム100は、SSDとしてのメモリシステム3Bを備える。
メモリシステム3Bは、例えば比較的小型のモジュールである。なお、メモリシステム3Bの大きさ及び寸法は、種々の大きさのものに適宜変更可能である。
また、メモリシステム3Bは、例えば、企業(エンタープライズ)で運用されるデータセンター又はクラウドコンピューティングシステムにおいて、サーバのような情報処理装置2に装着されて使用可能である。そのため、メモリシステム3Bは、エンタープライズ用SSD(eSSD)であってもよい。
メモリシステム3Bは、例えば上方に開口した複数のコネクタ(例えばスロット)101を備える。
複数のメモリシステム3Bは、情報処理装置2のコネクタ101にそれぞれ装着され、略垂直方向に起立した姿勢で互いに並べて支持される。このような構成によれば、複数のメモリシステム3Bをコンパクトに纏めて実装可能であり、メモリシステム3Bの小型化を図ることができる。さらに、本実施形態に係るメモリシステム3Bの各形状は、2.5型のSFF(Small Form Factor)である。このような形状により、メモリシステム3Bは、エンタープライズ用HDD(eHDD)と互換形状(コンパチ形状)を図ることができ、eHDDとの容易なシステム互換性を実現することができる。
なお、メモリシステム3Bは、エンタープライズ用に限られない。例えば、メモリシステム3Bは、ノートブック型ポータブルコンピュータ又はタブレット型端末のようなコンシューマ用の電子機器の記憶媒体としても適用可能である。
以上説明したように、本実施形態で説明した構成を持つ情報処理システム1B及びストレージシステム100においては、大容量の記憶に、上記第1乃至第3の実施形態と同様の効果を得ることができる。
[第5の実施形態]
本実施形態では、上記第1乃至第4の実施形態の変形例又は具体例を説明する。
本実施形態においては、ソフトウェア定義型SSDプラットフォームの機能について説明する。
本実施形態に係るソフトウェア定義型SSDプラットフォームは、例えば、複数のプロセッサを備えるコントローラに対して移植可能なOSであり、並列処理を実現する。
ソフトウェア定義型SSDプラットフォームは、例えば、統一されたFTL(Flash Translation Layer)設計にしたがって生成されている。より具体的には、ソフトウェア定義型SSDプラットフォームは、上位から下位への順で、共通インタフェースレイヤ、FTL、デバイスドライバを含む。共通インタフェースレイヤは、プログラムに対する共通インタフェースを提供する。共通インタフェースレイヤの下位レイヤであるFTLは、不揮発性メモリに対する例えばブロックなどの領域の割り当て、アドレス変換、ウェアレベリング、ガーベージコレクションなどの全体的な管理を行う。ここで、ウェアレベリングとは、例えば、不揮発性半導体メモリに対するデータの書き換えを均等に分散させて使用寿命を延ばす処理である。
さらに、ソフトウェア定義型SSDプラットフォームは、ネームスペースの割り当て、サイズ、数の管理、アクセス制御を行う。
これらのソフトウェア定義型SSDプラットフォームによる管理は、管理情報にしたがって実行される。
ソフトウェア定義型SSDプラットフォームは、自動性能チューニング(Automatic Performance Tuning)機能と、動的負荷分散(Dynamic Load Balancing)機能、タスクスケジューリング機能を含み、ハードウェア部4Hを抽象化する。
図15は、本実施形態に係るソフトウェア定義型プラットフォームの構成の一例を示すブロック図である。
プログラムFは、例えば、ファームウェア、アプリケーションプログラム、モジュール、又はハンドラなどのような各種ソフトウェアである。本実施形態において、プログラムFはSSDファームウェアの場合を例として説明するが、プログラムFの種別についてはこれに限定されない。
プログラムFは、処理内容ごとに、タスクとして複数のモジュールに分割される。例えば、プログラムFは、ホストインタフェース制御部Fa、書き込み制御部Fb、読み込み制御部Fc、又はこれら以外のモジュール単位に分割されてもよい。さらに、プログラムFは、例えば、FTL部、ウェアレベリング部を含むとしてもよい。
複数のモジュールは、タスク間で通信をするためにタスク間通信(Inter task Communication)APIに準拠しており、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取りする。
ソフトウェア定義型プラットフォームは、動的タスクスケジューラ15D、HAL(Hardware Abstruction Layer、ハードウェア抽象化レイヤ)301と、デバイスドライバ311と、ハードウェア部4Hと、不揮発性メモリ5とを含む。
動的タスクスケジューラ15Dは、タスクの実行順序を制御する。より具体的には、動的タスクスケジューラ15Dは、HAL APIに準拠しており、複数のモジュールに対して、及び、HAL301に対して、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取りする。
HAL301は、ハードウェア部4Hを抽象化する。例えば、HAL301は、メモリ装置のハードウェア部4H及びデバイスドライバ311とメモリ装置上で動作するプログラムFとの間に存在するソフトウェアで実装される。HAL301は、プログラムF及び動的タスクスケジューラ15Dから、ハードウェアごとに異なる差異を隠蔽する。より具体的には、HAL301は、プログラムF及び動的タスクスケジューラ15Dがハードウェア部4H及びデバイスドライバ311に非依存となるように、動的タスクスケジューラ15Dとハードウェア部4H及びデバイスドライバ311との間で基本動作を実現し、ハードウェア部4Hの違いを吸収する共通モジュールである。例えばハードウェア部4H又はデバイスドライバ311に仕様変更が生じた場合は、仕様変更に合わせてHAL301のみを修正すればよく、プログラムF及び動的タスクスケジューラ15Dはハードウェア部4H又はデバイスドライバ311の仕様変更の影響を受けない。
デバイスドライバ311は、ハードウェア部4Hをアクセスするためのソフトウェアである。デバイスドライバ311は、複数のデバイスドライバを含んでいてもよく、例えばNANDフラッシュ用のデバイスドライバ311a、周辺装置用のデバイスドライバ311b、ホスト装置用のデバイスドライバ311c、又はこれら以外のデバイスドライバを含む。なお、デバイスドライバ311は、ハードウェアで実現されてもよい。
ハードウェア部4Hは、ハードウェアであり、例えば、デバイスドライバ311と、複数のプロセッサP1〜PNと、メモリ7Aとを含む。
上述のように、ソフトウェア定義型SSDプラットフォームにおいては、不揮発性メモリ5へのアクセスは、プログラムFより、動的タスクスケジューラ15D、HAL301、デバイスドライバ311、ハードウェア部4Hを通じて、階層的に行われる。
図16は、本実施形態に係るソフトウェア定義型SSDプラットフォームで実現される2種類のスケジューリングを例示する図である。この図16では、共有メモリSMにアクセス可能なプロセッサの数が4つの場合を例示している。しかしながら、共有メモリSMにアクセス可能なプロセッサの数は2以上であればよい。図16では、相互接続ネットワークNで通信可能なプロセッサの数が4つの場合を例示している。しかしながら、相互接続ネットワークNで通信可能なプロセッサの数は2以上であればよい。
ソフトウェア定義型SSDプラットフォームは、動的タスクスケジューラ15Dと、静的タスクスケジューラ15Sとを含む。
動的タスクスケジューラ15Dは、複数のプロセッサのうち、どのプロセッサにタスクを割り当てるかを管理する。
静的タスクスケジューラ15Sは、各プロセッサに割り当てられたタスクの実行順序を管理する。
メモリM0〜M8は、それぞれプロセッサP0〜P8に対応しており、それぞれプロセッサP0〜P8によってアクセスされる。共有メモリSMは、複数のプロセッサP0〜P3からアクセス可能である。相互接続ネットワークNは、複数のプロセッサP5〜P8間で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などの送信及び受信を行うためのネットワークである。
第1のアーキテクチャには、共有メモリプラットフォームが適用される。第1のアーキテクチャでは、複数のプロセッサP0〜P3が互いに共有メモリSMを経由して、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取りする。動的タスクスケジューラ15Dは、タスクをどのプロセッサに割り当てるか担当する。静的タスクスケジューラ15Sは、プロセッサP0〜P3ごとに、割り当てられたタスクのうちの次に実行するタスクを決定する。
共有メモリプラットフォームでは、どのプロセッサP0〜P3も同じ共有メモリSMにアクセスできる。このため、動的タスクスケジューラ15Dは、負荷の低いプロセッサを検出しタスクを割り振ることで、各プロセッサの負荷が一定となるようパフォーマンスを調整する。
第2のアーキテクチャは、単一のプロセッサP4とこのプロセッサP4に対応するメモリM4とを含む。静的タスクスケジューラ15Sは、プロセッサP4で次に実行するタスクを決定する。
第3のアーキテクチャには、分散メモリプラットフォームが適用される。第3のアーキテクチャでは、複数のプロセッサP5〜P8が、互いに相互接続ネットワークN経由で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令を送信及び受信する。静的タスクスケジューラ15Sは、プロセッサP5〜P8ごとに次に実行するタスクを決定する。
分散メモリプラットフォームでは、各プロセッサP5〜P8が一連のタスク(以下、タスクチェーンと呼ぶ)を実行する場合、タスク内容に応じて、あらかじめタスクごとに処理するプロセッサを決めておくことにより、処理を高速化することができる。例えば、読み出しタスク、ホスト通信タスク、書き込みタスクを順に処理するタスクチェーンが多量に入力される場合、読み出しはプロセッサP5、ホスト通信はホスト通信インタフェースを持つプロセッサP6、書き込みはプロセッサP7が行うよう割り振られる。
しかしながら、分散メモリプラットフォームでは、プロセッサP5〜P8間での通信が必要となる。例えば、読み出しタスクを実行したプロセッサP5は、ホスト通信タスクを実行するプロセッサP6に読み出しタスクの処理結果(読み出しデータなどを含む)を渡す。ここで、プロセッサP5〜P8間の通信時間がタスクの処理時間に対して十分小さくない場合は、タスクごとに処理するプロセッサを分離すると、処理が遅くなる場合がある。この場合は、特定のプロセッサにある程度まとまったタスクを割り振ることで、処理の高速化を行う。すなわち、同じタスクチェーンに属するタスクは、ある程度(例えば所定の数)同じプロセッサに割り当てることで、タスクチェーンの実行が複数のプロセッサ間で順送り(例えばたらい回し)されることを防止する。
本実施形態では、タスクチェーンの実行において、読み出しと書き込みとが同時にならないとする。
本実施形態において、タスクを生成する規則としては、例えば、グローバル変数、静的変数、ヒープメモリ、例えばマロック関数及びフリー関数などのような動的にメモリを確保する関数を用いない。
タスクを生成する規則としては、例えば、スピンロックを用いることなく、優先順位をつけるキューを用いる。
タスクを生成する規則としては、例えば、直接ハードウェアを制御しない。
タスクを生成する規則としては、自動変数を用いてもよく、HAL301経由でハードウェアアクセラレータを用いてもよい。ここで、ハードウェアアクセラレータは、例えば、コンピュータの処理を高速化するために追加されるハードウェアとする。
本実施形態において、動的タスクスケジューラ15Dは、静的タスクスケジューラ15Sとともに、低レイテンシのタスク切り替えを行う。
本実施形態に係るタスクは、各プロセッサで協働的に優先付けされた順序で実行される。
動的タスクスケジューラ15Dは、例えば、Lock-freeアルゴリズムを用いる。Lock-freeアルゴリズムとは、共有データにロックをかけて保護するアルゴリズムとは違い、複数のタスクが同時並行的に、ある対象データを壊すことなしに、読み出し、及び、書き込み可能なアルゴリズムである。
動的タスクスケジューラ15Dは、例えば、Run-To-Completionスケジューリングを行う。Run-To-Completionスケジューリングとは、タスクを、完全に終了するか、又は、明示的に制御をスケジューラに明け渡すまで実行させるスケジューリングモデルである。
タスク間通信には、例えば、メッセージパッシング型のタスク間通信が用いられる。
本実施形態において、マスタスケジューラはタスクの移植を可能とし、動的負荷分散及び自動性能チューニングを行う。従属スケジューラはタスクの切り替えレイテンシを低減する。
図17は、本実施形態に係るメモリ装置の各階層で保持されるパラメータの一例を示す図である。
上述のように、プログラムFは、動的タスクスケジューラ15D、HAL301、デバイスドライバ311、及びハードウェア部4Hを通じてNANDフラッシュメモリB0〜BPへ階層的にアクセスする。ここで、アクセスの際に各階層で保持されるパラメータは、同じパラメータであっても階層ごとに異なる形式で表記されていてもよい。これにより、階層ごとに適切な抽象度でパラメータを保持することができる。
例えば、図17は不揮発性メモリ5に対するアクセスにおいて許容されるアクセス遅延時間の、各階層における記述方式を例示する。なお、不揮発性メモリ5に対するアクセスにおいて遅延時間を許容することで、データ送受信の際の処理に時間をかけることできるため、例えば誤り訂正符号を長くすることにより読み出し及び書き込みの際のエラーを低減させることができる。
パラメータP1701は、プログラムFで保持されるアクセス遅延時間を示す。プログラムFでは、例えばアクセス遅延時間は2ビットの情報であり、4種類の遅延時間(遅延を許容しない、短い遅延を許容する、一般的な遅延を許容する、長い遅延を許容する)が定義される。このアクセス遅延時間は、例えば規格により定義されていてもよい。
パラメータP1702は、HAL301で保持されるアクセス遅延時間を示す。HAL301では、例えばアクセス遅延時間は8ビットの情報として定義される。この場合、プログラムFからHAL301へアクセスする際に、パラメータの変換が行われる。例えば、プログラムFで「00」であれば、HAL301では0となり、プログラムFで「01」であれば、HAL301では1〜85のいずれかとなり、プログラムFで「10」であれば、HAL301では86〜170のいずれかとなり、プログラムFで「11」であれば、HAL301では171〜255のいずれかとなる。プログラムFにおけるパラメータP1701は、他のパラメータとの関連などにより、HAL301上での適切な値に変換される。
パラメータP1703は、ハードウェア部4Hで保持されるアクセス遅延時間を示す。ハードウェア部4Hでは、例えばアクセス遅延時間は3種類のパラメータ(DLA(Direct Look Ahead)方式の有無、繰り返し復号回数、遅延時間しきい値)として定義される。DLA方式とは、メモリセル間の干渉によるしきい値電圧のシフトの影響を、読み出し動作において補償する方法である。各パラメータの取りうる値は、例えばDLA方式の有無はOn又はOffの1ビットの情報、繰り返し復号回数は1〜5、遅延時間しきい値は1〜5などであってもよい。ハードウェア部4Hは、これらの値の組み合わせをパラメータセットとして、いくつか保持していてもよい。HAL301におけるパラメータP1702は、他のパラメータなどとの関連により、ハードウェア部4H上での適切なパラメータの組又はパラメータセット番号に変換される。
なお、本実施形態ではパラメータP1701はプログラムF、パラメータP1702はHAL301、パラメータP1703はハードウェア部4Hとしたが、パラメータが保持される階層はこれらと異なる階層であってもよい。例えば、パラメータP1702はNANDコントローラ又はNANDフラッシュのデバイスドライバ311aに保持されてもよく、パラメータP1703はNANDフラッシュメモリB0〜BPに保持されてもよい。
図18乃至図21を用いて、タスクスケジューラの動作について述べる。以下の図18乃至図21では、それぞれのタスクの実行を命令する実行コマンドが各種のキューで管理される場合を例として説明する。しかしながら、各種のキューで管理される対象は、実行コマンドに代えてタスク本体でもよい。
図18は、本実施形態に係るスケジューリングの一例を示すフローチャートである。
図19は、本実施形態に係るスケジューリングの第1の例を示す図であり、図18のS1801の動作を示す。
図20は、本実施形態に係るスケジューリングの第2の例を示す図であり、図18のS1802の動作を示す。
図21は、本実施形態に係るスケジューリングの第3の例を示す図であり、図18のS1803の動作を示す。
ハードウェア部4Hは、マスタプロセッサPmと、従属プロセッサPS1,PS2とを備える。マスタプロセッサPmは、マスタキューMQと従属キューSQ0とに対応付けられている。従属プロセッサPS1,PS2は、それぞれ従属キューSQ1,SQ2に対応付けられている。
マスタキューMQは、動的タスクスケジューラ15Dによって管理される。
従属キューSQ0,SQ1,SQ2は、静的タスクスケジューラ15Sによって管理される。
タスクには、移植可能タスクと、専用タスクとがある。移植可能タスクは、マスタプロセッサPm、従属プロセッサPS1,PS2のいずれでも実行可能である。専用タスクは、マスタプロセッサPmと従属のプロセッサPS1,PS2とのうち特定のプロセッサで実行することを必要とするタスクである。
ステップS1801において、動的タスクスケジューラ15Dは、移植可能タスクの実行コマンドを複数のプロセッサの負荷分散のためにマスタキューMQに格納する。
図19の例では、従属プロセッサPS1及び従属プロセッサPS2は、動的タスクスケジューラ15Dにしたがって、マスタキューMQに、移植可能タスクの実行コマンドCO1〜CO4を格納する。
ステップS1802において、動的タスクスケジューラ15Dは、所定の時間内に全ての処理が終わるよう、マスタキューMQによって管理されている実行コマンドの中から選択された実行コマンドを、負荷の低いプロセッサに対応する静的タスクスケジューラ15Sに渡す。静的タスクスケジューラ15Sは、受けた実行コマンドを従属キューに格納する。具体的には、動的タスクスケジューラ15Dは、各プロセッサPm,PS1,PS2の状態を監視し、最も処理負荷の低いプロセッサの従属キューへ移植可能タスクの実行コマンドを移動させる。処理負荷の高低は、例えば動的タスクスケジューラ15Dが、各従属キューSQ0,SQ1,SQ2に蓄積されたタスクの実行コマンドの量(数)が所定量を超えているか否かにより判定するとしてもよい。処理負荷が低いプロセッサがない場合は、動的タスクスケジューラ15Dはタスクの実行コマンドの移動を行わなくてもよい。
図20の例では、動的タスクスケジューラ15Dは、マスタプロセッサPm、従属プロセッサPS1、従属プロセッサPS2の処理負荷が低いと判断し、マスタキューMQが保持するタスクの実行コマンドCO1〜CO4のうち、タスクの実行コマンドCO3を従属キューSQ0へ、タスクの実行コマンドCO1を従属キューSQ1へ、タスクの実行コマンドCO2を従属キューSQ2へそれぞれ移動させる。
ステップS1803において、動的タスクスケジューラ15Dは、専用タスクの実行コマンドを、直接、専用タスクに対応するプロセッサの静的タスクスケジューラ15Sに渡し、静的タスクスケジューラ15Sは受けた実行コマンドを従属キューに格納する。
図21の例では、マスタプロセッサPm、従属プロセッサPS1は、動的タスクスケジューラ15Dにしたがって従属プロセッサPS1の専用タスクの実行コマンドCO5,CO6を静的タスクスケジューラ15Sに渡し、静的タスクスケジューラ15Sは専用タスクの実行コマンドCO5,CO6を従属キューSQ1に格納する。また、従属プロセッサPS2は、動的タスクスケジューラ15DにしたがってマスタプロセッサPmの専用タスクの実行コマンドCO7を静的タスクスケジューラ15Sに渡し、静的タスクスケジューラ15Sは専用タスクの実行コマンドCO7を従属キューSQ0に格納する。
ステップS1804において、静的タスクスケジューラ15Sは、各従属キューに格納された移植可能タスクの実行コマンド又は専用タスクの実行コマンドの実行順序を管理し、例えば先入先出方式にしたがって実行すべき実行コマンドを選択する。すなわち、静的タスクスケジューラ15Sは、キューの先頭にある実行コマンドを処理対象として選択し、処理対象となった実行コマンドをキューから削除する。
ステップS1805において、静的タスクスケジューラ15Sは、実行の結果発生した次のタスクの実行コマンドが移植可能タスクの実行コマンドか否か判断する。
次のタスクの実行コマンドが移植可能タスクの実行コマンドの場合、ステップS1806において、静的タスクスケジューラ15Sは、次のタスクの実行コマンドを、動的タスクスケジューラ15Dに渡し、動的タスクスケジューラ15Dは受けた実行コマンドを、マスタキューMQに格納する。
次のタスクの実行コマンドが専用タスクの実行コマンドの場合、ステップS1807において、静的タスクスケジューラ15Sは、次のタスクの実行コマンドを、実行先のプロセッサの静的タスクスケジューラ15Sに渡し、静的タスクスケジューラ15Sは受けた実行コマンドを、対応する従属キューに格納する。
なお、S1803と、S1801及びS1802との順番は、前後してもよい。また、図19乃至図21では、従属プロセッサが2つである場合を例として説明したが、従属プロセッサの数はn個(nは任意の正数)であってもよい。移植可能タスクが存在しない場合には、ステップS1801及びステップS1802が省略されてもよい。専用タスクが存在しない場合には、ステップS1803が省略されてもよい。
図22は、タスクチェーンの例を示す図である。
図22のそれぞれのキューQは、マスタキューMQ、従属キューSQ0〜SQn、又は、マスタキューMQと従属キューSQ0〜SQnとの双方に対応するとしてもよい。図22において、タスクの実行コマンドは、発生後、対応するタスクが実行されるまでキューQで管理される。
タスクチェーンとは、例えば、連続して実行される2以上のタスクのつながりである。HAL301hは、特定のインタフェースにしたがって、外部から、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などを受ける。例えば、HAL301hは、ホスト装置又は不揮発性メモリからの入出力コマンド、電源イベント、タイマーイベント、NANDフラッシュメモリのイベントなどの外部割込みイベントに基づいて、実行コマンドを発行し、HAL301hとタスクTとの間のキューQに格納する。より具体的には、外部割込みイベントは、例えばHAL301hに対するデータ送受信コマンド、不揮発性メモリ5に対する読み出し又は書き込み又は消去コマンド、電源制御イベント、又は、タイマー割込みイベントなどである。なお、外部割込みイベントは、上述のものに限られない。
タスクチェーンの終了後、HAL301hは、特定のインタフェースにしたがって、外部へデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などを送る。
すべてのタスクチェーンは、割り込みハンドラによって呼び出し可能である。タスクは、次のタスクを呼び出す前に、次のタスクで必要なすべての情報(パラメータ)を準備する。
タスクの実行後、この実行されたタスクは複数のタスクの中から次に実行されるタスクを選択可能としてもよい。例えば、タスクTが正常終了した場合には、タスクTは通常処理としてタスクチェーンTC1を選択し、次に処理されるタスクTnの実行コマンドをキューQに格納してもよい。タスクTが異常終了した場合には、タスクTは例外処理としてタスクチェーンTC2を選択し、次に処理されるタスクTeの実行コマンドをキューQに格納してもよい。
また、通常処理のタスクチェーンTC1及び例外処理のタスクチェーンTC2が例えば従属プロセッサPS1で処理中である場合、動的タスクスケジューラ15Dはタスクチェーンに含まれるタスクの実行コマンドを一旦マスタキューMQへ送信すると、送受信時間がかかり処理が遅延する。そのため、動的タスクスケジューラ15Dは、従属プロセッサPS1の負荷が低いと判断した場合は、次に処理するタスクの実行コマンドを従属プロセッサPS1の静的タスクスケジューラに渡してもよい。
ホスト装置側のハードウェア抽象化レイヤであるHAL301hは、デバイスへのアクセスを行わない。実際のデバイスアクセスは、タスクTが起動するタスクチェーンTC1又はタスクチェーンTC2に含まれるデバイスドライバHAL301dにより行われる。HAL301dによるデバイスアクセスの詳細については、図25乃至図28で後述する。
タスクTは、実行中に分岐先のタスクを呼び出し可能としてもよい。具体的には、タスクTは、通常処理のタスクチェーンTC1又は例外処理のタスクチェーンTC2内の並列処理可能な1以上のタスク(例えばTb1及びTb2)を、負荷の低いプロセッサに割り振ってもよい。この場合、タスクTは分岐処理のタスクチェーンTC3及びTC4を生成する。分岐処理は、タスクチェーンTC3のようにHAL301dへのアクセスがない分岐処理であってもよく、タスクチェーンTC4のようにHAL301dへのアクセスがある分岐処理であってもよい。分岐処理は、例えばログ記録などである。
HAL301dは、タスクチェーンの終端のタスクの実行後、キューQに格納された実行コマンドを、キューQから取り出し、取り出された実行コマンドを実行し、例えば外部へ、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などを送る。
図23は、タスク間での情報の受け渡しの例を示す図である。例えば、タスク間で受け渡しされる情報を、タスク間メッセージと呼ぶ。
この図23において、現在処理中又は処理済のタスクTpは作業領域WApに、タスクTpが正常終了した場合に選択する次タスクTnは作業領域WAnに、タスクTpが異常終了した場合に選択する例外タスクTeは作業領域WAeに、それぞれ対応付けられており、それぞれのタスクは対応する作業領域より情報を書き込み及び読み出し可能である。作業領域WAp、作業領域WAn、及び作業領域WAeは、図16のメモリM0〜M8に含まれる。
タスクTp、次タスクTn、例外タスクTeは、それぞれ、共有作業領域CWAに、情報を格納(書き込み)及び参照(読み出し)可能である。共有作業領域CWAは、図16の共有メモリSMに含まれる。
作業領域WAp、作業領域WAn、作業領域WAe、及び共有作業領域CWAは、複数種類のメモリ(例えばSRAM、DRAM)を含んでいてもよい。
上述のように、タスクTpが実行された後に発生される次のタスクの実行コマンド又は例外タスクの実行コマンドは、キューQで管理される。次タスクTnが実行された後に発生される実行コマンド、及び、例外タスクTeが実行された後に発生される実行コマンドも同様にそれぞれキューQによって管理される。なお、図23では、タスクTpと次タスクTn及び例外タスクTeとの間に存在するキューQの記載を省略している。
タスクTpは、当該タスクTpが実行される前に実行されたタスクに対応する作業領域における情報を参照可能としてもよい。
タスクTpは、当該タスクTpが実行された後に実行される次タスクTnに対応する作業領域WAn、又は例外タスクTeに対応する作業領域WAeに、情報を格納可能としてもよい。
次タスクTn、及び、例外タスクTeは、次タスクTn、及び、例外タスクTeが実行される前に実行されたタスクTpに対応する作業領域WApにおける情報を参照可能としてもよい。
次タスクTn、及び、例外タスクTeは、次に実行されるタスクに対応する作業領域に、情報を格納可能としてもよい。
より具体的には、タスク間メッセージの受け渡しを行う方法は、次の第1乃至第3の方法が挙げられる。なお、図23における矢印は、タスク間メッセージが移動する方向を示す。
第1の方法は、矢印S2301に示すように、タスクTpの作業領域WApにタスク間メッセージを格納する方法である。この場合、次に処理されるタスク(次タスクTn又は例外タスクTe)が作業領域WApをアクセスし、タスク間メッセージを参照する。
第2の方法は、矢印S2302に示すように、タスクTpが、次に処理されるタスクの作業領域にタスク間メッセージを格納する方法である。次に処理されるタスクが次タスクTnの場合は、タスク間メッセージは作業領域WAnに格納され、次タスクTnは作業領域WAnに格納されたタスク間メッセージを参照する。次に処理されるタスクが例外タスクTeの場合は、タスク間メッセージは作業領域WAeに格納され、例外タスクTeは作業領域WAeに格納されたタスク間メッセージを参照する。
第3の方法は、矢印S2303に示すように、共有作業領域CWAにおけるタスク間メッセージを複数のタスクがアクセスする方法である。タスクTpは、共有作業領域CWAにタスク間メッセージを格納し、次に処理されるタスク(次タスクTn又は例外タスクTe)は、共有作業領域CWAに格納されたタスク間メッセージを参照する。
各タスクは、前のタスク又は外部のハンドラによって呼び出される。前のタスクは、次のタスクを呼び出す前に、すべての必要な情報(パラメータ)を準備する。各タスクは、タスク間メッセージを、タスクを実行するプロセッサに対応する作業領域と次のタスクの作業領域とのうちの少なくとも一方に格納する。
図24は、タスクに対応する作業領域の例を示す図である。
作業領域は、高速アクセス可能な作業領域WAfと、記憶容量の大きい作業領域WAlとを含む。タスク制御APIは、タスク間の関係と、ローカルの作業領域情報のやり取りとを規定する。タスクTは、前のタスクTppの後に実行される。タスクTの実行後、次タスクTn又は例外タスクTeが実行される。タスクTは、他のタスクの作業領域をアクセス可能としてもよい。タスクTは、共有作業領域CWAの情報を参照又は共有作業領域CWAへ情報を格納する。
なお、複数のタスクの間で階層構造を持つとしてもよい。親タスク及び子タスクがそれぞれ保持するリソースは、相互に参照可能でもよい。例えば、タスクTの親タスクTpaが存在する場合、タスクTは親タスクTpaのタスク制御構造とタスク制御構造における作業領域位置とを参照可能としてもよい。
HAL APIは、ホストインタフェース制御、NAND制御、電源制御、タイマー制御に用いられる。
ホストインタフェース制御は、コマンド到着、データ到着、など、ホストイベントをスケジューラへ通知する。
NAND制御は、優先度を用いて読み出しコマンド、書き込みコマンド、消去コマンドをキューイングする。NAND制御は、NANDフラッシュメモリに関するNANDイベントをスケジューラへ通知する。
電源制御は、電源イベントをスケジューラへ通知し、電源モードを制御する。
タイマー制御は、タイマーへパラメータをセット又はリセットする。タイマー制御は、タイマーイベントをスケジューラへ通知する。
図25及び図26を用いて、HALを用いたタスク間通信について述べる。
図25は、本実施形態に係るHALによる通信の例を示すフローチャートである。
図26は、本実施形態に係るHALによる通信の例を示すブロック図である。
HAL301dは、デバイスドライバタスクTd及び割り込みハンドラ303を含む。また、HAL301dは、デバイスドライバタスクTdの処理順序を管理するためのデバイスドライバタスクキューDQ及び作業領域WAhを備える。なお、図26では、タスクTpとデバイスドライバタスクTdとの間に存在するキューQ、割り込みハンドラ303と次タスクTn及び例外タスクTeとの間に存在するキューQの記載を省略している。デバイスドライバタスクキューDQ及び作業領域WAhは、同じメモリ空間上に配置されていてもよい。作業領域WAhは、他のタスクからアクセス不可である。
ステップS2501において、タスクTpは、HAL301dを起動する。具体的には、タスクTpは、タスクTpの処理完了後にキューQにデバイスドライバタスクTdの実行コマンドを格納し、静的タスクスケジューラ15S又は動的タスクスケジューラ15Dが、キューQに格納されている実行コマンドにしたがって次に処理されるデバイスドライバタスクTdを起動する。
ステップS2502において、デバイスドライバタスクTdは、次に処理する次タスクTnの情報及びデバイスアクセスに必要なパラメータを取得する。デバイスドライバタスクTdは、次タスクTnの情報及び必要なパラメータを、タスク間メッセージとしてタスクTpの作業領域WApから読み込んでもよい。
ステップS2503において、デバイスドライバタスクTdは、デバイスアクセスリクエストを発行する。デバイスアクセスリクエストは、デバイスドライバタスクキューDQに格納される。また、デバイスドライバタスクTdは、ステップS2502で読み込んだタスク間メッセージを作業領域WAhに格納する。
ステップS2504において、デバイスドライバタスクTdは、デバイスドライバタスクキューDQよりデバイスアクセスリクエストを1つ取り出し、デバイスアクセスのための割り込みを発生させる。
ステップS2505において、ステップS2504で発生した割り込みにより、割り込みハンドラ303が起動する。
ステップS2506において、割り込みハンドラ303にしたがって、すなわち割り込みハンドラ303の処理シーケンス内で、デバイスドライバ311がデバイスへアクセスを行い、リクエストされた処理を行う。
ステップS2507において、割り込みハンドラ303は、デバイスドライバ311より得られたデバイスアクセス結果(戻り値)を、タスクTpの作業領域WApに格納してもよい。
ステップS2508において、割り込みハンドラ303は、デバイスドライバタスクTdの処理結果に応じて、キューQに次タスクTnの実行コマンド又は例外タスクTeの実行コマンドを格納する。静的タスクスケジューラ15S又は動的タスクスケジューラ15Dは、次に処理される次タスクTn又は例外タスクTeを起動する。
次に処理されるタスクが次タスクTnである場合、ステップS2509において、次タスクTnはタスクTpの作業領域WApを参照し、ステップS2507で格納されたデバイスアクセス結果(戻り値)を取得する。なお、次に処理されるタスクが例外タスクTeの場合でも、同様に例外タスクTeは作業領域WApよりデバイスアクセス結果(戻り値)を取得する。
なお、HAL301dは、複数のタスクから呼び出されてもよい。この場合、HAL301dは複数のタスクのうちどのタスクのデバイスアクセスリクエストであるかを識別する識別情報を、作業領域WAhに格納されたタスク間メッセージより取得してもよい。また、複数のタスクは、それぞれの次タスク又は例外タスクを特定可能である。
本実施形態において、HAL301dはデバイスアクセス結果をタスク間メッセージとしてタスクTpの作業領域WApに格納し、次に処理されるタスクはタスクTpの作業領域WApを参照してタスク間メッセージを得る。これにより、タスクTpと次に処理される次タスクTnは、HAL301dの存在を意識することなく、直接タスク間通信を行うように振る舞う。すなわち、タスク間通信において、HAL301dを秘匿することができる。
図27は、NANDフラッシュドライバに対するHAL APIに準拠した処理の例を示すフローチャートである。
図28は、NANDフラッシュドライバに対するHAL APIの例を示すブロック図である。
ステップS2701では、デバイスドライバタスクTdは、タスクTpの次に実行される次タスクTnの識別情報及びデバイスアクセスに必要なNANDフラッシュパラメータを、タスク間メッセージとしてタスクTpの作業領域WApから読み込む。
ステップS2702において、キューQで管理されているNANDフラッシュアクセスリクエストがNANDフラッシュドライバ311aへ発行される。デバイスアクセスリクエストは、デバイスドライバタスクキューDQに格納される。デバイスドライバタスクTdは、ステップS2701で読み込んだタスク間メッセージを作業領域WAhに格納する。
また、NANDフラッシュドライバ311aは、NANDフラッシュメモリB0〜Bpにアクセスする。
ステップS2703において、デバイスドライバタスクTdは、NANDフラッシュメモリB0〜Bpへのアクセス完了後、タスクTpの作業領域WApにアクセス結果を格納する。アクセス結果は、例えばNANDフラッシュメモリB0〜Bpの状態を表すメモリステータス情報であってもよい。
ステップS2704において、デバイスドライバタスクTdは、キューQに次に処理されるタスクである次タスクTnの実行コマンドを格納する。静的タスクスケジューラ15S又は動的タスクスケジューラ15Dは、次タスクTnの実行コマンドにしたがって次タスクTnを起動する。
本実施形態において、ソフトウェア定義型のSSDプラットフォームは、ホスト制御を実行する。ホスト制御は、例えば、コマンドをサポートし、ネームスペースを制御し、QoS(Quality of Service)制御を行う。
コマンドのサポートとして、例えば、ホスト制御は、読み出し及び書き込みにおける複数のコマンドを最も効率のよい順序に並び替えて実行するネイティブコマンドキューイング(NCQ:Native Command Queuing)を行う。
ネームスペースの制御として、例えば、ホスト制御は、各ネームスペースに対するQoS制御を行う。QoS制御は、例えば、トラフィックの属性に応じて、転送処理に差異をつけること、及び、帯域を保証すること、を含む。例えば、ホスト制御は、各ネームスペースに対応するタスクチェーンを特定する。
QoS制御として、例えば、ホスト制御は、NANDフラッシュコントローラに対する受付可能レイテンシ情報、タスク制御に対する優先制御を管理する。
図29は、NCQを用いたタスクの割り当ての例を示すブロック図である。
各タスクチェーンTC1〜TCnは、IDによって区別される。各タスクチェーンTC1〜TCnは、独立して処理される。タスクのプログラムP1〜Pmは、複数のタスクチェーンTC1〜TCnで共有可能としてもよい。それぞれのタスクチェーンTC1〜TCnに含まれるタスクT1〜Tmに対応する作業領域WA1〜WAmは、タスクチェーンTC1〜TCnごとに独立して確保される。
具体的には、例えばホスト装置から不揮発性メモリ5へのアクセスの際、ホスト装置よりn個の読み込みコマンドが発行され、n個の読み込みコマンドに対応するタスクチェーンTC1〜TCnが実行される。タスクチェーンTC1〜TCnは、それぞれm個のタスクT1〜タスクTmを含む。タスクチェーンTC1〜TCnには、例えばホスト装置又はメモリ装置により、それぞれタスクチェーンIDが付与されてもよい。
ここで、タスクチェーンTC1〜TCnは全て読み込みコマンドであるため、タスクチェーンTC1〜TCnに含まれるタスクT1〜タスクTmは、タスクチェーンIDによらず共通である。このため、タスクT1〜タスクTmのプログラムP1〜PmはタスクチェーンTC1〜TCn間で共有されることにより、タスクチェーンTC1〜TCnごとに独立したプログラムを保持する場合と比べ、システム全体が管理するリソースが減る。具体的には、各タスクチェーンTC1〜TCnのタスクT1はプログラムP1を共有し、各タスクチェーンTC1〜TCnのタスクTmはプログラムPmを共有する。
上述のように、各タスクチェーンTC1〜TCnは同じタスクを処理するプログラムを共有するため、異なるタスクチェーンに含まれる同じタスクは、同時に処理されない。例えば、プログラムP1により処理されるタスクチェーンTC1〜タスクチェーンTCnのタスクT1は、同時に処理されない。なお、各タスクチェーンTC1〜TCnにおいて、1つのタスクチェーン内では、同時に複数のコマンドは実行されない。
また、異なるタスクチェーンに含まれる同じタスクは、それぞれ異なるパラメータを保持するため、それぞれ異なる作業領域を確保する。例えば、タスクT1は作業領域WA1を確保し、タスクTmは作業領域WAmを確保する。タスクが保持するパラメータは、例えば処理範囲(経過)を表す進行管理パラメータ及びタスクの処理結果などを含む。
なお、図29はタスクチェーンTC1〜TCnがすべて同じコマンドである場合を例示したが、タスクチェーンTC1〜TCnが互いに異なるコマンドのタスクチェーンであってもよい。
図30は、本実施形態に係るソフトウェア定義型SSDプラットフォームの機能の一例を示すブロック図である。図30は、図15に示されるソフトウェア定義型SSDプラットフォームの構成を、機能ブロック単位で分割し、機能ブロック同士の関係を表現している。以下では、プログラムFがアクセスする不揮発性メモリ5はNANDフラッシュメモリである場合について説明するが、不揮発性メモリ5はNANDフラッシュメモリに限定されない。
ソフトウェア定義型SSDプラットフォームは、例えばコマンド制御部3101、送受信制御部3102、書き込み制御部3103、読み出し制御部3104、書き込みバッファ3105、NAND書き込み制御部3106、読み出しバッファ3107、NAND読み出し制御部3108、ルックアップテーブル3109、ルックアップテーブルキャッシュ3110、NAND制御部3111、ガーベージコレクション制御部3112を含む。
コマンド制御部3101は、ホスト装置との間で、コマンドを送受信する。コマンド制御部3101は、ホスト装置から受信したコマンドが書き込みコマンドである場合は、書き込み制御部3103へ書き込みコマンドを送る。また、コマンド制御部3101は、ホスト装置から受信したコマンドが読み出しコマンドである場合は、読み出し制御部3104へ読み出しコマンドを送る。
なお、ホスト装置とコマンド制御部3101との間で送受信されるコマンドと、ソフトウェア定義型SSDプラットフォーム内部で送受信されるコマンドとが同じ名称の場合でも、コマンド形式はそれぞれ異なっていてもよい。
送受信制御部3102は、ホスト装置との間で、データを送受信する。送受信制御部3102は、ホスト装置から受信したデータを書き込みバッファ3105へ格納する。送受信制御部3102は、NANDフラッシュメモリから読み出されたデータを読み出しバッファ3107より受信し、ホスト装置へ送信する。
書き込み制御部3103は、コマンド制御部3101からの書き込みコマンドにしたがって、書き込みバッファ3105及びNAND書き込み制御部3106を制御する。具体的には、書き込みバッファ3105に格納されているデータをNANDフラッシュメモリに書き込むよう、NAND書き込み制御部3106へコマンドを送る。
読み出し制御部3104は、コマンド制御部3101からの読み出しコマンドにしたがって、読み出しバッファ3107及びNAND読み出し制御部3108を制御する。具体的には、NANDフラッシュメモリに格納されているデータを読み出した後、読み出しバッファ3107へ格納するよう、NAND読み出し制御部3108へコマンドを送る。
NAND書き込み制御部3106は、NAND制御部3111へ書き込みコマンドを送信する。この際、ルックアップテーブル3109を参照し、参照結果をNAND制御部3111へ送信してもよい。
NAND読み出し制御部3108は、読み出したデータを読み出しバッファ3107へ格納する。
ルックアップテーブルキャッシュ3110は、ルックアップテーブル3109へのアクセスを高速化するためのキャッシュメモリであり、ルックアップテーブル3109のうちの少なくとも一部を格納する。また、ルックアップテーブルキャッシュ3110は、書き込み制御部3103より書き込みバッファ3105を経由して書き換えられてもよく、読み出し制御部3104より読み出しバッファ3107を経由して読み出されてもよい。
NAND制御部3111は、NANDフラッシュメモリに対し、書き込みコマンド及び読み出しコマンドにしたがって、データの書き込み及び読み出しを行う。NAND制御部3111は、読み出しデータをNAND読み出し制御部3108へ送信する。
ガーベージコレクション制御部3112は、書き込み制御部3103及び読み出し制御部3104を制御することにより、ガーベージコレクションを行う。
なお、書き込み制御部3103及びNAND書き込み制御部3106は、分離されていなくてもよい。読み出し制御部3104及びNAND読み出し制御部3108は、分離されていなくてもよい。
以上説明した本実施形態において、ハードウェア部4Hは、HAL301により秘匿される。また、タスクTpの次に処理される次タスクTnは、タスクTpのHAL301に対するアクセス結果を、タスクTpの作業領域WApを参照することにより得る。すなわち、タスク間通信において、ハードウェア部4Hは秘匿されるため、通信の安全性が高まる。また動的タスクスケジューラ15D及びプログラムFは、ハードウェア部4H又はデバイスドライバ311の仕様変更を意識しなくてよいため、プログラムコードの保守管理が容易となる。
本実施形態においては、共有メモリプラットフォームが採用される。このため、ソフトウェア定義型SSDプラットフォームは、動的タスクスケジューリングにより複数のプロセッサの負荷が一定となるようパフォーマンスを調整可能である。
本実施形態に係るソフトウェア定義型SSDプラットフォームは、各階層で同じパラメータを保持する場合、上位の階層(例えば、プログラムF)と下位の階層(例えばHAL301、デバイスドライバ311、ハードウェア部4H)とで、パラメータの内容を変化させる。これにより、階層ごとに適切な抽象度でパラメータを保持することができる。
本実施形態において、タスクチェーンは、タスクTの処理結果に応じて、通常処理のタスクチェーンと例外処理のタスクチェーンとに分岐されてもよい。これにより、タスクチェーン内で通常処理か例外処理かの複雑な分岐処理が不要となるため、タスクTをハードウェアに容易に置き換え可能である。
本実施形態においては、処理中のタスクTは、通常処理のタスクチェーンTC1又は例外処理のタスクチェーンTC2内の並列処理可能な1以上のタスクを、負荷の低いプロセッサに割り振る。これにより、ソフトウェア定義型SSDプラットフォーム全体の処理時間を短縮できる。
本実施形態においては、タスク間通信の方法として、タスクTpの作業領域WApにタスク間メッセージを格納する方法、タスクTpが次に処理される次タスクTnの作業領域WAnにタスク間メッセージを格納する方法、及び共有作業領域CWAを用いてタスク間メッセージをタスク同士で参照する方法を用意する。これにより、開発者は最適なタスク間通信の方法を選択して実装を行うことができる。
本実施形態においては、ホスト装置からの複数のコマンドにしたがって実行される複数のタスクチェーンの間で共有されるタスクが、共通のプログラムに基づいて実行される。これにより、タスクチェーンごとに独立してプログラムを保持する場合と比べ、システム全体が管理するリソースを減らすことができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。