(57)【要約】【課題】メモリ素子の利用効率を向上する記憶装置を提供すること。【解決手段】メモリ素子と、メモリ素子のブロックサイズを記憶するサイズ記憶部２０１と、ＲＡＩＤコントローラから受信したデータをバッファ２０４に保存し、バッファ２０４に保存したデータをメモリ素子に書き込むバッファ処理を実行可能なバッファ処理部２０５と、ＲＡＩＤコントローラがメモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを受信するストライプサイズ受信部２０２ｂと、ストライプサイズがブロックサイズのｎ倍（ｎは正の整数）の場合に、バッファ処理部２０５によるバッファ処理を実行せず、ＲＡＩＤコントローラから受信したデータをメモリ素子に書き込む書き込み処理部２０７と、を備えた。【選択図】        図３
2010009548.tif 000002
【特許請求の範囲】
【請求項１】
制御装置によって制御される記憶装置であって、
メモリ素子と、
前記メモリ素子ごとに予め定められたアクセス単位であるブロックのサイズを表すブロックサイズを記憶するサイズ記憶部と、
前記ブロックサイズのデータを記憶可能なデータ記憶部と、
前記制御装置から受信したデータを前記データ記憶部に保存し、前記データ記憶部に保存したデータを前記メモリ素子に書き込むバッファ処理を実行可能なバッファ処理部と、
前記制御装置が前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを前記制御装置から受信するストライプサイズ受信部と、
前記ストライプサイズが前記ブロックサイズのｎ倍（ｎは正の整数）であるか否かを判定する判定部と、を備え、
前記バッファ処理部は、前記ストライプサイズが前記ブロックサイズのｎ倍である場合にバッファ処理を実行しないこと、
を特徴とする記憶装置。
【請求項２】
前記ブロックサイズの取得要求を前記制御装置から受信し、受信した前記取得要求に応じて前記ブロックサイズを前記サイズ記憶部から取得する要求処理部と、
取得された前記ブロックサイズを前記制御装置に送信する送信部と、をさらに備え、
前記ストライプサイズ受信部は、送信した前記ブロックサイズに応じて前記制御装置から送信された前記ストライプサイズを受信すること、
を特徴とする請求項１に記載の記憶装置。
【請求項３】
前記サイズ記憶部は、前記メモリ素子ごとに予め定められたデータ読み書き時のアクセス単位であるブロックのサイズを表す読み書きブロックサイズ、および、前記メモリ素子ごとに予め定められたデータ消去時のアクセス単位であるブロックのサイズを表す消去ブロックサイズの少なくとも一方を記憶し、
前記要求処理部は、前記取得要求を受信したときに、前記読み書きブロックサイズおよび前記消去ブロックサイズのうちいずれかを前記サイズ記憶部から取得し、
前記送信部は、取得された前記読み書きブロックサイズおよび前記消去ブロックサイズのうちいずれかを前記制御装置に送信すること、
を特徴とする請求項２に記載の記憶装置。
【請求項４】
前記サイズ記憶部は、前記メモリ素子ごとに予め定められたデータ読み書き時のアクセス単位であるブロックのサイズを表す読み書きブロックサイズ、および、前記メモリ素子ごとに予め定められたデータ消去時のアクセス単位であるブロックのサイズを表す消去ブロックサイズを記憶し、
前記要求処理部は、前記取得要求を受信したときに、前記読み書きブロックサイズおよび前記消去ブロックサイズを前記サイズ記憶部から取得し、取得した前記読み書きブロックサイズおよび前記消去ブロックサイズの最小公倍数を求め、
前記送信部は、求められた最小公倍数をブロックサイズとして前記制御装置に送信すること、
を特徴とする請求項２に記載の記憶装置。
【請求項５】
アクセス単位であるブロックのサイズを表すブロックサイズが予め定められたメモリ素子を有する記憶装置を制御する制御装置であって、
前記ブロックサイズの取得要求を前記記憶装置に送信する要求送信部と、
前記取得要求に応じて前記記憶装置から送信された前記ブロックサイズを受信するブロックサイズ受信部と、
前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを、受信した前記ブロックサイズのｎ倍に決定するサイズ決定部と、
決定した前記ストライプサイズを前記記憶装置に送信するストライプサイズ送信部と、
を備えたこと特徴とする制御装置。
【請求項６】
前記要求送信部は、前記取得要求を複数の前記記憶装置に送信し、
前記ブロックサイズ受信部は、複数の前記記憶装置のそれぞれから前記ブロックサイズを受信し、
前記サイズ決定部は、複数の前記記憶装置から受信した複数の前記ブロックサイズの最小公倍数を求め、求めた最小公倍数を前記ストライプサイズとして決定すること、
を特徴とする請求項５に記載の制御装置。
【請求項７】
前記サイズ決定部は、複数の前記記憶装置から受信した複数の前記ブロックサイズのうち、最小公倍数が予め定められた閾値以下となるいずれか２つ以上の前記ブロックサイズの最小公倍数を求め、求めた最小公倍数を前記ストライプサイズとして決定すること、
を特徴とする請求項６に記載の制御装置。
【請求項８】
前記メモリ素子に書き込むデータを記憶可能な複数のデータ記憶部と、
複数の前記データ記憶部に記憶されたデータのうち、サイズが大きいデータを優先して前記記憶装置に書き込む書き込み処理部と、をさらに備えたこと、
を特徴とする請求項５に記載の制御装置。
【請求項９】
記憶装置と、前記記憶装置を制御する制御装置とを備えた記憶システムであって、
前記記憶装置は、
メモリ素子と、
前記メモリ素子ごとに予め定められたアクセス単位であるブロックのサイズを表すブロックサイズを記憶するサイズ記憶部と、
前記ブロックサイズのデータを記憶可能なデータ記憶部と、
前記制御装置から受信したデータを前記データ記憶部に保存し、前記データ記憶部に保存したデータを前記メモリ素子に書き込むバッファ処理を実行可能なバッファ処理部と、
前記ブロックサイズの取得要求を前記制御装置から受信する要求受信部と、
前記取得要求を受信したときに、前記ブロックサイズを前記サイズ記憶部から取得し、取得した前記ブロックサイズを前記制御装置に送信する送信部と、
前記制御装置が前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを前記制御装置から受信するストライプサイズ受信部と、
前記ストライプサイズが前記ブロックサイズのｎ倍（ｎは正の整数）であるか否かを判定する判定部と、を備え、
前記バッファ処理部は、前記ストライプサイズが前記ブロックサイズのｎ倍である場合にバッファ処理を実行せず、
前記制御装置は、
前記ブロックサイズの取得要求を前記記憶装置に送信する要求送信部と、
前記取得要求に応じて前記記憶装置から送信された前記ブロックサイズを受信するブロックサイズ受信部と、
前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを、受信した前記ブロックサイズのｎ倍に決定するサイズ決定部と、
決定した前記ストライプサイズを前記記憶装置に送信するストライプサイズ送信部と、を備えたこと、
を特徴とする記憶システム。
【請求項１０】
記憶装置と、前記記憶装置を制御する制御装置とを備えた記憶システムで実行される記憶方法であって、
前記記憶装置は、
メモリ素子と、
前記メモリ素子ごとに予め定められたアクセス単位であるブロックのサイズを表すブロックサイズを記憶するサイズ記憶部と、
前記ブロックサイズのデータを記憶可能なデータ記憶部と、
前記制御装置から受信したデータを前記データ記憶部に保存し、前記データ記憶部に保存したデータを前記メモリ素子に書き込むバッファ処理を実行可能なバッファ処理部と、を備え、
前記制御装置が、前記ブロックサイズの取得要求を前記記憶装置に送信する要求送信ステップと、
前記記憶装置が、前記取得要求を前記制御装置から受信する要求受信ステップと、
前記記憶装置が、前記取得要求を受信したときに、前記ブロックサイズを前記サイズ記憶部から取得し、取得した前記ブロックサイズを前記制御装置に送信する送信ステップと、
前記制御装置が、前記取得要求に応じて前記記憶装置から送信された前記ブロックサイズを受信するブロックサイズ受信ステップと、
前記制御装置が、前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを、受信した前記ブロックサイズのｎ倍（ｎは正の整数）に決定するサイズ決定ステップと、
前記制御装置が、決定した前記ストライプサイズを前記記憶装置に送信するストライプサイズ送信ステップと、
前記記憶装置が、前記ストライプサイズを前記制御装置から受信するストライプサイズ受信ステップと、
前記記憶装置が、前記ストライプサイズが前記ブロックサイズのｎ倍であるか否かを判定する判定ステップと、
前記記憶装置が、前記ストライプサイズが前記ブロックサイズのｎ倍である場合に、前記バッファ処理部によるバッファ処理を実行せず、前記制御装置から受信したデータを前記メモリ素子に書き込む書き込み処理ステップと、
を備えたことを特徴とする記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、不揮発性半導体記憶素子を備えた記憶装置、当該記憶装置を制御する制御装置、記憶システム、および記憶方法に関する。
【背景技術】
【０００２】
不揮発性半導体記憶素子には、ＮＡＮＤ型フラッシュメモリのように、データを記憶させる場合に、ブロックと呼ばれる単位で一度データを消去してからその後に書き込みを行う素子、ページと呼ばれる単位で読み出し／書き込みを行う素子、および、消去／読み出し／書き込みの単位が固定されている素子などが存在する。読み出しや書き込みの単位は、半導体記憶装置ごとに決められており、記憶装置の寿命や特性を決める一つの要因となっている。
【０００３】
また、ＮＡＮＤ型フラッシュメモリは、データの書き込みに先立って行うブロックの消去回数の増加に応じてメモリセル（メモリ素子）の劣化が進行していく性質を有する。
【０００４】
一方、パーソナルコンピュータなどのホスト機器がハードディスクをはじめとする二次記憶装置に対してデータの読み出し／書き込みを行う単位は、セクタと呼ばれる。セクタは、半導体記憶素子の消去／読み出し／書き込みの単位とは独立に定められる。
【０００５】
例えば、半導体記憶素子のブロックの大きさ（ブロックサイズ）が５１２キロバイト、ページの大きさ（ページサイズ）が４キロバイトであるのに対して、ホスト機器のセクタの大きさ（セクタサイズ）は５１２バイトのように定められる。
【０００６】
また、サーバー環境で使用されるディスクアレイなどのストレージシステムでは、信頼性を向上するために、非特許文献１に示すようなＲＡＩＤ（Redundant Arrays of Independent/Inexpensive Disks）を構成することが多い。ＲＡＩＤでは、ＲＡＩＤコントローラが、ストライプと呼ばれる単位で複数のディスクにデータを保存する。ストライプの大きさ（ストライプサイズ）は、ディスクの読み出し／書き込み単位とは独立に定められる。ＲＡＩＤを構成するストレージシステムには、通常ハードディスクなどの磁気記憶装置を用いるが、最近では、上記不揮発性半導体記憶素子を用いたＳＳＤ（Solid State Drive）などを用いる場合も増えている。この場合でも、ストライプサイズは、不揮発性半導体記憶素子の消去／読み出し／書き込みの単位とは独立に定められる。
【０００７】
【非特許文献１】D. Patterson, G. Gibsonand R. Katz. “A Case for Redundant Arrays of Inexpensive Disks （RAID）”,Proceedings of the 1988 ACM SIGMOD, pp.109-116, June 1988.
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記のように不揮発性半導体記憶素子を用いた記憶装置では、メモリ素子の劣化に対して最適なデータのアクセス単位が存在するが、このアクセス単位はホスト機器のデータアクセス単位とは必ずしも一致していないため、メモリ素子を効率的に使用できない場合があるという問題があった。
【０００９】
本発明は、上記に鑑みてなされたものであって、メモリ素子の利用効率を向上することができる記憶装置、制御装置、記憶システム、および記憶方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明は、制御装置によって制御される記憶装置であって、メモリ素子と、前記メモリ素子ごとに予め定められたアクセス単位であるブロックのサイズを表すブロックサイズを記憶するサイズ記憶部と、前記ブロックサイズのデータを記憶可能なデータ記憶部と、前記制御装置から受信したデータを前記データ記憶部に保存し、前記データ記憶部に保存したデータを前記メモリ素子に書き込むバッファ処理を実行可能なバッファ処理部と、前記制御装置が前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを前記制御装置から受信するストライプサイズ受信部と、前記ストライプサイズが前記ブロックサイズのｎ倍（ｎは正の整数）であるか否かを判定する判定部と、を備え、前記バッファ処理部は、前記ストライプサイズが前記ブロックサイズのｎ倍である場合にバッファ処理を実行しないこと、を特徴とする。
【００１１】
また、本発明は、アクセス単位であるブロックのサイズを表すブロックサイズが予め定められたメモリ素子を有する記憶装置を制御する制御装置であって、前記ブロックサイズの取得要求を前記記憶装置に送信する要求送信部と、前記取得要求に応じて前記記憶装置から送信された前記ブロックサイズを受信するブロックサイズ受信部と、前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを、受信した前記ブロックサイズのｎ倍（ｎは正の整数）に決定するサイズ決定部と、決定した前記ストライプサイズを前記記憶装置に送信するストライプサイズ送信部と、を備えたこと特徴とする。
【００１２】
また、本発明は、記憶装置と、前記記憶装置を制御する制御装置とを備えた記憶システムであって、前記記憶装置は、メモリ素子と、前記メモリ素子ごとに予め定められたアクセス単位であるブロックのサイズを表すブロックサイズを記憶するサイズ記憶部と、前記ブロックサイズのデータを記憶可能なデータ記憶部と、前記制御装置から受信したデータを前記データ記憶部に保存し、前記データ記憶部に保存したデータを前記メモリ素子に書き込むバッファ処理を実行可能なバッファ処理部と、前記ブロックサイズの取得要求を前記制御装置から受信する要求受信部と、前記取得要求を受信したときに、前記ブロックサイズを前記サイズ記憶部から取得し、取得した前記ブロックサイズを前記制御装置に送信する送信部と、前記制御装置が前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを前記制御装置から受信するストライプサイズ受信部と、前記ストライプサイズが前記ブロックサイズのｎ倍（ｎは正の整数）であるか否かを判定する判定部と、を備え、前記バッファ処理部は、前記ストライプサイズが前記ブロックサイズのｎ倍である場合にバッファ処理を実行せず、前記制御装置は、前記ブロックサイズの取得要求を前記記憶装置に送信する要求送信部と、前記取得要求に応じて前記記憶装置から送信された前記ブロックサイズを受信するブロックサイズ受信部と、前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを、受信した前記ブロックサイズのｎ倍に決定するサイズ決定部と、決定した前記ストライプサイズを前記記憶装置に送信するストライプサイズ送信部と、を備えたこと、を特徴とする。
【００１３】
また、本発明は、記憶装置と、前記記憶装置を制御する制御装置とを備えた記憶システムで実行される記憶方法であって、前記記憶装置は、メモリ素子と、前記メモリ素子ごとに予め定められたアクセス単位であるブロックのサイズを表すブロックサイズを記憶するサイズ記憶部と、前記ブロックサイズのデータを記憶可能なデータ記憶部と、前記制御装置から受信したデータを前記データ記憶部に保存し、前記データ記憶部に保存したデータを前記メモリ素子に書き込むバッファ処理を実行可能なバッファ処理部と、を備え、前記制御装置が、前記ブロックサイズの取得要求を前記記憶装置に送信する要求送信ステップと、前記記憶装置が、前記取得要求を前記制御装置から受信する要求受信ステップと、前記記憶装置が、前記取得要求を受信したときに、前記ブロックサイズを前記サイズ記憶部から取得し、取得した前記ブロックサイズを前記制御装置に送信する送信ステップと、前記制御装置が、前記取得要求に応じて前記記憶装置から送信された前記ブロックサイズを受信するブロックサイズ受信ステップと、前記制御装置が、前記メモリ素子にアクセスするときのアクセス単位のサイズを表すストライプサイズを、受信した前記ブロックサイズのｎ倍（ｎは正の整数）に決定するサイズ決定ステップと、前記制御装置が、決定した前記ストライプサイズを前記記憶装置に送信するストライプサイズ送信ステップと、前記記憶装置が、前記ストライプサイズを前記制御装置から受信するストライプサイズ受信ステップと、前記記憶装置が、前記ストライプサイズが前記ブロックサイズのｎ倍であるか否かを判定する判定ステップと、前記記憶装置が、前記ストライプサイズが前記ブロックサイズのｎ倍である場合に、前記バッファ処理部によるバッファ処理を実行せず、前記制御装置から受信したデータを前記メモリ素子に書き込む書き込み処理ステップと、を備えたことを特徴とする。
【発明の効果】
【００１４】
本発明によれば、メモリ素子の利用効率を向上することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この発明にかかる記憶装置、制御装置、記憶システム、および記憶方法の最良な実施の形態を詳細に説明する。
【００１６】
本実施の形態にかかる記憶システムは、ＮＡＮＤ型フラッシュメモリなどの不揮発性半導体記憶素子によって構成された複数の記憶装置（メモリ装置）と、これらの記憶装置でＲＡＩＤを構成して制御する制御装置（ＲＡＩＤコントローラ）とを備える。そして、ＲＡＩＤコントローラが各記憶装置を構成する記憶素子のブロックサイズを各記憶装置から取得し、ＲＡＩＤのストライプサイズを、取得したブロックサイズの最小公倍数となるように決定する。
【００１７】
図１は、本実施の形態にかかる記憶システムの構成を示すブロック図である。図１は、記憶システムをＲＡＩＤ構成にした場合の構成例を示している。同図に示すように、本実施の形態の記憶システムは、ＲＡＩＤコントローラ１０と、複数のメモリ装置２０ａ〜２０ｃと、ホスト機器３０とを備えている。
【００１８】
ホスト機器３０は、ＰＣ（Personal Computer）等であって、ＲＡＩＤコントローラ１０に対してデータの書き込みや読み込みを要求する。
【００１９】
ＲＡＩＤコントローラ１０は、決められたストライプ単位でのアクセスなどＲＡＩＤ機能に関する制御を行う。ＲＡＩＤコントローラ１０は、例えば、データと誤り訂正符号とを３台のメモリ装置２０ａ〜２０ｃに分散して記憶するＲＡＩＤ５を構成する。これにより、保存データの信頼性を高めることができる。
【００２０】
なお、ＲＡＩＤ構成はＲＡＩＤ５に限られず、複数のメモリ装置に所定のストライプサイズでデータを書き込む構成であればあらゆるＲＡＩＤ構成を適用できる。また、制御装置は、複数のメモリ装置でＲＡＩＤを構成して制御するＲＡＩＤコントローラに限られず、メモリ装置固有のアクセス単位のサイズと異なる所定のサイズ（ストライプサイズ）で当該メモリ装置をアクセスするように制御する装置であればあらゆる装置に適用できる。
【００２１】
メモリ装置２０ａ〜２０ｃは、ブロック単位でデータをアクセスするメモリ素子で構成される記憶装置である。メモリ装置２０ａ〜２０ｃは、例えば、ＮＡＮＤ型フラッシュメモリをメモリ素子として用いるＳＳＤ（Solid State Drive）によって構成する。なお、メモリ装置２０ａ〜２０ｃは、同様の構成を備えるため、以下では単にメモリ装置２０という場合がある。また、同図では３台のメモリ装置２０を備える構成を記載しているが、接続するメモリ装置２０の台数は３台に限られるものではない。
【００２２】
次に、ＲＡＩＤコントローラ１０およびメモリ装置２０の詳細な構成について説明する。最初に、メモリ装置２０の構成について図２を用いて説明する。図２は、本実施の形態にかかるメモリ装置２０の構成を示すブロック図である。同図に示すように、メモリ装置２０は、メモリ制御部２１と、複数のメモリ素子２２ａ〜２２ｃとを備えている。
【００２３】
メモリ素子２２ａ〜２２ｃは、予め定められたサイズ（ブロックサイズ）のブロック単位でアクセスするメモリ素子である。メモリ素子２２ａ〜２２ｃは、例えば、ＮＡＮＤ型フラッシュメモリによって構成することができる。なお、適用可能な素子はＮＡＮＤ型フラッシュメモリに限られず、所定のブロックサイズでアクセスする素子であればあらゆるメモリ素子を適用できる。
【００２４】
なお、メモリ素子２２ａ〜２２ｃは同様の構成を備えるため、以下では単にメモリ素子２２という場合がある。また、同図では、メモリ素子２２を３つ備える構成例を示しているが、メモリ素子２２の個数は３つに限られるものではない。
【００２５】
メモリ制御部２１は、ＲＡＩＤコントローラ１０からの命令を処理してメモリ素子２２へのアクセスを制御する。図３は、メモリ制御部２１の詳細な構成を示すブロック図である。図３に示すように、メモリ制御部２１は、サイズ記憶部２０１と、要求処理部２０２と、応答送信部２０３と、バッファ２０４と、バッファ処理部２０５と、処理モード変更部２０６と、書き込み処理部２０７と、を備えている。
【００２６】
サイズ記憶部２０１は、メモリ装置２０の各メモリ素子２２のアクセス単位であるブロックサイズを記憶する。なお、サイズ記憶部２０１は、一つのブロックサイズだけを保存してもよいし、例えば読み書き時のブロックサイズ（読み書きブロックサイズ）と消去時のブロックサイズ（消去ブロックサイズ）などのように複数のブロックサイズを保存してもよい。
【００２７】
要求処理部２０２は、ＲＡＩＤコントローラ１０から各種要求やデータを受信し、受信した要求やデータに応じた処理を実行する。例えば、要求処理部２０２は、ＲＡＩＤコントローラ１０からデータの読み書きの要求を受信し、要求に応じてメモリ素子２２に対するデータの読み書きを実行する。
【００２８】
要求処理部２０２は、さらに詳細な構成として、要求受信部２０２ａと、ストライプサイズ受信部２０２ｂとを備えている。
【００２９】
要求受信部２０２ａは、ＲＡＩＤコントローラ１０から、ブロックサイズの取得要求などの各種要求を受信する。ストライプサイズ受信部２０２ｂは、ＲＡＩＤコントローラ１０から、ＲＡＩＤコントローラ１０が決定したストライプサイズを受信する。
【００３０】
要求処理部２０２は、さらに、要求受信部２０２ａが受信した取得要求に応じて、ブロックサイズをサイズ記憶部２０１から取得する。
【００３１】
応答送信部２０３は、要求処理部２０２によって取得されたブロックサイズをＲＡＩＤコントローラ１０に送信する。
【００３２】
バッファ２０４は、ＲＡＩＤコントローラ１０から書き込みが要求されたデータを一時的に保存する記憶部である。バッファ２０４は、少なくともブロックサイズ分のデータを記憶可能である。
【００３３】
バッファ処理部２０５は、バッファ２０４を用いて、メモリ素子２２にアクセスするときのバッファ処理を行う。バッファ処理とは、メモリ素子２２のブロックサイズより小さいサイズのデータをバッファ２０４に保存し、データがブロックサイズに達したときにメモリ素子２２に書き込む処理をいう。
【００３４】
処理モード変更部２０６は、後述する書き込み処理部２０７の処理モードを設定・変更する。処理モードには、バッファ処理部２０５によるバッファ処理を実行する通常モードと、バッファ処理を実行せずにＲＡＩＤコントローラ１０から受信したデータをそのままメモリ素子２２に書き込む高速処理モードとが含まれる。
【００３５】
処理モード変更部２０６は、ＲＡＩＤコントローラ１０から受信したストライプサイズが、メモリ素子２２のブロックサイズと等しいか整数倍であるか否かを判定する判定部２０６ａを備えている。そして、処理モード変更部２０６は、ストライプサイズがブロックサイズと等しいか整数倍である場合に、処理モードを高速処理モードに設定する。
【００３６】
例えば、ブロックサイズが２ＫＢのメモリ装置２０の場合、処理モード変更部２０６は、ストライプサイズが２ＫＢかその整数倍（４ＫＢ、８ＫＢ、・・・）であるときに高速処理モードに移行可能とする。この条件が成り立つときは、バッファ処理部２０５によるバッファリング（バッファ処理）を省略しても、常にブロックサイズ単位での書き込みとなるためである。
【００３７】
書き込み処理部２０７は、処理モード変更部２０６が設定・変更した処理モードでメモリ素子２２に対するデータを書き込む。例えば、通常モードの場合は、書き込み処理部２０７は、バッファ処理部２０５によるバッファ処理を実行することにより、ＲＡＩＤコントローラ１０から受信したデータをバッファ２０４に保存し、バッファ２０４に保存されたデータをメモリ素子２２に書き込む。
【００３８】
また、高速処理モードの場合は、書き込み処理部２０７は、バッファ処理部２０５によるバッファ処理を実行せず、ＲＡＩＤコントローラ１０から受信したデータを直接メモリ素子２２に書き込む。
【００３９】
次に、ＲＡＩＤコントローラ１０の構成について図４を用いて説明する。図４は、本実施の形態にかかるＲＡＩＤコントローラ１０の構成を示すブロック図である。同図に示すように、ＲＡＩＤコントローラ１０は、制御用プロセッサ１１と、キャッシュ１２とを備えている。
【００４０】
キャッシュ１２は、メモリ装置２０に書き込むデータの一時的な保存が可能な記憶部である。キャッシュ１２は、例えば、ＤＲＡＭなど揮発性半導体を用いて構成することができる。
【００４１】
制御用プロセッサ１１は、ストライプ単位でのデータの読み書きや、エラー訂正用データの生成などを行う。図５は、制御用プロセッサ１１の機能構成を示すブロック図である。図５に示すように、制御用プロセッサ１１は、要求送信部１０１と、ブロックサイズ受信部１０２と、サイズ決定部１０３と、ストライプサイズ送信部１０４と、書き込み処理部１０５と、を備えている。
【００４２】
要求送信部１０１は、ブロックサイズの取得要求をメモリ装置２０に送信する。要求送信部１０１は、例えば、メモリ装置２０がＲＡＩＤコントローラ１０に接続され、接続された各メモリ装置２０でＲＡＩＤを構成する構成処理を開始したときに、取得要求を送信する。
【００４３】
ブロックサイズ受信部１０２は、ブロックサイズの取得要求に応じて各メモリ装置２０から送信されたブロックサイズを受信する。
【００４４】
サイズ決定部１０３は、各メモリ装置２０から受信したブロックサイズを元に、ＲＡＩＤを構成する各メモリ装置２０に対するアクセス単位のサイズであるストライプサイズを決定する。具体的には、サイズ決定部１０３は、ストライプサイズを、各メモリ装置２０のブロックサイズのｎ倍（ｎは正の整数）となるように決定する。
【００４５】
例えば、各メモリ装置２０のブロックサイズがすべて一致する場合は、サイズ決定部１０３は、受信したブロックサイズをストライプサイズに決定する（ｎ＝１）。また、例えば、各メモリ装置２０のブロックサイズが一致しない場合は、サイズ決定部１０３は、受信した複数のブロックサイズの最小公倍数を、ストライプサイズとして決定する。
【００４６】
なお、最小公倍数の上限となる閾値を予め定めておき、サイズ決定部１０３が、当該閾値を超えない範囲でストライプサイズとする最小公倍数を決定するように構成してもよい。例えば、サイズ決定部１０３が、受信したすべてのブロックサイズの最小公倍数を求め、求めた最小公倍数が閾値を超えた場合には、いずれかのブロックサイズを除いたブロックサイズの最小公倍数であって閾値を超えない最小公倍数を求めるように構成する。
【００４７】
ストライプサイズ送信部１０４は、サイズ決定部１０３が決定したストライプサイズを、各メモリ装置２０に送信する。
【００４８】
書き込み処理部１０５は、決定したストライプサイズで、各メモリ装置２０に対してデータを書き込む書き込み処理を実行する。書き込み処理部１０５は、メモリ装置２０の書き込み処理部２０７と同様に、キャッシュ１２を用いたバッファ処理を実行してデータをメモリ装置２０に書き込む。
【００４９】
具体的には、書き込み処理部１０５は、キャッシュ１２をストライプサイズ単位で区切った複数のセグメントに分割して管理する。図６は、セグメントに分割したキャッシュ１２の一例を示す図である。書き込み処理部１０５は、図６のように分割した各セグメントにホスト機器３０からの書き込みデータを一時的に保存し、データがセグメントの容量であるストライプサイズに達したときに、セグメントに保存されたデータをメモリ装置２０に書き込む。
【００５０】
なお、キャッシュ１２の空き領域が無くなった場合、書き込み処理部１０５は、空き領域を確保するために、ストライプサイズに満たないセグメントのデータを書き出す。本実施の形態では、このような場合、書き込み処理部１０５が、できる限りストライプサイズに近いデータから優先的にメモリ装置２０へ書き出す。これにより、メモリ装置２０の１ブロックに書き込まれる有効なデータが大きくなるため、書換え効率を向上させることができる。
【００５１】
次に、このように構成された本実施の形態にかかる記憶システムによるストライプサイズ決定処理について図７を用いて説明する。図７は、本実施の形態におけるストライプサイズ決定処理の全体の流れを示すシーケンス図である。
【００５２】
まず、ＲＡＩＤコントローラ１０の要求送信部１０１は、接続されたメモリ装置２０に対してブロックサイズの取得要求を送信する（ステップＳ４１）。次に、メモリ装置２０は、サイズ記憶部２０１からブロックサイズを取得して返信するサイズ取得・返信処理を実行する（ステップＳ４２）。サイズ取得・返信処理の詳細については後述する。ＲＡＩＤコントローラ１０のブロックサイズ受信部１０２は、各メモリ装置２０から返信されたブロックサイズを受信する。
【００５３】
メモリ装置２０が複数接続されている場合、ＲＡＩＤコントローラ１０は、すべてのメモリ装置２０に対して上記処理を繰り返し行い、各メモリ装置２０からブロックサイズをそれぞれ取得する。同一のメモリ装置２０が複数接続されている場合は、取得したすべてのブロックサイズは同じになるが、異なるメモリ装置２０が接続されている場合は、取得したブロックサイズが異なる場合がある。
【００５４】
ＲＡＩＤコントローラ１０のサイズ決定部１０３は、受信したブロックサイズから適切なストライプサイズを決定する（ステップＳ４３）。具体的には、すべてのメモリ装置２０のブロックサイズの最小公倍数をストライプサイズに決定する。例えば、それぞれ１ＫＢ、２ＫＢ、４ＫＢのブロックサイズの３つのメモリ装置２０から構成される場合、サイズ決定部１０３は、ストライプサイズを４ＫＢとする。
【００５５】
ＲＡＩＤコントローラ１０のストライプサイズ送信部１０４は、決定したストライプサイズをすべてのメモリ装置２０へ通知する（ステップＳ４４）。次に、メモリ装置２０は、受け取ったストライプサイズに応じて処理モードを設定する処理モード設定処理を実行する（ステップＳ４５）。処理モード設定処理の詳細については後述する。
【００５６】
処理モード設定処理の後、各メモリ装置２０は、処理モード設定の完了をＲＡＩＤコントローラ１０に送信する（ステップＳ４６）。これ以降、ＲＡＩＤコントローラ１０は、決定したストライプサイズでメモリ装置２０へアクセスする（ステップＳ４７）。
【００５７】
次に、ステップＳ４２のサイズ取得・返信処理の詳細について図８を用いて説明する。図８は、サイズ取得・返信処理の全体の流れを示すフローチャートである。
【００５８】
まず、メモリ装置２０の要求受信部２０２ａがＲＡＩＤコントローラ１０からブロックサイズの取得要求を取得する（ステップＳ５１）。次に、要求処理部２０２が、メモリ素子２２に対するアクセスに用いるブロックサイズをサイズ記憶部２０１から取得する（ステップＳ５２）。要求処理部２０２は、取得したブロックサイズが正常に取得できたか否かを判断する（ステップＳ５３）。正常に取得できた場合は（ステップＳ５３：ＹＥＳ）、応答送信部２０３が、取得したブロックサイズをＲＡＩＤコントローラ１０に対して返答する（ステップＳ５４）。
【００５９】
なお、サイズ記憶部２０１に複数のブロックサイズが保存されている場合は、要求処理部２０２は、例えばいずれかのブロックサイズを優先して、返答すべきブロックサイズとして決定する。また、要求処理部２０２が、複数のブロックサイズの最小公倍数を返答すべきブロックサイズとして決定するように構成してもよい。
【００６０】
ブロックサイズが正常に取得できなかった場合は（ステップＳ５３：ＮＯ）、応答送信部２０３は、ＲＡＩＤコントローラ１０にエラーを返信する（ステップＳ５５）。
【００６１】
次に、ステップＳ４５の処理モード設定処理の詳細について図９を用いて説明する。図９は、処理モード設定処理の全体の流れを示すフローチャートである。
【００６２】
まず、メモリ装置２０のストライプサイズ受信部２０２ｂが、ＲＡＩＤコントローラ１０からストライプサイズを受信する（ステップＳ６１）。次に、判定部２０６ａが、サイズ記憶部２０１からブロックサイズを取得してストライプサイズと比較することにより、バッファ処理を行わない高速処理モードに移行可能か否かを判断する（ステップＳ６２）。具体的には、判定部２０６ａは、受信したストライプサイズがブロックサイズと等しいか整数倍のときに、処理モードを高速処理モードに移行可能と判断する。
【００６３】
高速処理モードに移行可能である場合は（ステップＳ６２：ＹＥＳ）、処理モード変更部２０６は、バッファ処理部２０５のバッファ処理を停止する高速処理モードに変更する（ステップＳ６３）。高速処理モードに移行可能でない場合は（ステップＳ６２：ＮＯ）、処理モード変更部２０６は処理モードを変更せずに、処理モード設定処理を終了する。
【００６４】
なお、同図の例では、処理モードが予め通常モードに設定されているものとしている。これに対し、処理モード変更部２０６が、判定結果に応じて、処理モードを通常モードまたは高速処理モードのいずれかに設定するように構成してもよい。
【００６５】
また、メモリ装置２０で処理モードを判定して処理モードを設定・変更するのではなく、ＲＡＩＤコントローラ１０から処理モードを変更するための移行コマンド等を送信し、受信したコマンドに応じてメモリ装置２０が処理モードを設定・変更するように構成してもよい。
【００６６】
図７で説明したように、ストライプサイズ決定処理の後、ＲＡＩＤコントローラ１０は、決定したストライプサイズでメモリ装置２０へアクセス可能となる。以下に、ＲＡＩＤコントローラ１０によるメモリ装置２０に対するデータ書き込み処理について説明する。
【００６７】
制御用プロセッサ１１の書き込み処理部１０５は、図６に示すようなキャッシュ１２を分割した複数のセグメントのうち、ホスト機器３０から指定された書き込み先の論理アドレスに対応するセグメントにデータを書き込み、書き込みが完了したことをホスト機器３０へ返す。
【００６８】
次に、データ書き込み処理を繰り返し行い、キャッシュ１２に空き領域が無くなったときにキャッシュデータをメモリ装置２０に追い出すキャッシュデータ追い出し処理について説明する。図１０は、キャッシュデータ追い出し処理の全体の流れを示すフローチャートである。
【００６９】
まず、制御用プロセッサ１１の書き込み処理部１０５は、図６に示すようなキャッシュ１２を分割した複数のセグメントのうち、一つのセグメントに保存しているデータのサイズ（保存データサイズ）を取得する（ステップＳ９１）。次に、書き込み処理部１０５は、取得した保存データサイズとストライプサイズとが等しいか否かを判断する（ステップＳ９２）。等しい場合は（ステップＳ９２：ＹＥＳ）、書き込み処理部１０５は、このセグメントのデータをメモリ装置２０に書き出す（ステップＳ９３）。
【００７０】
取得した保存データサイズとストライプサイズとが等しくない場合は（ステップＳ９２：ＮＯ）、書き込み処理部１０５は、保存データサイズの大きい順になるようセグメントをソートして保存する（ステップＳ９４）。例えば、書き込み処理部１０５は、セグメントを識別するセグメント番号を保存データサイズ順にソートし、図示しない記憶部等に保存する。
【００７１】
次に、書き込み処理部１０５は、例えばキャッシュ１２を分割したときに定められるセグメント数を参照することにより、全セグメントの保存データサイズを確認したか否かを判断する（ステップＳ９５）。全セグメントを確認していない場合は（ステップＳ９５：ＮＯ）、書き込み処理部１０５は、他の未処理のセグメントの保存データサイズを確認して処理を繰り返す（ステップＳ９１）。
【００７２】
全セグメントを確認した場合は（ステップＳ９５：ＹＥＳ）、書き込み処理部１０５は、ソートして保存したセグメントの情報を参照し、保存データサイズの大きなセグメントから順にメモリ装置２０に対してデータを書き出す（ステップＳ９６）。
【００７３】
このような処理により、メモリ装置２０の１ブロックに書き込まれる有効なデータが大きくなり、メモリ素子２２の書換え効率を向上させることができる。また、保存データサイズの小さいセグメントの書き出しを遅らせることになるため、その間に別の書き込み要求により当該セグメントの保存データサイズが増加する可能性が高くなる。これにより、メモリ素子２２の書換え効率をさらに向上させることが期待できる。
【００７４】
以上のように、本実施の形態にかかる記憶システムでは、記憶装置を制御する制御装置が、記憶装置を構成する不揮発性半導体記憶素子に対して最適なアクセス単位のサイズを記憶装置から取得し、制御装置が記憶装置にアクセスするときのアクセス単位のサイズを、取得したブロックサイズと等しいかｎ倍となるように決定する。
【００７５】
これにより、記憶装置のメモリ素子に対する書き込み／消去効率が向上し、記憶素子の寿命を伸ばすことができる。また、記憶装置内部でバッファ処理等によりデータをまとめ上げる処理が不要となるため、書き込み処理を高速化することが可能となる。
【００７６】
本実施の形態にかかる記憶装置（メモリ装置）のメモリ制御部、および、本実施の形態にかかる制御装置（ＲＡＩＤコントローラ）の制御プロセッサで実行される上記機能は、プログラムとして提供してもよい。これらの各プログラムは、例えば、ＲＯＭ（Read Only Memory）等に予め組み込まれて提供される。
【００７７】
また、各プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact Disk Recordable）、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００７８】
さらに、各プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、各プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００７９】
本実施の形態にかかる記憶装置で実行されるプログラムは、上述した各部（要求処理部、応答送信部、バッファ処理部、処理モード変更部、書き込み処理部）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵが上記ＲＯＭからプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、各部が主記憶装置上に生成されるようになっている。
【００８０】
また、本実施の形態にかかる制御装置で実行されるプログラムは、上述した各部（要求送信部、ブロックサイズ受信部、サイズ決定部、ストライプサイズ送信部、書き込み処理部）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（制御用プロセッサ）が上記ＲＯＭからプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、各部が主記憶装置上に生成されるようになっている。
【産業上の利用可能性】
【００８１】
以上のように、本発明にかかる記憶装置、制御装置、記憶システム、および記憶方法は、ＳＳＤを記憶装置として構成したＲＡＩＤシステム等に適している。
【図面の簡単な説明】
【００８２】
【図１】本実施の形態にかかる記憶システムの構成を示すブロック図である。
【図２】本実施の形態にかかるメモリ装置の構成を示すブロック図である。
【図３】メモリ制御部の詳細な構成を示すブロック図である。
【図４】本実施の形態にかかるＲＡＩＤコントローラの構成を示すブロック図である。
【図５】制御用プロセッサの機能構成を示すブロック図である。
【図６】セグメントに分割したキャッシュの一例を示す図である。
【図７】本実施の形態におけるストライプサイズ決定処理の全体の流れを示すシーケンス図である。
【図８】サイズ取得・返信処理の全体の流れを示すフローチャートである。
【図９】処理モード設定処理の全体の流れを示すフローチャートである。
【図１０】キャッシュデータ追い出し処理の全体の流れを示すフローチャートである。
【符号の説明】
【００８３】
１０  ＲＡＩＤコントローラ
１１  制御用プロセッサ
１２  キャッシュ
２０ａ〜２０ｃ  メモリ装置
２１  メモリ制御部
２２ａ〜２２ｃ  メモリ素子
３０  ホスト機器
１０１  要求送信部
１０２  ブロックサイズ受信部
１０３  サイズ決定部
１０４  ストライプサイズ送信部
１０５  書き込み処理部
２０１  サイズ記憶部
２０２  要求処理部
２０２ａ  要求受信部
２０２ｂ  ストライプサイズ受信部
２０３  応答送信部
２０４  バッファ
２０５  バッファ処理部
２０６  処理モード変更部
２０６ａ  判定部
２０７  書き込み処理部
【図１】
2010009548.tif 000003
【図２】
2010009548.tif 000004
【図３】
2010009548.tif 000005
【図４】
2010009548.tif 000006
【図５】
2010009548.tif 000007
【図６】
2010009548.tif 000008
【図７】
2010009548.tif 000009
【図８】
2010009548.tif 000010
【図９】
2010009548.tif 000011
【図１０】
2010009548.tif 000012