"性能評価ツールが搭載されるホスト装置と、リード及びライト可能な不揮発性メモリを有する外部記憶装置と、前記ホスト装置と外部記憶装置を接続するインタフェース部とを備える情報処理装置において、前記性能評価ツールは、前記ホスト装置に搭載されたOSまたは性能評価ツール以外のソフトウェアが前記外部記憶装置と通常にアクセスするときの命令、応答を含むコマンドを前記OSから取得して、アクセスログとして逐次記録するアクセスログ取得部と、アクセスログ取得部によって記録されたアクセスログを用いて前記外部記憶装置の性能情報を演算して、この演算結果を性能情報ログとして記録する性能ログ取得部と、を備えることを特徴とする情報処理装置。前記アクセスログは、前記コマンドに関する時間情報を含み、前記性能ログ取得部は、時間情報を用いて性能情報を演算する場合、前記アクセスログに含まれる時間情報を用いて外部記憶装置に対するコマンドが非アクティブである時間を除外した実効時間情報を演算し、この演算した実効時間情報を用いて性能情報を演算することを特徴とする請求項1に記載の情報処理装置。前記ホスト装置は、複数のスレッドが同時に動作可能なマルチスレッド方式が採用され、性能ログ取得部は、複数のスレッドを総合して性能情報を演算する場合は、全てのスレッドにおける前記コマンドが非アクティブである時間を除外した実効時間情報を用いて性能情報を演算することを特徴とする請求項2に記載の情報処理装置。前記ホスト装置は、複数のスレッドが同時に動作可能なマルチスレッド方式が採用され、性能ログ取得部は、スレッド毎に性能情報を演算する場合は、当該スレッドにおいて外部記憶装置に対するコマンドが非アクティブである時間を除外した実効時間情報を用いて性能情報を演算することを特徴とする請求項2または3に記載の情報処理装置。前記アクセスログ取得部は、前記アクセスログを記録するアクセスログテーブルを有し、前記性能ログ取得部は、前記性能情報ログを記録する性能ログテーブルを有することを特徴とする請求項1乃至4の何れか一つに記載の情報処理装置。前記アクセスログは、前記コマンドの開始時刻、終了時刻を示す時刻情報、コマンド内容、データ長を含むことを特徴とする請求項1乃至5の何れか一つに記載の情報処理装置。前記性能情報ログは、転送データレート、処理コマンドレート、応答時間、処理時間のうちの少なくとも一つを含むことを特徴とする1乃至6の何れか一つに記載の情報処理装置。前記性能ログ取得部は、性能情報ログに記憶された性能情報が許容範囲外になると、外部記憶装置の性能を許容範囲内に戻すための最適化処理を前記外部記憶装置に対し実行することを特徴とする請求項1乃至7何れか一つに記載の情報処理装置。前記外部記憶装置の不揮発性メモリは、ページ単位で読み出し及び書き込みが行われ、前記ページ単位より大きなブロック単位で消去が行われる不揮発性半導体メモリであり、前記最適化処理は、データが保持されていない前記外部記憶装置の論理アドレスに対するトリム要求を前記外部記憶装置に通知することである請求項8に記載の情報処理装置。前記最適化処理は、不連続な前記外部記憶装置の論理アドレスを連続アドレスとするデフラグ処理をOS上で実行することである請求項8に記載の情報処理装置。前記外部記憶装置の不揮発性メモリは、ページ単位で読み出し及び書き込みが行われ、前記ページ単位より大きなブロック単位で消去が行われる不揮発性半導体メモリであり、前記最適化処理は、前記不揮発性半導体メモリのデータ整理を実行させて未使用のブロックを増加させるための命令を外部記憶装置に対し通知することである請求項8に記載の情報処理装置。前記外部記憶装置の不揮発性メモリは、ページ単位で読み出し及び書き込みが行われ、前記ページ単位より大きなブロック単位で消去が行われる不揮発性半導体メモリであり、前記外部記憶装置は、前記ホスト装置から所定期間アクセスがないとき、前記不揮発性半導体メモリのデータ整理を実行して未使用のブロックを増加させるものであって、前記最適化処理は、OSまたは性能評価ツール以外のソフトウェアに対し、外部記憶装置の不揮発性メモリを使用するアクセスを所定期間禁止させることである請求項8に記載の情報処理装置。前記性能ログ取得部は、前記アクセスログ取得部による前記ホスト装置のCPU使用率を監視し、前記CPU使用率が第1の閾値を越えると、前記アクセスログ取得部をアンロードし、このアンロード後、CPU使用率が前記閾値より小さい第2の閾値を下回ると、前記アクセスログ取得部をロードすることを特徴とする請求項1乃至12の何れか一つに記載の情報処理装置。前記性能ログ取得部は、前記アクセスログ取得部のアンロード、ロードを周期的に実行することを特徴とする請求項1乃至12の何れか一つに記載の情報処理装置。リード及びライト可能な不揮発性メモリを有する外部記憶装置に接続されるホスト装置に搭載され、前記外部記憶装置の性能を評価する性能評価ツールにおいて、前記ホスト装置に搭載されたOSまたは性能評価ツール以外のソフトウェアが前記外部記憶装置と通常にアクセスするときの命令、応答を含むコマンドを前記OSから取得して、アクセスログとして逐次記録するアクセスログ取得部と、アクセスログ取得部によって記録されたアクセスログを用いて前記外部記憶装置の性能情報を演算して、この演算結果を性能情報ログとして記録する性能ログ取得部と、を備えることを特徴とする性能評価ツール。前記アクセスログは、前記コマンドに関する時間情報を含み、前記性能ログ取得部は、時間情報を用いて性能情報を演算する場合、前記アクセスログに含まれる時間情報を用いて外部記憶装置に対するコマンドが非アクティブである時間を除外した実効時間情報を演算し、この演算した実効時間情報を用いて性能情報を演算することを特徴とする請求項15に記載の性能評価ツール。前記ホスト装置は、複数のスレッドが同時に動作可能なマルチスレッド方式が採用され、性能ログ取得部は、複数のスレッドを総合して性能情報を演算する場合は、全てのスレッドにおける前記コマンドが非アクティブである時間を除外した実効時間情報を用いて性能情報を演算することを特徴とする請求項16に記載の性能評価ツール。前記ホスト装置は、複数のスレッドが同時に動作可能なマルチスレッド方式が採用され、性能ログ取得部は、スレッド毎に性能情報を演算する場合は、当該スレッドにおいて外部記憶装置に対するコマンドが非アクティブである時間を除外した実効時間情報を用いて性能情報を演算することを特徴とする請求項16または17に記載の性能評価ツール。ホスト装置にインタフェースを介して接続される外部記憶装置であって、リード及びライト可能な不揮発性メモリを有する外部記憶装置の性能を評価する性能評価方法において、前記ホスト装置に搭載されたOSまたは性能評価ツール以外のソフトウェアが前記外部記憶装置と通常にアクセスするときの命令、応答を含むコマンドを前記OSから取得して、アクセスログとして逐次記録し、前記記録されたアクセスログを用いて前記外部記憶装置の性能情報を演算して、この演算結果を性能情報ログとして記録することを特徴とする外部記憶装置の性能評価方法。前記アクセスログは、前記コマンドに関する時間情報を含み、時間情報を用いて性能情報を演算する場合、前記アクセスログに含まれる時間情報を用いて外部記憶装置に対するコマンドが非アクティブである時間を除外した実効時間情報を演算し、この演算した実効時間情報を用いて性能情報を演算することを特徴とする請求項19に記載の外部記憶装置の性能評価方法。本発明の一つの実施形態は、外部記憶装置の信頼性にほとんど影響を与えずに、ユーザが実使用で感じた外部記憶装置の体感性能をリアルタイムで定量化して監視することを実現する情報処理装置、性能評価ツール、外部記憶装置の性能評価方法を提供することを目的とする。本発明の一つの実施形態によれば、情報処理装置は、性能評価ツールが搭載されるホスト装置と、リード及びライト可能な不揮発性メモリを有する外部記憶装置と、前記ホスト装置と外部記憶装置を接続するインタフェース部とを備える。性能評価ツールは、アクセスログ取得部と、性能ログ取得部とを備える。アクセスログ取得部は、前記ホスト装置に搭載されたOSまたは性能評価ツール以外のソフトウェアが前記外部記憶装置と通常にアクセスするときの命令、応答を含むコマンドを前記OSから取得して、アクセスログとして逐次記録する。性能ログ取得部は、アクセスログ取得部によって記録されたアクセスログを用いて前記外部記憶装置の性能情報を演算して、この演算結果を性能情報ログとして記録する。外部記憶装置の読み出し及び書き込みの性能を測る尺度として、転送データレート、処理コマンドレート、応答時間、処理時間、相対スコアなどがある。転送データレートは、単位時間あたりに外部記憶装置との間で授受されたデータ量である。例えば、データ読み出しにおいて、1秒あたり平均して250MiBのデータを情報処理装置が外部記憶装置から受信している場合は、外部記憶装置の読み出しの転送レートは250MiB/sとなる。処理コマンドレートは、単位時間あたりに外部記憶装置との間で授受された命令数である。例えば、データ書き込みにおいて、情報処理装置が外部記憶装置に対する命令について1秒あたり平均して100000個の命令を完了している場合は、前記外部記憶装置の読み出しの転送レートは100000IOPSとなる。応答時間は、情報処理装置が外部記憶装置に命令を送ってから、その命令に関する処理が完了するまでの時間である。読み出し命令の場合は、その命令のデータを情報処理装置が受信完了するまでの時間であり、書き込み命令の場合は、その命令に対する終了応答を情報処理装置が外部記憶装置から受信するまでの時間である。例えば、データ読み出し命令において、その命令のデータを情報処理装置が受信完了するまでに10ミリ秒要した場合は、外部記憶装置の応答時間は10ミリ秒となる。処理時間は、情報処理装置上である特定のアプリケーションまたはある特定の処理を外部記憶装置に対して開始してから完了するまでに要した時間である。例えば、外部記憶装置内での10GByteのファイルコピーに要する時間が50秒であった場合、10Gbyteのファイルコピーの処理時間は50秒となる。相対スコアは、各種条件における複数のスコア転送データレート、処理コマンドレート、応答時間、処理時間などに重みづけをして加算減算乗算除算することによって得られるスコアである。PCMark05httpwwwfuturemarkcomPCMarkVANTAGEhttpwwwfuturemarkcomSYSmark2007Previewhttpwwwbapcocomなどの指標が相対スコアの例としてあげられる。外部記憶装置の性能の測る際の条件はさまざまである。主な条件として、読み出し書き込みする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のSolidStateStoragePerformanceTestSpecificationにおいては、測定の前条件の規格が存在する。ただし、ユーザが所有する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に接続されことで電源供給され、SATASerialAdvancedTechnologyAttachmentケーブル136を介してマザーボード130に物理的に接続されることで、マザーボード130との通信を可能にする。SATAケーブル136を介した通信はSATA規格に従う。マザーボード130には、CPUなど図示せずが搭載されている。マザーボード130には、ディスプレイ133、キーボード134、マウス135などが接続されている。コンピュータシステムとしては、デスクトップ型に限らず、ラップトップ型やノート型のパーソナルコンピュータにも適用可能である。また、外部記憶装置が搭載される機器システムホスト100としては、その他に、スチルカメラ、ビデオカメラなどの撮像装置などであってもよいし、ゲーム機器やカーナビゲーションシステムなどであってもよい。また、SSD10の代わりにハードディスクドライブHDDやハイブリッドハードディスクドライブハイブリッドHDDなど他の外部記憶装置を用いてもよい。また、SSDとコンピュータの接続規格として、SATA規格以外に、USBUniversalSerialBus規格などの他のインターフェース規格を用いてもよい。図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に格納されたシステムBIOSBasicInputOutputSystemも実行する。尚、システム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との中間バッファとして機能するキャシュメモリCM40aを有する揮発性半導体メモリとしてのRAMRandomAccessMemory40と、NANDメモリ20及びRAM40の管理、制御、及びインタフェースコントローラ30の制御を行うメモリコントローラ50と、NANDメモリ20から読み出されたデータの誤り訂正処理を実行するECC回路58と、これら構成要素を接続するバス57を備える。RAM40としては、DRAMDynamicRandomAccessMemory、SRAMStaticRandomAccessMemory、FeRAMFerroelectricRandomAccessMemory、MRAMMagnetoresistiveRandomAccessMemory、PRAMPhaseChangeRandomAccessMemoryなどを採用することができる。NANDメモリ20は、ホスト100によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、RAM40で管理される管理情報をバックアップ用に記憶したりする。NANDメモリ20は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数個備える。物理ブロックは複数の物理ページよりなる。物理ページは、データの書き込み及び読み出しの単位である。NANDメモリ20のメモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFETMetalOxideSemiconductorFieldEffectTransistorから構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層浮遊ゲート電極、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタは、1ビットを記憶するように構成されていてもよいし、多値2ビット以上のデータを記憶するように構成されていてもよい。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOSMetalOxideNitrideOxideSilicon型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、メモリセルとして、特開2010-161199号公報や特開2011-29586号公報に記述されるような3次元的に配置されたメモリセルであってもよい。RAM40は、ホスト100とNANDメモリ20間でのデータ転送用キャッシュとして機能するキャッシュメモリCM40aを有する。また、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を介して論理アドレスとしてのLBALogicalBlockAddressingを入力する。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の下位s1ビット目から上位のビット列で構成されるクラスタアドレスと、LBAの下位st1ビットから上位のビット列で構成されるトラックアドレスとを定義する。すなわち、セクタは、ホスト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から外部記憶装置に対して送信される命令である。削除通知の例として、例えば、INCITSATA/ATAPICommandSet-2ACS-2で記述されているDataSetManagementCommandがあげられる。これは、OS150上でデータが削除された場合、削除されたデータの存在する論理アドレス領域LBA領域を、LBA及びセクタ数の組みよりなるLBARangeEntryとして外部記憶装置に通知することにより、以後外部記憶装置上でもその領域を空き領域として扱うことができる方式である。削除通知により、SSD10はフリーブロックを新たに確保することができる。なお、トリムコマンドの機能は、DataSetManagementCommandだけでなく、たとえば、INCITSACS-2で記述されているSCTCommandTransportや、その他ベンダー独自のコマンドなどその他コマンドによって実現してもよい。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規格の場合、INCITSACS-2記載の60hREADFPDMAQUEUEDコマンドにおいて、60hREADFPDMAQUEUEDコマンドのRegisterDevicetoHostがホスト100からSSD10に送信されたとき、命令要求送信としてログをOS150から受け取り、60hREADFPDMAQUEUEDコマンドのSetDeviceBitsをSSD10から受信した時、同コマンドが完了したとして完了通知のログをOS150から受け取る。また、SATA規格の61hWRITEFPDMAQUEUEDコマンドにおいて、61hWRITEFPDMAQUEUEDコマンドのRegHDがホスト100からSSD10に送信されたとき、命令要求送信としてログをOS150から受け取り、61hWRITEFPDMAQUEUEDコマンドのSDBをSSD10から受信した時、同コマンドが完了したとして完了通知のログをOS150から受け取る。コマンドが終了しない異常時を除けば、コマンドは命令要求送信と応答完了通知の対を必ず持つことになり、要求送信がコマンド開始、応答完了通知がコマンド終了を示し、これらの差分がコマンド実行に要した時間となる。スレッド識別情報キューIDは、SSD10に対する要求が複数スレッドで行われる場合は、それぞれのスレッドを区別するIDである。このスレッドはOS150上で管理されるスレッドでもよいし、SSD10とのインターフェース上で管理されるスレッドでもよい。SSD10とのインターフェースインターフェース上で管理されるスレッドには、例えばSATA規格のNativeCommandQueuingNCQがあり、この場合のキューIDは0から31までが割り振られる。コマンド内容情報は、例えば、書き込みか、読み出しかを識別する情報である。なお、例えばSATA規格の場合、INCITSACS-2記載の60hREADFPDMAQUEUEDや25hREADDMAEXTやC8hREADDMAなどのように読み出しコマンドや書き込みコマンドの情報をさらに細かく分類してもよい。本実施の形態では、簡単化のため、書き込みか、読み出しかの粒度で情報を取得することにする。書き込みや読み出し以外のコマンドのログを取得してもよいが、本実施の形態では書き込みと読み出しのコマンドのみログを取得することにする。完了通知の場合は、無効値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に含まれる性能計算対象のコマンド群のうち、最後に完了したコマンドの完了時刻を用いている。この時刻情報として、秒単位未満で管理するようにしてもよい。最後に完了したコマンドの完了時刻の代わりに、最初に命令要求が送信されたコマンドの命令要求時刻でもよいし、性能計算対象の時間範囲の始端または末端の時刻を用いても良い。総転送データレートは、SSD10からホスト100に読み出し完了したデータ、及びホスト100からSSD10に書き込み完了したデータに関する転送データレートのことである。図28では、単位は1秒あたりに転送されるデータ量単位:MiBを示すMiB/sとしている。性能計算対象期間でデータの授受が一切行われなかった場合は、無効値NULLを記入するか、あるいは当該行を追加しない。読み出し転送データレートは、SSD10からホスト100に読み出し完了したデータに関する転送データレートのことである。図28では、単位は1秒あたりに転送されるデータ量単位:MiBを示すMiB/sとしている。性能計算対象期間でデータ読み出しが一切完了しなかった場合は、無効値NULLを記入する。書き込み転送データレートは、ホスト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規格におけるNativeCommandQueuingのReadコマンドであるFirstPartyDMAReadfpDMAReadコマンドの場合は、図35に示すように、コマンドの開始時刻は該コマンドにおけるRegisterHosttoDeviceのFrameInstructionStructureがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻はSetDeviceBitのFISをホスト100がSSD10から受信完了した時刻である。また、NCQのWriteコマンドであるFirstPartyDMAReadfpDMAWriteコマンドの場合は、図36に示すように、コマンドの開始時刻は、該コマンドにおけるRegisterHosttoDeviceのFISがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻はSetDeviceBitのFISをホスト100がSSD10から受信完了した時刻である。NCQに該当しないコマンドについても本発明は適用可能であり、例えば、DMAReadコマンドの場合は、図37に示すように、コマンドの開始時刻は、該コマンドにおけるRegisterHosttoDeviceのFISがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻は、RegisterDevicetoHostをホスト100がSSD10から受信完了した時刻である。また、NCQに該当しないWriteコマンドであるDMAWriteコマンドの場合は、図38に示すように、コマンドの開始時刻は該コマンドにおけるRegisterHosttoDeviceのFISがホスト100からSSD10に送信された時刻であり、コマンドの終了時刻はRegisterDevicetoHostの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は、性能情報としての転送データレートの計算手順の一例を示すものである。この手順では、複数のスレッドを総合的に判断して転送データレートを計算する。また、この手順では、時刻tn1から時刻tnの間の転送データレートの計算手順を示しており、このような手順が性能計算周期毎に繰り返される。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出すステップS250。性能情報取得ツール112は、アクセスログテーブル120に記録された時刻情報をもとに、時刻tn1から時刻tnの間で、SSD10に対する何れのコマンドもアクティブでない時間コマンド非アクティブ時間の合計δnを取得するステップS251。以下、δnを非アクティブ合計時間という。図34に示す例では、時刻t0から時刻t1の間では、全ての時間において、複数のスレッドの中のいずれかのスレッドでコマンドがアクティブになっており、δn=0である。時刻t1から時刻t2の間では、コマンド非アクティブ時間としてδaが存在し、δn=δaである。時刻t2から時刻t3の間では、コマンド非アクティブ時間としてδb、δcが存在し、δn=δbδcである。次に、性能情報取得ツール112は、性能測定対象期間の終了時刻tnから性能測定対象期間の開始時刻tn1を減算し、性能測定対象期間Δtnを求める。さらに、性能情報取得ツール112は、性能測定対象期間Δtnから非アクティブ合計時間δnを減算し、実効性能測定対象期間Δtn ́Δtn-δnを求めるステップS252。非アクティブ合計時間δnを減算することによって、ホスト100においてCPU200の演算時間やユーザの応答待ちなど、SSD10以外の要因を性能測定から除外することができる。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn1から時刻tnの間に開始してかつ完了したコマンドのリストを取得して、それらのデータ長を加算することでデータ量合計=S0を計算するステップS253。また、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、前周期である時刻tn2から時刻tn1の間に開始して、現周期である時刻tn1から時刻tnの間に完了したコマンドのリストを取得して、それぞれのコマンドのデータ量に対し、寄与度=コマンドが時刻tn1から時刻tnの間にアクティブな時間/コマンドが時刻tn2から時刻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の記録情報をもとに、現周期である時刻tn1から時刻tnの間に開始して、次周期である時刻tnから時刻tn1の間に完了したコマンドのリストを取得して、それぞれのコマンドのデータ量に対し、前述した寄与度をかけたものの合計=S2を計算するステップS255。さらに、性能情報取得ツール112は、下式にしたがって転送データレートを計算するステップS256。転送データレート=S0S1S2/Δtn ́なお、図39の手順では、性能測定対象期間tn1~tnの前後の一周期tn2~tn1、tn~tn1を参照して転送データレートを計算するようにしたが、性能測定対象期間tn1~tnに終了するコマンドが、性能測定対象期間のn周期前に開始されている場合はnは自然数、図40に示したものと同様の比例配分を行って、性能測定対象期間tn1~tnからn周期前までを参照して転送データレートを計算するようにしてもよい。同様に、性能測定対象期間tn1~tnに開始されるコマンドが、性能測定対象期間のn周期後に終了している場合はnは自然数、性能測定対象期間tn1~tnからn周期後までを参照して転送データレートを計算するようにしてもよい。図41は、性能情報としての処理コマンドレートの計算手順の一例を示すものである。処理コマンドレートは、前述したように、単位時間あたりにSSD10との間で授受された命令数である。図41の処理内容は、図39に示した転送データレートの計算における1つのコマンドのデータ量を1とした場合に等しい。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出すステップS260。性能情報取得ツール112は、アクセスログテーブル120に記録された時刻情報をもとに、時刻tn1から時刻tnの間で、SSD10に対する何れのコマンドもアクティブでない時間コマンド非アクティブ時間の合計δnを取得するステップS261。次に、性能情報取得ツール112は、性能測定対象期間の終了時刻tnから性能測定対象期間の開始時刻tn1を減算し、性能測定対象期間Δtnを求める。さらに、性能情報取得ツール112は、性能測定対象期間Δtnから非アクティブ合計時間δnを減算し、実効性能測定対象期間Δtn ́Δtn-δnを求めるステップS262。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn1から時刻tnの間に開始してかつ完了したコマンドのリストを取得して、それらのコマンドの個数を求めることでコマンド数=S0を計算するステップS263。また、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、前周期である時刻tn2から時刻tn1の間に開始して、現周期である時刻tn1から時刻tnの間に完了したコマンドのリストを取得して、前述と同様にしてそれぞれのコマンドの現周期に対する寄与度を計算し、寄与度の合計=S1を計算するステップS264。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、現周期である時刻tn1から時刻tnの間に開始して、次周期である時刻tnから時刻tn1の間に完了したコマンドについても同様の計算を行って寄与度の合計=S2を計算するステップS265。さらに、性能情報取得ツール112は、下式にしたがって処理コマンドレートを計算するステップS266。処理コマンドレート=S0S1S2/Δtn ́図42は、性能情報としての平均応答時間の計算手順の一例を示すものである。計算開始がトリガされると、性能情報取得ツール112は、アクセスログテーブル120を読み出すステップS270。性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn1から時刻tnの間の性能測定対象期間に完了したコマンド数=Dを取得しステップS271、時刻tn1から時刻tnの間に完了したコマンドのアクティブな時間合計=Sを計算しステップS272、SをDで除算することで平均応答時間を導出するステップS273。他の性能情報として、最大応答時間を採用する場合は、性能情報取得ツール112がアクセスログテーブル120を参照して、時刻tn1から時刻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に記録された時刻情報をもとに、ある一つのスレッドこの場合はスレッドS0とするにおける時刻tn1から時刻tnの間の、非アクティブ時間δの合計δnを取得するステップS251。次に、性能情報取得ツール112は、性能測定対象期間の終了時刻tnから性能測定対象期間の開始時刻tn1を減算し、性能測定対象期間Δtnを求め、さらに性能測定対象期間Δtnから非アクティブ合計時間δnを減算し、実効性能測定対象期間Δtn ́Δtn-δnを求めるステップS252。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、時刻tn1から時刻tnの間に開始してかつ完了したスレッドS0のコマンドのリストを取得して、それらのデータ長を加算することでデータ量合計=S0を計算するステップS253。また、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、前周期である時刻tn2から時刻tn1の間に開始して、現周期である時刻tn1から時刻tnの間に完了したスレッドS0のコマンドのリストを取得して、前述と同様にしてそれぞれのコマンドの現周期に対する寄与度を計算し、それぞれのコマンドのデータ量に対し各寄与度をかけたものの合計=S1を計算するステップS254。つぎに、性能情報取得ツール112は、アクセスログテーブル120の記録情報をもとに、現周期である時刻tn1から時刻tnの間に開始して、次周期である時刻tnから時刻tn1の間に完了したスレッドS0のコマンドについても同様の計算を行って寄与度を計算し、それぞれのコマンドのデータ量に対し各寄与度をかけたものの合計=S2を計算するステップS255。さらに、性能情報取得ツール112は、下式にしたがってスレッドS0における現周期の転送データレートを計算するステップS256。転送データレート=S0S1S2/Δ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。通常、外部記憶装置は使用が進むに伴い、図51aに示すように、ファイルや空き領域が断片化してくる。ユーザデータは通常OS150によってファイル単位で管理されているが、同一ファイルにも関わらず、そのデータが不連続なLBA領域に保存されていることがある図51aに示すファイルadat。この時、断片化ファイルadatを読み出すと、それぞれのLBA領域に対して読み出しコマンドを発行しなければならず、読み出し性能が劣化する。デフラグ機能では、この断片化したデータを連続したLBA領域に対して再配置することで、図51bに示すように、断片化状態を解消する。このようなデフラグによる性能回復は、不揮発性記憶装置10の処理すべき読み出しコマンドのコマンド数を低減させる効果があるため、NANDフラッシュメモリを記憶媒体とするSSDに限らず、例えばハードディスクドライブのようなその他不揮発性記憶装置に対しても有効である。さらに、ハードディスクドライブにおいては、読み出し対象のLBA領域が断片化していると、ヘッダのシーク回数が増えて性能が劣化するため、デフラグは有効である。OS150上のファイル管理テーブルでデータを格納されていないとされる領域空き領域は、ユーザが使用を重ねるにつれ、図51cに示すように、不連続なLBA領域に分散するようになる。この状態で、ユーザが新たにファイルを作成更新すると、OS150が断片化したLBA領域をデータ書き込み用として割り当てる場合があり、この時、本来は連続したLBA領域に対する一度の書き込みで済むはずの書き込み動作が、断片化した複数のLBA領域に対する書き込みになってしまうことがあり、これにより書き込み性能が劣化する。デフラグ機能では、図51dに示すように、この断片化した空き領域にユーザデータを移動して埋めるようLBAの再配置を行うことで、空き領域の断片化を解消する。それにより、外部記憶装置に対する書き込み性能が向上する。このようなデフラグによる性能回復は、不揮発性記憶装置10の処理すべき書き込みコマンドのコマンド数を低減させる効果があるため、NANDフラッシュメモリを記憶媒体とするSSDに限らず、例えばハードディスクドライブのようなその他不揮発性記憶装置に対しても有効である。さらに、ハードディスクドライブにおいては、書き込み対象のLBA領域が断片化していると、ヘッダのシーク回数が増えて性能が劣化するため、デフラグは有効である。図52は、転送データレートが下限値を下回ったときに、強制的にNAND整理を行うようSSD10に命令を送信することで性能を回復させる手順を示すものである。当該命令は、たとえばINCITSACS-2に記述されているSCTCommandTransportやその他ベンダー独自のコマンドなどによって行ってもよい。性能評価ツール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。このように、一定時間ごとにアクセスログを取得する期間と取得しない期間とを切り替えるようにしている。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"