外部記憶装置の読み出し及び書き込みの性能を測る尺度として、転送データレート、処理コマンドレート、応答時間、処理時間、相対スコアなどがある。
転送データレートは、単位時間あたりに外部記憶装置との間で授受されたデータ量である。例えば、データ読み出しにおいて、1秒あたり平均して250MiBのデータを情報処理装置が外部記憶装置から受信している場合は、外部記憶装置の読み出しの転送レートは250MiB/sとなる。
処理コマンドレートは、単位時間あたりに外部記憶装置との間で授受された命令数である。例えば、データ書き込みにおいて、情報処理装置が外部記憶装置に対する命令について1秒あたり平均して100000個の命令を完了している場合は、前記外部記憶装置の読み出しの転送レートは100000IOPSとなる。
応答時間は、情報処理装置が外部記憶装置に命令を送ってから、その命令に関する処理が完了するまでの時間である。読み出し命令の場合は、その命令のデータを情報処理装置が受信完了するまでの時間であり、書き込み命令の場合は、その命令に対する終了応答を情報処理装置が外部記憶装置から受信するまでの時間である。例えば、データ読み出し命令において、その命令のデータを情報処理装置が受信完了するまでに10ミリ秒要した場合は、外部記憶装置の応答時間は10ミリ秒となる。
処理時間は、情報処理装置上である特定のアプリケーションまたはある特定の処理を外部記憶装置に対して開始してから完了するまでに要した時間である。例えば、外部記憶装置内での10GByteのファイルコピーに要する時間が50秒であった場合、10Gbyteのファイルコピーの処理時間は50秒となる。
相対スコアは、各種条件における複数のスコア(転送データレート、処理コマンドレート、応答時間、処理時間など)に重みづけをして加算・減算・乗算・除算することによって得られるスコアである。
・PCMark05(商標) http://www.futuremark.com/
・PCMark VANTAGE(商標) http://www.futuremark.com/
・SYSmark 2007 Preview (商標) http://www.bapco.com/
などの指標が相対スコアの例としてあげられる。
外部記憶装置の性能の測る際の条件はさまざまである。主な条件として、読み出し(書き込み)するLBAのパターンがある。これはおおまかにシーケンシャルとランダムの二通りに分かれる。
シーケンシャルパターンとは、連続したLBAが順次付与されるアクセスパターンである。すなわち、あるLBAに対しあるデータ長の読み出し命令(書き込み命令)を情報処理装置が外部記憶装置に送信し、前記LBAに対し前記データ長分だけインクリメントしたLBAに対してあるデータ長の読み出し命令(書き込み命令)を情報処理装置が外部記憶装置に送信し、以後このLBAのインクリメントによる読み出し命令(書き込み命令)を繰り返し続けるアクセスパターンである。ランダムパターンとは、ランダムで不連続なLBAが順次付与されるアクセスパターンである。
外部記憶装置の性能の測る際の他の条件としては、読み出し(書き込み)するLBAの範囲(アクセスレンジ)、読み出し(書き込み)する際の1コマンドあたりのデータ転送長(ペイロード長)、マルチスレッドの場合に読み出し(書き込み)する際のスレッド数、読み出し(書き込み)するデータの中身、測定時間などがある。
このように多数の指標や条件が存在する外部記憶装置の性能評価であるが、指標と測定条件が同じであっても性能が常に同じであるというわけではない。特に外部記憶装置がSSDである場合は、SSDの性能は、SSDの記録メディアであるフラッシュメモリの物理アドレスとLBAの対応関係を管理する論物変換テーブルの状態に大きく依存する。これは、SSDでは、論理アドレス(LBA)と物理アドレス(NAND10の記憶位置)との関係は予め静的に決定されておらず、データの書込み時に動的に関係付けられる論物変換方式が採用されているからである。例えば、同じLBAアドレス上のデータを上書きする場合は、つぎのような操作が行われる。論理アドレスA1に有効なデータが保存されており、記憶領域としてはブロックB1が使用されていたとする。情報処理装置から論理アドレスA1のデータ(サイズはブロックと同じとする)を上書きするコマンドを受信した場合、フリーブロック(ブロックB2とする)を1個確保し、そのフリーブロックに情報処理装置から受信したデータを書き込む。その後、論理アドレスA1とブロックB2を関係付ける。その結果、ブロックB2はアクティブブロックになり、ブロックB1に保存されたデータは無効になるためブロックB1はフリーブロックとなる。このように、SSDでは、同じ論理アドレスA1のデータであっても、実際の記録領域として使用されるブロックは書込みの度に変化する。なお、フリーブロックを選択する際には、通常、全てのブロックの消去回数、消去間隔を概ね等しくするウェアレベリング処理が実行されている。
このような外部記憶装置の内部状態のばらつきを測定結果から排除するため、例えば非特許文献1として提示したSNIAのSolid State Storage Performance Test Specificationにおいては、測定の前条件(Preconditioning)の規格が存在する。ただし、ユーザが所有するSSDの内部状態はユーザのSSDの用途、SSDを接続しているコンピュータのハードウェア環境、コンピュータ上で動作するソフトウェアの種類、使用時間などによって千差万別であり、前述の規格に従って行われた前条件後のSSDの内部状態が、ユーザが実際に各種アプリケーションを動作させている時(実使用時)に性能を体感している際のSSDの内部状態と一致しているとは限らない。
そこで、実使用の合間に前条件を行わずにユーザ自身が測定を実行することによって、ユーザの所有するSSDの性能を把握こともできる。これにより、規格化された統一的な方法に比べ、ユーザは自身が体感する性能に比較的近い性能指標を得ることができる。しかし、この手法には以下の問題点がある。
前述したとおり、SSDの内部状態は時々刻々と変化するので、外部からのアクセスにナイーブである。よって、測定そのものがSSDの内部状態に影響を与えてしまうため、測定により内部状態がユーザの実使用時の内部状態からかけ離れてしまい、測定結果がユーザの体感速度から乖離してしまう。例えば、性能測定そのものによってシーケンシャル書き込みのアクセスがコンピュータからSSDに対して発生すると、書き込み対象のLBAと実際にデータが書かれたフラッシュメモリ上の物理アドレスの対応関係がSSD内部の論物変換テーブルに反映されることで、SSDの内部状態が変化し、その変化した内部状態が測定結果に影響を与え、最終的に計算されたSSDの性能はユーザの実際に体感した性能から乖離する。実際、多くの性能測定ツールにおいては、各種測定の前に前条件としてSSDに対して数ギガバイト以上のデータ量でシーケンシャル書き込みが行われる仕様となっており、これらのツールより測定される性能はユーザの体感する性能から大きく乖離する。
前述のとおり、一般的な性能測定ツールによる性能測定にはコンピュータからSSDに対する大量の書き込みが発生するが、これによりSSDの記録メディアであるフラッシュメモリの消去回数が増大する。フラッシュメモリは消去回数が増加するにつれ不良率が高くなるため、性能測定によりSSDの信頼性が劣化することになる。故に、SSDの信頼性劣化を加速させないよう、ユーザはSSDの性能監視を頻繁に行うことができない。
前述のとおり、性能測定のソフトウェアや条件は多岐にわたる。これらソフトウェアや条件の選択によって、読み出し/書き込み、シーケンシャル/ランダム、アクセスレンジ、ペイロード長、スレッド数が規定される。以下、これらを総称してワークロードと呼ぶ。一方、性能測定時に選択したワークロードと、ユーザが各種アプリケーションで作業をしている際にSSDに発生するワークロード(実使用ワークロード)が一致するとは限らない。ユーザ各々がSSDとコンピュータ間のインターフェースのプロトコルを解析してユーザに適したワークロードを見出すことは困難である。
また、外部記憶装置に対する読み出し書き込み量をもとに、外部記憶装置の性能を監視するソフトウェアもある(非特許文献8参照)。しかし、この従来技術においては、
読み出し転送データレート=(測定期間中に読み出されたデータ量)/(測定時間の長さ)
書き込み転送データレート=(測定期間中に書き込まれたデータ量)/(測定時間の長さ)
となっている。
しかし、外部記憶装置に対するアクセスの合間に、ユーザの入力待ち、CPUなどその他ハードウェアの応答待ちなどがあると、測定期間中に読み出されたデータ量が減少する一方、測定時間の長さは一定であるため、転送データレートは減少する。とくに、ユーザが外部記憶装置に対してほとんどアクセスしないようなアプリケーションを実行していたり、情報処理装置がアプリケーションを実行していないアイドル状態であったりする場合においては、外部記憶装置の転送データレートは、外部記憶装置の本来の性能にかかわらず、ゼロまたはゼロに極めて近い値を示す。そして、転送データレートがゼロに近い値を示したからといって、ユーザが体感する外部記憶装置の性能が悪いわけではない。すなわち、この従来技術によって取得される性能は、外部記憶装置以外の外的要因の影響を極めて受けやすく、外部記憶装置の性能や、ユーザの感じる外部記憶装置の体感性能を取得できているとは言い難い。
以上のような理由から、現状の性能測定ツールによる性能測定は各ユーザが実使用で感じる体感性能を反映しているとは言い難い。また、性能測定の際に余分な書き込みを行うことは、外部記憶装置の信頼性上好ましくない。そこで、本実施形態では、外部記憶装置の信頼性に影響を与えずに、ユーザが実使用で感じた外部記憶装置の体感性能をリアルタイムに正確に把握可能な性能測定ツールを提供する。
以下に添付図面を参照して、実施形態にかかる情報処理装置、性能評価ツール、外部記憶装置の性能評価方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1に、外部記憶装置が搭載される情報処理装置としてのコンピュータシステム1の外観的構成を示す。図1は、一般的なデスクトップ型のパーソナルコンピュータ1の構成を示している。外部記憶装置としてのSSD10は電源ケーブル131を介して電源回路132に接続されことで電源供給され、SATA(Serial Advanced Technology Attachment)ケーブル136を介してマザーボード130に物理的に接続されることで、マザーボード130との通信を可能にする。SATAケーブル136を介した通信はSATA規格に従う。マザーボード130には、CPUなど(図示せず)が搭載されている。マザーボード130には、ディスプレイ133、キーボード134、マウス135などが接続されている。コンピュータシステムとしては、デスクトップ型に限らず、ラップトップ型やノート型のパーソナルコンピュータにも適用可能である。
また、外部記憶装置が搭載される機器システム(ホスト100)としては、その他に、スチルカメラ、ビデオカメラなどの撮像装置などであってもよいし、ゲーム機器やカーナビゲーションシステムなどであってもよい。また、SSD10の代わりにハードディスクドライブ(HDD)やハイブリッドハードディスクドライブ(ハイブリッドHDD)など他の外部記憶装置を用いてもよい。また、SSDとコンピュータの接続規格として、SATA規格以外に、USB(Universal Serial Bus)規格などの他のインターフェース規格を用いてもよい。
図2は、SSD10を搭載したホスト100のシステム構成例を示すものである。ホスト100は、CPU200、ノースブリッジ201、DRAM,MRAMなどの主メモリ202、表示コントローラ203、ディスプレイ133、サウスブリッジ205、光学ドライブ206、BIOS−ROM207、LANコントローラ208、USBコントローラ209、キーボード134、マウス135等を備えている。
CPU200は、ホスト100の動作を制御するために設けられたプロセッサであり、SSD10から主メモリ202にロードされるオペレーティングシステム(OS)を実行する。更に、光学ドライブ206が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU200は、それらの処理を実行する。
また、CPU200は、BIOS−ROM207に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、ホスト100内のハードウェア制御のためのプログラムである。
ノースブリッジ201は、CPU200のローカルバスと接続するブリッジデバイスである。ノースブリッジ201には、主メモリ202をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ201は、表示コントローラ203との通信などを実行する機能も有している。
主メモリ202は、プログラムやデータを一時的に記憶し、CPU200のワークエリアとして機能する。主メモリ202は、例えばDRAMやMRAMから構成される。ビデオコントローラ203は、コンピュータシステムのディスプレイ133を制御するビデオ再生コントローラである。
サウスブリッジ205は、CPU200のローカルバスと接続するブリッジデバイスである。サウスブリッジ205は、各種ソフトウェア及びデータを格納する記憶装置であるSSD10を、ATAインタフェース90を介して制御する。
ホスト100では、セクタ単位でSSD10へのアクセスを行う。ATAインタフェース90を介して、ライトコマンド(ライト要求)、リードコマンド(リード要求)、フラッシュコマンド等がSSD10に入力される。
また、サウスブリッジ205は、BIOS−ROM207、光学ドライブ206、LANコントローラ208、USBコントローラ209をアクセス制御するための機能も有している。USBコントローラ209にキーボード134、マウス135が接続されている。
図2において、OS150、性能評価ツール110、アクセスログテーブル120、性能ログテーブル125、ソフトウェア(ワープロソフトや数値計算ソフトや画像編集ソフトなど)140は、コンピュータシステムの電源がオフの時はSSD10上に保持されており、ホストの電源オン時またはそれらの機能を呼び出した際は、SSD10から主メモリ202上にロードされる。ソフトウェア140は、性能評価ツール110以外のソフトウェアであって、SSD10を使用するソフトウェアである。性能評価ツール110は、SSD10の性能評価を行うソフトウェアであり、アクセス情報取得ツール111と、性能情報取得ツール112を備えている。
性能評価ツール110は、例えば、図3に示すように、ホスト100が電源オフになっているときはSSD10のNANDメモリ20に性能評価ツール110Aとして格納されているが、ホスト100の起動時またはプログラム起動時に、NANDメモリ20から主メモリ202にロードされる。一方、ホスト100に複数の外部記憶装置が接続されている場合は、図4に示すように、性能評価ツール110は、性能評価ツール100Bとして、SSD10とは別の外部記憶装置300に格納されており、ホスト100の起動時またはプログラム起動時に、外部記憶装置300から主メモリ202にロードされるようにしてもよい。特に、外部記憶装置300がOS150を格納するシステムドライブとして使用されており、SSD10が文書や静止画データや動画データなどユーザデータを格納するデータドライブとして使用されている場合は、システムドライブとしての外部記憶装置300にはOSやアプリケーションプログラムを主として格納するドライブとして使用し、データドライブとしてのSSD10にはユーザデータを格納するドライブとして使用するというように、ドライブ10とドライブ300の役割を明確に分ける観点で、システムドライブとしての外部記憶装置300に性能評価ツール110を格納することが望ましい。
性能評価ツールのセットアップをユーザが行う労力を省く観点では、例えば図3や図4に示したように、性能評価ツールがSSD10や外部記憶装置300に格納された状態でメモリシステム1が出荷され、店頭に並び、ユーザの手に渡ることが望ましい。一方、ユーザが性能評価ツールのインストールの可否を選択できるようにする観点、及びユーザに最新の性能評価ツールを提供できるようにするという観点では、性能評価ツールは、WEBからのダウンロード、またはDVD−ROMやUSBメモリなど外部記憶媒体からのインストールによりSSD10や外部記憶装置10021に格納できるようにすることが望ましい。
図5は性能評価ツールをWEBからダウンロードする場合の一例を示すものである。図5において、性能評価ツール110CはWEBサーバ内の記憶媒体400に格納されており、性能評価ツール110Cはインターネットやローカルネットワークや無線LANなどのネットワークを介して、たとえばLANコントローラ208を経由してSSD10あるいは外部記憶装置300にダウンロードされる。
図6はDVD−ROMやCD−ROMなど光学メディアから性能評価ツールをインストールする場合の一例を示すものである。性能評価ツール110DはDVD−ROMやCD−ROMなどの光学メディア500に格納されており、光学メディア500が光学ドライブ206にセットされることで、性能評価ツール110Dは光学ドライブ206を介してSSD10あるいは外部記憶装置300にインストールされる。
図7はUSBメモリから性能評価ツールをインストールする場合の一例を示すものである。性能評価ツールはUSBメモリ600に格納されており、USBメモリ600がUSBコントローラ209に接続されることで、性能評価ツール110EはUSBコントローラ209を介してSSD10あるいは外部記憶装置300にインストールされる。USBメモリ600のかわりに、SDカードなどその他外部メモリであってもよいのはもちろんである。ユーザによる入手容易性の観点から、光学メディア500やUSBメモリ600はSSD10の出荷時に、付属品としてSSD10と一緒に梱包されていることが望ましい。一方、光学メディア500やUSBメモリ600は、ソフトウェア商品として単独に販売されてもよいし、雑誌や書籍の付録として付属していてもよい。
アクセス情報取得ツール111は、OS150または性能評価ツール110以外のソフトウェア140がSSD10と通常にアクセスするときのコマンドをアクセスログとしてアクセスログテーブル120に逐次記録する。性能情報取得ツール112は、アクセスログテーブル120に記録されたアクセスログを用いてSSD10の性能情報を演算して、この演算結果を性能情報ログとして性能ログテーブル125に記録する。
図8に、ホスト100の各種要素の階層構造を示す。性能評価ツール110及びソフトウェア140は、OS150を経由してSSD10と通信する。すなわち、性能評価ツール110やソフトウェア140がSSD10に対してアクセスする必要が生じた場合、性能評価ツール110及びソフトウェア140はOS150を介して命令、応答、データの授受を行う。
図9に、SSD10の内部構成例を示す。SSD10は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下NANDメモリと略す)20と、ATAインタフェース90を介してホスト100との通信を行うインタフェースコントローラ30と、インタフェースコントローラ30とNANDメモリ20との中間バッファとして機能するキャシュメモリ(CM)40aを有する揮発性半導体メモリとしてのRAM(Random Access Memory)40と、NANDメモリ20及びRAM40の管理、制御、及びインタフェースコントローラ30の制御を行うメモリコントローラ50と、NANDメモリ20から読み出されたデータの誤り訂正処理を実行するECC回路58と、これら構成要素を接続するバス57を備える。
RAM40としては、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase Change Random Access Memory)などを採用することができる。
NANDメモリ20は、ホスト100によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、RAM40で管理される管理情報をバックアップ用に記憶したりする。NANDメモリ20は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数個備える。物理ブロックは複数の物理ページよりなる。物理ページは、データの書き込み及び読み出しの単位である。
NANDメモリ20のメモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタは、1ビットを記憶するように構成されていてもよいし、多値(2ビット以上のデータ)を記憶するように構成されていてもよい。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、メモリセルとして、特開2010−161199号公報や特開2011−29586号公報に記述されるような3次元的に配置されたメモリセルであってもよい。
RAM40は、ホスト100とNANDメモリ20間でのデータ転送用キャッシュとして機能するキャッシュメモリ(CM)40aを有する。また、RAM40は、管理情報記憶用メモリ及び作業領域用メモリとして機能する。RAM40で管理される管理テーブルは、NANDメモリ20に記憶されている各種管理テーブルが起動時などに展開されたものであり、定期的あるいは電源断時にNANDメモリ20に退避保存される。
メモリコントローラ50は、NANDメモリ20に記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト100からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト100−NANDメモリ20間のデータ転送制御、RAM40及びNANDメモリ20に記憶された各種管理テーブルの更新・管理などを実行する。インタフェースコントローラ30は、メモリコントローラ50の制御の下で、ATAインタフェース90を介してホスト装置100との間で命令及びデータを送受信する。
ホスト100はSSD10に対し、リード要求またはライト要求を発行する際には、ATAインタフェース90を介して論理アドレスとしてのLBA(Logical Block Addressing)を入力する。LBAは、論理セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。また、ホスト100はSSD10に対し、リード要求またはライト要求を発行する際には、LBAと併せて、リード要求またはライト要求の対象となるセクタサイズを入力する。
ホスト100から命令が入力されると、インタフェースコントローラ30がその命令を受信し、受信した命令をメモリコントローラ50に送信する。メモリコントローラ50は受信した命令を処理する。前述したように、命令にはLBAが含まれ、ホスト100はLBAにより外部記憶装置のデータの位置を指定する。メモリコントローラ50は、RAM40上の管理情報を参照することで、ホスト100より受信した論理アドレスとしてのLBAを物理アドレスに変換する。変換された物理アドレスにより、NANDメモリ20上の物理的なメモリセルの位置が特定される。
図10にSSD10で使用する管理情報の構成を示す。これらの管理情報は、前述したように、NANDメモリ20で不揮発記憶されている。NANDメモリ20で記憶された管理情報がSSD10の起動時にRAM40に展開されて使用される。RAM40上の管理情報は、定期的あるいは電源断時にNANDメモリ20に退避保存される。RAM40がMRAMやFeRAMなどのような不揮発RAMである場合には、この管理情報はRAM40にのみ記憶されるようにしてもよく、この場合はこの管理情報はNANDメモリ20には記憶されない。
図10に示すように、管理情報は、フリーブロックテーブル21と、アクティブブロックテーブル22と、トラックテーブル(トラック単位の論物変換テーブル)23と、クラスタテーブル(クラスタ単位の論物変換テーブル)24を含む。
LBAは、図11に示すように、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。本実施形態においては、SSD10の論理アドレス(LBA)の管理単位として、LBAの下位(s+1)ビット目から上位のビット列で構成されるクラスタアドレスと、LBAの下位(s+t+1)ビットから上位のビット列で構成されるトラックアドレスとを定義する。すなわち、論理セクタは、ホスト100からの最小アクセス単位である。クラスタは、SSD内部で「小さなデータ」を管理する管理単位であり、セクタサイズの自然数倍がクラスタサイズとなるように定められる。また、トラックは、SSD内部で「大きなデータ」を管理する管理単位であり、クラスタサイズの2以上の自然数倍がトラックサイズとなるように定められる。したがって、トラックアドレスはLBAをトラックサイズで割ったものであり、トラック内アドレスはLBAをトラックサイズで割った余りであり、クラスタアドレスはLBAをクラスタサイズで割ったものであり、クラスタ内アドレスはLBAをクラスタサイズで割った余りである。以下の説明では、便宜上、トラックのサイズは1物理ブロックに記録可能なデータのサイズに等しい(物理ブロックにECC回路58で行う誤り訂正の冗長ビットが含まれる場合はこれを除いたサイズ)とし、クラスタのサイズは1物理ページに記録可能なデータのサイズに等しい(物理ページにECC回路58で行う誤り訂正の冗長ビットが含まれる場合はこれを除いたサイズ)とする。
・フリーブロックテーブル(FBテーブル)21は、NANDメモリ20に書き込みを行うときに書き込み用に新規に割り当てることのできるNANDメモリの用途未割り当ての物理ブロック(フリーブロック:FB)のIDを管理する。また、物理ブロックID毎に消去回数を管理している。
・アクティブブロックテーブル(ABテーブル)22は、用途が割り当てられた物理ブロックであるアクティブブロック(AB)を管理する。また、物理ブロックID毎に消去回数を管理している。
・トラックテーブル23は、トラックアドレスと、このトラックアドレスに対応するトラックデータが記憶される物理ブロックIDとの対応関係を管理する。
・クラスタテーブル24は、クラスタアドレスと、このクラスタアドレスに対応するクラスタデータが記憶される物理ブロックIDと、このクラスタアドレスに対応するクラスタデータが記憶される物理ブロック内ページアドレスとの対応関係を管理する。
つぎに、図12を用いてSSD10においてLBAから物理アドレスを特定する手順(LBA正引き変換)について説明する。LBAが指定されたとき、メモリコントローラ50はLBAからトラックアドレスとクラスタアドレスとクラスタ内アドレスを計算する。
メモリコントローラ50は、まずトラックテーブル23を検索し、計算したトラックアドレスに対応する物理ブロックIDを特定する(ステップS100、S101)。メモリコントローラ50は、特定した物理ブロックIDが有効であるか否かを判定し(ステップS102)、物理ブロックIDがヌルではなく有効な値である場合は(ステップS102:Yes)、この物理ブロックIDがアクティブブロックテーブル22にエントリされているか否かを検索する(ステップS103)。アクティブブロックテーブル22に物理ブロックIDがエントリされている場合は(ステップS104:Yes)、この物理ブロックIDの指定する物理ブロックの先頭位置からトラック内アドレス分だけシフトした位置が指定されたLBAに対応するNANDメモリ20上の物理的な位置となる(ステップS105)。このような場合には、LBAに対応するNANDメモリ20上の物理的な位置の特定にはクラスタテーブル24を必要とせず、このようなLBAを「トラック管理されているLBA」と呼ぶ。ステップS104において、アクティブブロックテーブル22に物理ブロックIDがエントリされていない場合は(ステップS104:No)、指定されたLBAは対応する物理アドレスを持たないことになり、このような状態を「未書き込み状態」と呼ぶ(ステップS106)。
ステップS102において、指定されたトラックアドレスに対応する物理アドレスがヌルであり無効な値の場合は(ステップS102:No)、メモリコントローラ50はLBAからクラスタアドレスを計算し、クラスタテーブル24を検索し、計算したクラスタアドレスに対応する物理ブロックID及び対応する物理ブロック内ページアドレスをクラスタテーブル24から取得する(ステップS107)。物理ブロックIDと物理ブロック内ページアドレスが指定する物理ページの先頭位置からクラスタ内アドレス分だけシフトした位置が指定されたLBAに対応するNANDメモリ20上の物理的な位置となる。このような場合は、LBAに対応するNANDメモリ20上の物理的な位置は、トラックテーブル23のみからは特定できず、クラスタテーブル24の参照を必要とすることになり、このようなLBAを「クラスタ管理されているLBA」という(ステップS108)。
つぎに、図13、図14を用いてSSD10における読み出し動作を説明する。SSD10がホスト100から読み出し命令を受信した場合は(ステップS110)、メモリコントローラ50がこの読み出し命令をRAM40上の読み出し命令待ち行列に追加し(ステップS111)、読み出し命令を受理した旨をホスト100に返信する。
一方、メモリコントローラ50は、RAM40上の読み出し命令待ち行列に命令が存在している場合、読み出し処理を実行可能な状態になっているか否かを判定し(ステップS120)、読み出し処理を実行可能な状態になったと判断すると、先の図12に示したLBA正引き変換手順にしたがってホスト100から受信したLBAからデータの物理的な位置を特定する(ステップS121)。メモリコントローラ50は、特定した位置の物理ページからデータを読み出し(ステップS123)、読み出したデータをインタフェースコントローラ30を介してホスト100に送信する(ステップS124)。なお、NANDメモリ20から読み出したデータは、いったんRAM40に書き込み、RAM40に書き込んだデータをホスト100に送信するようにしてもよい。
つぎに、図15、図16を用いてSSD10における書き込み動作を説明する。SSD10がホスト100から書き込み命令を受信した場合は(ステップS130)、メモリコントローラ50がこの書き込み命令をRAM40上の読み出し命令待ち行列に追加し(ステップS131)、書き込み命令を受理した旨をホスト100に返信する。
一方、メモリコントローラ50は、RAM40上の書き込み命令待ち行列に命令が存在している場合、書き込み処理を実行可能な状態になっているか否かを判定し(ステップS140)、書き込み処理を実行可能な状態になったと判断すると、ホスト100に書き込み可能であることを通知し、ホスト100から書き込みデータを受信し、受信したデータをRAM40のキャッシュメモリ40aに記憶する。つぎに、メモリコントローラ50はフリーブロックテーブル21を読み出し(ステップS141)、フリーブロックテーブル21からフリーブロックの物理ブロックIDを取得する。フリーブロックが存在しない場合は(ステップS142)、メモリコントローラ50は後述するNANDメモリ20の整理(NAND整理)を行い(ステップS143)、この整理の後、フリーブロックテーブル21を読み出し(ステップS144)、フリーブロックテーブル21からフリーブロックの物理ブロックIDを取得する。
つぎに、メモリコントローラ50は、書き込み命令で指定されているLBAが未書き込み状態であるか否かを検索するために、先の図12に示した正引き変換手順にしたがってLBAに対応する有効なデータがNANDメモリ20に記憶済みであるか否か判定する(ステップS145、S146)。
LBAが未書き込み状態である場合は(ステップS146:Yes)、メモリコントローラ50は、キャッシュメモリ40aに記憶している受信データをフリーブロックに書き込み(ステップS147)、書き込みを行ったフリーブロック(新物理ブロック)のID及びその消去回数をアクティブブロックテーブル22に登録し、書き込みを行った物理ブロックのIDをフリーブロックテーブル21から削除する(ステップS151)。この際、受信データのLBAをトラック単位の区画(トラック区画)で区切り、トラック区画内がデータで埋め尽くされているか否かを判定することで、トラック管理するかクラスタ管理するかを判定する(ステップS152)。すなわち、トラック区画内がデータで埋め尽くされている場合は、トラック管理となり、トラック区画内がデータで埋め尽くされていない場合は、クラスタ管理となる。クラスタ管理の場合は、クラスタテーブル24を書き換えて、LBAに新物理ブロックIDを関連付け(ステップS153)、さらにトラックテーブル23を書き換えて、LBAに無効な物理ブロックID(例えば、ヌル)を関連付ける。トラック管理の場合は、トラックテーブルを書き換えて、LBAに新物理ブロックIDを関連付ける(ステップS154)。
一方、ステップS146において、LBAが未書き込み状態でない場合は、メモリコントローラ50は正引き変換により得られた物理ブロックIDをもとに、対応する物理ブロック内全データをNANDメモリ20から読み出して、RAM40に書き込む(ステップS148)。そして、キャッシュメモリ40aに記憶されているデータとNANDメモリ20から読み出してRAM40に書き込んだデータとをRAM40上で合成し(ステップS149)、合成したデータをフリーブロックに書き込む(ステップS150)。メモリコントローラ50は、書き込みを行ったフリーブロック(新物理ブロック)のID及びその消去回数をアクティブブロックテーブル22に登録し、書き込みを行った物理ブロックのIDをフリーブロックテーブルから削除する(ステップS151)。LBAがクラスタ管理である場合は、クラスタテーブル24の旧物理ブロックIDを新物理ブロックIDに書き換える(ステップS152、S153)。トラック管理の場合は、トラックテーブルの旧物理ブロックIDを新物理ブロックIDに書き換える(ステップS152、S154)。さらに、メモリコントローラ50は、旧物理ブロックID及びその消去回数をフリーブロックテーブル21に追加し、旧物理ブロックID及びその消去回数をアクティブブロックテーブル22から削除する(ステップS155)。
SSD10の全LBAの容量は、SSD10のNANDメモリ20の全容量よりも小さく設計されているため、書き込み動作がトラック単位で書き込まれ続ける限りはフリーブロックが枯渇することはない。一方、未書き込みLBAに対してクラスタ単位の書き込みが多数発生した場合、クラスタ単位の書き込み一つに対してクラスタよりも容量の大きい物理ブロックが割り当てられることになるため、書き込まれるデータ容量よりも多くのNANDメモリ20物理ブロックを必要とすることになり、それによりフリーブロックが枯渇する可能性がある。フリーブロックが枯渇した場合は、以下に示すNANDメモリ20の整理によってフリーブロックを新たに確保することができる。
ユーザデータがクラスタ管理とトラック管理のどちらの管理方式で管理されるかは、ホスト100からの書き込みパターンに依存する。例えば、ホスト100からSSD10へトラックサイズ以上のサイズのシーケンシャル書き込みが行われた場合は、書き込みデータはトラックサイズより大きい連続したLBA領域に分布するため、トラック管理されることになる。一方、例えば、ホスト100からSSD10へクラスタサイズのランダム書き込みが行われた場合は、書き込みデータはそれぞれ異なるトラックに属する不連続なLBA領域に分布するため、クラスタ管理されることになる。
つぎに、図17を用いてSSD10におけるNAND整理を説明する。物理ブロックに記憶されている全てのクラスタが有効クラスタであるとは限らず、有効クラスタに該当しない無効クラスタはLBAに対応付けられていない。有効クラスタとは最新のデータを記憶しているクラスタであり、無効クラスタとは同一LBAのデータが他の場所に書きこまれ、参照されることがなくなったクラスタである。物理ブロックは無効クラスタの分だけデータに空きがあることになり、有効クラスタのデータを集めて違うブロックに書き直すNAND整理を実行することでフリーブロックを確保することができる。
まず、物理ブロックIDi=0にし、空き領域累積量S=0にする(ステップS160)。メモリコントローラ50は、このIDがi=0の物理ブロックがトラックテーブル23にエントリされているか否かを判定する(ステップS161)。トラックテーブルにエントリされている場合はiを+1し(ステップS162)、つぎの番号のIDを持つ物理ブロックについて同様の判定を行う(ステップS161)。すなわち、物理ブロックIDがトラックテーブル23に含まれている場合は、この物理ブロックのデータはトラック管理であるため、NAND整理対象に含めない。
メモリコントローラ50は、ID=iの物理ブロックがトラック管理でない場合は(ステップS161:No)、つぎにクラスタテーブル24を参照し、ID=iの物理ブロックに含まれる有効クラスタのアドレスを全て取得する(ステップS163)。そして、メモリコントローラ50は、取得した有効クラスタの総容量分のサイズvを求め(ステップS164)、v<物理ブロックサイズであるときは(ステップS165)、現在物理ブロックのIDをNAND整理対象ブロックリストに加える(ステップS166)。さらに、メモリコントローラ50は、取得クラスタ累計量Sに現在物理ブロックの取得クラスタ容量vを加算し、取得クラスタ累計量Sを更新する(ステップS167)。
ステップS165で、v<物理ブロックサイズでないとき、あるいはステップS168で取得クラスタ累計量Sが物理ブロックサイズに到達していない場合は、メモリコントローラ50は、iを+1し(ステップS162)、つぎの番号のIDを持つ物理ブロックについて、ステップS161〜S167の手順を前記同様に実行する。そして、ステップS168で、取得クラスタ累計量Sが物理ブロックサイズに到達するまで、ステップS161〜S167の手順を繰り返す。
そして、ステップS168において、取得クラスタ累計量Sが物理ブロックサイズに到達した場合は、メモリコントローラ50は、NAND整理対象ブロックリスト上の全物理ブロックについての全有効クラスタのデータをNANDメモリ20から読み出してRAM40に書き込み(ステップS169)、さらに、NAND整理対象ブロックリスト上の全物理ブロックに対して消去処理を行い(ステップS170)、消去処理を行った全物理ブロックをアクティブブロックテーブル22から削除してフリーブロックテーブル21に追加する(その際、消去回数をインクリメントする、ステップS171)。そして、メモリコントローラ50は、フリーブロックテーブル21から新たなフリーブロックを取得し、取得したフリーブロックに対しRAM40に書き込んだデータを書き込み(ステップS172)、データを書き込んだフリーブロックの物理ブロックID及び当該ブロックの消去回数をアクティブブロックテーブル22に追加し、さらにデータが書き込まれたブロックのブロックIDをフリーブロックテーブル21から削除する(ステップS173)。さらに、メモリコントローラ50は、今回のNAND整理に対応するように、クラスタテーブル24におけるクラスタアドレス、物理ブロックID及び物理ブロック内ページアドレスを更新する(ステップS174)。
なお、図17の手順では、フリーブロックにデータを詰め込むことを優先するNAND整理を行ったが、ステップS164で、vを物理ブロックサイズから取得したクラスタの容量を減算することによって求め、ステップS165でv>0か否かを判定し、v>0の場合はステップS168に移行し、v>0でない場合はステップS162に移行させるようにすることで、フリーブロックを確保することを優先するNAND整理を行うようにしてもよい。
このように、NAND整理はNANDメモリ20の物理ブロックの読み出し動作、書き込み動作及び消去動作を多く伴うため、多くの時間を要する。よって、フリーブロックが枯渇した状況で書き込みを行うとNAND整理が発生し、ホスト100からみた書き込み処理速度が低下する。このように、SSDの内部状態は時々刻々と変化し、外部からのアクセスに対して非常にナイーブである。
つぎに、図18を用いてSSD10における削除通知について説明する。削除通知は、ホスト100上のOS150でデータの削除が行われた場合に、ホスト100から外部記憶装置に対して送信される命令である。削除通知の例として、例えば、INCITS ATA/ATAPI Command Set−2(ACS−2)で記述されているData Set Management Command(通称トリム(TRIM)コマンド)があげられる。これは、OS150上でデータが削除された場合、削除されたデータの存在する論理アドレス領域(LBA領域)を、LBA及びセクタ数の組みよりなるLBA Range Entryとして外部記憶装置に通知することにより、以後外部記憶装置上でもその領域を空き領域として扱うことができる方式である。削除通知により、SSD10はフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、Data Set Management Commandだけでなく、たとえば、INCITS ACS−2で記述されているSCT Command Transportや、その他ベンダー独自のコマンドなどその他コマンドによって実現してもよい。
SSD10がホスト100から削除通知を受信した場合は(ステップS180)、メモリコントローラ50は、削除通知に含まれるLBAを先の図12に示した手順に従ってLBA正引き変換する。メモリコントローラ50は、削除通知に含まれるLBAがトラック管理である場合は(ステップS181:Yes)、物理ブロックIDをフリーブロックテーブル21に追加してアクティブブロックテーブル22から削除する(ステップS184)。一方、メモリコントローラ50は、削除通知に含まれるLBAがクラスタ管理である場合は(ステップS181:No)、物理ブロックに対応する全クラスタをクラスタテーブル24から削除し(ステップS182)、トラックテーブル23において、LBAに対応するトラックに対応する物理ブロックIDに適当な有効値(例えばFFFF)を記入し(ステップS183)、物理ブロックIDをフリーブロックテーブル21に追加してアクティブブロックテーブル22から削除する(ステップS184)。SSD10では、NAND整理以外に、削除通知処理によってもフリーブロックを確保することができる。
次にSSD10の性能低下について説明する。図19はSSD10の性能低下についての概念図である。まずは書き込み動作の性能低下について述べる(図19の実線)。工場出荷直後はSSD10に何もデータが書かれておらず、全LBAが未書き込み状態であり、ほとんどすべての物理ブロックがフリーブロックとなっている。このようなときには、ホスト100からSSD10に書き込み命令があると、メモリコントローラ50は即座にフリーブロックに対してデータを書き込むことができる。一方、ユーザがSSD10を使用していくにつれて書き込み量が増大し、フリーブロック数が減少する。特に、トラックサイズ未満の書き込みが大量にあった場合、データはクラスタ単位で管理され、クラスタ単位の書き込み一つに対してクラスタよりも容量の大きい物理ブロックが割り当てられることになる。このため、クラスタ管理下では、書き込まれるデータ容量よりも多くのNANDメモリ20物理ブロックを必要とすることになり、それによりフリーブロックが枯渇していく。フリーブロック残量が少なくなるにつれ、NAND整理の発生する確率が増大し、さらに、SSD10に保存されているユーザデータが増えるにつれ、NAND整理時に、一つのフリーブロックを確保するために読み出さなければいけないアクティブブロックの数が増えることになるので、NAND整理に要する時間も増大する。
書き込みに要する時間は、おおまかに、
書き込み時間=物理ブロックへの書き込み時間+NAND整理発生確率×NAND整理時間
と現される(実際にはこのほかに管理テーブル処理時間なども加わる)。累積書き込みデータ量が増えるにつれて、NAND整理発生確率とNAND整理時間の両方が増大することになるため、書き込み性能は加速的に低下する。一方、書き込み性能低下状態において、例えばシーケンシャル書き込みを行うと、トラック管理のデータの比率が増えることでフリーブロックの量が増えるので、書き込み性能が回復する。また、書き込み性能低下状態において、未書き込み状態でないLBA領域に対して削除通知を行うと、未書き込み状態でないLBA領域に対応するアクティブブロックが解放されてフリーブロックになるので、書き込み性能が回復する。
図20は、SSD10がホスト100からのアクセス頻度が少ないときに自ら行うNAND整理手順を示すものである。SSD10が一定時間(例えば10秒)以上ホスト100からコマンドを受信していない場合(アイドル時)、あるいはSSD10が一定時間以上ホスト100からNANDメモリ20へのアクセスが必要なコマンド(メディアアクセスコマンド)を受信していない場合に(ステップS190)、NAND整理を行うことによって(ステップS191)、事前にフリーブロックが確保され、これによって書き込み性能の劣化を防ぐことができる(自動NAND整理)。自動NAND整理の発生頻度を上げることでより効果的に性能劣化を防ぐことができるが、一方でNANDメモリ20の消去回数が増えることになり、SSD10の信頼性の劣化要因になるので、性能と信頼性のトレードオフの関係の中でNAND整理開始までの時間を適切に調整する必要がある。
次に、読み出し動作の性能低下について述べる(図19の破線)。トラック管理のユーザデータを読み出す場合は、トラックテーブル23を検索して正引き変換すればよく、検索対象の要素数は高々、全容量÷トラックサイズである。一方、クラスタ管理のユーザデータの場合、トラックテーブル23の検索に加えて、クラスタテーブル24も検索対象としなければならず、検索対象の要素数は最大、全容量÷クラスタサイズである。クラスタサイズはトラックサイズよりも大幅に小さいのが通常であるため、クラスタテーブル24の検索対象要素数はトラックテーブルの検索対象要素数より大幅に多く、検索時間が大幅に増大する。それにより、読み出しにかかる時間が増大する。例えば、1トラックを4096個のクラスタより構成したした場合、クラスタテーブル24の要素数はトラックテーブル23の要素数の4096倍である。以上のように、SSD10に対するクラスタ管理のデータ書き込みが増大するにつれ、読み出し性能は低下する。一方、読み出し性能低下状態において、例えばシーケンシャル書き込みを行うと、トラック管理のデータが増えるため、読み出し性能は回復する。
図21は、比較例として示す一般的な読み出し動作についての性能試験の一例である。読み出し性能試験においては、ホスト100は、テスト対象LBA領域に対し読み出し用のテストデータパターンをシーケンシャル書き込みし、この書き込み後、開始時刻を計測し、計測した開始時刻をホスト100の主メモリ202に保持する。さらに、ホスト100は、テスト対象LBA領域に対するテスト用読み出し命令をSSD10に送信することで、書き込みパターンをSSD10で読み出させ、読み出されたデータを受信することで、読み出しを終了する。そして、読み出し終了した時刻を計測し、計測した終了時刻をホスト100の主メモリ202に保持する。その後、CPU200が終了時刻から開始時刻を減算することでテスト時間を求め、さらにテスト用読み出しデータ量をテスト時間で除算し、これを読み出し転送データレートとする。
図22は、比較例として示す一般的な書き込み動作についての性能試験の一例である。書き込み性能試験においては、テスト対象LBA領域に対しテストデータパターンをシーケンシャル書き込みし(書かない試験もある)、この書き込み後、開始時刻を計測し、計測した開始時刻をホスト100の主メモリ202に保持する。さらに、ホスト100は、テスト対象LBA領域に対するテスト用書き込み命令をSSD10に送信することで、書き込みパターンをSSD10で書き込ませ、SSD10から書き込み終了通知を受信することで、書き込みを終了する。そして、書き込み終了した時刻を計測し、計測した終了時刻をホスト100の主メモリ202に保持する。その後、CPU200が終了時刻から開始時刻を減算することでテスト時間を求め、さらにテスト用書き込みデータ量をテスト時間で除算し、これを書き込み転送データレートとする。
このように、上記の性能測定では、SSD10に対する多量の書き込みが発生してしまい、測定そのものがSSDの内部状態に影響を与えてしまうため、測定により内部状態がユーザの実使用時の内部状態からかけ離れてしまい、測定結果がユーザの体感速度から乖離してしまう。例えば、性能測定によってシーケンシャル書き込みのアクセスがホスト100からSSD10に対して発生することで、SSD10の管理情報が書き換わり、クラスタ管理のデータがトラック管理になったり、フリーブロックが減少したりし、書き込み測定・読み出し測定の双方において最終的に計算されたSSDの性能は、測定前の状態の性能であるユーザの実際に体感した性能から乖離する。実際、多くの性能測定ツールにおいては、各種測定でSSDに対して数ギガバイト以上のデータ量でシーケンシャル書き込みが行われる仕様となっており、これらのツールより測定される性能はユーザの体感する性能から大きく乖離する。
以下、本実施の形態の要部について説明する。本実施の形態では、図2に示した主メモリ202上の性能評価ツール110を用いて性能測定が行われる。性能評価ツール110は、前述したように、アクセス情報取得ツール111及び性能情報取得ツール112を備える。性能評価ツール110は、図8に示したように、OS150と情報を授受し、またハードウェアとの命令、応答、データのやり取りにはOS150を経由する点においては、一般的なソフトウェア140と同じである。一方、本実施形態の性能評価ツール110は、図23に示すように、性能評価ツール110以外のソフトウェア140がOS150を経由してSSD10とコマンド(命令、応答、データ)の授受を行った時、少なくとも命令、応答のログをOSから受け取る。勿論、命令、応答及びデータのログを受け取るようにしてもよい。
さらに、性能評価ツール110は、OS150自身の要求によりOS150がSSD10とコマンド(命令、応答、データ)の授受を行った時、命令、応答のログをOS150から受け取る。勿論、命令、応答及びデータのログを受け取るようにしてもよい。
また、性能評価ツール110は、性能評価ツール110自身がOS150を経由してSSD10と命令、応答、データの授受を行った時、命令、応答のログをOS150から受け取ってもよいが(勿論、命令、応答、データのログを受け取るようにしてもよい)、本実施の形態では、簡略化のため、性能評価ツール110自身とSSD10との命令、応答、データのやりとりのログはOS150から取得しないことにする。
OS150またはソフトウェア140がSSD10とアクセスしたときに、このアクセスの際のコマンドのログをOS150またはソフトウェア140からOS150を介して受け取るのは、性能評価ツール110のアクセス情報取得ツール111が実行する。性能評価ツール110のアクセス情報取得ツール111が受け取るアクセスログには、図24に示すように、時刻情報(粗時刻情報、詳細時刻情報を含む)、コマンド方向情報、スレッド識別情報(キューID)、コマンド内容情報、データ長情報、LBA情報などを含む。
時刻情報(粗時刻情報)は、SSD10との命令、応答、データのやりとりの行われた時刻を、例えば秒単位の粒度で取得したものである。時刻はOS150により取得されるが、BIOSなどから取得してもよい。やりとりの行われた時刻の代わりに、このログの受け渡しが行われた時刻を用いても良い。
時刻情報(詳細時刻情報)は、SSD10との命令・応答・データのやりとりの行われた時刻を秒未満の粒度である例えばμsec単位で取得したものである。この時刻もOS150により取得されるが、BIOSなどから取得してもよい。やりとりの行われた時刻の代わりに、このログの受け渡しが行われた時刻を用いても良い。秒単位以上の桁は切り捨てられる。切り捨てを行わず時刻をすべてμsec単位で管理し、粗時刻情報の項目を省略してもよい。
コマンド方向情報は、SSD10に対する命令(要求送信)か、SSD10からの応答(完了通知)かについての情報である。例えば、SATA規格の場合、INCITS ACS−2記載の60h READ FPDMA QUEUEDコマンドにおいて、60h READ FPDMA QUEUEDコマンドのRegister Host to Device(RegHD)がホスト100からSSD10に送信されたとき、命令(要求送信)としてログをOS150から受け取り、60h READ FPDMA QUEUEDコマンドのSet Device Bits(SDB)をSSD10から受信した時、同コマンドが完了したとして完了通知のログをOS150から受け取る。また、SATA規格の61h WRITE FPDMA QUEUEDコマンドにおいて、61h WRITE FPDMA QUEUEDコマンドのRegHDがホスト100からSSD10に送信されたとき、命令(要求送信)としてログをOS150から受け取り、61h WRITE FPDMA QUEUEDコマンドのSDBをSSD10から受信した時、同コマンドが完了したとして完了通知のログをOS150から受け取る。コマンドが終了しない異常時を除けば、コマンドは命令(要求送信)と応答(完了通知)の対を必ず持つことになり、要求送信がコマンド開始、応答(完了通知)がコマンド終了を示し、これらの差分がコマンド実行に要した時間となる。
スレッド識別情報(キューID)は、SSD10に対する要求が複数スレッドで行われる場合は、それぞれのスレッドを区別するIDである。このスレッドはOS150上で管理されるスレッドでもよいし、SSD10とのインターフェース上で管理されるスレッドでもよい。SSD10とのインターフェースインターフェース上で管理されるスレッドには、例えばSATA規格のNative Command Queuing(NCQ)があり、この場合のキューIDは0から31までが割り振られる。
コマンド内容情報は、例えば、書き込み(Write)か、読み出し(Read)かを識別する情報である。なお、例えばSATA規格の場合、INCITS ACS−2記載の60h READ FPDMA QUEUEDや25h READ DMA EXTやC8h READ DMAなどのように読み出しコマンドや書き込みコマンドの情報をさらに細かく分類してもよい。本実施の形態では、簡単化のため、書き込み(Write)か、読み出し(Read)かの粒度で情報を取得することにする。書き込みや読み出し以外のコマンドのログを取得してもよいが、本実施の形態では書き込みと読み出しのコマンドのみログを取得することにする。完了通知の場合は、無効値(NULL)が記入される。
データ長情報は、コマンドで指定された先頭LBAからどれだけの長さを読み出す(あるいは書き込む)かを指定する情報である。SATA規格におけるセクタカウントに相当する。例えば、LBA=0hに対する書き込みコマンドでデータ長が8h セクタである場合は、LBA=0hからLBA=7hにわたる連続した領域が書き込み対象となり、かつその書き込みデータ量は8h セクタ=4KiBである。完了通知の場合は、無効値(NULL)が記入される。
LBA情報は、コマンドで指定された先頭LBAの情報である。
性能評価ツール110のアクセス情報取得ツール111がOS150から受け取ったアクセスログは、図2に示す主メモリ202上のアクセスログテーブル120に逐次蓄えられていく(追記形式)。アクセスログテーブル120は、例えば図24に示すような形式を有し、時刻情報(粗時刻情報、詳細時刻情報を含む)、コマンド方向情報、スレッド識別情報(キューID)、コマンド内容情報、データ長情報、LBA情報などを含んでいる。なお、アクセスログテーブル120は、図25に示すように、要求送信ログと完了通知ログの2つに分けられたログから構成されてもよい。図25では、LBA情報を省略している。
図26、図27に、アクセス情報取得ツール111によるアクセスログテーブル120へのログ追記の手順を示す。アクセス情報取得ツール111は、読み出しコマンドまたは書き込みコマンドがSSD10に送信されたことを検出すると(図26:ステップS201)、このコマンドに対応するアクセスログをアクセスログテーブル120に追記する(ステップS202)。また、アクセス情報取得ツール111は、読み出しコマンドに対する応答または書き込みコマンドに対する応答がSSD10から受信されたことを検出すると(図27:ステップS211)、このコマンド応答に対応するアクセスログをアクセスログテーブル120に追記する(ステップS212)。
アクセスログテーブル120に記憶されたアクセスログは、性能評価ツール110の性能情報取得ツール112によって性能ログ情報に変換され、図2に示す主メモリ202上に保持された性能ログテーブル125に追記されていく。性能ログ情報は定期的に(例えば10秒ごと)計算され、所定周期の性能情報として性能ログテーブル125に追記される。図28は、性能ログテーブル125の一例を示すものであり、記録要素として、時刻情報、総転送データレート、読み出し転送データレート、 書き込み転送データレートなどを含む。図28では、転送データレートを記録しているが、前述した処理コマンドレート、応答時間、処理時間、相対スコアなど他の性能を記録してもよい。
時刻情報は、この場合は秒単位以上で管理しており、アクセスログテーブル120に含まれる性能計算対象のコマンド群のうち、最後に完了したコマンドの完了時刻を用いている。この時刻情報として、秒単位未満で管理するようにしてもよい。最後に完了したコマンドの完了時刻の代わりに、最初に命令要求が送信されたコマンドの命令要求時刻でもよいし、性能計算対象の時間範囲の始端または末端の時刻を用いても良い。
総転送データレート(MiB/s)は、SSD10からホスト100に読み出し完了したデータ、及びホスト100からSSD10に書き込み完了したデータに関する転送データレートのことである。図28では、単位は1秒あたりに転送されるデータ量(単位:MiB)を示すMiB/sとしている。性能計算対象期間でデータの授受が一切行われなかった場合は、無効値(NULL)を記入するか、あるいは当該行を追加しない。
読み出し転送データレート(MiB/s)は、SSD10からホスト100に読み出し完了したデータに関する転送データレートのことである。図28では、単位は1秒あたりに転送されるデータ量(単位:MiB)を示すMiB/sとしている。性能計算対象期間でデータ読み出しが一切完了しなかった場合は、無効値(NULL)を記入する。
書き込み転送データレート(MiB/s)は、ホスト100からSSD10に書き込み完了したデータに関する転送データレートのことである。図28では、単位は1秒あたりに転送されるデータ量(単位:MiB)を示すMiB/sとしている。性能計算対象期間でデータ書き込みが一切完了しなかった場合は、無効値(NULL)を記入する。
性能情報取得ツール112によって行われるアクセスログから性能ログへの変換は、図29、図30に示すような手順で実行される。なお、図29、図30に示す手順のいずれか一方を採用することにしてもよいし、図29及び図30に示す手順の両方を実行するようにしてもよい。
図29に示す手順では、性能情報取得ツール112は、所定の性能計算周期毎に、アクセスログテーブル120に記憶されたアクセスログを用いて性能を計算し、計算した性能を性能ログテーブル125に追記する。すなわち、性能情報取得ツール112は、所定の性能計算周期(例えば10秒)が経過すると(ステップS220)、アクセスログテーブル120に記憶されたアクセスログを用いて、時刻情報、総転送データレート、読み出し転送データレート、書き込み転送データレートなどの性能ログ情報を計算し(ステップS221)、計算した性能ログ情報を性能ログテーブル125に追記し(ステップS222)、性能ログに追記が完了すると、性能の計算に用いられたアクセスログをアクセスログテーブル120から消去する(ステップS223)。
図30に示す手順では、アクセスログテーブル120のサイズの上限値が決めており、性能情報取得ツール112は、アクセスログテーブル120のサイズが上限値に到達した場合に、アクセスログテーブル120に記憶されたアクセスログを用いて性能を計算し、計算した性能を性能ログテーブル125に追記する。すなわち、性能情報取得ツール112は、アクセスログテーブル120のサイズが上限値に到達すると(ステップS230)、アクセスログテーブル120に記憶されたログを用いて、時刻情報、総転送データレート、読み出し転送データレート、 書き込み転送データレートなどの性能ログ情報を計算し(ステップS231)、計算した性能ログ情報を性能ログテーブル125に追記し(ステップS232)、性能ログに追記が完了すると、性能の計算に用いられたアクセスログをアクセスログテーブル120から消去する(ステップS233)。
図29、図30のどちらの手順の場合においても、性能の計算に用いられたコマンドはアクセスログテーブル120から消去されるため、データサイズの大きなアクセスログテーブル120は、データサイズの小さな性能ログテーブル125に順次変換されていくことになる。
なお、図29及び図30に示す手順を併用する場合は、アクセスログテーブル120のサイズの上限値に達するまでは、所定の性能計算周期毎に性能ログを計算し、アクセスログテーブル120のサイズの上限値に達した時点で、アクセスログテーブル120に記録されている全てのアクセスログを用いて性能ログを計算し、この時点で初めてアクセスログテーブル120に記録されているアクセスログを消去するといった手法を採用することが可能である。また、アクセスログの消去は、アクセスログテーブル120の要素全てではなく、アクセスログ120の一部についてのみ行うようにしてもよく、その場合、たとえばアクセスログ120の時刻が古い要素から順次消去していくことが望ましい。
このようにして性能ログテーブル125に記録された性能ログは、性能情報取得ツール112によって監視されている。図31は、性能ログテーブル125の監視手順を示すものである。性能情報取得ツール112は、性能ログテーブル125が更新されたか否かを判定しており(ステップS240)、性能ログテーブル125が更新されると、性能ログテーブル125の記憶内容をディスプレイ133に表示する(ステップS241)。図32は、ディスプレイ133上に表示される性能ログ情報の一例を示すもので、この場合は、総転送データレートが時刻を横軸にして、リアルタイムで表示されている。SSD10に対し読み書きアクセスが無い期間が一定以上の期間存在する場合は、図33のように、当該期間のグラフを非表示にするか、アクセスがないことが明らかに判るように表示することが望ましい。
つぎに、性能情報取得ツール112によって行われるアクセスログから性能ログへの変換について詳細に説明する。ここでは総転送データレートを計算する場合を示す。読み出し転送データレートの場合は読み出しコマンドについてのみ考えればよく、書き込み転送データレートの場合は書き込みコマンドについてのみ考えればよい。図34に示すように、SSD10へのアクセスは複数スレッドで行われることが多い。図34の場合は、最大の32スレッドの場合を示している。
図34において、クロスハッチングが付された横棒及びハッチングが付された横棒が各種スレッドにおけるコマンドのアクティブ状態を示しており、横棒の左端はコマンドの開始時刻、横棒の右端はコマンドの終了時刻を示す。例えば、SATA規格におけるNative Command Queuing(NCQ)のReadコマンドであるFirst Party DMA Read(fp DMA Read)コマンドの場合は、図35に示すように、コマンドの開始時刻は該コマンドにおけるRegister Host to DeviceのFrame Instruction Structure(FIS)がホスト100からSSD10に送信された時刻であり、コマンドの終了時刻はSet Device BitのFISをホスト100がSSD10から受信完了した時刻である。
また、NCQのWriteコマンドであるFirst Party DMA Read(fp DMA Write)コマンドの場合は、図36に示すように、コマンドの開始時刻は、該コマンドにおけるRegister Host to DeviceのFISがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻はSet Device BitのFISをホスト100がSSD10から受信完了した時刻である。
NCQに該当しないコマンドについても本発明は適用可能であり、例えば、DMA Readコマンドの場合は、図37に示すように、コマンドの開始時刻は、該コマンドにおけるRegister Host to DeviceのFISがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻は、Register Device to Hostをホスト100がSSD10から受信完了した時刻である。
また、NCQに該当しないWriteコマンドであるDMA Writeコマンドの場合は、図38に示すように、コマンドの開始時刻は該コマンドにおけるRegister Host to DeviceのFISがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻はRegister Device to HostのFISをホスト100がSSD10から受信完了した時刻である。また、本実施形態ではSATAの場合について述べるが、本発明がSASやUSBなど他のインターフェースにも適用できるのはもちろんである。
図34において、時刻t0、t1、t2、t3は性能情報が計算される時刻を示している。全てのコマンドが性能情報が計算されるまでに全て完了しているとは限らず、ハッチングが付された横棒のように、時刻t0、t1、t2、t3でそれぞれ区切られる各時間領域Δt1、Δt2、Δt3、Δt4をまたがっているコマンドも中には存在する。また、各時間領域Δt1、Δt2、Δt3、Δt4内で、常にSSD10へのコマンドがアクティブであるとは限らない。コマンドがアクティブであるとは、SSD10でコマンドが実行中であることをいう。コマンドが非アクティブである期間とは、ホスト100のCPU200が演算待ちであったり、ユーザの操作待ちであったりする期間などである。
図39は、性能情報としての転送データレートの計算手順の一例を示すものである。この手順では、複数のスレッドを総合的に判断して転送データレートを計算する。また、この手順では、時刻tn-1から時刻tnの間の転送データレートの計算手順を示しており、このような手順が性能計算周期毎に繰り返される。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出す(ステップS250)。性能情報取得ツール112は、アクセスログテーブル120に記録された時刻情報をもとに、時刻tn-1から時刻tnの間で、SSD10に対する何れのコマンドもアクティブでない時間(コマンド非アクティブ時間)の合計δnを取得する(ステップS251)。以下、δnを非アクティブ合計時間という。図34に示す例では、時刻t0から時刻t1の間では、全ての時間において、複数のスレッドの中のいずれかのスレッドでコマンドがアクティブになっており、δn=0である。時刻t1から時刻t2の間では、コマンド非アクティブ時間としてδaが存在し、δn=δaである。時刻t2から時刻t3の間では、コマンド非アクティブ時間としてδb、δcが存在し、δn=δb+δcである。
次に、性能情報取得ツール112は、性能測定対象期間の終了時刻tnから性能測定対象期間の開始時刻tn-1を減算し、性能測定対象期間Δtnを求める。さらに、性能情報取得ツール112は、性能測定対象期間Δtnから非アクティブ合計時間δnを減算し、実効性能測定対象期間Δtn´(=Δtn−δn)を求める(ステップS252)。非アクティブ合計時間δnを減算することによって、ホスト100においてCPU200の演算時間やユーザの応答待ちなど、SSD10以外の要因を性能測定から除外することができる。
つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn-1から時刻tnの間に開始してかつ完了したコマンドのリストを取得して、それらのデータ長を加算することでデータ量合計(=S0)を計算する(ステップS253)。また、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、前周期である時刻tn-2から時刻tn-1の間に開始して、現周期である時刻tn-1から時刻tnの間に完了したコマンドのリストを取得して、それぞれのコマンドのデータ量に対し、
寄与度=コマンドが時刻tn-1から時刻tnの間にアクティブな時間/コマンドが時刻tn-2から時刻tnの間のアクティブな時間
で定義される寄与度をかけたものの合計(=S1)を計算する(ステップS254)。
図40は、2つの周期(t0〜t1、t1〜t2)に跨るコマンドを示すもので、Bはコマンドが時刻t0から時刻t1の間にアクティブな時間であり、Cはコマンドが時刻t1から時刻t2の間にアクティブな時間であり、Aはコマンドが時刻t0から時刻t2の間にアクティブな時間である。このコマンドについての時刻t0から時刻t1の期間の寄与度はB/Aとなり、時刻t1から時刻t2の期間の寄与度はC/Aとなる。このように、コマンドの全データ量に対し各周期内のアクティブ時間を用いて比例配分を行うことで、前周期に開始されて現周期に終了したコマンドについての現周期分のデータ量を導出する。
つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、現周期である時刻tn-1から時刻tnの間に開始して、次周期である時刻tnから時刻tn+1の間に完了したコマンドのリストを取得して、それぞれのコマンドのデータ量に対し、前述した寄与度をかけたものの合計(=S2)を計算する(ステップS255)。
さらに、性能情報取得ツール112は、下式にしたがって転送データレートを計算する(ステップS256)。
転送データレート=(S0+S1+S2)/Δtn´
なお、図39の手順では、性能測定対象期間(tn-1〜tn)の前後の一周期(tn-2〜tn-1、tn〜tn+1)を参照して転送データレートを計算するようにしたが、性能測定対象期間(tn-1〜tn)に終了するコマンドが、性能測定対象期間のn周期前に開始されている場合は(nは自然数)、図40に示したものと同様の比例配分を行って、性能測定対象期間(tn-1〜tn)からn周期前までを参照して転送データレートを計算するようにしてもよい。同様に、性能測定対象期間(tn-1〜tn)に開始されるコマンドが、性能測定対象期間のn周期後に終了している場合は(nは自然数)、性能測定対象期間(tn-1〜tn)からn周期後までを参照して転送データレートを計算するようにしてもよい。
図41は、性能情報としての処理コマンドレートの計算手順の一例を示すものである。処理コマンドレートは、前述したように、単位時間あたりにSSD10との間で授受された命令数である。図41の処理内容は、図39に示した転送データレートの計算における1つのコマンドのデータ量を1とした場合に等しい。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出す(ステップS260)。性能情報取得ツール112は、アクセスログテーブル120に記録された時刻情報をもとに、時刻tn-1から時刻tnの間で、SSD10に対する何れのコマンドもアクティブでない時間(コマンド非アクティブ時間)の合計δnを取得する(ステップS261)。
次に、性能情報取得ツール112は、性能測定対象期間の終了時刻tnから性能測定対象期間の開始時刻tn-1を減算し、性能測定対象期間Δtnを求める。さらに、性能情報取得ツール112は、性能測定対象期間Δtnから非アクティブ合計時間δnを減算し、実効性能測定対象期間Δtn´(=Δtn−δn)を求める(ステップS262)。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn-1から時刻tnの間に開始してかつ完了したコマンドのリストを取得して、それらのコマンドの個数を求めることでコマンド数(=S0)を計算する(ステップS263)。また、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、前周期である時刻tn-2から時刻tn-1の間に開始して、現周期である時刻tn-1から時刻tnの間に完了したコマンドのリストを取得して、前述と同様にしてそれぞれのコマンドの現周期に対する寄与度を計算し、寄与度の合計(=S1)を計算する(ステップS264)。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、現周期である時刻tn-1から時刻tnの間に開始して、次周期である時刻tnから時刻tn+1の間に完了したコマンドについても同様の計算を行って寄与度の合計(=S2)を計算する(ステップS265)。さらに、性能情報取得ツール112は、下式にしたがって処理コマンドレートを計算する(ステップS266)。
処理コマンドレート=(S0+S1+S2)/Δtn´
図42は、性能情報としての平均応答時間の計算手順の一例を示すものである。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出す(ステップS270)。性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn-1から時刻tnの間の性能測定対象期間に完了したコマンド数(=D)を取得し(ステップS271)、時刻tn-1から時刻tnの間に完了したコマンドのアクティブな時間合計(=S)を計算し(ステップS272)、SをDで除算することで平均応答時間を導出する(ステップS273)。
他の性能情報として、最大応答時間を採用する場合は、性能情報取得ツール112がアクセスログテーブル120を参照して、時刻tn-1から時刻tnの間に完了したコマンドのアクティブな時間の最大値を取得することで得られる。また、アプリケーション処理時間は、コマンド応答時間の計算において、コマンドのかわりにアプリケーションまたはアプリケーションの各種スレッドのアクティブな時間を用いることで計算することができる。アプリケーション処理時間の計算においては、たとえばCPUの処理待ちやユーザからの入力待ちなどでSSDへのアクセスが発生していない場合は、アプリケーションの動作時間からSSDへのアクセスが発生していない時間を減算し、これをアプリケーション処理時間とすることが望ましい。また、相対スコアは上述した各種スコアの結果または、各種スコアの計算過程における各種パラメータを加算・減算・乗算・除算することによって得られる。
前述したように、性能ログはホスト100の主メモリ202上に追記されていくが、主メモリ202上に保持しているだけでは、ホスト100の電源がオフになるとその情報が消えてしまう。そこで、図43に示すように、性能情報取得ツール112が性能ログのサイズがある規定値に達したか否かを判定し(ステップS280)、性能ログのサイズがある規定値に達した場合、性能ログをSSD10やその他の外部記憶装置(HDDやUSBメモリなど)に記録し(ステップS281)、その後、主メモリ202上に保持している性能ログを削除する(ステップS282)。なお、性能ログをSSD10に記録した後、主メモリ202上に保持している性能ログをそのまま保持するようにしてもよい。ホスト100の電源がオフになり、その後ONになった場合は、性能評価ツール110がSSD10やその他の外部記憶装置に保存された性能ログを再度主メモリ202に読み出せばよい。
また、図44に示すように、性能情報取得ツール112は、性能ログを前回保存してから一定時間(例えば10分)経過したか否かを判定し(ステップS290)、一定時間が経過した時、性能ログをSSD10やその他の外部記憶装置(HDDやUSBメモリなど)に記録し(ステップS291)、その後、主メモリ202上に保持している性能ログを削除するようにしてもよい(ステップS292)。この場合も、性能ログをSSD10に記録した後、主メモリ202上に保持している性能ログをそのまま保持するようにしてもよい。
ところで、図39に示した性能計算手順では、全てのスレッド(ATA規格のNCQにおけるタグや、OS内部のスレッドなど)を総合した性能計算を行ったが、性能情報を各スレッドごとに計算してもよい。特に、一部のSSDのようにNANDメモリ20へのアクセスを各スレッドごとに独立に制御できる場合は、スレッドごとの性能情報も取得することがより望ましい。以下では、スレッド毎の性能情報として、スレッド毎の総転送データレートを計算する場合を示すが、性能情報として、読み出しの転送データレート、書き込みの転送データレート、処理コマンドレート、応答時間、処理時間、相対スコアなどの他の性能指標を取得してもよい。
図45は、ATA規格のNCQにおいて、各タグ毎の性能情報を計算する場合の例である。一般的には、NCQだけでなく、OS150におけるスレッド番号毎の性能情報、その他インターフェース規格におけるスレッドごとの性能情報のような、スレッド毎の性能情報を取得するようにしてもよい。図45において、Q0はATA規格のNCQにおけるタグ番号=0に、Q1はタグ番号=1に、…、Q31はタグ番号=31に対応し、スレッド(キュー)は合計で31個存在する。クロスハッチングが付された横棒及びハッチングが付された横棒は、図34と同様、スレッドにおけるコマンドがアクティブな状態を示し、横棒の左端はコマンドの開始時刻(例えば、コマンドのRegHDが送信された時刻)、横棒の右端はコマンドの終了時刻を示す(例えば、コマンドのSDBを受信した時刻)。時刻t0、t1、t2、t3は性能情報が計算される時間である。ハッチングが付された横棒は、時刻t0、t1、t2、t3でそれぞれ区切られる時間領域をまたがっているコマンドを示している。また、前述したように、各時間領域Δt1、Δt2、Δt3、Δt4内で、常にSSD10へのコマンドがアクティブであるとは限らず、ホスト100のCPU200が演算待ちであったり、ユーザの操作待ちであったりするコマンドが非アクティブである期間δが存在する。
先の図39などに示した手順では、全てのスレッドを総合的に判断した性能計算を行うために、非アクティブ期間は、複数のスレッド中でSSD10に対する何れのコマンドもアクティブでない期間とした(図34のδa、δb、δc参照)。これに対し、スレッド毎の性能情報を各別に計算する場合は、図45に示すように、横棒が存在しない期間は、全て、コマンドが実行中でない、非アクティブ期間δ(δ1、δ2、…)となる。したがって、例えば、スレッドQ0の時刻t0〜時刻t1の期間の実効性能測定対象期間Δtn´は、Δt1−δ1を計算することによって求めることができる。また、スレッドQ1の時刻t0〜時刻t1の期間の実効性能測定対象期間Δtn´は、Δt1−(δ2+δ3)を計算することによって求めることができる。また、スレッドQ5の時刻t0〜時刻t1の期間の実効性能測定対象期間Δtn´は、Δt1−(δ4+δ5+δ6)を計算することによって求めることができる。
つぎに、先の図39を参照して、性能情報として転送データレートを計算する場合の手順を説明する。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出す(ステップS250)。性能情報取得ツール112は、アクセスログテーブル120に記録された時刻情報をもとに、ある一つのスレッド(この場合はスレッドQ0とする)における時刻tn-1から時刻tnの間の、非アクティブ時間δの合計δnを取得する(ステップS251)。次に、性能情報取得ツール112は、性能測定対象期間の終了時刻tnから性能測定対象期間の開始時刻tn-1を減算し、性能測定対象期間Δtnを求め、さらに性能測定対象期間Δtnから非アクティブ合計時間δnを減算し、実効性能測定対象期間Δtn´(=Δtn−δn)を求める(ステップS252)。
つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn-1から時刻tnの間に開始してかつ完了したスレッドQ0のコマンドのリストを取得して、それらのデータ長を加算することでデータ量合計(=S0)を計算する(ステップS253)。また、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、前周期である時刻tn-2から時刻tn-1の間に開始して、現周期である時刻tn-1から時刻tnの間に完了したスレッドQ0のコマンドのリストを取得して、前述と同様にしてそれぞれのコマンドの現周期に対する寄与度を計算し、それぞれのコマンドのデータ量に対し各寄与度をかけたものの合計(=S1)を計算する(ステップS254)。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、現周期である時刻tn-1から時刻tnの間に開始して、次周期である時刻tnから時刻tn+1の間に完了したスレッドQ0のコマンドについても同様の計算を行って寄与度を計算し、それぞれのコマンドのデータ量に対し各寄与度をかけたものの合計(=S2)を計算する(ステップS255)。さらに、性能情報取得ツール112は、下式にしたがってスレッドQ0における現周期の転送データレートを計算する(ステップS256)。
転送データレート=(S0+S1+S2)/Δtn´
このような処理を、各スレッドについて繰り返し実行する。
図46は、転送データレートをスレッド毎に計算した場合の性能ログテーブル125の一例を示すものである。図46に示すように、性能ログテーブル125には、スレッド毎にかつ測定対象期間毎に、総転送データレートが記録されている。性能ログとしては、総転送データレート、読み出し転送データレート、書き込み性能転送データレートそれぞれについて集計してもよい。性能ログを、転送データレート、処理コマンドレート応答時間、処理時間、相対スコアそれぞれについて集計してもよい。また、(Q1とQ2)、(Q3とQ4)のように、複数のスレッド(キュー)をグループ化して、グループ毎に性能ログを記録するようにしてもよい。性能ログは図32と同様に、グラフによってディスプレイ133上に可視化することができる。また、図33と同様に、あるスレッドにおいてSSD10に対し読み書きアクセスが無い期間が一定以上の期間存在する場合は、当該スレッドにおける当該期間のグラフを非表示にするか、当該スレッドに対してアクセスがないことが明らかに判るように表示することが望ましい。
このように第1の実施形態によれば、性能評価ツール110は、ホスト100の通常使用時に、ソフトウェア140やOS150がSSD10と授受したコマンドのアクセスログを取得してアクセスログテーブル120に記憶し、この記憶したアクセスログを用いてSSDの性能情報を演算することとしたので、性能測定用の特別な書き込み、性能測定用の特別な測定期間が発生せず、ユーザが体感しているユーザの実使用に極めて外部記憶装置の時々刻々の性能情報を正確に把握することができ、また外部記憶装置の信頼性低下に対して悪影響を及ぼすことがない。また、時間情報を用いて性能情報を演算する場合、外部記憶装置に対するコマンドが非アクティブである時間を除外した実効時間情報を用いて性能情報を演算することとしたので、ユーザの入力待ち、CPUなどその他ハードウェアの応答待ちなどに影響されずに、外部記憶装置の性能を正確に把握することが可能となる。なお、性能ログをSSD10に保存する場合のみ、SSD10への余分な書き込みが発生するが、性能ログはデータサイズが非常に小さいため、SSD10の性能や信頼性に与える影響は極めて少ないし、性能情報取得時間間隔を長くすればするほど、その影響をさらに小さくすることができる。
(第2の実施形態)
第2の実施形態では、性能ログをシーケンシャルアクセス(シーケンシャル読み出し、シーケンシャル書き込み)とランダムアクセス(ランダム読み出し、ランダム書き込み)に分類し、さらに性能ログをデータ長で分類するようにしている。図47は、第2の実施形態が適用された性能ログテーブル125を示すもので、性能情報としてはデータ転送レートが示されている。図47に示すように、性能ログテーブル125は、シーケンシャル読み出し、シーケンシャル書き込み、ランダム読み出し、ランダム書き込みの4つのテーブルに分類されている。さらに、各テーブルは、複数の異なるデータ長によっても分類されている。例えば、小さなサイズである4KB毎にシーケンシャルアクセスを行う場合と、比較的大きなサイズである128KB毎にシーケンシャルアクセスを行う場合とで、SSD10の性能が異なってくるので、本実施形態では、データ長に応じた性能分類を行っている。
図48は、シーケンシャルアクセスであるかランダムアクセスであるかを識別するための手順の一例を示すものである。性能情報取得ツール112は、アクセスログテーブル120に記録されたアクセスログ情報を時系列順に読み出し、各コマンドログ情報を読み出しコマンドであるか書き込みコマンドであるかに応じて分類し、さらにデータ長に応じても分類する(ステップS300)。つぎに、性能情報取得ツール112は、リードかライトかによって分類しかつデータ長毎に分類した1つのグループについて、当該アクセスログ情報に含まれるコマンドのLBAが、直前のアクセスログ情報に含まれるコマンドのLBAに対し直前のアクセスログ情報に含まれるデータ長を加算した結果と等しいか否かを判定し(ステップS301)、等しい場合は当該アクセスログ情報をシーケンシャルアクセスに分類する(ステップS303)。また、ステップS301の判断がNOである場合は、性能情報取得ツール112は、当該アクセスログ情報の直後のアクセスログ情報に含まれるコマンドのLBAが、当該アクセスログ情報に含まれるコマンドのLBAに対し当該アクセスログ情報に含まれるデータ長を加算した結果と等しいか否かを判定し(ステップS302)、等しい場合は当該アクセスログ情報をシーケンシャルアクセスに分類し(ステップS303)、等しくない場合は、ランダムアクセスに分類する(ステップS304)。このような処理を、分類したグループ毎に実行する。
なお、上記の処理は、複数のスレッドが存在する場合は、複数のスレッドを総合的に見て、シーケンシャルかランダムであるかを判定するようにしたほうが望ましい。また、現コマンドと次のコマンドとのLBAの連続性が所定コマンド数以上続いた場合に、シーケンシャルと判断し、そうでない場合にランダムと判断するようにしてもよい。さらに、現コマンドと次のコマンドとのLBAの連続性が所定のデータサイズ以上続いた場合に、シーケンシャルと判断し、そうでない場合にランダムと判断するようにしてもよい。
第2の実施形態によれば、性能ログをシーケンシャルアクセスとランダムアクセスに分類しているので、SSDの性能をシーケンシャルアクセスとランダムアクセスに分類して評価することが可能となる。また、性能ログをデータ長に応じて分類しているので、SSDの性能をデータ長に分類して評価することが可能となる。
(第3の実施形態)
第3の実施形態では、性能情報取得ツール112は、リアルタイム監視している性能情報をもとにSSD10の性能低下を検知し、SSD10の性能回復するための処理を実行するようにする。前述したように、SSD10の性能が低下すると、転送データレートが低下し、処理コマンドレートが低下し、応答時間が増加し、処理時間は増加する。相対スコアは各スコア値に依存して悪化する。転送データレートの下限値、処理コマンドレートの下限値、応答時間の上限値、処理時間の上限値、または相対スコアの閾値を定め、これらの境界条件値を越えた時、SSD10の性能が低下したと判定することができる。以下、転送データレートの場合についてのみ述べるが、その他の性能指標の場合においても同様に処理可能である。また、各境界条件値値は、例えばSSDの設計時の設計期待値や、顧客に提示した最低スペックなどにより定めることができる。
図49は、転送データレートが下限値を下回ったときに、削除通知(例えばトリムコマンド)を行うことで性能を回復させる手順を示すものである。性能情報取得ツール112は、性能ログテーブル125の記憶情報に基づき転送データレートが下限値を下回ったか否かを判定しており(ステップS310)、転送データレートが下限値を下回った場合、OS150からファイル管理情報を取得し、取得したファイル管理情報に基づき、データの存在しないLBA領域のLBAを取得し(ステップS311)、取得したLBA領域に対して削除通知(例えばトリムコマンド)を発行する(ステップS312)。これにより、SSD10のフリーブロック数が増大し、SSD10の性能が回復する。
図50は、転送データレートが下限値を下回ったときに、ホスト100上でデフラグ(defragmentation)を行うことで性能を回復させる手順を示すものである。性能情報取得ツール112は、転送データレートが下限値を下回った場合(ステップS320)、例えばホスト100に搭載されているファイル最適化ツール(デフラグツール)などを用いてホスト100上でデフラグを実行する(ステップS321)。通常、外部記憶装置は使用が進むに伴い、図51(a)に示すように、ファイルや空き領域が断片化してくる。ユーザデータは通常OS150によってファイル単位で管理されているが、同一ファイルにも関わらず、そのデータが不連続なLBA領域に保存されていることがある(図51(a)に示すファイル“a.dat”)。この時、断片化ファイル“a.dat”を読み出すと、それぞれのLBA領域に対して読み出しコマンドを発行しなければならず、読み出し性能が劣化する。デフラグ機能では、この断片化したデータを連続したLBA領域に対して再配置することで、図51(b)に示すように、断片化状態を解消する。このようなデフラグによる性能回復は、不揮発性記憶装置10の処理すべき読み出しコマンドのコマンド数を低減させる効果があるため、NANDフラッシュメモリを記憶媒体とするSSDに限らず、例えばハードディスクドライブのようなその他不揮発性記憶装置に対しても有効である。さらに、ハードディスクドライブにおいては、読み出し対象のLBA領域が断片化していると、ヘッダのシーク回数が増えて性能が劣化するため、デフラグは有効である。
OS150上のファイル管理テーブルでデータを格納されていないとされる領域(空き領域)は、ユーザが使用を重ねるにつれ、図51(c)に示すように、不連続なLBA領域に分散するようになる。この状態で、ユーザが新たにファイルを作成・更新すると、OS150が断片化したLBA領域をデータ書き込み用として割り当てる場合があり、この時、本来は連続したLBA領域に対する一度の書き込みで済むはずの書き込み動作が、断片化した複数のLBA領域に対する書き込みになってしまうことがあり、これにより書き込み性能が劣化する。デフラグ機能では、図51(d)に示すように、この断片化した空き領域にユーザデータを移動して埋めるようLBAの再配置を行うことで、空き領域の断片化を解消する。それにより、外部記憶装置に対する書き込み性能が向上する。このようなデフラグによる性能回復は、不揮発性記憶装置10の処理すべき書き込みコマンドのコマンド数を低減させる効果があるため、NANDフラッシュメモリを記憶媒体とするSSDに限らず、例えばハードディスクドライブのようなその他不揮発性記憶装置に対しても有効である。さらに、ハードディスクドライブにおいては、書き込み対象のLBA領域が断片化していると、ヘッダのシーク回数が増えて性能が劣化するため、デフラグは有効である。
図52は、転送データレートが下限値を下回ったときに、強制的にNAND整理を行うようSSD10に命令を送信することで性能を回復させる手順を示すものである。当該命令は、たとえばINCITS ACS−2に記述されているSCT Command Transportやその他ベンダー独自のコマンドなどによって行ってもよい。性能評価ツール110は、転送データレートが下限値を下回った場合(ステップS330)、NAND整理を行うようSSD10に命令を送信する(ステップS331)。これにより、SSD10上でNAND整理が行われ、フリーブロック数が増大し、SSD10の性能が回復する。
図53は、転送データレートが下限値を下回ったときに、ソフトウェア140またはOS150から一定時間以上SSD10に一切の命令を送信しないように制御するかまたはSSD10にメディアアクセスコマンド(NANDメモリ20に対するアクセスが発生するコマンド)をソフトウェア140またはOS150から送信させないように制御することで、SSD10上で前述の自動NAND整理を発生させ、性能を回復させる手順を示すものである。性能情報取得ツール112は、転送データレートが下限値を下回った場合(ステップS340)、ソフトウェア140またはOS150から一定時間以上SSD10に一切の命令を送信しないようにするかまたはSSD10にメディアアクセスコマンドを送信しないようにする(ステップS341)。このようにしてSSD10でNAND整理を発生させることで、SSD10のフリーブロック数が増大し、SSD10の性能が回復する。
図54はハードディスクドライブ(HDD)の転送データレートのLBA依存性を示すものである。HDDは通常LBAが小さいデータほどHDDの磁気ディスクの外周部に位置し、LBAが大きいデータほどHDDの磁気ディスクの内周部に位置する。一方、磁気ディスクの角速度は一定であることから、HDDの外周部ほど単位時間あたりにヘッダを通過するビット数が大きく、HDDの内周部ほど単位時間あたりにヘッダを通過するビット数が小さくなる。このため、図54に示すように、LBAが大きくなればなるほど性能は低下する。
図55は、外部記憶装置としてHDDが採用された場合の性能回復手順を示すものである。性能情報取得ツール112は、転送データレートが下限値を下回った場合(ステップS350)、LBAの大きなデータをLBAの小さな空き領域に移動する(ステップS351)。これにより、HDDの性能劣化を回復することができる。
以上のように、転送データレートが下限値を下回ったときに、SSDの最適化を行うよう各種コマンドを送信したりSSDを制御したりすることで、SSDの性能を回復させることができる。なお、本実施形態の最適化機能は、本実施形態で述べた最適化機能の具体例に限定されるものではない。
以上で用いられた境界条件値を超えた場合、上述した性能最適化を行う代わりに、ユーザに警告メッセージを表示するようにしてもよい。また、上記境界条件値(上限値・下限値など)は、外部記憶装置の設計段階で固定値に定めてもよいし、後から動的に変更可能としてもよい。例えば、ある下限値を境界条件値として定めている時、上記した最適化を行っても性能回復が見られない場合や最適化があまりに高頻度に頻発してしまうような場合は、下限値をさらに引き下げて条件を緩めることも有効である。境界条件を動的なものとする場合には、その動的な境界条件値を、図56に示すように、ホスト100の主メモリ202上に保持するようにすればよい。図56では、主メモリ202内に、境界条件値を記憶する境界条件値記憶領域126が設けられている。また、図57に示すように、性能評価ツール110は、境界条件が変更された場合(ステップS360)、変更された境界条件値をSSD10に保存して(ステップS361)、不揮発化することとしてもよい。
なお、境界条件値を決める際には、性能ログテーブル125に保存された過去の性能情報をもとに境界条件を定めてもよい。例えば、初回電源オン後、所定期間(例えば1か月)の平均性能情報をSSD10内に保持しておき、この平均性能情報の例えば0.8倍を境界条件として定めておけば、出荷直後の性能より性能が2割悪化した段階で、SSD10に対し上記した最適化を行うことになる。
(第4の実施形態)
これまでの実施形態においては、性能評価ツール110は、アクセス情報取得ツール(アクセス情報取得プログラム)111が常時、ソフトウェア140のアクセス情報を監視し、アクセスログテーブル120にアクセス情報を追記するように構成されていた。一方、ホスト100のCPUの性能が極端に低い場合など、アクセス情報取得ツール111のCPU負荷が高く、性能評価ツール110以外の演算処理効率を低下させてしまう場合には、アクセス情報取得を低減することが望ましい。このため、性能評価ツール110の性能情報取得ツール112がCPU使用率をOS150から定期的に取得し、ホスト100のCPU使用率が所定値以上の場合にはアクセス情報取得ツール111をアンロードしてアクセスログを取得しないようにしてもよい。
図58は、CPU使用率に基づいて性能情報取得ツール112がアクセス情報取得ツール111をアンロード、再ロードするための手順を示すものである。ホスト100の起動後、性能評価ツール110の性能情報取得ツール112が起動され、性能情報取得ツール112がアクセス情報取得ツール111をロードする(ステップS570)。性能情報取得ツール112はCPU使用率をOS150から定期的に取得し、CPU使用率が所定値J1(例えば80%)以上であるか否かを判断する(ステップS571)。性能情報取得ツール112は、CPU使用率が所定値J1以上の場合は、CPUの負荷が高すぎると判断し、その他のアプリケーションの処理を優先させるため、アクセス情報取得ツール111をアンロードする(ステップS572)。その後、性能情報取得ツール112は、CPU使用率をOS150から定期的に取得し、CPU使用率が所定値J2(例えば60%)以下であるか否かを判断する(ステップS573)。性能情報取得ツール112は、CPU使用率が所定値J2以下の場合は、CPUの負荷が軽減されたと判断し、アクセス情報取得ツール111を再ロードしてアクセスログの取得を再開する(ステップS570)。
所定値J1、J2は、アクセス情報取得ツール111のロードとアンロードの切り替えが頻繁に発生して、切り替え動作自体がホスト100への負荷になることを防ぐために、J1>J2+マージンであることが望ましい。例えば、マージンは20%程度に設定する。また、CPUが高負荷である状況におけるCPU使用率監視(ステップS573)は、監視自体がCPUへの負荷になることを防ぐために、ステップS573でのCPU使用率の取得時間間隔をステップS571でのCPU使用率の取得時間間隔よりも長くとることが望ましい。
図59は、一定時間ごとに性能情報取得ツール112がアクセス情報取得ツール111をアンロード、再ロードするための手順を示すものである。性能情報取得ツール112は、アクセス情報取得ツール111をロードした後(ステップS580)、一定時間(例えば1時間)が経過したか否かを判定し(ステップS581)、一定時間が経過すると、アクセス情報取得ツール111をアンロードする(ステップS582)。その後、性能情報取得ツール112は、一定時間(例えば1時間)が経過したか否かを判定し(ステップS583)、一定時間が経過すると、アクセス情報取得ツール111を再ロードしてアクセスログの取得を再開する(ステップS580)。このように、一定時間ごとにアクセスログを取得する期間と取得しない期間とを切り替えるようにしている。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。