本発明は、概して、半導体記憶素子に対するデータのI/O(Input/Output)の制御に関する。
半導体記憶素子(例えばNAND Flash Memory)の製造プロセス微細化により、半導体記憶素子の適用先が広がっている。特に、サーバ等のエンタープライズ分野では、HDD(Hard Disk Drive)に代えて、半導体記憶素子を有する半導体メモリデバイス(例えば、SSD(Solid State Drive)を採用する例が増加している。
SSDは、内部に複数の半導体記憶素子を搭載し、これら半導体記憶素子を並列に制御することで、短期間に大量のデータについての書き込みと読み出し(I/O処理)を実現する(例えば特許文献1)。
近年、SATA(Serial ATA)等の低速なHDD互換インターフェースに代えて、PCI-Express等のより高速なインターフェースを採用したSSDが発表されている。高速なインターフェースを採用したSSDについては、より高いI/O処理性能が望まれる。なぜなら、インターフェースが高速でも内部のI/O処理性能が低いと、内部のI/O処理性能がボトルネックとなるからである。SSDが採用するインターフェースが高速であるか否かに関わらず、I/O処理性能の向上は望まれる。
I/O処理性能の向上のためには、例えば、より多くの半導体記憶素子を並列に制御する必要がある。SSD内部の複数の半導体記憶素子の並列制御は、一般的に、SSD内部の組み込みプロセッサが行う。このため、SSD内の組み込みプロセッサの処理性能の限界によって並列制御可能な半導体記憶素子の数が制限され、SSDのI/O処理性能を制限してしまう事が考えられる。以下、SSD内の組み込みプロセッサの処理性能の限界によってSSDのI/O処理性能が制限されることを、「組み込みプロセッサ処理性能ネック」と記す。
組み込みプロセッサ処理性能ネックの解消の方法として、例えばI/O処理を専用のハードウェアにて実行することが考えられる。しかし、専用ハードウェアは、動的にリソースを確保したり複雑な処理を実行したりすることが困難であり、さらには、ソフトウェア(コンピュータプログラム)のように改変が容易でなく、採用されるメモリ(例えば主記憶又は半導体記憶素子)の仕様の変更やメモリ構成の変化に対応できない場合が生じる。また、バグ発見時の修正がソフトウェアと比べて困難なことから開発リスクの増加というデメリットがある。
SSDでは、搭載した半導体記憶素子の最小消去単位と最小書き込み単位が異なっていた場合(例えばNAND Flash Memory)、消去単位に含まれてしまうが消せないデータを退避させる(所謂リクラメーション)処理が必須となる。こうした制御では、退避するデータがなるべく少ない領域を消去処理対象の領域として選択する複雑な制御が必要となる。また、搭載した半導体記憶素子が書換え回数に制限を有する場合、SSDに搭載する複数の半導体記憶素子の領域ごとの書換え回数を平準化する(所謂ウェアレベリング)処理が必須となる。こうした制御では、領域毎の書換え回数を管理し、利用する領域を適切に選択する複雑な処理が必要となる。
上記のリクラメーション、ウェアレベリング等の複雑な処理を行う、ハードウェアの設計は困難である。また、こうした制御は、半導体メモリデバイスに搭載する半導体記憶素子の種別により、大きく変化する。例えば、必要となるウェアレベリング制御の精度は、半導体記憶素子の劣化耐性により大きく異なる。このため、仮にウェアレベリングをハードウェアにて実装した場合、採用可能な半導体記憶素子の種別に制限が生じる可能性がある。
一方、I/O処理をプロセッサにて実行する場合、コマンドの検知や各種制御をシリアルに行う必要があり、I/O処理に時間を要するという問題もある。
半導体メモリデバイスが、記憶素子群(1以上の半導体記憶素子)と、メモリコントローラとを有する。メモリコントローラが、上位装置からのI/Oコマンドの少なくとも一部が所定の条件を満たしている場合にそのI/Oコマンドの少なくとも一部を処理するプロセッサと、そのI/Oコマンドが所定の条件を満たしてない場合にI/Oコマンドの全てを処理する1以上のハードウェアロジック回路とを有する。
I/O処理を行う組み込みプロセッサの処理性能ネックが回避され、半導体メモリデバイスの高性能化と応答時間の短縮が期待できる。
実施形態に係るフラッシュメモリ(FM)モジュールの内部構成を示す図である。
ライトコマンド処理の一部でありライトコマンド受信処理を示す。
ライトコマンド処理の残りでありライトコマンド応答処理を示す。
リードコマンド処理の一部でありリードコマンド受信処理を示す。
リードコマンド処理の残りでありリードコマンド応答処理を示す。
論物変換テーブルを示す。
ブロック管理テーブルを示す。
サブライトヒットコマンド処理のフロー図である。
サブリードヒットコマンド処理のフロー図である。
デステージ処理のフロー図である。
リクラメーション処理のフロー図である。
上位装置の一例を示す。
上位装置の別の例を示す。
発明を実行するための形態
以下、一実施形態を説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
なお、以下の説明では、「abcテーブル」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「abcテーブル」のうちの少なくとも1つを「abc情報」と呼ぶことができる。
また、以下の説明では、半導体メモリデバイスが有する半導体記憶素子は、不揮発性半導体記憶素子であり、具体的には、NAND Flash Memoryのようなフラッシュメモリ(FM)であるとする。従って、半導体メモリデバイスは、不揮発性半導体メモリデバイスであり、具体的には、FMモジュールであるとする。FMモジュールは、SSDのようなFMデバイスの一例である。不揮発性半導体記憶素子は、FMに限らず、例えば、磁気抵抗メモリであるMRAM(Magnetoresistive random access memory)、抵抗変化型メモリであるReRAM(resistance random access memory)、強誘電体メモリであるFeRAM(Ferroelectric random access memory)等でもよい。また、不揮発性半導体記憶素子に代えて揮発性半導体記憶素子が採用されてもよい。
また、以下の説明では、FMは、複数の「物理ブロック」で構成され、各物理ブロックは、複数の「物理ページ」で構成されているとする。また、アクセス単位領域よりも消去単位領域の方が大きい。具体的には、物理ページ単位でデータがアクセス(リード及びライト)され、物理ブロック単位でデータが消去される。また、FMモジュールが提供する論理空間(論理アドレス空間)には、物理領域が所定の単位(例えばページ単位又はブロック単位)で割り当てられるが、論理空間のうち、物理ブロックが割り当てられている範囲を「論理ブロック」と言い、物理ページが割り当てられている範囲を「論理ページ」と言うことができる。FMは、追記型、具体的には、物理ページが割り当てられている論理ページがライト先の場合、ライト先論理ページに、割当て済の物理ページに代えて新たに空き物理ページが割り当てられ、新たに割り当てられた物理ページにデータが書き込まれる。各論理ページについて、新たに割り当てられた物理ページに書き込まれたデータ(最新のデータ)は「有効データ」であり、有効データが書き込まれている物理ページは「有効ページ」であり、過去に割り当てられていた物理ページに格納されているデータ(過去のデータ)は「無効データ」であり、無効データが書き込まれている物理ページは「無効ページ」である。
(1−1)FMモジュールの構成
まず、図1を用いて、本実施形態に係るFMモジュール100の内部構成を説明する。
図1は、FMモジュール100の内部構成を示す図である。
FMモジュール100は、複数(例えば32)のFM140であるFM群と、複数のFM140に接続されたFMコントローラ110とを有する。FMコントローラ110は、複数のデバイス、例えば、プロセッサ123、RAM(Random Access Memory)122、データコンプレッサ(データ圧縮/解凍ユニット)116、パリティジェネレータ(パリティ生成ユニット)115、データキャッシュ114、I/Oインターフェース118、FMインターフェース124、コマンド外部処理ユニット119、コマンド内部処理ユニット120、コピーDMA(Direct Memory Access)ユニット121、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、及び、スイッチ117を備えている。キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、コマンド外部処理ユニット119及びコマンド内部処理ユニット120が、それぞれ、I/O処理の一部を実行するハードウェア(ハードウェアロジック回路)である。以下、I/O処理の一部を実行するハードウェア(ハードウェアロジック回路)を、特に、「I/Oハードウェア」と呼んでよい。本実施形態で言う「I/O処理」とは、上位装置からのI/Oコマンドの処理であり、具体的には、ライトコマンド処理(図2に示す処理と図3に示す処理から成る処理)と、リードコマンド処理(図4に示す処理と図5に示す処理から成る処理)である。また、「上位装置」は、FMモジュール100にI/Oコマンドを送信する装置である。例えば、図12によれば、ホスト計算機1300が、上位装置である。また、例えば、図13によれば、ストレージコントローラ1201が、上位装置である。具体的には、ストレージ装置1200において、複数のFMモジュール100がそれぞれストレージコントローラ1201に接続されており、ストレージコントローラ1201が、ホスト計算機1250からI/O要求を受信し、そのI/O要求を基に、FMモジュール100にI/Oコマンドを送信する。図12において、ホスト計算機1300とFMモジュール100間は、PCIe(PCI Express)のような高速のインターフェース経由で通信してよい。図13において、ストレージコントローラ1201とFMモジュール100間も、PCIeのような高速のインターフェース経由で通信してよい。
再び図1を参照する。スイッチ117には、プロセッサ123、RAM122、データコンプレッサ116、パリティジェネレータ115、データキャッシュ114、I/Oインターフェース118、FMインターフェース124、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、コマンド外部処理ユニット119、コマンド内部処理ユニット120及びコピーDMAユニット121が接続されている。スイッチ117は、デバイス(要素)間のデータをアドレス(又はID)によってルーティングし転送する。なお、本実施形態では、図1に示すように、単一のスイッチ117に各デバイスがスター状に接続された例について記すが、本発明は、この例に限定されるものではない。デバイス間が通信可能に接続されていればよい。
I/Oインターフェース118は、上位装置と接続するデバイスである。I/Oインターフェース118は、スイッチ117を介してFMコントローラ110における別のデバイスと通信可能である。I/Oインターフェース118は、上位装置からI/Oコマンド(ライトコマンド/リードコマンド)を受信する。I/Oコマンドでは、I/O先(ライト先又はリード元)を表す論理アドレス(典型的にLBA(Logical Block Address))が指定されている。I/Oコマンドがライトコマンドの場合、I/Oインターフェース118は、ライトコマンドに従うライト対象のデータ(以下、「ライトデータ」と言うことがある)を受信する。I/Oインターフェース118は、受信したライトデータを、RAM122に記録する。また、I/Oインターフェース118は、上位装置からコマンドを受信した際に、プロセッサ123に割り込みを行うか、またはプロセッサ123がポーリングしているRAM122上の記憶領域にコマンドを受信したことを通知するデータを書き込む。
プロセッサ123は、スイッチ117を介してFMコントローラ110の他のデバイスと通信する。プロセッサ123は、RAM122に記憶されているプログラム及び管理テーブルを基にFMコントローラ110全体を制御する。また、プロセッサ123は、定期的な情報取得(例えばRAM122に対するポーリング)、及び割り込み受信機能によって、FMコントローラ110全体を監視する。
データキャッシュ114は、一時記憶領域の一例であり、FMコントローラ110における転送対象のデータを一時的に記憶する。本実施形態では、データキャッシュ114は、読み出されたデータが残らないバッファであるが、読み出されたデータが残るキャッシュメモリのような記憶領域でもよい。
複数のFMインターフェース124がFMコントローラ110に設けられており、複数のFMインターフェース124を介して、並列に複数のFM140に対してI/Oを行うことができる。1のFMインターフェース124に、1のバスが接続されており、1のバスに、2のFM140が接続されている。本実施形態では、16のFMインターフェース124が、存在し、故に、16のバスが存在し、結果として、32のFMが存在する。FMインターフェース124は、I/O先のFM140にCE(Chip Enable)信号を出すことで、同一バスに接続された2のFMをそれぞれ独立して制御することができる。
FMインターフェース124は、プロセッサ123(又はI/Oハードウェア(例えばコマンド内部処理ユニット120))より指示されるI/O指示(ライト指示/リード指示)に応じて動作する。I/O指示では、I/O先を表す情報として、例えば、チップ番号(FM140の識別番号)、ブロック番号(FM140における物理ブロックの識別番号)、(FM140における物理ブロック内の物理ページの識別番号)が指定されている。I/O指示がリード指示の場合、FMインターフェース124は、リード指示に従うリード元領域(FM140内の物理ページ)から読み出されたデータをデータキャッシュ114に転送する(書き込む)。I/O指示がライト指示の場合、FMインターフェース124は、ライト対象のデータをデータキャッシュ114から読み出し、そのデータを、ライト先に従うライト先領域(FM140内の物理ページ)に転送する(書き込む)。なお、FMインターフェース124が、データキャッシュ114を経由せずにデータを上位装置に転送可能である場合、リード指示に従い読み出されたデータは、データキャッシュ114に格納されることなく上位装置に転送されてよい。
また、FMインターフェース124は、ECC(Error Correction Code / Error Checking and Correction)生成回路、ECCによるデータ損失検出回路、ECC訂正回路を有してよい。FMインターフェース124は、データ書き込みの際、データに対してECCを付加してFM140にデータを書き込んでよい。また、データ読み出しの際、FMインターフェース124は、ECCによるデータ損失検出回路によって、FM140から読み出されたデータを検査し、データ損失が検出された際には、ECC訂正回路によってデータ訂正を行ってよい。
データコンプレッサ116は、可逆圧縮のアルゴリズムを処理する機能を有し、複数種のアルゴリズムや、圧縮レベルの変更機能を備える。データコンプレッサ(データ圧縮/解凍ユニット)116は、プロセッサ123(又はI/Oハードウェア(例えばコマンド内部処理ユニット120))からの指示に従って、データキャッシュ114からデータをリードし、可逆圧縮のアルゴリズムによりデータ圧縮演算もしくはデータ圧縮の逆変換であるデータ解凍(伸長)演算を行い、その結果を再度データキャッシュに書き込む。なお、データコンプレッサ116は、ハードウェア(ロジック回路)として実装されてもよいし、圧縮/解凍のプログラムをプロセッサ123で処理することで、同様の機能が実現されてもよい。
パリティジェネレータ115は、XOR演算、Even Odd演算、リードソロモン演算等のパリティ生成機能を有している。パリティジェネレータ115は、プロセッサ123(又はI/Oハードウェア(例えばコマンド内部処理ユニット120))からの指示に従って、データキャッシュ114からパリティ生成対象となるデータをリードし、前述のパリティ生成機能により、RAID5又はRAID6のパリティを生成する。
キャッシュヒット判定ユニット111は、上位装置からのI/Oコマンドで指定されたI/O先論理アドレス範囲(例えばLBA範囲)のデータがデータキャッシュ114内のキャッシュ領域に記録されているかを、キャッシュヒット判定テーブルを参照して判定するハードウェアである。
キャッシュ登録ユニット112は、上位装置からライトコマンドがあった場合に動作し、ライトデータをデータキャッシュ114内のキャッシュに格納したことを管理するため、キャッシュヒット判定テーブルを更新する。
コマンド分割ユニット113は、上位装置からのI/Oコマンドを複数のサブI/Oコマンドに分割するハードウェアである。コマンド分割ユニット113は、I/Oコマンドを、FMモジュール100内部のLBA管理単位に分割する。本実施形態では、上位装置から受信したI/Oコマンドを分割する例を説明するが、分割されるコマンドは、上位装置からのI/Oコマンドに限られない。
コマンド外部処理ユニット119は、上位装置とやり取りするコマンドの制御を行うハードウェアである。上位装置は、コマンド外部処理ユニット119のレジスタにアクセスすることで、FMモジュール100に対するコマンドを作成したことを通知する。通知を受けたコマンド外部処理ユニット119は、上位装置よりコマンドを取得する。
また、コマンド外部処理ユニット119は、上位装置からのコマンドが完了した際、そのコマンドの完了通知を上位装置に通知する。上位装置は、コマンド外部処理ユニット119のレジスタにアクセスすることで(例えば完了通知の受信を意味する情報をレジスタに書き込むことで)、FMモジュール100から完了通知を受信したことを通知する。
コマンド内部処理ユニット120は、FMモジュール100の内部のコマンド処理を行うハードウェアである。コマンド内部処理ユニット120は、実施形態において、キャッシュヒット判定ユニット111にて、リードコマンドを内部のLBA管理単位に分割したサブリードコマンドのリクエスト対象領域が、キャッシュに登録されていない場合、サブリードコマンドをFMインターフェース124用のコマンドに変換し、FMインターフェース124にコマンドを作成したことを通知する。
コピーDMAユニット121は、主にデータキャッシュ114のデータをコピーする際に動作するハードウェアである。コピーDMAユニット121は、プロセッサ123からの指示に従って、データキャッシュ114内の記憶領域に記録されているデータを他の領域にコピーする。
以上説明した、スイッチ117、I/Oインターフェース118、プロセッサ123、データキャッシュ114、FMインターフェース124、データコンプレッサ116、パリティジェネレータ115、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、コマンド外部処理ユニット119、コマンド内部処理ユニット120、コピーDMAユニット121は、それぞれ、ASIC(Application Specific Integrated Circuit)やFPBA(Field Programmable Gate Array)として、一つの半導体素子内で構成してもよいし、複数の個別専用IC(Integrated Circuit)を相互に接続した構成であってもよい。
RAM122は、典型的にはDRAM(Dynamic Random Access Memory)などの揮発性メモリが挙げられる。RAM122は、FMモジュール100内で用いられるFM140の管理テーブル、コマンド分割ユニットが作成するサブコマンド、DMAが用いる転送制御情報を含んだ転送リスト等を格納する。なお、RAM122は、データを格納するデータキャッシュ114の機能の一部または全てを含みデータ格納に用いる構成としてもよい。
ここまで、図1を用いて、本実施形態に係るFMモジュール100の構成を説明した。なお、本実施形態では、図1に示すように、FM140を搭載したFMモジュール100について記述するが、搭載する不揮発性メモリは、FMに限定されるものではない。Phase Change RAMやResistance RAM等でもよい。
(1−2)第1の管理テーブル:論物変換テーブル
続いて、FMモジュール100が制御に用いる管理テーブルについて説明する。
FMモジュール100は、複数のFM140(チップ)を搭載し、複数のブロック(物理ブロック)、複数のページ(物理ページ9により構成される記憶領域を管理し、上位装置に対しては、記憶領域として論理空間(論理領域)を提供する。FM140により構成される物理領域は、FMモジュール100内部のみで用いるアドレス空間に一意に対応づけて管理する。以下、このFMモジュール100内部のみで用いる物理領域指定用アドレス空間を、PBA(Physical Block Address)と記す。FMコントローラ110は、複数のPBAを、上位装置に提供する論理空間(アドレス空間)に対応した複数のLBA(Logical Block Address)に対応付けて管理する。
FMモジュール100の対応付け管理用の管理テーブルである論物変換テーブル600について図6を用いて説明する。
図6は、論物変換テーブル600を示す。
論物変換テーブル600は、FMモジュール100内の記憶領域、例えばRAM122に格納されえちる。論物変換テーブル600は、LBA/PBAの組(対応付け)毎に、LBA601、PBA602及びPBA長603を有する。LBA601は、LBAを示し、PBA602は、PBAを示し、PBA長603は、PBAの長さを示す。PBAの長さは、データコンプレッサ116によりデータが圧縮されたか否か等により異なる。I/Oコマンドがリードコマンドの場合、プロセッサ123又はI/Oハードウェア(例えばコマンド内部処理ユニット120)は、上位装置からのリードコマンドで指定されるLBAに対応するPBA及びPBA長を論物変換テーブル600から特定し、特定したPBA及びPBA長に対応した物理領域(FM群における領域)から読み出す。I/Oコマンドがライトコマンドの場合、プロセッサ123又はI/Oハードウェア(例えばコマンド内部処理ユニット120)は、上位装置からのライトコマンドで指定されるLBAに対応するPBA(つまり更新前データが格納されている物理領域を示すPBA)を論物変換テーブル600から特定し、特定したPBAとは異なるPBA(ライトデータのライト先となる1以上の空きページに対応したPBA)とPBA長を決定する。プロセッサ123又はI/Oハードウェア(例えばコマンド内部処理ユニット120)は、決定したPBA及びPBA長を、論物変換テーブル600の該当箇所(上位装置からのライトコマンドで指定されるLBAに対応したフィールド)に記録する。この動作にて、論理領域上のデータの上書き可能とする。
LBA601のカラムには、FMモジュール100が提供する論理空間に属するLBAが所定サイズ(本実施形態では4KB)ごとに順に並んでいる。具体的には、論理空間が所定サイズに区分されており、単位論理領域毎に、エントリ(レコード)がテーブル600に存在する。例えば、LBA601内の数値1は、512バイトの1セクタを意味する。これは、本実施形態では、LBAとPBAの対応付けが、4KB単位で管理されていることを意味する。このため、論理空間を分割する単位を管理単位と呼ぶこともできる。但し、本発明では、FMモジュール100のような半導体メモリデバイスについて、LBAのような論理アドレスとPBAのような物理アドレスとの組(対応付け)が4KB単位にて管理することに限定されるものではない。LBAは如何なる単位で管理されてもよい。
PBA602は、LBAに対応付けられた先頭PBAを示す。本実施形態では、PBAは、512バイト毎に管理される。図6の例では、LBA「0x000_0000_0000」に対応付けられたPBAとして、[XXX」というあるPBA値が対応付けられている。このPBA値は、FMの記憶領域を一意に示すアドレスである。これにより、リードコマンドにLBA「0x000_0000_0000」が指定されていた場合、PBA「XXX」が特定される。LBAに対応付けられたPBAが無い場合(つまり、論理空間における空きの範囲については)、PBA「未割当」が対応付けられる。
PBA長603は、データの実際のサイズをセクタ数(1セクタ=512バイト)で表現している。図6に示す例では、LBA「0x000_0000_0000」を開始アドレスとする4KB(論理空間としては8セクタ)のデータの長さは、PBA長「2」、512バイト×2セクタ=1KBの長さであることがわかる。従って、PBA長「2」とPBA「XXX」とから、LBA「0x000_0000_0000」を開始アドレスとする4KBのデータは、PBA「XXX」から「XXX+2」の1KBの領域に圧縮して格納されていることがわかる。
なお、実施形態に示すFMモジュールは、データを圧縮して格納した例について示すが、本発明は、この例に限定されるものではない。データは圧縮して格納されていなくともよい。圧縮してデータを格納しない場合、論物変換テーブル600にPBA長603のカラムは不要である。
(1−3)第2の管理テーブル:ブロック管理テーブル
続いて、ブロック管理テーブルについて図7を用いて説明する。
図7は、ブロック管理テーブル700を示す。
ブロック管理テーブル700は、FMモジュール100内の記憶領域、例えばRAM122に格納されており、例えば所定サイズのPBA毎に、PBA701、チップ番号702、ブロック番号703及び無効PBA量704を有する。
PBA701は、FM群における物理領域を示す。なお、本実施形態では、PBAは、ブロック単位で区分して管理される。図7では、PBA701は、先頭アドレスを示す。例えば、PBA「0x000_0000_0000」は、「0x000_0000_0000」〜「0x000_000F_FFFF」のPBA範囲を示す。なお、図6と図7では、PBAの表現形式が異なっているが、PBAという点で同一である。
チップ番号702は、FM140(チップ)の識別番号を示す。ブロック番号703は、ブロック(物理ブロック)の識別番号を示す。
無効PBA量704は、無効PBA量を示す。無効PBA量とは、論理空間への対応付けを解除されたPBA領域の量、つまり、無効領域(無効ページ)の総量(総サイズ)である。逆に、論理空間への対応付けがなされているPBA領域は、有効領域(有効ページ)である。無効PBA領域は、データの上書きが不可能な不揮発性メモリにおいて、疑似的に上書きを実現しようとする際に必然的に生じるものである。具体的には、データ更新の際、他の未書き込みPBA領域に更新データを書き込み、論物変換テーブル600のPBA602とPBA長603が、更新データのライト先のPBA領域の先頭アドレスと、更新データのPBA長に更新される。従って、更新前データが格納されているPBA領域の論理空間への対応付けは解除される。本実施形態では、FMの最小消去単位であるブロック毎にこの無効PBA量(例えば無効ページ数)がカウントされ、無効PBA量が多いブロックが、優先的に、リクラメーション対象領域(リクラメーションの際のデータの移動元物理ブロック)として選択される。図7の例によれば、チップ番号「0」及びブロック番号「0」のブロックの無効PBA量は、160KBである。
本実施形態では、無効PBA量がリクラメーション開始閾値以上となったブロックについて、リクラメーションが行われる。リクラメーションでは、移動元ブロック(無効PBA量がリクラメーション開始閾値以上となったブロック)内の有効PBA領域(有効ページ)から有効データが別のブロックに移動され、その結果、その有効PBA領域が無効PBA領域となり(つまり、移動元ブロックの全領域が無効PBA領域となり)、その後、移動元ブロックに対し消去処理が行われる。その結果として、移動元ブロックが空きブロックとなる。リクラメーションでのデータ移動(データコピー)によりFM140への書き込みが発生する。これにより、FM140の劣化が進展するとともに、データ移動動作としてFMモジュール100のプロセッサ123やバス帯域などのリソースが消費され性能低下の要因ともなる。このため、有効PBA領域内のデータの移動は可能な限り少ないことが望ましい。FMコントローラ110は、ブロック管理テーブル700を参照し、無効PBA量704の値が大きい(無効PBA領域を多く含む)ブロックを優先的に消去処理対象(移動元ブロック)として選択することで、移動されるデータの量を少なくすることができる。
なお、本実施形態では、無効PBA量の管理が、論理空間への対応付けが解除された領域の量の管理であるが、本発明はこの管理単位に限定されるものではない。例えば、ページ数を単位として無効データの量が管理されてもよい。
以上で、ブロック管理テーブル700について説明した。
(1−4)ライトコマンド処理及びリードコマンド処理
続いて、図2〜図5を用いて、ライトコマンド処理とリードコマンド処理を説明する。なお、コマンド外部処理ユニット119、コマンド分割ユニット113、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド内部処理ユニット120、及び、コピーDMAユニット121の少なくとも1つの各々は、図2〜図5に模式的に示すように、処理を行う度にコマンド処理ログ132に処理状況を記録する。この機能により、複数段階にわたるライトコマンド処理及びリードコマンド処理の各々において、障害が生じたときプロセッサがコマンド処理ログ132を算出することで、障害箇所を特定する事が可能となる。コマンド処理ログ132は、図1に示したように例えばRAM122に記憶される。
また、コマンド外部処理ユニット119、コマンド分割ユニット113、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド内部処理ユニット120、及び、コピーDMAユニット121の少なくとも1つの各々は、障害を検知(例えばタイムアウト)した際に、プロセッサ123に割り込む機能を有している。割り込みを受けたプロセッサ123は、前述のコマンド処理ログを解析することで障害箇所を特定する。
(1−4−1)ライトコマンド処理
図2及び図3は、ライトコマンド処理を示す。具体的には、図2は、ライトコマンド処理の一部でありライトコマンド受信処理を示す。図3は、ライトコマンド処理の残りでありライトコマンド応答処理を示す。
図2に示すように、上位装置からライトコマンドを受信したコマンド外部処理ユニット119が、受信したライトコマンドを、ユニット119の内部領域(例えばレジスタ)に登録する。コマンド外部処理ユニット119は、登録したライトコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット119は、コマンド分割ユニット113に、登録したライトコマンドを転送する。なお、コマンド外部処理ユニット119がライトコマンドを内部領域に登録する理由は、ハードウェアであるコマンド外部処理ユニット119が完了応答を上位装置に送信するためである(この理由は、リードコマンドの登録(図4参照)についても同様である)。すなわち、コマンド外部処理ユニット119にて、コマンド外部処理ユニット119が受信した各ライトコマンドについて、完了通知を送信済みか未送信かが管理される。完了通知が送信されたライトコマンドは、コマンド外部処理ユニット119から削除されてよい。
コマンド外部処理ユニット119からライトコマンドを受信したコマンド分割ユニット113は、ライトコマンドをサブライトコマンドに分割し、サブライトコマンドを、例えば内部領域(例えばユニット113のレジスタ)に登録する。ここで、ライトコマンドから得られるサブライトコマンドの数は、ライトデータのサイズを、内部管理単位(論理空間の単位論理領域)、言い換えれば、ページサイズで除算することにより得られる商(商が0の場合は1)でよい。例えば、ライトコマンドに従うライトデータのサイズが16KBであり、内部管理単位(ページサイズ)が4KBの場合、得られるサブライトコマンドの数は、16/4=4でよい。コマンド分割ユニット113は、ライトコマンドとサブライトコマンドの対応関係を例えばユニット113の内部領域(例えばレジスタ)に登録する。対応関係は、例えば、ライトコマンドのID(例えば「A」)と、そのライトコマンドから分割された複数のサブライトコマンドにそれぞれ対応した複数のID(例えば「A−1」、「A−2」、「A−3」、「A−4」)との組でよい。ライトコマンドのIDは、上位装置からのライトコマンドに含まれているIDでもよいし、FMコントローラ110(例えばコマンド外部処理ユニット119又はコマンド分割ユニット113)により付与されたIDでもよい。サブライトコマンドのIDは、例えば、ライトコマンドのIDを基に付与されたIDでよく、また、例えば、FMコントローラ110(例えばコマンド分割ユニット113)により付与されたIDでよい。コマンド分割ユニット113は、複数のサブライトコマンドの各々について、状態を、完了通知(応答)の受信待ちの状態とする。コマンド分割ユニット113は、分割した複数のサブライトコマンドをそれぞれキャッシュ登録ユニット112に転送する。1つのサブライトコマンドは、1つのサブライトデータの書き込みに対応し、例えば、1つのサブライトデータのライト先のLBAを指定する。サブライトデータは、ライトデータの一部分であり、例えば、内部管理単位(ページサイズ)と同じサイズである。1つのサブライトデータは、2以上のページに跨らず、1つのページに書き込まれる。
コマンド分割ユニット113にてライトコマンドをサブライトコマンドに分割する理由は、ライトデータの格納状態が内部管理単位毎(サブライトデータ毎)に格納状態が異なり得ることにある。言い換えれば、同一ページに格納されるデータについてキャッシュヒット(ライト先LBAに対応するデータがキャッシュ114に存在する)とキャッシュミス(ライト先LBAに対応するデータがキャッシュ114に存在しない)が混在することを避けることにある。ライト対象のデータの全てがキャッシュミスであれば、プロセッサ123による処理が不要であるが、ライト対象のデータが少なくとも一部でもキャッシュヒットであれば、プロセッサ123による処理が必要になってしまう。従って、同一ページに格納されるデータについてキャッシュヒットとキャッシュミスが混在することを避けることが望ましい。
具体的には、例えば、16KBのライトデータのうち、1のサブライトデータ(4KBのデータ)はデータキャッシュ114上にあり、残りの3のサブライトデータ(合計12KBのデータ)は1以上のFM140に格納されていることがあり得る。この場合、データキャッシュ114に格納されているサブライトデータについては、キャッシュ管理テーブル(図示せず)の更新が必要となる。キャッシュ管理テーブルは、キャッシュ判定テーブルと同様の情報でもよい。一方、FM140に格納されているサブライトデータについては、サブライトデータがキャッシュ114に登録されればよく、サブライトデータが格納されているキャッシュ領域(キャッシュ114における一領域)のアドレスがプロセッサ123に通知される必要がない。このように、FMモジュール100内部では、管理単位(例では4KB)毎に、論理領域(サブライトデータに対応した領域)の状態が異なり得る。このため、本実施形態では、ライトコマンドから、管理単位と同サイズのデータであるサブライトデータについてのサブライトコマンドが生成される。サブライトコマンドを受信したI/Oハードウェア又はプロセッサ123は、単一のサブライトコマンドの状態のみを制御すればよく、そのサブライトコマンドを含んだライトコマンド内の別のサブライトコマンドの処理の完了を待つ必要がない。結果として、高性能化が期待される。また、プロセッサ123の処理が不要な状況のサブライトコマンドについて、プロセッサ123による処理が不要となり、結果として、プロセッサ処理性能ネックによる性能制限を軽減できる。
なお、ライトデータのサイズが管理単位(ページサイズ)以下の場合、サブライトコマンドの数は1でよく、また、そのサブライトコマンドはライトコマンドでもよい。言い換えれば、ライトデータのサイズが管理単位(ページサイズ)以下の場合、コマンド分割ユニット113は、コマンド外部処理ユニット119からのライトコマンドをキャッシュヒット判定ユニット111に転送してよい。
コマンド分割ユニット113から複数(又は1)のサブライトコマンドを受信したキャッシュヒット判定ユニット111は、受信したサブライトコマンド毎に、キャッシュヒット判定を行う(サブライトコマンドで指定されているLBAに対応したサブライトデータがキャッシュ114に登録されている否かを判定する)。具体的には、例えば、本実施形態では、キャッシュ登録ユニット112がデータのキャッシュ114への登録を行い、キャッシュヒット判定ユニット111が、キャッシュヒット判定テーブル(図示せず)を持っており、キャッシュヒット判定ユニット111は、このキャッシュヒット判定テーブルを参照することで、サブライトコマンドが対象とするサブライトデータがキャッシュ114上にあるかどうか判定する。キャッシュヒット判定テーブルは、例えば、サブキャッシュ領域のアドレスとそのサブキャッシュ領域内のデータに対応したLBA(論理空間に属するLBA)との組を有してよい。そのようなキャッシュヒット判定テーブルに、サブライトコマンドで指定されているLBAが登録されていれば、キャッシュヒットであり、サブライトコマンドで指定されているLBAが登録されていなければ、キャッシュミスである。サブライトコマンドについて、キャッシュヒットとは、そのサブライトコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、FM140ではなくデータキャッシュ114に格納されている状態である。サブライトコマンドについて、キャッシュミスとは、そのサブライトコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、データキャッシュ114ではなくFM140に格納されている状態である。キャッシュヒット判定ユニット111にて、キャッシュヒットと判定されたサブライトコマンドは、以降、サブライトヒットコマンドとして管理される。このサブライトヒットコマンドには、キャッシュヒット判定ユニットにより、新サブライトデータ(新たにサブキャッシュ領域に格納されることになるサブライトデータ)の格納先のサブキャッシュ領域のアドレスと、キャッシュヒットしたサブキャッシュ領域(旧サブライトデータ(新サブライトデータにより更新されるサブライトデータ)が格納されているサブキャッシュ領域)のアドレスとが指定される。一方、キャッシュヒット判定ユニット111にて、キャッシュミスと判定されたサブライトコマンドは、以降、サブライトミスコマンドとして管理される。サブライトヒットコマンドもサブライトコマンドも、キャッシュヒット判定ユニット111からキャッシュ登録ユニット112に転送される。
キャッシュヒット判定ユニット111からサブライトコマンド(サブライトヒットコマンド及びサブライトミスコマンド)を受信したキャッシュ登録ユニット112は、サブライトコマンド毎に、サブライトコマンドで指定されているLBA(論理空間に属するLBA)をキャッシュヒット判定テーブルに登録する。キャッシュ登録ユニット112は、受信したサブライトコマンドのうち、サブライトヒットコマンドのみプロセッサ123に通知し、サブライトミスコマンドについては、プロセッサ123に通知しない。
サブライトヒットコマンドを受信したプロセッサ123は、そのサブライトヒットコマンドに応じた制御を行う。サブライトヒットコマンドには、旧サブライトデータが記憶されているサブキャッシュ領域(旧サブキャッシュ領域)のアドレスと、新サブライトデータの格納先のサブキャッシュ領域(新サブキャッシュ領域)のアドレスとが指定されている。プロセッサ123は、サブライトヒットコマンドを基に旧サブキャッシュ領域を特定し、特定したキャッシュ領域を解放する。具体的には、例えば、プロセッサ123は、キャッシュヒット判定テーブルから、サブライトヒットコマンドで指定されているLBAと、旧サブキャッシュ領域のアドレスとの対応付けを削除する。
サブライトヒットコマンドの処理の後、プロセッサ123は、図3に示すように、そのサブライトヒットコマンドの完了をコマンド分割ユニット113に通知する。また、キャッシュ登録ユニット112は、サブライトミスコマンドに対応したサブライトデータをデータキャッシュ114へ登録した後、サブライトミスコマンドの完了をコマンド分割ユニット113に通知する。なお、本実施形態では、サブライトデータをFM140ではなくデータキャッシュ114に格納した段階で完了が通知されるが、本発明は、この例に限定されるものではない。例えば、サブライトコマンドのデータがFM140に書き込まれた後に、完了がコマンド分割ユニット113に通知されてもよい。
前述したように、コマンド分割ユニット113は、ライトコマンドと分割したサブライトコマンドの対応関係を保持している。コマンド分割ユニット113は、ライトコマンドを構成する全てのサブライトコマンドが完了することを監視している。コマンド分割ユニット113は、完了を受信する毎に、その完了に対応したサブライトコマンドの状態を、完了受信済みとする。ライトコマンドを構成する全てのサブライトコマンドについて、プロセッサから完了の報告が有った場合、コマンド分割ユニット113は、ライトコマンドが完了したことをコマンド外部処理ユニット119に通知する。
コマンド分割ユニット113よりコマンド完了を受信したコマンド外部処理ユニット119は、上位装置に対して、ライトコマンドの完了通知を転送する。上位装置に転送される完了通知(ライトコマンドの応答)は、コマンド分割ユニット113からの通知でもよいし、コマンド外部処理ユニット119により生成された通知でもよい。
なお、コマンド外部処理ユニット119は、上位装置からライトコマンドを受信した場合にそのライトコマンドについてタイマーをセットし(時間計測を開始し)、ライトコマンドを受信してから一定時間以内にコマンド分割ユニット113から完了通知が来なかった場合、タイムアウトエラーを上位装置に通知してよい。コマンド外部処理ユニット119は、複数のI/Oコマンドを上位装置から受信且つ保持しており、I/Oコマンド毎に前述のタイマーにて時間監視を行ってよい。
以上が、本実施形態におけるライトコマンド処理である。ライトコマンド処理によれば、複数のサブライトコマンドにそれぞれ対応した複数のサブリードコマンドがキャッシュ114に格納された場合に、ライトコマンドの完了が上位装置に通知される。これにより、ライトコマンド処理の高速化が期待できる。
(1−4−2)リードコマンド処理
図4及び図5は、リードコマンド処理を示す。具体的には、図4は、リードコマンド処理の一部でありリードコマンド受信処理を示す。図5は、リードコマンド処理の残りでありリードコマンド応答処理を示す。
図4に示すように、上位装置からリードコマンドを受信したコマンド外部処理ユニット119が、受信したリードコマンドを、ユニット119の内部領域(例えばレジスタ)に登録する。コマンド外部処理ユニット119は、登録したリードコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット119は、コマンド分割ユニット113に、登録したリードコマンドを転送する。
コマンド外部処理ユニット119からリードコマンドを受信したコマンド分割ユニット113は、リードコマンドをサブリードコマンドに分割し、サブリードコマンドを内部領域(例えばユニット113のレジスタ)に登録する。ここで、リードコマンドから得られるサブリードコマンドの数は、リードデータ(リードコマンドに従い読み出されるデータ)のサイズを、内部管理単位(ページサイズ)で除算することにより得られる商(商が0の場合は1)でよい。例えば、リードコマンドに従うリードデータのサイズが16KBであり、内部管理単位(ページサイズ)が4KBの場合、得られるサブリードコマンドの数は、16/4=4でよい。コマンド分割ユニット113は、リードコマンドとサブリードコマンドの対応関係を例えばユニット113の内部領域(例えばレジスタ)に登録する。コマンド分割ユニット113は、複数のサブリードコマンドの各々について、状態を、完了通知(応答)の受信待ちの状態とする。コマンド分割ユニット113は、分割した複数のサブリードコマンドをそれぞれキャッシュ登録ユニット112に転送する。1つのサブリードコマンドは、1つのサブリードデータの読み出しに対応し、例えば、1つのサブリードデータのリード元のLBAを指定する。サブリードデータは、リードデータの一部分であり、例えば、内部管理単位(ページサイズ)と同じサイズである。1つのサブリードデータは、2以上のページに跨らず、1つのページから読み出される。
コマンド分割ユニット113にてリードコマンドをサブリードコマンドに分割する理由は、前述のライトコマンドのときと同様に管理単位毎に格納状態(キャッシュヒット/キャッシュミス)が異なっていることに加え、リードコマンドで指定されるLBA領域に対応付けられている複数のページ(複数のリード元ページ)が、異なるFMインターフェースに接続された異なるFM140に離散している可能性にある。FMコントローラ110は、L内部管理単位毎に、LBAとPBAの対応関係を管理しており、連続するLBA領域であっても、実際のデータは異なる複数のFM140(及びデータキャッシュ114)に分散している可能性がある。このため、1つのリードコマンドを完了するためには、複数のFMインターフェース124(又はコピーDMAユニット121)を並列に制御する必要があり得る。このため、内部管理単位に基づきリードコマンドがサブリードコマンドに分割される。
コマンド分割ユニット113から複数(又は1)からのサブリードコマンドを受信したキャッシュヒット判定ユニット111は、サブリードコマンド毎に、キャッシュヒット判定を行う。具体的には、キャッシュヒット判定ユニット111は、キャッシュヒット判定テーブルを参照し、サブリードコマンドが対象とするサブリードデータがキャッシュ114上にあるかどうか判定する。サブリードコマンドについて、キャッシュヒットとは、そのサブリードコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、FM140ではなくデータキャッシュ114に格納されている状態である。サブリードコマンドについて、キャッシュミスとは、そのサブリードコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、データキャッシュ114ではなくFM140に格納されている状態である。キャッシュヒット判定ユニット111にて、キャッシュヒットと判定されたサブリードコマンドは、以降、サブリードヒットコマンドとして管理される。サブリードヒットコマンドには、キャッシュヒット判定ユニット111が、キャッシュヒットしたサブキャッシュ領域のアドレスを指定する。一方で、キャッシュヒット判定ユニット111にて、キャッシュミスと判定されたサブリードコマンドは、以降、サブリードミスコマンドとして管理される。
キャッシュヒット判定ユニット111は、サブリードコマンドがサブリードヒットコマンドであるかサブリードミスコマンドであるかに応じて、サブリードコマンドの転送先のI/Oコマンドを選択する。図4に示す例では、サブリードミスコマンドは、コマンド内部処理ユニット120に転送され、サブリードヒットコマンドは、プロセッサ123に転送される。
本実施形態において、サブリードミスコマンドとサブリードヒットコマンドの通知先I/Oハードウェアを分ける理由は、サブリードミスとサブリードヒットの発生頻度の差と、サブリードヒット処理の複雑さにある。
サブリードミスとサブリードヒットの発生頻度の差は、FM群(複数のFM140の集合)の容量に対するデータキャッシュ114の容量の割合、及び、上位装置がFMモジュール100に指定するLBAの局所性に依存する。例えば、本実施形態では、データキャッシュ114の容量とFM群の容量の差はきわめて大きい。より具体的には、例えば、データキャッシュ114の容量は数百MB(メガバイト)、FM群の容量は数TB(テラバイト)である。こうした構成において、LBAの局所性の低いリードリクエストが上位装置から受信された場合、リードコマンドから得られるサブリードコマンドの大半が、サブリードミスコマンドとなる。つまり、サブリードヒットコマンドはサブリードミスコマンドに比べてわずかしか生じないと予測される。このため、FMモジュール100のリード性能を高速化したいのであれば、サブリードミスコマンドを高速な専用ハードウェアにて処理する事が必要となる。言い換えれば、本実施形態では、キャッシュミスした方がリード性能の高速化が期待でき、この観点から、データキャッシュ114は、読み出されたデータが残らないバッファのような一時記憶領域であることが望ましい。
なお、サブリードミスコマンドのみならずサブリードヒットコマンドについてもI/Oハードウェアにて処理する事がFMモジュール100の性能を向上させる観点からは望ましいとも考えられるが、サブリードヒットコマンドは、別処理と競合する可能性がある。例えば、サブリードヒットコマンドの対象領域であるサブキャッシュ領域は、FM140にデータを書き込む為に、データキャッシュ114からFM140にデータを転送(以降この動作をデステージと記す)中の領域である可能性がある。そして、仮に、デステージ処理がサブリードヒットコマンドの処理との競合を考慮しない場合、FM140へのデータ転送が終了した時点で、サブキャッシュ領域が解放される。このため、サブリードコマンドについてキャッシュヒットと判定された後、競合を考慮せずに処理が続行されると、サブキャッシュ領域からデータが削除された後、リードされる可能性が生じる。言い換えれば、サブリードヒットコマンドに対応したサブキャッシュ領域からのデータの読み出しの時点では、そのサブリードヒットコマンドに対応したデータが、サブキャッシュ領域には存在しない可能性が生じる。
上記のような可能性を排除するため、本実施形態では、FMコントローラ110が行う各種動作の複雑な競合管理をプロセッサ123にて行う。例えば、サブリードヒットコマンドの処理とデステージの処理の競合を回避する為に、プロセッサ123が、「サブリードヒットコマンドに対応したサブキャッシュ領域はデステージ処理の対象になっていることを検知する。」、又は、「サブリードヒットコマンドに対応したサブキャッシュ領域のロックを取得し、並列で実行されているデステージ処理においてそのサブキャッシュ領域が解放されること(そのサブキャッシュ領域からデータが削除されること)を不可とする」等の排他制御を行う。
上述の通り、競合の可能性があり複雑な排他制御が必要なサブリードヒットコマンドは、プロセッサ123に転送される。これにより、複雑な競合を管理するためのハードウェアを開発する必要が無く、バグの修正が困難なハードウェアの開発リスクを軽減し、開発期間を短縮する事が期待できる。
サブリードヒットコマンドの処理をプロセッサ123に担わせることで、プロセッサ123の処理性能がネックとなりFMモジュール100のリード性能が低下する事が考えられるが、前述のとおり、上位装置がLBAの局所性の少ないI/Oパターンを実行し得る環境において、サブリードヒットコマンドの発生頻度は、サブリードミスコマンドの発生頻度と比較して少ないので、FMモジュールの性能低下を軽減できる。
コマンド内部処理ユニット120は、キャッシュヒット判定ユニット111からサブリードミスコマンドを受信する。コマンド内部処理ユニット120は、サブリードミスコマンド毎に、サブリードミスコマンドが指定するLBAに対応したPBAを論物変換テーブル600から特定し、特定したPBAが該当する物理領域に接続されたFMインターフェース124に対して、FM140からデータをリードするコマンドを生成し転送する。2以上のサブリードミスコマンドにそれぞれ対応した2以上のリード元物理領域(ページ)にそれぞれ接続された2以上のFMインターフェース124をそれぞれ並列に起動できる。
一方、プロセッサ123は、キャッシュヒット判定ユニット111からサブリードヒットコマンドを受信する。プロセッサ123は、サブリードヒットコマンドにて指定されるサブキャッシュ領域について排他制御を行った後、コピーDMAユニット121に対してコマンドを発行する。そのサブキャッシュ領域内のデータをリードバッファ領域(上位装置にリードデータを転送する前に、一旦リードデータを格納する領域)にコピーするためである。なお、本実施形態では、サブキャッシュ領域とリードバッファ領域が別々の領域であるが、データキャッシュ114とリードバッファ領域が一体であってもよく、その場合、コピーDMAユニット121は無くてもよい。
また、本実施形態では、リードコマンドにてFM群から読み出されたデータがデータキャッシュ114に登録されないが、本発明はこの例に限定されるものではない。例えば、FM140から読み出されたサブリードデータがデータキャッシュ114に転送され、リードサブコマンドで指定されたLBAがキャッシュヒット判定テーブルに登録されてもよい。これにおり、頻繁にリード元となるLBA領域については、FM140からではなくサブキャッシュ領域からデータが読み出されてもよい。
図4に示した動作にて、サブリードコマンド(サブリードヒットコマンド及びサブリードミスコマンド)の処理の結果、データ転送用のコマンドが通知されたFMインターフェース124とコピーDMAユニット121から完了通知が転送される。
具体的には、図5に示すように、FM140からデータを読み出すコマンドの処理が完了したFMインターフェース124は、サブリードミスコマンドにて指定されFM140から読み出されたサブリードデータを含んだ完了通知を、コマンド分割ユニット113に通知する。
また、サブキャッシュ領域からリードバッファへのデータ転送が完了したコピーDMAユニット121は、転送完了を、コピーDMAユニット121にコマンドを発行したプロセッサ123に通知する。そして、コピーDMAユニット121からの完了通知を受信したプロセッサ123は、サブリードヒットコマンドに対応したサブキャッシュ領域について排他制御を行った後、サブリードヒットコマンドの完了をコマンド分割ユニット113に通知する。なお、実施形態では、コピーDMAユニット121が完了を一旦プロセッサ123に通知し、その通知を受けたプロセッサ123が、コマンド分割ユニット113に完了を通知するが、本発明はこの例に限定されるものではない。例えば、コピーDMAユニット121がコマンド分割ユニット113とプロセッサ123にサブリードヒットコマンドを通知してもよい。
コマンド分割ユニット113は、単一のリードコマンドより作成した複数のサブリードコマンドの全てについて完了通知を待っている。コマンド分割ユニット113は、タイムアウトの閾値を超過しても完了通知がない場合には(サブリードコマンドを発行してから一定時間以内に完了通知を受信しない場合には)、エラー情報をコマンド処理ログ132に書き込み、プロセッサ123に割り込みを行ってよい。
FMインターフェース124及びプロセッサ123からの完了通知を受信したコマンド分割ユニット113は、リードコマンドを構成する全てのサブリードコマンドについて完了通知を受信した後、コマンド外部処理ユニット119に、リードコマンドの完了通知を転送する。
コマンド分割ユニット113からリードコマンドの完了通知を受信したコマンド外部処理ユニット119は、上位装置に対してリードコマンド処理が完了したことを通知する完了通知を転送する。上位装置に転送される完了通知(リードコマンドの応答)は、コマンド分割ユニット113からの通知でもよいし、コマンド外部処理ユニット119により生成された通知でもよい。また、上位装置に転送される完了通知は、リードコマンドを構成する全てのサブリードコマンドにそれぞれ対応したサブリードデータにより構成されたリードデータを含んでもよい。
(1−5)プロセッサ123の処理
続いて、プロセッサ123の処理を説明する。本実施形態のプロセッサ123の主な処理としては、サブライトヒットコマンド処理及びサブリードヒットコマンド処理のように上位装置からのI/Oコマンドが基で実行される処理と、デステージ処理及びリクラメーション処理のように上位装置からのコマンドとは非同期に(独立して)実行される処理とがある。このうち、デステージ処理及びリクラメーション処理のように上位装置からのコマンドと非同期に実行される処理(内部処理)については、上位装置に完了が通知されず、故に、内部処理は、上位装置からは把握できない処理である。
(1−5−1)プロセッサ123の処理:サブライトヒットコマンド処理
プロセッサ123の処理として、まず、サブライトヒットコマンド処理について図8を用いて説明する。
図8は、サブライトヒットコマンド処理のフロー図である。
S801では、プロセッサ123が、キャッシュヒット判定ユニット111からサブライトヒットコマンドを受信する。ここで、プロセッサ123は、受信したサブライトヒットコマンドから旧サブキャッシュ領域及び新サブキャッシュ領域を特定する。
S802では、プロセッサ123は、S801にて特定したサブキャッシュ領域のロック取得を試みる。このステップで、プロセッサ123は、FMコントローラ110が保持する管理テーブルを基に、ロック取得を試みる。
S803では、プロセッサ123は、ロックが取得できたかを判定する。このステップにてロックが取得できない場合、プロセッサ123は、S801で特定されたサブキャッシュ領域が別処理にて利用中であると判断でき、S802に遷移することで、別処理の利用が終了するまで、ロック取得を試みる。一方で、ロックが取得できた場合、S804に遷移する。
S804では、プロセッサ123が、ヒットサブ領域(キャッシュヒットしたサブキャッシュ領域)の管理データを取得する。
S805では、プロセッサ123が、S804で取得した管理データ(ヒットサブ領域に格納されているデータに対応したLBAを含む)を参照し、ヒットサブ領域が旧サブキャッシュ領域か否かを判定する。FMモジュール100では、ヒットサブ領域内のデータが別処理にて変化する可能性があり、S805では、プロセッサ123は、この領域が旧サブキャッシュ領域であるか否かを判定する。
S805の判定結果が肯定の場合(具体的には、ロックが取得されたヒットサブ領域に対応しているLBAが、サブライトヒットコマンドで指定されているLBAと同一の場合)、S806に遷移する。一方、S805の判定結果が否定の場合(具体的には、ロックが取得されたヒットサブ領域に対応しているLBAが、サブライトヒットコマンドで指定されているLBAと異なっている場合)、ヒットサブ領域が別処理によって旧サブキャッシュ領域ではなくなった場合であり、S807に遷移する。
S806では、プロセッサ123が、旧サブキャッシュ領域を解放する。これにより、旧サブキャッシュ領域を、別処理においてサブキャッシュ領域として扱う事ができる。
S807では、プロセッサ123が、新サブキャッシュ領域のアドレスを、キャッシュ管理テーブルに登録する。
S808では、プロセッサ123が、ヒットサブ領域のロックを解放する。この解放処理により、解放された領域を、別処理(例えばデステージ処理又はサブリードヒットコマンド処理)においてサブキャッシュ領域として扱う事ができる。
S809では、プロセッサ123が、S801にて受信したサブライトヒットコマンドが完了したことをコマンド分割ユニット113に通知する。
以上が、サブライトヒットコマンド処理である。
(1−5−2)プロセッサの処理:サブリードヒットコマンド処理
続いて、サブリードヒットコマンド処理について図9を用いて説明する。
図9は、サブリードヒットコマンド処理のフロー図である。
S901では、プロセッサ123が、キャッシュヒット判定ユニット111からサブリードヒットコマンドを受信する。ここで、プロセッサ123は、受信したサブリードヒットコマンドからサブキャッシュ領域を特定する。S902では、プロセッサ123は、S901にて特定したサブキャッシュ領域のロック取得を試みる。S903では、プロセッサ123は、ロックが取得できたかを判定する。S904では、プロセッサ123が、ヒットサブ領域(キャッシュヒットしたサブキャッシュ領域)の管理データを取得する。S905では、プロセッサ123が、S904で取得した管理データ(ヒットサブ領域に格納されているデータに対応したLBAを含む)を参照し、ヒットサブ領域が、サブリードヒットコマンドに対応したサブリードデータを記憶しているサブキャッシュ領域か否かを判定する。S905の判定結果が肯定の場合、S906に遷移し、S905の判定結果が否定の場合、S910に遷移する。
S906では、プロセッサ123が、S905にてヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていると判断された為、ヒットサブ領域内のデータをリードバッファ領域にコピーするコピーDMAユニット121用にコマンドを生成し、そのコマンドをコピーDMAユニット121に送信することでコピーDMAユニット121を起動する。
S907では、プロセッサ123が、S906にて起動したコピーDMAユニット121から完了通知を受信する。この完了通知の受信により、サブリードヒットコマンドに対応したサブリードデータがリードバッファ領域に格納されたことが確定する。本実施形態のFMモジュール100では、リードコマンドから分割された複数のサブリードコマンドにそれぞれ対応した複数のサブリードデータがリードバッファ領域に格納され、全てのサブリードコマンドの完了を確認したコマンド分割ユニット113が、上位装置に対して、データ転送を起動する。このため、サブリードデータがリードバッファ領域に格納されたことをもって、サブリードヒットコマンドとしてのデータ転送処理は完了となる。
S908では、プロセッサ123が、ヒットサブ領域のロックを解放する。S909では、プロセッサ123が、S901にて受信したサブリードヒットコマンドが完了したことをコマンド分割ユニット113に通知する。
S910では、プロセッサ123が、ヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていないと判定されるため、ヒットサブ領域のロックを解放する。
S911では、プロセッサ123が、サブリードヒットコマンドを、コマンド内部処理ユニット120にリードミスコマンドとして登録する。S901にて受信したサブリードヒットコマンドについて既にキャッシュミスが発生しており、ヒットサブ領域にサブリードデータが無くそのサブリードデータがFM140に格納されていると判定されたためである。この場合、コマンド内部処理ユニット120が、FMインターフェース124にコマンドを発行する。そして、FMインターフェース124によりFM140からリードバッファ領域へデータが転送されたことが完了した事をもって、FMインターフェース124がコマンド分割ユニット113に完了を通知する。このため、プロセッサ123からコマンド分割ユニット113への完了通知は不要となる。
以上が、サブリードヒットコマンド処理である。
(1−5−3)プロセッサ123の処理:デステージ処理
続いて、デステージ処理について図10を用いて説明する。
図10は、デステージ処理のフロー図である。
デステージ処理は、定期的に起動される。なお、デステージ契機は定期的に限定されない。例えば、プロセッサ123が、データキャッシュ114の使用状況を監視し、データキャッシュ114の使用可能領域の量が閾値以下となった場合に、サブキャッシュ領域を解放するためにデステージ処理を起動してもよい。
S1001では、プロセッサ123が、デステージ対象とするサブキャッシュ領域を選択する。プロセッサ123は、キャッシュ管理テーブルを参照し、複数(又は1)のサブキャッシュ領域をデステージ対象として選択する。ここでは、キャッシュ管理テーブルより、デステージ対象データに対応したLBA(論理空間に属するLBA)が取得される。
S1002では、プロセッサ123は、S1001にてデステージ対象として選択した複数のサブキャッシュ領域の各々のロック取得を試みる。
S1003では、プロセッサ123は、ロックの取得が可能かを判定する。プロセッサ123は、サブキャッシュ領域とロックの有無との関係を示すロック管理テーブル(図示せず)を参照し、S1001にて選択したデステージ対象領域が占有可能となった(ロックが取れた)かを判定する。ロックが取れたサブキャッシュ領域の量が一定量未満の場合、他のサブキャッシュ領域をデステージ対象領域とするため、S1001に遷移する。一方、ロックが取れたサブキャッシュ領域の量が一定量以上の場合、S1004に遷移する。
S1004は、プロセッサ123が、S1001にて選択した複数のデステージ対象領域の管理データを取得する。
S1005では、プロセッサ123が、S1001にて選択した複数のデステージ対象領域が有効であることを確認する。本実施形態では、S1001にてデステージ対象とした領域についてS1003にてロックを取得するまでの間に、別処理(例えばプロセッサ123がマルチコアの場合、他のコアが実施しているデステージ処理)によって解放されている可能性がある。プロセッサ123が、ロックを取得したサブキャッシュ領域の管理データを参照することで、デステージ対象領域が有効であることを判断する。有効となった場合、S1006に遷移する。一方、有効でなかった場合、デステージ対象の領域を確保する為に、S1001に遷移する。
S1006では、プロセッサ123が、デステージ先FM領域(FM内の物理領域)の選択を行う。プロセッサ123が、内部の管理テーブル(例えば図7に示したブロック管理テーブル700)を参照し、サブキャッシュ領域のデータのデステージ先(転送先)となる複数のFM領域を決定する。
S1007では、プロセッサ123が、S1006にて選択したFM領域に接続したFMインターフェース124に対してライト用のコマンドを生成し起動する。
S1008では、プロセッサ123が、S1006にて起動した複数のFMインターフェース124の各々から完了の通知を受ける。
S1009では、プロセッサ123が、論物変換テーブル600を更新する。プロセッサ123が、デステージ先のPBA領域(FM領域)に対して、S1001にて取得したLBAを対応付ける。
S1010では、プロセッサ123が、S1001にて選択したサブキャッシュ領域のロックを解放する。このロック解放後、サブライトヒットコマンド処理及びリードヒットコマンド処理のような別処理において、その解放されたサブキャッシュ領域を利用可能である。
以上が、デステージ処理である。
(1−5−4)プロセッサの処理:リクラメーション処理
続いて、図11を用いリクラメーション処理について説明する。
図11は、リクラメーション処理のフロー図である。
S1101では、プロセッサ123が、リクラメーション対象のPBA領域(移動元ブロック)を選択する。プロセッサ123は、ブロック管理テーブル700を参照し、相対的に無効PBA量の多いブロックを移動元ブロックとして選択する。リクラメーション処理において移動されるデータの量が少なくて済むようにするためである。
S1102では、プロセッサ123が、S1101にて選択したPBA領域(ブロック)に対応付けられているLBAを、論物変換テーブル600から特定する。なお、論物変換テーブル600以外の管理テーブルにおいてLBAとPBAの対応関係が登録されていてそのテーブルからLBAが特定されてもよい。
S1103では、プロセッサ123が、キャッシュ登録ユニット112に対し、S1102にて特定したLBAをキャッシュ登録テーブルに登録することとそのLBAに対応付けられたデータを格納するためのサブキャッシュ領域を確保することとを依頼する。
S1104では、プロセッサ123が、S1103にてキャッシュ登録ユニット112に依頼したことが実行されたかを判定する。S1104の判定結果が肯定の場合、S1105に遷移し、S1104の判定結果が否定の場合(例えば、空きサブキャッシュ領域の枯渇のため確保が実施されなかった場合)、S1103に遷移する。
S1105では、プロセッサ123が、S1103にて確保されたサブキャッシュ領域のロックを取得する。
S1106では、プロセッサ123が、移動元ブロック内の有効データをS1103にて確保したサブキャッシュ領域に転送するために、該当するFMインターフェース124用のコマンドを生成し、起動する。これにより、移動元ブロックから有効データがサブキャッシュ領域に転送される。
S1107では、プロセッサ123が、S1106にて起動したデータ転送の完了を特定する。この完了をもって、移動元ブロック内の有効データはサブキャッシュ領域に格納されたこととなる。このため、移動元ブロックに対応付けられたLBAを指定したI/Oコマンドの処理は、サブキャッシュ領域に格納されたデータにて対応可能となる。
S1108では、プロセッサ123が、移動元ブロックのPBAとそれに対応付けられたLBAとの組を削除する。S1107にて移動元ブロック内の有効データがサブキャッシュ領域に格納されたためである。
S1109では、プロセッサ123が、ブロック管理テーブル700を更新する。プロセッサ123が、S1108にてLBA/PBAの組(対応付け)を削除したことで、移動元ブロックの全PBAが無効PBAである。このため、プロセッサ123が、ブロック管理テーブル700を更新し、移動元ブロックが消去可能であることを別処理に通知する。詳細な説明は省略するが、本実施形態では、リクラメーション処理とは別に消去用のジョブも並行して動作しており、そのジョブが、ブロック管理テーブル700を参照し、全PBAが無効PBAとなっているブロックを選択しその選択したブロックについて消去処理を実行する。
S1110では、プロセッサ123が、サブキャッシュ領域のロックを解放する。
以上が、リクラメーション処理である。FMコントローラ110は、リクラメーション用のデータと上位装置からのライトデータを、ともにデステージ処理によりFM140に格納する。このため、移動元ブロック内の有効データがサブキャッシュ領域に格納された段階でリクラメーション処理の終了となる。
以上が、FMモジュール100が実行する処理である。以上のとおり、デステージ処理、リクラメーション処理、サブライトヒットコマンド処理及びサブリードヒットコマンド処理の各処理にて処理領域の競合が想定される場合、その調停処理を組み込みプロセッサ123にて処理することで、複雑な処理をソフトウェア(コンピュータプログラム)にて記述可能となる。また、サブリードヒットコマンド処理及びサブライトヒットコマンド処理に比べて発生頻度の高いサブリードミスコマンド処理及びサブライトミスコマンド処理については、ハードウェアのみで処理することで高性能化が可能となる。結果、競合処理を行う複雑なハードウェアが無くとも、サブリードミスコマンド処理を高速に処理可能となり、FMモジュール100のリードコマンド処理性能が向上する。同様に、競合処理を行う複雑なハードウェアが無くともサブライトミスコマンドを高速に処理可能となり、上位装置へのライト応答時間(ライトコマンド処理の応答時間)を短縮できる。また、サブI/Oコマンド(サブライトコマンド/サブリードコマンド)をハードウェアにて処理する場合であっても、そのハードウェアによる処理において障害が発生した場合にはそのハードウェアによりログ(例えば障害情報)がコマンド処理ログ132に記録されるので、障害発生時に組み込みプロセッサ123から障害部位(例えば、障害が発生したハードウェア)及び障害内容の少なくとも一方の取得が可能となる。
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、実施形態では、キャッシュヒット/ミスに応じてプロセッサがコマンド(サブコマンド)を処理するか否かが決まるが、プロセッサがコマンド(サブコマンド)を処理するか否かの基準は、それに限らないでよい。例えば、FM群が、複数の高速物理領域(例えばSLC(Single Level Cell)のページ)と、複数の低速物理領域(例えばMLC(Multi Level Cell)のページ)とを含む。論理空間(LBA範囲)が、高速物理領域が割り当てられる論理領域である高速論理領域と、低速物理領域が割り当てられる論理領域である低速論理領域とに区分されている。この場合、高速論理領域に属するLBAが指定されたI/Oコマンドの処理は、I/Oハードウェアが担当しプロセッサ123は担当せず、低速論理領域に属するLBAが指定されたI/Oコマンドの処理は、I/Oハードウェアに加えてプロセッサ123も担当してもよい。
100:FMモジュール 110:FMコントローラ 140:FM
本発明は、概して、半導体記憶素子に対するデータのI/O(Input/Output)の制御に関する。
半導体記憶素子(例えばNAND Flash Memory)の製造プロセス微細化により、半導体記憶素子の適用先が広がっている。特に、サーバ等のエンタープライズ分野では、HDD(Hard Disk Drive)に代えて、半導体記憶素子を有する半導体メモリデバイス(例えば、SSD(Solid State Drive)を採用する例が増加している。
SSDは、内部に複数の半導体記憶素子を搭載し、これら半導体記憶素子を並列に制御することで、短期間に大量のデータについての書き込みと読み出し(I/O処理)を実現する(例えば特許文献1)。
近年、SATA(Serial ATA)等の低速なHDD互換インターフェースに代えて、PCI-Express等のより高速なインターフェースを採用したSSDが発表されている。高速なインターフェースを採用したSSDについては、より高いI/O処理性能が望まれる。なぜなら、インターフェースが高速でも内部のI/O処理性能が低いと、内部のI/O処理性能がボトルネックとなるからである。SSDが採用するインターフェースが高速であるか否かに関わらず、I/O処理性能の向上は望まれる。
I/O処理性能の向上のためには、例えば、より多くの半導体記憶素子を並列に制御する必要がある。SSD内部の複数の半導体記憶素子の並列制御は、一般的に、SSD内部の組み込みプロセッサが行う。このため、SSD内の組み込みプロセッサの処理性能の限界によって並列制御可能な半導体記憶素子の数が制限され、SSDのI/O処理性能を制限してしまう事が考えられる。以下、SSD内の組み込みプロセッサの処理性能の限界によってSSDのI/O処理性能が制限されることを、「組み込みプロセッサ処理性能ネック」と記す。
組み込みプロセッサ処理性能ネックの解消の方法として、例えばI/O処理を専用のハードウェアにて実行することが考えられる。しかし、専用ハードウェアは、動的にリソースを確保したり複雑な処理を実行したりすることが困難であり、さらには、ソフトウェア(コンピュータプログラム)のように改変が容易でなく、採用されるメモリ(例えば主記憶又は半導体記憶素子)の仕様の変更やメモリ構成の変化に対応できない場合が生じる。また、バグ発見時の修正がソフトウェアと比べて困難なことから開発リスクの増加というデメリットがある。
SSDでは、搭載した半導体記憶素子の最小消去単位と最小書き込み単位が異なっていた場合(例えばNAND Flash Memory)、消去単位に含まれてしまうが消せないデータを退避させる(所謂リクラメーション)処理が必須となる。こうした制御では、退避するデータがなるべく少ない領域を消去処理対象の領域として選択する複雑な制御が必要となる。また、搭載した半導体記憶素子が書換え回数に制限を有する場合、SSDに搭載する複数の半導体記憶素子の領域ごとの書換え回数を平準化する(所謂ウェアレベリング)処理が必須となる。こうした制御では、領域毎の書換え回数を管理し、利用する領域を適切に選択する複雑な処理が必要となる。
上記のリクラメーション、ウェアレベリング等の複雑な処理を行う、ハードウェアの設計は困難である。また、こうした制御は、半導体メモリデバイスに搭載する半導体記憶素子の種別により、大きく変化する。例えば、必要となるウェアレベリング制御の精度は、半導体記憶素子の劣化耐性により大きく異なる。このため、仮にウェアレベリングをハードウェアにて実装した場合、採用可能な半導体記憶素子の種別に制限が生じる可能性がある。
一方、I/O処理をプロセッサにて実行する場合、コマンドの検知や各種制御をシリアルに行う必要があり、I/O処理に時間を要するという問題もある。
半導体メモリデバイスが、記憶素子群(1以上の半導体記憶素子)と、メモリコントローラとを有する。メモリコントローラが、上位装置からのI/Oコマンドの少なくとも一部が所定の条件を満たしている場合にそのI/Oコマンドの少なくとも一部を処理するプロセッサと、そのI/Oコマンドが所定の条件を満たしてない場合にI/Oコマンドの全てを処理する1以上のハードウェアロジック回路とを有する。
I/O処理を行う組み込みプロセッサの処理性能ネックが回避され、半導体メモリデバイスの高性能化と応答時間の短縮が期待できる。
実施形態に係るフラッシュメモリ(FM)モジュールの内部構成を示す図である。
ライトコマンド処理の一部でありライトコマンド受信処理を示す。
ライトコマンド処理の残りでありライトコマンド応答処理を示す。
リードコマンド処理の一部でありリードコマンド受信処理を示す。
リードコマンド処理の残りでありリードコマンド応答処理を示す。
論物変換テーブルを示す。
ブロック管理テーブルを示す。
サブライトヒットコマンド処理のフロー図である。
サブリードヒットコマンド処理のフロー図である。
デステージ処理のフロー図である。
リクラメーション処理のフロー図である。
上位装置の一例を示す。
上位装置の別の例を示す。
以下、一実施形態を説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
なお、以下の説明では、「abcテーブル」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「abcテーブル」のうちの少なくとも1つを「abc情報」と呼ぶことができる。
また、以下の説明では、半導体メモリデバイスが有する半導体記憶素子は、不揮発性半導体記憶素子であり、具体的には、NAND Flash Memoryのようなフラッシュメモリ(FM)であるとする。従って、半導体メモリデバイスは、不揮発性半導体メモリデバイスであり、具体的には、FMモジュールであるとする。FMモジュールは、SSDのようなFMデバイスの一例である。不揮発性半導体記憶素子は、FMに限らず、例えば、磁気抵抗メモリであるMRAM(Magnetoresistive random access memory)、抵抗変化型メモリであるReRAM(resistance random access memory)、強誘電体メモリであるFeRAM(Ferroelectric random access memory)等でもよい。また、不揮発性半導体記憶素子に代えて揮発性半導体記憶素子が採用されてもよい。
また、以下の説明では、FMは、複数の「物理ブロック」で構成され、各物理ブロックは、複数の「物理ページ」で構成されているとする。また、アクセス単位領域よりも消去単位領域の方が大きい。具体的には、物理ページ単位でデータがアクセス(リード及びライト)され、物理ブロック単位でデータが消去される。また、FMモジュールが提供する論理空間(論理アドレス空間)には、物理領域が所定の単位(例えばページ単位又はブロック単位)で割り当てられるが、論理空間のうち、物理ブロックが割り当てられている範囲を「論理ブロック」と言い、物理ページが割り当てられている範囲を「論理ページ」と言うことができる。FMは、追記型、具体的には、物理ページが割り当てられている論理ページがライト先の場合、ライト先論理ページに、割当て済の物理ページに代えて新たに空き物理ページが割り当てられ、新たに割り当てられた物理ページにデータが書き込まれる。各論理ページについて、新たに割り当てられた物理ページに書き込まれたデータ(最新のデータ)は「有効データ」であり、有効データが書き込まれている物理ページは「有効ページ」であり、過去に割り当てられていた物理ページに格納されているデータ(過去のデータ)は「無効データ」であり、無効データが書き込まれている物理ページは「無効ページ」である。
(1−1)FMモジュールの構成
まず、図1を用いて、本実施形態に係るFMモジュール100の内部構成を説明する。
図1は、FMモジュール100の内部構成を示す図である。
FMモジュール100は、複数(例えば32)のFM140であるFM群と、複数のFM140に接続されたFMコントローラ110とを有する。FMコントローラ110は、複数のデバイス、例えば、プロセッサ123、RAM(Random Access Memory)122、データコンプレッサ(データ圧縮/解凍ユニット)116、パリティジェネレータ(パリティ生成ユニット)115、データキャッシュ114、I/Oインターフェース118、FMインターフェース124、コマンド外部処理ユニット119、コマンド内部処理ユニット120、コピーDMA(Direct Memory Access)ユニット121、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、及び、スイッチ117を備えている。キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、コマンド外部処理ユニット119及びコマンド内部処理ユニット120の各々が、I/O処理の一部を実行するハードウェア(ハードウェアロジック回路)である。以下、I/O処理の一部を実行するハードウェア(ハードウェアロジック回路)を、特に、「I/Oハードウェア」と呼んでよい。本実施形態で言う「I/O処理」とは、上位装置からのI/Oコマンドの処理であり、具体的には、ライトコマンド処理(図2に示す処理と図3に示す処理から成る処理)と、リードコマンド処理(図4に示す処理と図5に示す処理から成る処理)である。また、「上位装置」は、FMモジュール100にI/Oコマンドを送信する装置である。例えば、図12によれば、ホスト計算機1300が、上位装置である。また、例えば、図13によれば、ストレージコントローラ1201が、上位装置である。具体的には、ストレージ装置1200において、複数のFMモジュール100がそれぞれストレージコントローラ1201に接続されており、ストレージコントローラ1201が、ホスト計算機1250からI/O要求を受信し、そのI/O要求を基に、FMモジュール100にI/Oコマンドを送信する。図12において、ホスト計算機1300とFMモジュール100間は、PCIe(PCI Express)のような高速のインターフェース経由で通信してよい。図13において、ストレージコントローラ1201とFMモジュール100間も、PCIeのような高速のインターフェース経由で通信してよい。
再び図1を参照する。スイッチ117には、プロセッサ123、RAM122、データコンプレッサ116、パリティジェネレータ115、データキャッシュ114、I/Oインターフェース118、FMインターフェース124、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、コマンド外部処理ユニット119、コマンド内部処理ユニット120及びコピーDMAユニット121が接続されている。スイッチ117は、デバイス(要素)間のデータをアドレス(又はID)によってルーティングし転送する。なお、本実施形態では、図1に示すように、単一のスイッチ117に各デバイスがスター状に接続された例について記すが、本発明は、この例に限定されるものではない。デバイス間が通信可能に接続されていればよい。
I/Oインターフェース118は、上位装置と接続するデバイスである。I/Oインターフェース118は、スイッチ117を介してFMコントローラ110における別のデバイスと通信可能である。I/Oインターフェース118は、上位装置からI/Oコマンド(ライトコマンド/リードコマンド)を受信する。I/Oコマンドでは、I/O先(ライト先又はリード元)を表す論理アドレス(典型的にLBA(Logical Block Address))が指定されている。I/Oコマンドがライトコマンドの場合、I/Oインターフェース118は、ライトコマンドに従うライト対象のデータ(以下、「ライトデータ」と言うことがある)を受信する。I/Oインターフェース118は、受信したライトデータを、RAM122に記録する。また、I/Oインターフェース118は、上位装置からコマンドを受信した際に、プロセッサ123に割り込みを行うか、またはプロセッサ123がポーリングしているRAM122上の記憶領域にコマンドを受信したことを通知するデータを書き込む。
プロセッサ123は、スイッチ117を介してFMコントローラ110の他のデバイスと通信する。プロセッサ123は、RAM122に記憶されているプログラム及び管理テーブルを基にFMコントローラ110全体を制御する。また、プロセッサ123は、定期的な情報取得(例えばRAM122に対するポーリング)、及び割り込み受信機能によって、FMコントローラ110全体を監視する。
データキャッシュ114は、一時記憶領域の一例であり、FMコントローラ110における転送対象のデータを一時的に記憶する。本実施形態では、データキャッシュ114は、読み出されたデータが残らないバッファであるが、読み出されたデータが残るキャッシュメモリのような記憶領域でもよい。
複数のFMインターフェース124がFMコントローラ110に設けられており、複数のFMインターフェース124を介して、並列に複数のFM140に対してI/Oを行うことができる。1のFMインターフェース124に、1のバスが接続されており、1のバスに、2のFM140が接続されている。本実施形態では、16のFMインターフェース124が、存在し、故に、16のバスが存在し、結果として、32のFMが存在する。FMインターフェース124は、I/O先のFM140にCE(Chip Enable)信号を出すことで、同一バスに接続された2のFMをそれぞれ独立して制御することができる。
FMインターフェース124は、プロセッサ123(又はI/Oハードウェア(例えばコマンド内部処理ユニット120))より指示されるI/O指示(ライト指示/リード指示)に応じて動作する。I/O指示では、I/O先を表す情報として、例えば、チップ番号(FM140の識別番号)、ブロック番号(FM140における物理ブロックの識別番号)、(FM140における物理ブロック内の物理ページの識別番号)が指定されている。I/O指示がリード指示の場合、FMインターフェース124は、リード指示に従うリード元領域(FM140内の物理ページ)から読み出されたデータをデータキャッシュ114に転送する(書き込む)。I/O指示がライト指示の場合、FMインターフェース124は、ライト対象のデータをデータキャッシュ114から読み出し、そのデータを、ライト先に従うライト先領域(FM140内の物理ページ)に転送する(書き込む)。なお、FMインターフェース124が、データキャッシュ114を経由せずにデータを上位装置に転送可能である場合、リード指示に従い読み出されたデータは、データキャッシュ114に格納されることなく上位装置に転送されてよい。
また、FMインターフェース124は、ECC(Error Correction Code / Error Checking and Correction)生成回路、ECCによるデータ損失検出回路、ECC訂正回路を有してよい。FMインターフェース124は、データ書き込みの際、データに対してECCを付加してFM140にデータを書き込んでよい。また、データ読み出しの際、FMインターフェース124は、ECCによるデータ損失検出回路によって、FM140から読み出されたデータを検査し、データ損失が検出された際には、ECC訂正回路によってデータ訂正を行ってよい。
データコンプレッサ116は、可逆圧縮のアルゴリズムを処理する機能を有し、複数種のアルゴリズムや、圧縮レベルの変更機能を備える。データコンプレッサ(データ圧縮/解凍ユニット)116は、プロセッサ123(又はI/Oハードウェア(例えばコマンド内部処理ユニット120))からの指示に従って、データキャッシュ114からデータをリードし、可逆圧縮のアルゴリズムによりデータ圧縮演算もしくはデータ圧縮の逆変換であるデータ解凍(伸長)演算を行い、その結果を再度データキャッシュに書き込む。なお、データコンプレッサ116は、ハードウェア(ロジック回路)として実装されてもよいし、圧縮/解凍のプログラムをプロセッサ123で処理することで、同様の機能が実現されてもよい。
パリティジェネレータ115は、XOR演算、Even Odd演算、リードソロモン演算等のパリティ生成機能を有している。パリティジェネレータ115は、プロセッサ123(又はI/Oハードウェア(例えばコマンド内部処理ユニット120))からの指示に従って、データキャッシュ114からパリティ生成対象となるデータをリードし、前述のパリティ生成機能により、RAID5又はRAID6のパリティを生成する。
キャッシュヒット判定ユニット111は、上位装置からのI/Oコマンドで指定されたI/O先論理アドレス範囲(例えばLBA範囲)のデータがデータキャッシュ114内のキャッシュ領域に記録されているかを、キャッシュヒット判定テーブルを参照して判定するハードウェアである。
キャッシュ登録ユニット112は、上位装置からライトコマンドがあった場合に動作し、ライトデータをデータキャッシュ114内のキャッシュに格納したことを管理するため、キャッシュヒット判定テーブルを更新する。
コマンド分割ユニット113は、上位装置からのI/Oコマンドを複数のサブI/Oコマンドに分割するハードウェアである。コマンド分割ユニット113は、I/Oコマンドを、FMモジュール100内部のLBA管理単位に分割する。本実施形態では、上位装置から受信したI/Oコマンドを分割する例を説明するが、分割されるコマンドは、上位装置からのI/Oコマンドに限られない。
コマンド外部処理ユニット119は、上位装置とやり取りするコマンドの制御を行うハードウェアである。上位装置は、コマンド外部処理ユニット119のレジスタにアクセスすることで、FMモジュール100に対するコマンドを作成したことを通知する。通知を受けたコマンド外部処理ユニット119は、上位装置よりコマンドを取得する。
また、コマンド外部処理ユニット119は、上位装置からのコマンドが完了した際、そのコマンドの完了通知を上位装置に通知する。上位装置は、コマンド外部処理ユニット119のレジスタにアクセスすることで(例えば完了通知の受信を意味する情報をレジスタに書き込むことで)、FMモジュール100から完了通知を受信したことを通知する。
コマンド内部処理ユニット120は、FMモジュール100の内部のコマンド処理を行うハードウェアである。コマンド内部処理ユニット120は、実施形態において、キャッシュヒット判定ユニット111にて、リードコマンドを内部のLBA管理単位に分割したサブリードコマンドのリクエスト対象領域が、キャッシュに登録されていない場合、サブリードコマンドをFMインターフェース124用のコマンドに変換し、FMインターフェース124にコマンドを作成したことを通知する。
コピーDMAユニット121は、主にデータキャッシュ114のデータをコピーする際に動作するハードウェアである。コピーDMAユニット121は、プロセッサ123からの指示に従って、データキャッシュ114内の記憶領域に記録されているデータを他の領域にコピーする。
以上説明した、スイッチ117、I/Oインターフェース118、プロセッサ123、データキャッシュ114、FMインターフェース124、データコンプレッサ116、パリティジェネレータ115、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド分割ユニット113、コマンド外部処理ユニット119、コマンド内部処理ユニット120及びコピーDMAユニット121の各々は、ASIC(Application Specific Integrated Circuit)やFPBA(Field Programmable Gate Array)として、一つの半導体素子内で構成してもよいし、複数の個別専用IC(Integrated Circuit)を相互に接続した構成であってもよい。
RAM122は、典型的にはDRAM(Dynamic Random Access Memory)などの揮発性メモリが挙げられる。RAM122は、FMモジュール100内で用いられるFM140の管理テーブル、コマンド分割ユニットが作成するサブコマンド、DMAが用いる転送制御情報を含んだ転送リスト等を格納する。なお、RAM122は、データを格納するデータキャッシュ114の機能の一部または全てを含みデータ格納に用いる構成としてもよい。
ここまで、図1を用いて、本実施形態に係るFMモジュール100の構成を説明した。なお、本実施形態では、図1に示すように、FM140を搭載したFMモジュール100について記述するが、搭載する不揮発性メモリは、FMに限定されるものではない。Phase Change RAMやResistance RAM等でもよい。
(1−2)第1の管理テーブル:論物変換テーブル
続いて、FMモジュール100が制御に用いる管理テーブルについて説明する。
FMモジュール100は、複数のFM140(チップ)を搭載し、複数のブロック(物理ブロック)、複数のページ(物理ページ)により構成される記憶領域を管理し、上位装置に対しては、記憶領域として論理空間(論理領域)を提供する。FM140により構成される物理領域は、FMモジュール100内部のみで用いるアドレス空間に一意に対応づけて管理する。以下、このFMモジュール100内部のみで用いる物理領域指定用アドレス空間を、PBA(Physical Block Address)と記す。FMコントローラ110は、複数のPBAを、上位装置に提供する論理空間(アドレス空間)に対応した複数のLBA(Logical Block Address)に対応付けて管理する。
FMモジュール100の対応付け管理用の管理テーブルである論物変換テーブル600について図6を用いて説明する。
図6は、論物変換テーブル600を示す。
論物変換テーブル600は、FMモジュール100内の記憶領域、例えばRAM122に格納されている。論物変換テーブル600は、LBA/PBAの組(対応付け)毎に、LBA601、PBA602及びPBA長603を有する。LBA601は、LBAを示し、PBA602は、PBAを示し、PBA長603は、PBAの長さを示す。PBAの長さは、データコンプレッサ116によりデータが圧縮されたか否か等により異なる。I/Oコマンドがリードコマンドの場合、プロセッサ123又はI/Oハードウェア(例えばコマンド内部処理ユニット120)は、上位装置からのリードコマンドで指定されるLBAに対応するPBA及びPBA長を論物変換テーブル600から特定し、特定したPBA及びPBA長に対応した物理領域(FM群における領域)からデータを読み出す。I/Oコマンドがライトコマンドの場合、プロセッサ123又はI/Oハードウェア(例えばコマンド内部処理ユニット120)は、上位装置からのライトコマンドで指定されるLBAに対応するPBA(つまり更新前データが格納されている物理領域を示すPBA)を論物変換テーブル600から特定し、特定したPBAとは異なるPBA(ライトデータのライト先となる1以上の空きページに対応したPBA)とPBA長を決定する。プロセッサ123又はI/Oハードウェア(例えばコマンド内部処理ユニット120)は、決定したPBA及びPBA長を、論物変換テーブル600の該当箇所(上位装置からのライトコマンドで指定されるLBAに対応したフィールド)に記録する。この動作にて、論理領域上のデータの上書き可能とする。
LBA601のカラムには、FMモジュール100が提供する論理空間に属するLBAが所定サイズ(本実施形態では4KB)ごとに順に並んでいる。具体的には、論理空間が所定サイズに区分されており、単位論理領域毎に、エントリ(レコード)がテーブル600に存在する。例えば、LBA601内の数値1は、512バイトの1セクタを意味する。これは、本実施形態では、LBAとPBAの対応付けが、4KB単位で管理されていることを意味する。このため、論理空間を分割する単位を管理単位と呼ぶこともできる。但し、本発明では、FMモジュール100のような半導体メモリデバイスについて、LBAのような論理アドレスとPBAのような物理アドレスとの組(対応付け)が4KB単位にて管理することに限定されるものではない。LBAは如何なる単位で管理されてもよい。
PBA602は、LBAに対応付けられた先頭PBAを示す。本実施形態では、PBAは、512バイト毎に管理される。図6の例では、LBA「0x000_0000_0000」に対応付けられたPBAとして、[XXX」というあるPBA値が対応付けられている。このPBA値は、FMの記憶領域を一意に示すアドレスである。これにより、リードコマンドにLBA「0x000_0000_0000」が指定されていた場合、PBA「XXX」が特定される。LBAに対応付けられたPBAが無い場合(つまり、論理空間における空きの範囲については)、PBA「未割当」が対応付けられる。
PBA長603は、データの実際のサイズをセクタ数(1セクタ=512バイト)で表現している。図6に示す例では、LBA「0x000_0000_0000」を開始アドレスとする4KB(論理空間としては8セクタ)のデータの長さは、PBA長「2」、512バイト×2セクタ=1KBの長さであることがわかる。従って、PBA長「2」とPBA「XXX」とから、LBA「0x000_0000_0000」を開始アドレスとする4KBのデータは、PBA「XXX」から「XXX+2」の1KBの領域に圧縮して格納されていることがわかる。
なお、実施形態に示すFMモジュールは、データを圧縮して格納した例について示すが、本発明は、この例に限定されるものではない。データは圧縮して格納されていなくともよい。圧縮してデータを格納しない場合、論物変換テーブル600にPBA長603のカラムは不要である。
(1−3)第2の管理テーブル:ブロック管理テーブル
続いて、ブロック管理テーブルについて図7を用いて説明する。
図7は、ブロック管理テーブル700を示す。
ブロック管理テーブル700は、FMモジュール100内の記憶領域、例えばRAM122に格納されており、例えば所定サイズのPBA毎に、PBA701、チップ番号702、ブロック番号703及び無効PBA量704を有する。
PBA701は、FM群における物理領域を示す。なお、本実施形態では、PBAは、ブロック単位で区分して管理される。図7では、PBA701は、先頭アドレスを示す。例えば、PBA「0x000_0000_0000」は、「0x000_0000_0000」〜「0x000_000F_FFFF」のPBA範囲を示す。なお、図6と図7では、PBAの表現形式が異なっているが、PBAという点で同一である。
チップ番号702は、FM140(チップ)の識別番号を示す。ブロック番号703は、ブロック(物理ブロック)の識別番号を示す。
無効PBA量704は、無効PBA量を示す。無効PBA量とは、論理空間への対応付けを解除されたPBA領域の量、つまり、無効領域(無効ページ)の総量(総サイズ)である。逆に、論理空間への対応付けがなされているPBA領域は、有効領域(有効ページ)である。無効PBA領域は、データの上書きが不可能な不揮発性メモリにおいて、疑似的に上書きを実現しようとする際に必然的に生じるものである。具体的には、データ更新の際、他の未書き込みPBA領域に更新データを書き込み、論物変換テーブル600のPBA602とPBA長603が、更新データのライト先のPBA領域の先頭アドレスと、更新データのPBA長に更新される。従って、更新前データが格納されているPBA領域の論理空間への対応付けは解除される。本実施形態では、FMの最小消去単位であるブロック毎にこの無効PBA量(例えば無効ページ数)がカウントされ、無効PBA量が多いブロックが、優先的に、リクラメーション対象領域(リクラメーションの際のデータの移動元物理ブロック)として選択される。図7の例によれば、チップ番号「0」及びブロック番号「0」のブロックの無効PBA量は、160KBである。
本実施形態では、無効PBA量がリクラメーション開始閾値以上となったブロックについて、リクラメーションが行われる。リクラメーションでは、移動元ブロック(無効PBA量がリクラメーション開始閾値以上となったブロック)内の有効PBA領域(有効ページ)から有効データが別のブロックに移動され、その結果、その有効PBA領域が無効PBA領域となり(つまり、移動元ブロックの全領域が無効PBA領域となり)、その後、移動元ブロックに対し消去処理が行われる。その結果として、移動元ブロックが空きブロックとなる。リクラメーションでのデータ移動(データコピー)によりFM140への書き込みが発生する。これにより、FM140の劣化が進展するとともに、データ移動動作としてFMモジュール100のプロセッサ123やバス帯域などのリソースが消費され性能低下の要因ともなる。このため、有効PBA領域内のデータの移動は可能な限り少ないことが望ましい。FMコントローラ110は、ブロック管理テーブル700を参照し、無効PBA量704の値が大きい(無効PBA領域を多く含む)ブロックを優先的に消去処理対象(移動元ブロック)として選択することで、移動されるデータの量を少なくすることができる。
なお、本実施形態では、無効PBA量の管理が、論理空間への対応付けが解除された領域の量の管理であるが、本発明はこの管理単位に限定されるものではない。例えば、ページ数を単位として無効データの量が管理されてもよい。
以上で、ブロック管理テーブル700について説明した。
(1−4)ライトコマンド処理及びリードコマンド処理
続いて、図2〜図5を用いて、ライトコマンド処理とリードコマンド処理を説明する。なお、コマンド外部処理ユニット119、コマンド分割ユニット113、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド内部処理ユニット120、及び、コピーDMAユニット121の少なくとも1つの各々は、図2〜図5に模式的に示すように、処理を行う度にコマンド処理ログ132に処理状況を記録する。この機能により、複数段階にわたるライトコマンド処理及びリードコマンド処理の各々において、障害が生じたときプロセッサがコマンド処理ログ132を算出することで、障害箇所を特定する事が可能となる。コマンド処理ログ132は、図1に示したように例えばRAM122に記憶される。
また、コマンド外部処理ユニット119、コマンド分割ユニット113、キャッシュヒット判定ユニット111、キャッシュ登録ユニット112、コマンド内部処理ユニット120、及び、コピーDMAユニット121の少なくとも1つの各々は、障害を検知(例えばタイムアウト)した際に、プロセッサ123に割り込む機能を有している。割り込みを受けたプロセッサ123は、前述のコマンド処理ログを解析することで障害箇所を特定する。
(1−4−1)ライトコマンド処理
図2及び図3は、ライトコマンド処理を示す。具体的には、図2は、ライトコマンド処理の一部でありライトコマンド受信処理を示す。図3は、ライトコマンド処理の残りでありライトコマンド応答処理を示す。
図2に示すように、上位装置からライトコマンドを受信したコマンド外部処理ユニット119が、受信したライトコマンドを、ユニット119の内部領域(例えばレジスタ)に登録する。コマンド外部処理ユニット119は、登録したライトコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット119は、コマンド分割ユニット113に、登録したライトコマンドを転送する。なお、コマンド外部処理ユニット119がライトコマンドを内部領域に登録する理由は、ハードウェアであるコマンド外部処理ユニット119が完了応答を上位装置に送信するためである(この理由は、リードコマンドの登録(図4参照)についても同様である)。すなわち、コマンド外部処理ユニット119にて、コマンド外部処理ユニット119が受信した各ライトコマンドについて、完了通知を送信済みか未送信かが管理される。完了通知が送信されたライトコマンドは、コマンド外部処理ユニット119から削除されてよい。
コマンド外部処理ユニット119からライトコマンドを受信したコマンド分割ユニット113は、ライトコマンドをサブライトコマンドに分割し、サブライトコマンドを、例えば内部領域(例えばユニット113のレジスタ)に登録する。ここで、ライトコマンドから得られるサブライトコマンドの数は、ライトデータのサイズを、内部管理単位(論理空間の単位論理領域)、言い換えれば、ページサイズで除算することにより得られる商(商が0の場合は1)でよい。例えば、ライトコマンドに従うライトデータのサイズが16KBであり、内部管理単位(ページサイズ)が4KBの場合、得られるサブライトコマンドの数は、16/4=4でよい。コマンド分割ユニット113は、ライトコマンドとサブライトコマンドの対応関係を例えばユニット113の内部領域(例えばレジスタ)に登録する。対応関係は、例えば、ライトコマンドのID(例えば「A」)と、そのライトコマンドから分割された複数のサブライトコマンドにそれぞれ対応した複数のID(例えば「A−1」、「A−2」、「A−3」、「A−4」)との組でよい。ライトコマンドのIDは、上位装置からのライトコマンドに含まれているIDでもよいし、FMコントローラ110(例えばコマンド外部処理ユニット119又はコマンド分割ユニット113)により付与されたIDでもよい。サブライトコマンドのIDは、例えば、ライトコマンドのIDを基に付与されたIDでよく、また、例えば、FMコントローラ110(例えばコマンド分割ユニット113)により付与されたIDでよい。コマンド分割ユニット113は、複数のサブライトコマンドの各々について、状態を、完了通知(応答)の受信待ちの状態とする。コマンド分割ユニット113は、分割した複数のサブライトコマンドをそれぞれキャッシュ登録ユニット112に転送する。1つのサブライトコマンドは、1つのサブライトデータの書き込みに対応し、例えば、1つのサブライトデータのライト先のLBAを指定する。サブライトデータは、ライトデータの一部分であり、例えば、内部管理単位(ページサイズ)と同じサイズである。1つのサブライトデータは、2以上のページに跨らず、1つのページに書き込まれる。
コマンド分割ユニット113にてライトコマンドをサブライトコマンドに分割する理由は、ライトデータの格納状態が内部管理単位毎(サブライトデータ毎)に格納状態が異なり得ることにある。言い換えれば、同一ページに格納されるデータについてキャッシュヒット(ライト先LBAに対応するデータがキャッシュ114に存在する)とキャッシュミス(ライト先LBAに対応するデータがキャッシュ114に存在しない)が混在することを避けることにある。ライト対象のデータの全てがキャッシュミスであれば、プロセッサ123による処理が不要であるが、ライト対象のデータが少なくとも一部でもキャッシュヒットであれば、プロセッサ123による処理が必要になってしまう。従って、同一ページに格納されるデータについてキャッシュヒットとキャッシュミスが混在することを避けることが望ましい。
具体的には、例えば、16KBのライトデータのうち、1のサブライトデータ(4KBのデータ)はデータキャッシュ114上にあり、残りの3のサブライトデータ(合計12KBのデータ)は1以上のFM140に格納されていることがあり得る。この場合、データキャッシュ114に格納されているサブライトデータについては、キャッシュ管理テーブル(図示せず)の更新が必要となる。キャッシュ管理テーブルは、キャッシュ判定テーブルと同様の情報でもよい。一方、FM140に格納されているサブライトデータについては、サブライトデータがキャッシュ114に登録されればよく、サブライトデータが格納されているキャッシュ領域(キャッシュ114における一領域)のアドレスがプロセッサ123に通知される必要がない。このように、FMモジュール100内部では、管理単位(例では4KB)毎に、論理領域(サブライトデータに対応した領域)の状態が異なり得る。このため、本実施形態では、ライトコマンドから、管理単位と同サイズのデータであるサブライトデータについてのサブライトコマンドが生成される。サブライトコマンドを受信したI/Oハードウェア又はプロセッサ123は、単一のサブライトコマンドの状態のみを制御すればよく、そのサブライトコマンドを含んだライトコマンド内の別のサブライトコマンドの処理の完了を待つ必要がない。結果として、高性能化が期待される。また、プロセッサ123の処理が不要な状況のサブライトコマンドについて、プロセッサ123による処理が不要となり、結果として、プロセッサ処理性能ネックによる性能制限を軽減できる。
なお、ライトデータのサイズが管理単位(ページサイズ)以下の場合、サブライトコマンドの数は1でよく、また、そのサブライトコマンドはライトコマンドでもよい。言い換えれば、ライトデータのサイズが管理単位(ページサイズ)以下の場合、コマンド分割ユニット113は、コマンド外部処理ユニット119からのライトコマンドをキャッシュヒット判定ユニット111に転送してよい。
コマンド分割ユニット113から複数(又は1)のサブライトコマンドを受信したキャッシュヒット判定ユニット111は、受信したサブライトコマンド毎に、キャッシュヒット判定を行う(サブライトコマンドで指定されているLBAに対応したサブライトデータがキャッシュ114に登録されている否かを判定する)。具体的には、例えば、本実施形態では、キャッシュ登録ユニット112がデータのキャッシュ114への登録を行い、キャッシュヒット判定ユニット111が、キャッシュヒット判定テーブル(図示せず)を持っており、キャッシュヒット判定ユニット111は、このキャッシュヒット判定テーブルを参照することで、サブライトコマンドが対象とするサブライトデータがキャッシュ114上にあるかどうか判定する。キャッシュヒット判定テーブルは、例えば、サブキャッシュ領域のアドレスとそのサブキャッシュ領域内のデータに対応したLBA(論理空間に属するLBA)との組を有してよい。そのようなキャッシュヒット判定テーブルに、サブライトコマンドで指定されているLBAが登録されていれば、キャッシュヒットであり、サブライトコマンドで指定されているLBAが登録されていなければ、キャッシュミスである。サブライトコマンドについて、キャッシュヒットとは、そのサブライトコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、FM140ではなくデータキャッシュ114に格納されている状態である。サブライトコマンドについて、キャッシュミスとは、そのサブライトコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、データキャッシュ114ではなくFM140に格納されている状態である。キャッシュヒット判定ユニット111にて、キャッシュヒットと判定されたサブライトコマンドは、以降、サブライトヒットコマンドとして管理される。このサブライトヒットコマンドには、キャッシュヒット判定ユニットにより、新サブライトデータ(新たにサブキャッシュ領域に格納されることになるサブライトデータ)の格納先のサブキャッシュ領域のアドレスと、キャッシュヒットしたサブキャッシュ領域(旧サブライトデータ(新サブライトデータにより更新されるサブライトデータ)が格納されているサブキャッシュ領域)のアドレスとが指定される。一方、キャッシュヒット判定ユニット111にて、キャッシュミスと判定されたサブライトコマンドは、以降、サブライトミスコマンドとして管理される。サブライトヒットコマンドもサブライトミスコマンドも、キャッシュヒット判定ユニット111からキャッシュ登録ユニット112に転送される。
キャッシュヒット判定ユニット111からサブライトコマンド(サブライトヒットコマンド及びサブライトミスコマンド)を受信したキャッシュ登録ユニット112は、サブライトコマンド毎に、サブライトコマンドで指定されているLBA(論理空間に属するLBA)をキャッシュヒット判定テーブルに登録する。キャッシュ登録ユニット112は、受信したサブライトコマンドのうち、サブライトヒットコマンドのみプロセッサ123に通知し、サブライトミスコマンドについては、プロセッサ123に通知しない。
サブライトヒットコマンドを受信したプロセッサ123は、そのサブライトヒットコマンドに応じた制御を行う。サブライトヒットコマンドには、旧サブライトデータが記憶されているサブキャッシュ領域(旧サブキャッシュ領域)のアドレスと、新サブライトデータの格納先のサブキャッシュ領域(新サブキャッシュ領域)のアドレスとが指定されている。プロセッサ123は、サブライトヒットコマンドを基に旧サブキャッシュ領域を特定し、特定したキャッシュ領域を解放する。具体的には、例えば、プロセッサ123は、キャッシュヒット判定テーブルから、サブライトヒットコマンドで指定されているLBAと、旧サブキャッシュ領域のアドレスとの対応付けを削除する。
サブライトヒットコマンドの処理の後、プロセッサ123は、図3に示すように、そのサブライトヒットコマンドの完了をコマンド分割ユニット113に通知する。また、キャッシュ登録ユニット112は、サブライトミスコマンドに対応したサブライトデータをデータキャッシュ114へ登録した後、サブライトミスコマンドの完了をコマンド分割ユニット113に通知する。なお、本実施形態では、サブライトデータをFM140ではなくデータキャッシュ114に格納した段階で完了が通知されるが、本発明は、この例に限定されるものではない。例えば、サブライトコマンドのデータがFM140に書き込まれた後に、完了がコマンド分割ユニット113に通知されてもよい。
前述したように、コマンド分割ユニット113は、ライトコマンドと分割したサブライトコマンドの対応関係を保持している。コマンド分割ユニット113は、ライトコマンドを構成する全てのサブライトコマンドが完了することを監視している。コマンド分割ユニット113は、完了を受信する毎に、その完了に対応したサブライトコマンドの状態を、完了受信済みとする。ライトコマンドを構成する全てのサブライトコマンドについて、プロセッサから完了の報告が有った場合、コマンド分割ユニット113は、ライトコマンドが完了したことをコマンド外部処理ユニット119に通知する。
コマンド分割ユニット113よりコマンド完了を受信したコマンド外部処理ユニット119は、上位装置に対して、ライトコマンドの完了通知を転送する。上位装置に転送される完了通知(ライトコマンドの応答)は、コマンド分割ユニット113からの通知でもよいし、コマンド外部処理ユニット119により生成された通知でもよい。
なお、コマンド外部処理ユニット119は、上位装置からライトコマンドを受信した場合にそのライトコマンドについてタイマーをセットし(時間計測を開始し)、ライトコマンドを受信してから一定時間以内にコマンド分割ユニット113から完了通知が来なかった場合、タイムアウトエラーを上位装置に通知してよい。コマンド外部処理ユニット119は、複数のI/Oコマンドを上位装置から受信且つ保持しており、I/Oコマンド毎に前述のタイマーにて時間監視を行ってよい。
以上が、本実施形態におけるライトコマンド処理である。ライトコマンド処理によれば、複数のサブライトコマンドにそれぞれ対応した複数のサブリードコマンドがキャッシュ114に格納された場合に、ライトコマンドの完了が上位装置に通知される。これにより、ライトコマンド処理の高速化が期待できる。
(1−4−2)リードコマンド処理
図4及び図5は、リードコマンド処理を示す。具体的には、図4は、リードコマンド処理の一部でありリードコマンド受信処理を示す。図5は、リードコマンド処理の残りでありリードコマンド応答処理を示す。
図4に示すように、上位装置からリードコマンドを受信したコマンド外部処理ユニット119が、受信したリードコマンドを、ユニット119の内部領域(例えばレジスタ)に登録する。コマンド外部処理ユニット119は、登録したリードコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット119は、コマンド分割ユニット113に、登録したリードコマンドを転送する。
コマンド外部処理ユニット119からリードコマンドを受信したコマンド分割ユニット113は、リードコマンドをサブリードコマンドに分割し、サブリードコマンドを内部領域(例えばユニット113のレジスタ)に登録する。ここで、リードコマンドから得られるサブリードコマンドの数は、リードデータ(リードコマンドに従い読み出されるデータ)のサイズを、内部管理単位(ページサイズ)で除算することにより得られる商(商が0の場合は1)でよい。例えば、リードコマンドに従うリードデータのサイズが16KBであり、内部管理単位(ページサイズ)が4KBの場合、得られるサブリードコマンドの数は、16/4=4でよい。コマンド分割ユニット113は、リードコマンドとサブリードコマンドの対応関係を例えばユニット113の内部領域(例えばレジスタ)に登録する。コマンド分割ユニット113は、複数のサブリードコマンドの各々について、状態を、完了通知(応答)の受信待ちの状態とする。コマンド分割ユニット113は、分割した複数のサブリードコマンドをそれぞれキャッシュ登録ユニット112に転送する。1つのサブリードコマンドは、1つのサブリードデータの読み出しに対応し、例えば、1つのサブリードデータのリード元のLBAを指定する。サブリードデータは、リードデータの一部分であり、例えば、内部管理単位(ページサイズ)と同じサイズである。1つのサブリードデータは、2以上のページに跨らず、1つのページから読み出される。
コマンド分割ユニット113にてリードコマンドをサブリードコマンドに分割する理由は、前述のライトコマンドのときと同様に管理単位毎に格納状態(キャッシュヒット/キャッシュミス)が異なっていることに加え、リードコマンドで指定されるLBA領域に対応付けられている複数のページ(複数のリード元ページ)が、異なるFMインターフェースに接続された異なるFM140に離散している可能性にある。FMコントローラ110は、内部管理単位毎に、LBAとPBAの対応関係を管理しており、連続するLBA領域であっても、実際のデータは異なる複数のFM140(及びデータキャッシュ114)に分散している可能性がある。このため、1つのリードコマンドを完了するためには、複数のFMインターフェース124(又はコピーDMAユニット121)を並列に制御する必要があり得る。このため、内部管理単位に基づきリードコマンドがサブリードコマンドに分割される。
コマンド分割ユニット113から複数(又は1)からのサブリードコマンドを受信したキャッシュヒット判定ユニット111は、サブリードコマンド毎に、キャッシュヒット判定を行う。具体的には、キャッシュヒット判定ユニット111は、キャッシュヒット判定テーブルを参照し、サブリードコマンドが対象とするサブリードデータがキャッシュ114上にあるかどうか判定する。サブリードコマンドについて、キャッシュヒットとは、そのサブリードコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、FM140ではなくデータキャッシュ114に格納されている状態である。サブリードコマンドについて、キャッシュミスとは、そのサブリードコマンドが対象とするLBA領域(論理領域)に対応付けられたデータが、データキャッシュ114ではなくFM140に格納されている状態である。キャッシュヒット判定ユニット111にて、キャッシュヒットと判定されたサブリードコマンドは、以降、サブリードヒットコマンドとして管理される。サブリードヒットコマンドには、キャッシュヒット判定ユニット111が、キャッシュヒットしたサブキャッシュ領域のアドレスを指定する。一方で、キャッシュヒット判定ユニット111にて、キャッシュミスと判定されたサブリードコマンドは、以降、サブリードミスコマンドとして管理される。
キャッシュヒット判定ユニット111は、サブリードコマンドがサブリードヒットコマンドであるかサブリードミスコマンドであるかに応じて、サブリードコマンドの転送先のI/Oコマンドを選択する。図4に示す例では、サブリードミスコマンドは、コマンド内部処理ユニット120に転送され、サブリードヒットコマンドは、プロセッサ123に転送される。
本実施形態において、サブリードミスコマンドとサブリードヒットコマンドの通知先I/Oハードウェアを分ける理由は、サブリードミスとサブリードヒットの発生頻度の差と、サブリードヒット処理の複雑さにある。
サブリードミスとサブリードヒットの発生頻度の差は、FM群(複数のFM140の集合)の容量に対するデータキャッシュ114の容量の割合、及び、上位装置がFMモジュール100に指定するLBAの局所性に依存する。例えば、本実施形態では、データキャッシュ114の容量とFM群の容量の差はきわめて大きい。より具体的には、例えば、データキャッシュ114の容量は数百MB(メガバイト)、FM群の容量は数TB(テラバイト)である。こうした構成において、LBAの局所性の低いリードリクエストが上位装置から受信された場合、リードコマンドから得られるサブリードコマンドの大半が、サブリードミスコマンドとなる。つまり、サブリードヒットコマンドはサブリードミスコマンドに比べてわずかしか生じないと予測される。このため、FMモジュール100のリード性能を高速化したいのであれば、サブリードミスコマンドを高速な専用ハードウェアにて処理する事が必要となる。言い換えれば、本実施形態では、キャッシュミスした方がリード性能の高速化が期待でき、この観点から、データキャッシュ114は、読み出されたデータが残らないバッファのような一時記憶領域であることが望ましい。
なお、サブリードミスコマンドのみならずサブリードヒットコマンドについてもI/Oハードウェアにて処理する事がFMモジュール100の性能を向上させる観点からは望ましいとも考えられるが、サブリードヒットコマンドは、別処理と競合する可能性がある。例えば、サブリードヒットコマンドの対象領域であるサブキャッシュ領域は、FM140にデータを書き込む為に、データキャッシュ114からFM140にデータを転送(以降この動作をデステージと記す)中の領域である可能性がある。そして、仮に、デステージ処理がサブリードヒットコマンドの処理との競合を考慮しない場合、FM140へのデータ転送が終了した時点で、サブキャッシュ領域が解放される。このため、サブリードコマンドについてキャッシュヒットと判定された後、競合を考慮せずに処理が続行されると、サブキャッシュ領域からデータが削除された後、リードされる可能性が生じる。言い換えれば、サブリードヒットコマンドに対応したサブキャッシュ領域からのデータの読み出しの時点では、そのサブリードヒットコマンドに対応したデータが、サブキャッシュ領域には存在しない可能性が生じる。
上記のような可能性を排除するため、本実施形態では、FMコントローラ110が行う各種動作の複雑な競合管理をプロセッサ123にて行う。例えば、サブリードヒットコマンドの処理とデステージの処理の競合を回避する為に、プロセッサ123が、「サブリードヒットコマンドに対応したサブキャッシュ領域はデステージ処理の対象になっていることを検知する。」、又は、「サブリードヒットコマンドに対応したサブキャッシュ領域のロックを取得し、並列で実行されているデステージ処理においてそのサブキャッシュ領域が解放されること(そのサブキャッシュ領域からデータが削除されること)を不可とする」等の排他制御を行う。
上述の通り、競合の可能性があり複雑な排他制御が必要なサブリードヒットコマンドは、プロセッサ123に転送される。これにより、複雑な競合を管理するためのハードウェアを開発する必要が無く、バグの修正が困難なハードウェアの開発リスクを軽減し、開発期間を短縮する事が期待できる。
サブリードヒットコマンドの処理をプロセッサ123に担わせることで、プロセッサ123の処理性能がネックとなりFMモジュール100のリード性能が低下する事が考えられるが、前述のとおり、上位装置がLBAの局所性の少ないI/Oパターンを実行し得る環境において、サブリードヒットコマンドの発生頻度は、サブリードミスコマンドの発生頻度と比較して少ないので、FMモジュールの性能低下を軽減できる。
コマンド内部処理ユニット120は、キャッシュヒット判定ユニット111からサブリードミスコマンドを受信する。コマンド内部処理ユニット120は、サブリードミスコマンド毎に、サブリードミスコマンドが指定するLBAに対応したPBAを論物変換テーブル600から特定し、特定したPBAが該当する物理領域に接続されたFMインターフェース124に対して、FM140からデータをリードするコマンドを生成し転送する。2以上のサブリードミスコマンドにそれぞれ対応した2以上のリード元物理領域(ページ)にそれぞれ接続された2以上のFMインターフェース124をそれぞれ並列に起動できる。
一方、プロセッサ123は、キャッシュヒット判定ユニット111からサブリードヒットコマンドを受信する。プロセッサ123は、サブリードヒットコマンドにて指定されるサブキャッシュ領域について排他制御を行った後、コピーDMAユニット121に対してコマンドを発行する。そのサブキャッシュ領域内のデータをリードバッファ領域(上位装置にリードデータを転送する前に、一旦リードデータを格納する領域)にコピーするためである。なお、本実施形態では、サブキャッシュ領域とリードバッファ領域が別々の領域であるが、データキャッシュ114とリードバッファ領域が一体であってもよく、その場合、コピーDMAユニット121は無くてもよい。
また、本実施形態では、リードコマンドにてFM群から読み出されたデータがデータキャッシュ114に登録されないが、本発明はこの例に限定されるものではない。例えば、FM140から読み出されたサブリードデータがデータキャッシュ114に転送され、サブリードコマンドで指定されたLBAがキャッシュヒット判定テーブルに登録されてもよい。これにより、頻繁にリード元となるLBA領域については、FM140からではなくサブキャッシュ領域からデータが読み出されてもよい。
図4に示した動作にて、サブリードコマンド(サブリードヒットコマンド及びサブリードミスコマンド)の処理の結果、データ転送用のコマンドが通知されたFMインターフェース124とコピーDMAユニット121から完了通知が転送される。
具体的には、図5に示すように、FM140からデータを読み出すコマンドの処理が完了したFMインターフェース124は、サブリードミスコマンドにて指定されFM140から読み出されたサブリードデータを含んだ完了通知を、コマンド分割ユニット113に通知する。
また、サブキャッシュ領域からリードバッファへのデータ転送が完了したコピーDMAユニット121は、転送完了を、コピーDMAユニット121にコマンドを発行したプロセッサ123に通知する。そして、コピーDMAユニット121からの完了通知を受信したプロセッサ123は、サブリードヒットコマンドに対応したサブキャッシュ領域について排他制御を行った後、サブリードヒットコマンドの完了をコマンド分割ユニット113に通知する。なお、実施形態では、コピーDMAユニット121が完了を一旦プロセッサ123に通知し、その通知を受けたプロセッサ123が、コマンド分割ユニット113に完了を通知するが、本発明はこの例に限定されるものではない。例えば、コピーDMAユニット121がコマンド分割ユニット113とプロセッサ123にサブリードヒットコマンドを通知してもよい。
コマンド分割ユニット113は、単一のリードコマンドより作成した複数のサブリードコマンドの全てについて完了通知を待っている。コマンド分割ユニット113は、タイムアウトの閾値を超過しても完了通知がない場合には(サブリードコマンドを発行してから一定時間以内に完了通知を受信しない場合には)、エラー情報をコマンド処理ログ132に書き込み、プロセッサ123に割り込みを行ってよい。
FMインターフェース124及びプロセッサ123からの完了通知を受信したコマンド分割ユニット113は、リードコマンドを構成する全てのサブリードコマンドについて完了通知を受信した後、コマンド外部処理ユニット119に、リードコマンドの完了通知を転送する。
コマンド分割ユニット113からリードコマンドの完了通知を受信したコマンド外部処理ユニット119は、上位装置に対してリードコマンド処理が完了したことを通知する完了通知を転送する。上位装置に転送される完了通知(リードコマンドの応答)は、コマンド分割ユニット113からの通知でもよいし、コマンド外部処理ユニット119により生成された通知でもよい。また、上位装置に転送される完了通知は、リードコマンドを構成する全てのサブリードコマンドにそれぞれ対応したサブリードデータにより構成されたリードデータを含んでもよい。
(1−5)プロセッサ123の処理
続いて、プロセッサ123の処理を説明する。本実施形態のプロセッサ123の主な処理としては、サブライトヒットコマンド処理及びサブリードヒットコマンド処理のように上位装置からのI/Oコマンドが基で実行される処理と、デステージ処理及びリクラメーション処理のように上位装置からのコマンドとは非同期に(独立して)実行される処理とがある。このうち、デステージ処理及びリクラメーション処理のように上位装置からのコマンドと非同期に実行される処理(内部処理)については、上位装置に完了が通知されず、故に、内部処理は、上位装置からは把握できない処理である。
(1−5−1)プロセッサ123の処理:サブライトヒットコマンド処理
プロセッサ123の処理として、まず、サブライトヒットコマンド処理について図8を用いて説明する。
図8は、サブライトヒットコマンド処理のフロー図である。
S801では、プロセッサ123が、キャッシュヒット判定ユニット111からサブライトヒットコマンドを受信する。ここで、プロセッサ123は、受信したサブライトヒットコマンドから旧サブキャッシュ領域及び新サブキャッシュ領域を特定する。
S802では、プロセッサ123は、S801にて特定したサブキャッシュ領域のロック取得を試みる。このステップで、プロセッサ123は、FMコントローラ110が保持する管理テーブルを基に、ロック取得を試みる。
S803では、プロセッサ123は、ロックが取得できたかを判定する。このステップにてロックが取得できない場合、プロセッサ123は、S801で特定されたサブキャッシュ領域が別処理にて利用中であると判断でき、S802に遷移することで、別処理の利用が終了するまで、ロック取得を試みる。一方で、ロックが取得できた場合、S804に遷移する。
S804では、プロセッサ123が、ヒットサブ領域(キャッシュヒットしたサブキャッシュ領域)の管理データを取得する。
S805では、プロセッサ123が、S804で取得した管理データ(ヒットサブ領域に格納されているデータに対応したLBAを含む)を参照し、ヒットサブ領域が旧サブキャッシュ領域か否かを判定する。FMモジュール100では、ヒットサブ領域内のデータが別処理にて変化する可能性があり、S805では、プロセッサ123は、この領域が旧サブキャッシュ領域であるか否かを判定する。
S805の判定結果が肯定の場合(具体的には、ロックが取得されたヒットサブ領域に対応しているLBAが、サブライトヒットコマンドで指定されているLBAと同一の場合)、S806に遷移する。一方、S805の判定結果が否定の場合(具体的には、ロックが取得されたヒットサブ領域に対応しているLBAが、サブライトヒットコマンドで指定されているLBAと異なっている場合)、ヒットサブ領域が別処理によって旧サブキャッシュ領域ではなくなった場合であり、S807に遷移する。
S806では、プロセッサ123が、旧サブキャッシュ領域を解放する。これにより、旧サブキャッシュ領域を、別処理においてサブキャッシュ領域として扱う事ができる。
S807では、プロセッサ123が、新サブキャッシュ領域のアドレスを、キャッシュ管理テーブルに登録する。
S808では、プロセッサ123が、ヒットサブ領域のロックを解放する。この解放処理により、解放された領域を、別処理(例えばデステージ処理又はサブリードヒットコマンド処理)においてサブキャッシュ領域として扱う事ができる。
S809では、プロセッサ123が、S801にて受信したサブライトヒットコマンドが完了したことをコマンド分割ユニット113に通知する。
以上が、サブライトヒットコマンド処理である。
(1−5−2)プロセッサの処理:サブリードヒットコマンド処理
続いて、サブリードヒットコマンド処理について図9を用いて説明する。
図9は、サブリードヒットコマンド処理のフロー図である。
S901では、プロセッサ123が、キャッシュヒット判定ユニット111からサブリードヒットコマンドを受信する。ここで、プロセッサ123は、受信したサブリードヒットコマンドからサブキャッシュ領域を特定する。S902では、プロセッサ123は、S901にて特定したサブキャッシュ領域のロック取得を試みる。S903では、プロセッサ123は、ロックが取得できたかを判定する。S904では、プロセッサ123が、ヒットサブ領域(キャッシュヒットしたサブキャッシュ領域)の管理データを取得する。S905では、プロセッサ123が、S904で取得した管理データ(ヒットサブ領域に格納されているデータに対応したLBAを含む)を参照し、ヒットサブ領域が、サブリードヒットコマンドに対応したサブリードデータを記憶しているサブキャッシュ領域か否かを判定する。S905の判定結果が肯定の場合、S906に遷移し、S905の判定結果が否定の場合、S910に遷移する。
S906では、プロセッサ123が、S905にてヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていると判断された為、ヒットサブ領域内のデータをリードバッファ領域にコピーするコピーDMAユニット121用にコマンドを生成し、そのコマンドをコピーDMAユニット121に送信することでコピーDMAユニット121を起動する。
S907では、プロセッサ123が、S906にて起動したコピーDMAユニット121から完了通知を受信する。この完了通知の受信により、サブリードヒットコマンドに対応したサブリードデータがリードバッファ領域に格納されたことが確定する。本実施形態のFMモジュール100では、リードコマンドから分割された複数のサブリードコマンドにそれぞれ対応した複数のサブリードデータがリードバッファ領域に格納され、全てのサブリードコマンドの完了を確認したコマンド分割ユニット113が、上位装置に対して、データ転送を起動する。このため、サブリードデータがリードバッファ領域に格納されたことをもって、サブリードヒットコマンドとしてのデータ転送処理は完了となる。
S908では、プロセッサ123が、ヒットサブ領域のロックを解放する。S909では、プロセッサ123が、S901にて受信したサブリードヒットコマンドが完了したことをコマンド分割ユニット113に通知する。
S910では、プロセッサ123が、ヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていないと判定されるため、ヒットサブ領域のロックを解放する。
S911では、プロセッサ123が、サブリードヒットコマンドを、コマンド内部処理ユニット120にサブリードミスコマンドとして登録する。S901にて受信したサブリードヒットコマンドについて既にキャッシュミスが発生しており、ヒットサブ領域にサブリードデータが無くそのサブリードデータがFM140に格納されていると判定されたためである。この場合、コマンド内部処理ユニット120が、FMインターフェース124にコマンドを発行する。そして、FMインターフェース124によりFM140からリードバッファ領域へデータが転送されたことが完了した事をもって、FMインターフェース124がコマンド分割ユニット113に完了を通知する。このため、プロセッサ123からコマンド分割ユニット113への完了通知は不要となる。
以上が、サブリードヒットコマンド処理である。
(1−5−3)プロセッサ123の処理:デステージ処理
続いて、デステージ処理について図10を用いて説明する。
図10は、デステージ処理のフロー図である。
デステージ処理は、定期的に起動される。なお、デステージ契機は定期的に限定されない。例えば、プロセッサ123が、データキャッシュ114の使用状況を監視し、データキャッシュ114の使用可能領域の量が閾値以下となった場合に、サブキャッシュ領域を解放するためにデステージ処理を起動してもよい。
S1001では、プロセッサ123が、デステージ対象とするサブキャッシュ領域を選択する。プロセッサ123は、キャッシュ管理テーブルを参照し、複数(又は1)のサブキャッシュ領域をデステージ対象として選択する。ここでは、キャッシュ管理テーブルより、デステージ対象データに対応したLBA(論理空間に属するLBA)が取得される。
S1002では、プロセッサ123は、S1001にてデステージ対象として選択した複数のサブキャッシュ領域の各々のロック取得を試みる。
S1003では、プロセッサ123は、ロックの取得が可能かを判定する。プロセッサ123は、サブキャッシュ領域とロックの有無との関係を示すロック管理テーブル(図示せず)を参照し、S1001にて選択したデステージ対象領域が占有可能となった(ロックが取れた)かを判定する。ロックが取れたサブキャッシュ領域の量が一定量未満の場合、他のサブキャッシュ領域をデステージ対象領域とするため、S1001に遷移する。一方、ロックが取れたサブキャッシュ領域の量が一定量以上の場合、S1004に遷移する。
S1004は、プロセッサ123が、S1001にて選択した複数のデステージ対象領域の管理データを取得する。
S1005では、プロセッサ123が、S1001にて選択した複数のデステージ対象領域が有効であることを確認する。本実施形態では、S1001にてデステージ対象とした領域についてS1003にてロックを取得するまでの間に、別処理(例えばプロセッサ123がマルチコアの場合、他のコアが実施しているデステージ処理)によって解放されている可能性がある。プロセッサ123が、ロックを取得したサブキャッシュ領域の管理データを参照することで、デステージ対象領域が有効であることを判断する。有効となった場合、S1006に遷移する。一方、有効でなかった場合、デステージ対象の領域を確保する為に、S1001に遷移する。
S1006では、プロセッサ123が、デステージ先FM領域(FM内の物理領域)の選択を行う。プロセッサ123が、内部の管理テーブル(例えば図7に示したブロック管理テーブル700)を参照し、サブキャッシュ領域のデータのデステージ先(転送先)となる複数のFM領域を決定する。
S1007では、プロセッサ123が、S1006にて選択したFM領域に接続したFMインターフェース124に対してライト用のコマンドを生成し起動する。
S1008では、プロセッサ123が、S1006にて起動した複数のFMインターフェース124の各々から完了の通知を受ける。
S1009では、プロセッサ123が、論物変換テーブル600を更新する。プロセッサ123が、デステージ先のPBA領域(FM領域)に対して、S1001にて取得したLBAを対応付ける。
S1010では、プロセッサ123が、S1001にて選択したサブキャッシュ領域のロックを解放する。このロック解放後、サブライトヒットコマンド処理及びリードヒットコマンド処理のような別処理において、その解放されたサブキャッシュ領域を利用可能である。
以上が、デステージ処理である。
(1−5−4)プロセッサの処理:リクラメーション処理
続いて、図11を用いリクラメーション処理について説明する。
図11は、リクラメーション処理のフロー図である。
S1101では、プロセッサ123が、リクラメーション対象のPBA領域(移動元ブロック)を選択する。プロセッサ123は、ブロック管理テーブル700を参照し、相対的に無効PBA量の多いブロックを移動元ブロックとして選択する。リクラメーション処理において移動されるデータの量が少なくて済むようにするためである。
S1102では、プロセッサ123が、S1101にて選択したPBA領域(ブロック)に対応付けられているLBAを、論物変換テーブル600から特定する。なお、論物変換テーブル600以外の管理テーブルにおいてLBAとPBAの対応関係が登録されていてそのテーブルからLBAが特定されてもよい。
S1103では、プロセッサ123が、キャッシュ登録ユニット112に対し、S1102にて特定したLBAをキャッシュ登録テーブルに登録することとそのLBAに対応付けられたデータを格納するためのサブキャッシュ領域を確保することとを依頼する。
S1104では、プロセッサ123が、S1103にてキャッシュ登録ユニット112に依頼したことが実行されたかを判定する。S1104の判定結果が肯定の場合、S1105に遷移し、S1104の判定結果が否定の場合(例えば、空きサブキャッシュ領域の枯渇のため確保が実施されなかった場合)、S1103に遷移する。
S1105では、プロセッサ123が、S1103にて確保されたサブキャッシュ領域のロックを取得する。
S1106では、プロセッサ123が、移動元ブロック内の有効データをS1103にて確保したサブキャッシュ領域に転送するために、該当するFMインターフェース124用のコマンドを生成し、起動する。これにより、移動元ブロックから有効データがサブキャッシュ領域に転送される。
S1107では、プロセッサ123が、S1106にて起動したデータ転送の完了を特定する。この完了をもって、移動元ブロック内の有効データはサブキャッシュ領域に格納されたこととなる。このため、移動元ブロックに対応付けられたLBAを指定したI/Oコマンドの処理は、サブキャッシュ領域に格納されたデータにて対応可能となる。
S1108では、プロセッサ123が、移動元ブロックのPBAとそれに対応付けられたLBAとの組を削除する。S1107にて移動元ブロック内の有効データがサブキャッシュ領域に格納されたためである。
S1109では、プロセッサ123が、ブロック管理テーブル700を更新する。プロセッサ123が、S1108にてLBA/PBAの組(対応付け)を削除したことで、移動元ブロックの全PBAが無効PBAである。このため、プロセッサ123が、ブロック管理テーブル700を更新し、移動元ブロックが消去可能であることを別処理に通知する。詳細な説明は省略するが、本実施形態では、リクラメーション処理とは別に消去用のジョブも並行して動作しており、そのジョブが、ブロック管理テーブル700を参照し、全PBAが無効PBAとなっているブロックを選択しその選択したブロックについて消去処理を実行する。
S1110では、プロセッサ123が、サブキャッシュ領域のロックを解放する。
以上が、リクラメーション処理である。FMコントローラ110は、リクラメーション用のデータと上位装置からのライトデータを、ともにデステージ処理によりFM140に格納する。このため、移動元ブロック内の有効データがサブキャッシュ領域に格納された段階でリクラメーション処理の終了となる。
以上が、FMモジュール100が実行する処理である。以上のとおり、デステージ処理、リクラメーション処理、サブライトヒットコマンド処理及びサブリードヒットコマンド処理の各処理にて処理領域の競合が想定される場合、その調停処理を組み込みプロセッサ123にて処理することで、複雑な処理をソフトウェア(コンピュータプログラム)にて記述可能となる。また、サブリードヒットコマンド処理及びサブライトヒットコマンド処理に比べて発生頻度の高いサブリードミスコマンド処理及びサブライトミスコマンド処理については、ハードウェアのみで処理することで高性能化が可能となる。結果、競合処理を行う複雑なハードウェアが無くとも、サブリードミスコマンド処理を高速に処理可能となり、FMモジュール100のリードコマンド処理性能が向上する。同様に、競合処理を行う複雑なハードウェアが無くともサブライトミスコマンドを高速に処理可能となり、上位装置へのライト応答時間(ライトコマンド処理の応答時間)を短縮できる。また、サブI/Oコマンド(サブライトコマンド/サブリードコマンド)をハードウェアにて処理する場合であっても、そのハードウェアによる処理において障害が発生した場合にはそのハードウェアによりログ(例えば障害情報)がコマンド処理ログ132に記録されるので、障害発生時に組み込みプロセッサ123から障害部位(例えば、障害が発生したハードウェア)及び障害内容の少なくとも一方の取得が可能となる。
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、実施形態では、キャッシュヒット/ミスに応じてプロセッサがコマンド(サブコマンド)を処理するか否かが決まるが、プロセッサがコマンド(サブコマンド)を処理するか否かの基準は、それに限らないでよい。例えば、FM群が、複数の高速物理領域(例えばSLC(Single Level Cell)のページ)と、複数の低速物理領域(例えばMLC(Multi Level Cell)のページ)とを含む。論理空間(LBA範囲)が、高速物理領域が割り当てられる論理領域である高速論理領域と、低速物理領域が割り当てられる論理領域である低速論理領域とに区分されている。この場合、高速論理領域に属するLBAが指定されたI/Oコマンドの処理は、I/Oハードウェアが担当しプロセッサ123は担当せず、低速論理領域に属するLBAが指定されたI/Oコマンドの処理は、I/Oハードウェアに加えてプロセッサ123も担当してもよい。
100:FMモジュール 110:FMコントローラ 140:FM