(57)【要約】【課題】コマンド実行時のタイムアウトを抑制する。【解決手段】コマンドキューイング処理部２６が、コマンド実行順を並び替える最適化ステップ（リオーダリング）が行われる第１のタイミングで、少なくとも１つのコマンドの最大リトライ時間をコマンドが入力されてからの経過時間（Ｔcurr）に応じて短縮する第１の調整と、実行対象のコマンドがＨＤＤ１００内で実行される時点（デキュー時）の直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間をコマンドが入力されてからの経過時間（Ｔcurr）に応じて短縮する第２の調整と、の少なくとも一方を実行するので、経過時間に応じて最大リトライ時間を短縮することにより、コマンドのタイムアウトを抑制することができる。【選択図】図１
2010044814.tif 000002
【特許請求の範囲】
【請求項１】
ホストから記憶装置に対して入力され、キューイングされたコマンドの実行順を並び替えて最適化する最適化ステップと、
前記ホストからコマンドが入力されてからの経過時間に応じて、前記コマンドごとに予め設定されている最大リトライ時間を調整する調整ステップと、を含み、
前記調整ステップは、前記最適化ステップが行われる第１のタイミングで、前記キューイングされているコマンドのうちの少なくとも１つのコマンドの最大リトライ時間を当該コマンドの経過時間に応じて短縮する第１の調整と、実行対象のコマンドが前記記憶装置で実行される直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間を経過時間に応じて短縮する第２の調整と、の少なくとも一方を含むことを特徴とする記憶装置の制御方法。
【請求項２】
前記第１、第２の調整では、
前記コマンドの経過時間が、前記最大リトライ時間の初期値を超過していない場合には、当該最大リトライ時間の初期値から前記経過時間を差し引いた時間を新たな最大リトライ時間として設定することを特徴とする請求項１に記載の記憶装置の制御方法。
【請求項３】
前記最適化ステップでは、前記キューイングされているコマンドのうちの特定コマンドの前記経過時間を抽出し、
前記特定コマンドの経過時間が、前記最大リトライ時間の初期値以上の場合に、前記特定コマンドを最優先で実行するコマンドに設定することを特徴とする請求項１又は２に記載の記憶装置の制御方法。
【請求項４】
前記第１のタイミングで、前記全コマンドのうちの特定のコマンドの経過時間が、前記最大リトライ時間の初期値とコマンドの実行に必要なコマンド実行時間との和を超過した場合に、前記特定コマンドをエラー終了する第１のエラー終了ステップを更に含む請求項１〜３のいずれか一項に記載の記憶装置の制御方法。
【請求項５】
前記第２のタイミングで、前記実行するコマンドの経過時間が、前記最大リトライ時間の初期値を超過した場合に、当該実行するコマンドをエラー終了する第２のエラー終了ステップを更に含む請求項１〜４のいずれか一項に記載の記憶装置の制御方法。
【請求項６】
ホストから入力され、キューイングされたコマンドの実行順を並び替えて最適化する最適化手段と、
前記ホストからコマンドが入力されてからの経過時間に応じて、前記コマンドごとに予め設定されている最大リトライ時間を調整する調整手段とを備え、
前記調整手段は、前記最適化が行われる第１のタイミングで、前記キューイングされているコマンドのうちの少なくとも１つのコマンドの最大リトライ時間を当該コマンドの経過時間に応じて短縮する第１の調整と、実行対象のコマンドが実行される直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間を前記経過時間に応じて短縮する第２の調整と、の少なくとも一方を実行することを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置の制御方法及び記憶装置に関し、特にホストから入力されるコマンドをキューイングして実行する記憶装置の制御方法、及び当該制御方法の実施に好適な記憶装置に関する。
【背景技術】
【０００２】
近年の記憶装置（例えば、磁気ディスク装置）にあっては、上位装置（ホスト）とのインタフェースにシリアルＡＴＡ（ANSI T13／Serial ATA International Organization（ＳＡＴＡ−ＩＯ））のような高速シリアル転送インタフェースを使用している。このようなインタフェースにあっては、ホストと磁気ディスク装置の処理時間（オーバーヘッド）を削減するため、ホストから発行されたコマンド（ライトコマンド又はリードコマンド）をキューイングして実行するコマンドキューイング機能が設けられている。
【０００３】
このコマンドキューイング機能は、ホストからの入出力コマンドを磁気ディスク装置のキューにコマンド発行順に格納する（アウトオーダ）。また、装置側では媒体アクセス時間が短い順にコマンドを整列させるリオーダリングを行い、整列順にコマンドを取り出して順次実行し、コマンド実行が終了した段階でコマンド終了順に終了ステータスをホストに通知する。このリオーダリングは、具体的には、図１０に示すように、現在実行中のコマンド（ここでは、Read１）を実行した後のヘッド位置が最も近い位置のデータ（ＬＢＡ）から順次処理するように実行順を並べ替えるものである。
【０００４】
このようなコマンドキューイング機能は、高速シリアル転送インタフェースを使用する以前のパラレル転送インタフェースを使用した磁気ディスク装置においても、インタフェースとしてではなく、装置側の機能として実用化されている。この装置側機能として提供されているコマンドキューイング機能も、ホストからの入出力コマンドを発行順にキューイングしてアクセス実行時間の短い順に整列して実行する点は同一である。
【０００５】
ところで、ホストはコマンド発行後、一定時間内に当該コマンドの実行が完了することを期待しているため、その時間内にコマンドの実行が完了しない場合にはタイムアウトが発生したものと認識する。
【０００６】
ここで、制御装置内にキューイングされた複数コマンドの待ち時間は、コマンドを受領後、当該コマンドが選択実行されるまでの間に実行した全コマンドの実行時間の合計となる。例えば、図１０においてRead６は実行順が７番目であるが、このRead６を受領した時点で、記憶装置でRead２が実行されていたとするならば、Read６の待ち時間は、（Read２の残りの実行時間）＋（Read５の実行時間）＋（Read３の実行時間）、となる。
【０００７】
上記のようなコマンドキューイングを行う記憶装置において、コマンド全体のスループットの低下を抑制する手法が、特許文献１に開示されている。
【０００８】
【特許文献１】特開２００１−２４９７７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記特許文献１に記載の技術では、あるコマンドより後から受領したコマンドに追い越される回数の制限を設けておき、制限回数分のコマンドに追い越された段階で当該コマンドを優先的に実行する。また、各コマンドが受領した時刻を管理し、受領してから一定時間以上実行されていないコマンドがあった段階で、そのコマンドを優先的に実行するというものである。
【００１０】
しかしながら、上記技術を用いたとしても、優先的に実行するコマンドにおいてリトライが頻繁に発生した場合には、後に実行しようとしているコマンドがタイムアウトになるおそれがある。このようなタイムアウトがあった後は、ホストがリトライ処理を実行するが、リトライのオーバーヘッドにより性能低下が発生したり、最悪の場合、リトライが失敗することでホストが記憶装置を切り離す処理を実行する事態も発生しうる。
【００１１】
そこで本発明は上記の課題に鑑みてなされたものであり、コマンドのタイムアウトを抑制することが可能な記憶装置の制御方法及び記憶装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本明細書記載の記憶装置の制御方法は、ホストから記憶装置に対して入力され、キューイングされたコマンドの実行順を並び替えて最適化する最適化ステップと、前記ホストからコマンドが入力されてからの経過時間に応じて、前記コマンドごとに予め設定されている最大リトライ時間を調整する調整ステップと、を含み、前記調整ステップは、前記最適化ステップが行われる第１のタイミングで、前記キューイングされているコマンドのうちの少なくとも１つのコマンドの最大リトライ時間を当該コマンドの経過時間に応じて短縮する第１の調整と、実行対象のコマンドが前記記憶装置で実行される直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間を経過時間に応じて短縮する第２の調整と、の少なくとも一方を含んでいる。
【００１３】
これによれば、コマンド実行順を並び替える最適化ステップが行われる第１のタイミングで、少なくとも１つのコマンドの最大リトライ時間をコマンドが入力されてからの経過時間に応じて短縮する第１の調整と、実行対象のコマンドが記憶装置で実行される直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間をコマンドが入力されてからの経過時間に応じて短縮する第２の調整と、の少なくとも一方を実行するので、経過時間に応じて最大リトライ時間を短縮することで、コマンド実行時のタイムアウトが抑制される。この場合、第１のタイミングで第１の調整を行うことで、最適化ステップを調整後の最大リトライ時間を考慮して実行することができ、また、第２のタイミングで第２の調整を行うことで、調整後の最大リトライ時間を考慮したコマンドの実行可否の判断を行うこともできる。
【００１４】
本明細書記載の記憶装置は、ホストから入力され、キューイングされたコマンドの実行順を並び替えて最適化する最適化手段と、前記ホストからコマンドが入力されてからの経過時間に応じて、前記コマンドごとに予め設定されている最大リトライ時間を調整する調整手段とを備え、前記調整手段は、前記最適化が行われる第１のタイミングで、前記キューイングされているコマンドのうちの少なくとも１つのコマンドの最大リトライ時間を当該コマンドの経過時間に応じて短縮する第１の調整と、実行対象のコマンドが前記記憶装置で実行される直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間を経過時間に応じて短縮する第２の調整と、の少なくとも一方を実行する。
【００１５】
これによれば、最適化手段によりコマンド実行順を並び替える最適化が行われる第１のタイミングで、少なくとも１つのコマンドの最大リトライ時間をコマンドが入力されてからの経過時間に応じて短縮する第１の調整と、実行対象のコマンドが記憶装置で実行される直前の第２のタイミングで、当該実行対象のコマンドの最大リトライ時間をコマンドが入力されてからの経過時間に応じて短縮する第２の調整と、の少なくとも一方を実行するので、経過時間に応じて最大リトライ時間を短縮することで、コマンド実行時のタイムアウトが抑制される。この場合、第１のタイミングで第１の調整を行うことで、最適化ステップを調整後の最大リトライ時間を考慮して実行することができ、また、第２のタイミングで第２の調整を行うことで、調整後の最大リトライ時間を考慮したコマンドの実行可否の判断を行うこともできる。
【発明の効果】
【００１６】
本明細書に記載の記憶装置の制御方法及び記憶装置は、コマンドのタイムアウトを抑制することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の記憶装置の一実施形態について図１〜図９に基づいて詳細に説明する。
【００１８】
図１には一実施形態に係る記憶装置としてのハードディスクドライブ（Hard Disk Drive：ＨＤＤ）１００がブロック図にて示されている。この図１に示すように、ＨＤＤ１００は、ディスクエンクロージャ１２Ａと、制御ボード１２Ｂと、を備えている。
【００１９】
ディスクエンクロージャ１２Ａは、磁気ディスク４８ａ，４８ｂと、スピンドルモータ４４と、ボイスコイルモータ４２と、アーム４５と、ヘッド４６ａ，４６ｂ，４６ｃ，４６ｄと、ヘッドＩＣ４０と、を備えている。
【００２０】
スピンドルモータ４４は、その回転軸において磁気ディスク（記憶媒体）４８ａ，４８ｂを保持しており、磁気ディスク４８ａ，４８ｂを一定速度で回転駆動する。
【００２１】
ボイスコイルモータ４２は、アーム４５を駆動するためのモータである。このボイスコイルモータ４２により駆動されるアーム４５の先端部には、ヘッド４６ａ〜４６ｄが搭載されている。ボイスコイルモータ４２は、アーム４５を介してヘッド４６ａ〜４６ｄを移動させることにより、磁気ディスク４８ａ，４８ｂの記録面に対するヘッドの位置決めを行う。
【００２２】
ヘッド４６ａ〜４６ｄは、ライトヘッドとリードヘッドが一体化された構造を有している。これらヘッド４６ａ〜４６ｄはヘッドＩＣ４０に対し信号線接続されており、ヘッドＩＣ４０は上位装置となるホスト１０からのライトコマンドまたはリードコマンドに基づくヘッドセレクト信号で１つのヘッドを選択して書込みまたは読出しを行う。
【００２３】
ヘッドＩＣ４０には、ライト系についてはライトアンプが設けられ、リード系についてはプリアンプが設けられている。
【００２４】
制御ボード１２Ｂは、ＭＰＵ２４と、ＭＰＵ２４のバス３６に接続された、メモリ２８、不揮発メモリ３２、ホストインタフェース制御部１４、バッファメモリ１８を制御するバッファメモリ制御部１６、ハードディスクコントローラとして機能するフォーマット制御部２０、リードチャネル２２、及びサーボ制御部３４等と、を備えている。
【００２５】
メモリ２８は、ＲＡＭを用いた制御プログラム及び制御データを格納する。不揮発メモリ３２は、ＦＲＯＭ等を用いた制御プログラムを格納する。また、リードチャネル２２は、ライト変調部及びリード復調部として機能するものであり、サーボ制御部３４は、前述したボイスコイルモータ４２及びスピンドルモータ４４を制御するものである。
【００２６】
上記のように構成されるＨＤＤ１００では、ホスト１０から入出力コマンドとしてライトコマンド又はリードコマンドを受領すると、ホスト１０とホストインタフェース制御部３４との接続に用いるシリアルＡＴＡなどの高速シリアル転送インタフェースのネイティブ・コマンド・キューイングとして提供されるコマンドキューイング機能により入出力処理が実行される。
【００２７】
上記高速シリアル転送インタフェースで提供されるコマンドキューイング機能を実現するため、本実施形態では、ＭＰＵ２４に最適化手段及び調整手段としてのコマンドキューイング処理部２６が設けられ、これに対応してメモリ２８にはコマンドキュー３０が配置されている。コマンドキューイング処理部２６は、ホスト１０が発行した入出力コマンドであるライトコマンドやリードコマンドをコマンド発行順にコマンドキュー３０に格納して、原則、アクセス時間の短い順に整列するリオーダリングを行う。そして、ＭＰＵ２４は、リオーダリングされた順にコマンドを取り出して実行し、実行終了後直ちにホスト１０に対しコマンド終了を応答する。なお、コマンドキュー３０は、例えば、１２８個のコマンドをスタックできるようになっている。
【００２８】
次に、上記のように構成されるＨＤＤ１００におけるコマンド（ここでは、リードコマンド）の処理手順について図２〜図６に基づいて説明する。なお、図３は、図２の時刻Ａ〜時刻Ｂにおいて実行されるコマンド解析及びキューイングに関するフローチャートである。
【００２９】
図２の時刻Ａにおいて、ホスト１０からコマンド（例えば、コマンドＣＭＤｎとする）が入力されると、ホストインタフェース制御部１４は、当該コマンドＣＭＤｎを受領する（図３のステップＳ１０）。この場合、ＭＰＵ２４のコマンドキューイング処理部２６は、コマンド解析を実行する（図２では、コマンド解析に要する時間（コマンド解析時間）をＴovhdと表している）。
【００３０】
このコマンド解析では、図３のステップＳ１２に示すように、コマンドＣＭＤｎがキューイング対象か否かを判断し、ここでの判断が否定された場合（すなわち、コマンドＣＭＤｎがキューイング対象でない場合）には、ステップＳ１６においてコマンドを即時実行する。一方、ここでの判断が肯定された場合（すなわち、コマンドＣＭＤｎがキューイング対象であった場合）には、コマンドキューイング処理部２６が、コマンドＣＭＤｎの受領時刻（時刻Ａ）を記録するとともに、コマンドＣＭＤｎをコマンドキュー３０に格納（エンキュー（enqueue））する。
【００３１】
上記エンキューの後、所定時間（Ｔq）経過してコマンド実行タイミング（時刻Ｃ）に達すると、ＭＰＵ２４は、コマンドをコマンドキュー３０からデキュー（dequeue）する（取り出す）。そして、ＭＰＵ２４は、デキューしたコマンドのアドレスに基づいてサーボ制御部３４にシーク指示を出す。サーボ制御部３４は、当該シーク指示に基づいて、ボイスコイルモータ４２及びスピンドルモータ４４を駆動制御して、シークを実行する（図２の時刻Ｄ参照）。これらシーク指示に要する時間とシークの完了までに要する時間は、図２において時間Ｔseekとして表されている。
【００３２】
なお、本実施形態では、上記シークを実行している間（時刻Ｄ〜時刻Ｅ）に、リオーダリングを実行するが、リオーダリングの具体的な方法については後に詳述する。
【００３３】
図２に戻り、シークが完了した後（時刻Ｅ後）、ＭＰＵ２４は、リードチャネル２２、ヘッドＩＣ４０を介して、磁気ディスク４８ａ又は４８ｂからデータを読み出す（図２では、データの読み出し時間がデータ転送時間ＴXferとして示されている）。このデータの読み出しが成功した場合には、ＭＰＵ２４は、読み出したデータをホストに転送する（時刻Ｇ〜時刻Ｈ）が、データの読み出しに失敗した場合には、リトライを実行する（図２では、リトライ時間がＴrtryとして示されている）。
【００３４】
なお、本実施形態では、各コマンドに対してリトライ可能な最大時間（最大リトライ時間）が設定されている。ここで、最大リトライ時間は、初期値Ｔmax(retry)のみが予め定められており、時間の経過とともに変動（減少）する値（時間）であるものとする。なお、最大リトライ時間の詳細については後述する。
【００３５】
以上のように、図２の処理においては、コマンド実行時間（Ｔcmd）の間に、コマンド解析、キューイング、シーク指示、シーク完了待ち、データ転送及びリトライ（必要に応じて）を実行する。したがって、コマンド実行時間Ｔcmdは、次式（１）にて表すことができる。
Ｔcmd＝Ｔovhd＋Ｔq＋Ｔseek＋ＴXfer＋Ｔrtry    …（１）
なお、上記ではＭＰＵ２４がホスト１０から受領したコマンドが、リードコマンドである場合について説明したが、ライトコマンドであっても同様の処理が実行される。
【００３６】
次に、本実施形態におけるリオーダリング処理について、図４のフローチャートに沿って説明する。
【００３７】
このリオーダリング処理では、まず、ステップＳ２２において、コマンドキューイング処理部２６が、コマンドキュー３０をスキャンする。ここで、スキャンとは、コマンドキューイング処理部２６がコマンドキュー３０に含まれるコマンドの１つを判断対象として選択する処理を意味する。次いで、ステップＳ２４では、コマンドキューイング処理部２６が全てのコマンドキュー３０のスキャンを完了したか否かを判断する。ここでは、まだ１つ目のコマンドをスキャンしたのみなので、判断は否定され、ステップＳ２６に移行する。
【００３８】
ステップＳ２６では、コマンドキューイング処理部２６が、判断対象のコマンドについてのコマンドスタック時間（判断対象のコマンドを受領してから経過した時間（Ｔcurr））が予め定められている最大リトライ時間の初期値（Ｔmax(retry)）よりも小さいか否かを判断する。このステップＳ２６における判断が肯定される場合とは、図５におけるケース１のような場合である。なお、図５に示される時間Ｔexpはコマンドの期待実行時間（最速実行時間）を意味し、図２に示す時間Ｔseek，Ｔovhd，ＴXferを用いて次式（２）のように表すことができる。
Ｔexp＝Ｔseek＋Ｔovhd＋ＴXfer      …（２）
【００３９】
このステップＳ２６の判断が肯定された場合には、ステップＳ２８において、コマンドキューイング処理部２６が、新たな最大リトライ時間（Ｔmax(retry)’）として、Ｔmax(retry)−Ｔcurrを設定し、ステップＳ２２に戻る。すなわち、コマンドキューイング処理部２６は、最大リトライ時間として、最大リトライ時間の初期値からスタック時間（経過時間）を差し引いた時間を設定した後、新たなコマンドキューをスキャンする。
【００４０】
これに対し、ステップＳ２６の判断が否定された場合には、ステップＳ３０に移行して、コマンドスタック時間Ｔcurrが最大リトライ時間の初期値Ｔmax(retry)と一致するか否かを判断する。このステップＳ３０の判断が肯定されるのは、図５のケース２のような場合である。
【００４１】
このステップＳ３０の判断が肯定されると、ステップＳ３２においてコマンドキューイング処理部２６が新たな最大リトライ時間Ｔmax(retry)’として、ステップＳ２８と同様に、Ｔmax(retry)−Ｔcurrを設定するが、ここでは、Ｔmax(retry)＝Ｔcurrであるので、Ｔmax(retry)’は０に設定される。すなわち、リトライを禁止とする。そして、次のステップＳ３４では、ＭＰＵ２４が実行最優先フラグをセットして、ステップＳ４２に移行する。
【００４２】
一方、ステップＳ３０の判断が否定された場合には、ステップＳ３６に移行して、コマンドスタック時間Ｔcurrが、最大リトライ時間の初期値Ｔmax(retry)とコマンド期待実行時間Ｔexpの和よりも大きいか否か（Ｔcurr＞Ｔmax(retry)＋Ｔexpか否か）を判断する。ここでの判断が肯定されるのは、図５のケース４のような場合であり、判断が否定されるのは、図５のケース３のような場合である。ここでの判断が肯定された場合（ケース４の場合）には、判断対象のコマンドを実行しても、必然的にタイムアウトになるため、当該判断対象のコマンドをエラー終了する。このエラー終了情報は、ＭＰＵ２４を介して、ホスト１０に送信される。また、判断が否定された場合（ケース３の場合）には、ステップＳ３８に移行する。
【００４３】
ステップＳ３８では、コマンドキューイング処理部２６が、新たな最大リトライ時間Ｔmax(retry)’として（Ｔmax(retry)＋Ｔexp−Ｔcurr）を設定し、次のステップＳ４０において実行最優先フラグをセットする。
【００４４】
ところで、ケース３の場合、図５に示すように、コマンドスタック時間Ｔcurrは、最大リトライ時間の初期値Ｔmax(retry)よりも大きく、コマンド期待実行時間Ｔexpを侵食しているため、ケース４と同様、このコマンドを実行しても必然的にタイムアウトになるようにも考えられる。しかしながら、コマンド期待実行時間Ｔexpは、上式（２）のように、Ｔexp＝Ｔseek＋Ｔovhd＋ＴXferと表せるので、コマンドの実行順を変更することによりシーク時間Ｔseekを短縮できれば、コマンド期待実行時間Ｔexpも短縮でき、タイムアウトを回避できる可能性も残されている。このような理由から、本実施形態では、リオーダリングの際にケース３のようなコマンドがあっても、そのコマンドを一律エラー終了しないこととしている。
【００４５】
ここまでの処理において、（i）全てのコマンドがＴcurr＜Ｔmax(retry)を満たしており、ステップＳ２４の判断が肯定された場合、（ii）あるコマンドがＴcurr＝Ｔmax(retry)を満たしており、ステップＳ３４で実行最優先フラグをセットした場合、（iii）あるコマンドがＴmax(retry)＜Ｔcurr＜Ｔmax(retry)＋Ｔexpを満たしており、ステップＳ４０で実行最優先フラグをセットした場合、の３通りの場合に、ステップＳ４２に移行する。
【００４６】
ステップＳ４２では、実行最優先フラグがセットされているか否かを判断する。ここで、上記(i)の場合（ステップＳ２４の判断が肯定された場合）には、ステップＳ４２は否定される。この場合、ステップＳ４６において通常のリオーダリングが実行される。具体的には、例えば、図６（ａ）に示すように、コマンドＣＭＤ１〜ＣＭＤ３がキューイングされている状態（及びコマンドＣＭＤ１が実行されている状態）で、コマンドＣＭＤ４を受領したとすると、次のリオーダリングにおいて、図６（ｂ）に示すように、ＬＢＡ順（ＣＭＤ１→ＣＭＤ４→ＣＭＤ２→ＣＭＤ３）に並び替える。
【００４７】
一方、上記（ii）、（iii）の場合（ステップＳ３４又はステップＳ４０を経由した場合）には、ステップＳ４２の判断は肯定される。この場合、ステップＳ４４に移行して、実行最優先フラグのセットされたコマンドを最優先とするリオーダリングを実行する。例えば、図６（ａ）に示すように、コマンドＣＭＤ１〜ＣＭＤ３がキューイングされている状態（及びコマンドＣＭＤ１が実行されている状態）で、コマンドＣＭＤ４を受領したとし、コマンドＣＭＤ３に対して最優先フラグがセットされたとする。この場合には、次のリオーダリングにおいて、コマンドＣＭＤ３の順位をＬＢＡに関わらず最優先とし、図６（ｃ）に示すように、ＣＭＤ１→ＣＭＤ３→ＣＭＤ４→ＣＭＤ２の順に並び替える。
【００４８】
上記のようにしてリオーダリング（ステップＳ４４又はステップＳ４６）が完了した段階で、図４の処理が終了する。
【００４９】
本実施形態では、図４のような処理を実行することにより、ステップＳ２８、Ｓ３２、Ｓ３８において最大リトライ時間を動的に変更するとともに、最大リトライ時間に応じて、実行最優先フラグをセットして、当該コマンドを最優先に処理するようにする。これにより、以下のような効果を得ることができる。
【００５０】
例えば、図７（ａ）に示すように、コマンドＣＭＤ５の実行前のリオーダリングによって実行順がＣＭＤ５→ＣＭＤ４→ＣＭＤ３→ＣＭＤ２→ＣＭＤ１と決定された後、そのままの順番で、かつ最大リトライ時間を初期値としたままコマンドを実行することとする。この場合、コマンドＣＭＤ１は８回リトライ（図７（ａ）では、リトライ回数が☆にて示されている）した段階で、タイムアウトしてしまう。これに対し、本実施形態のように、コマンドスタック時間Ｔcurrに応じて最大リトライ時間を変更（削減）することにより、例えば、図７（ｂ）に示すように、コマンドＣＭＤ１を４回リトライした時点で、当該コマンドＣＭＤ１を強制的にエラー終了させる。このようにコマンドＣＭＤ１をタイムアウト前にエラー終了させることで、ＨＤＤ１００からホスト１０に対してエラー報告を行うことができる。これにより、タイムアウトしたときには行われない、ホスト側において行われる障害解析などにより、エラー原因の特定を行うことが可能となる。
【００５１】
また、例えば、図８（ａ）に示すように、コマンドＣＭＤ５を実行した段階で、コマンドＣＭＤ１がタイムアウトになりそうな場合（すなわち、ステップＳ３２のように最大リトライ時間が０になる場合）に、本実施形態では、コマンドＣＭＤ１の最優先フラグをセットする。この場合、図８（ｂ）に示すように、コマンドＣＭＤ１の実行順を最優先とすることで、コマンド１及びその他のコマンドのタイムアウトを回避することが可能となる。
【００５２】
次に、本実施形態におけるデキュー時（コマンド実行タイミング（図２の時刻Ｃ））の処理について、図９に基づいて説明する。
【００５３】
まず、図９のステップＳ５０では、ＭＰＵ２４が実行対象のコマンドを読み出し、次のステップＳ５２では、コマンド期待実行時間Ｔcurrが最大リトライ時間の初期値Ｔmax(retry)よりも小さいか否かを判断する。
【００５４】
ここでの判断が肯定された場合（図５のケース１の場合）には、ステップＳ５４において、図４のステップＳ２８と同様、コマンドキューイング処理部２６が、新たな最大リトライ時間（Ｔmax(retry)’）として、Ｔmax(retry)−Ｔcurrを設定する。そして、ＭＰＵ２４は、実行対象のコマンドを実行する（ステップＳ６０）。一方、ステップＳ５２の判断が否定された場合には、ステップＳ５６に移行する。
【００５５】
ステップＳ５６では、コマンドスタック時間Ｔcurrが最大リトライ時間の初期値Ｔmax(retry)と一致するか否かを判断し、判断が肯定された場合（ケース２の場合）には、ステップＳ５８に移行する。
【００５６】
ステップＳ５８では、図４のステップ３２と同様、新たなＴmax(retry)’として０を設定する。すなわち、リトライを禁止にする。そして、ＭＰＵ２４は、このリトライ禁止の状態で、ステップＳ６０においてコマンドを実行する。
【００５７】
一方、ステップＳ５６の判断が否定された場合（図５のケース３，ケース４の場合）には、コマンドを実行するために必要な最低限の時間（コマンド期待実行時間Ｔexp）がない（すなわち、コマンド期待実行時間Ｔexpがコマンドスタック時間Ｔcurrに侵食されている）ので、実行対象のコマンドを強制的にエラー終了して、当該エラー終了をホスト１０に通知する。
【００５８】
上記のように、デキュー時にも最大リトライ時間を調整する処理を実行することにより、適切な最大リトライ時間の下で、コマンドを実行することが可能となる。これにより、コマンドのタイムアウトの発生を抑制することができる。また、ステップＳ５６のように、コマンド実行前にコマンドをエラー終了することにより、タイムアウトの蓋然性の高いコマンドの実行を事前に回避することができるので、コマンド実行の効率化を図ることができる。
【００５９】
以上、詳細に説明したように、本実施形態によると、コマンド実行順を並び替えるリオーダリング時に、スタックされている全コマンドのうちの少なくとも１つのコマンドの最大リトライ時間を、コマンドが入力されてからの経過時間に応じて調整（短縮）するので、コマンド実行時のタイムアウトを抑制することができる。また、本実施形態によると、コマンドを実行するデキュー時にも、実行するコマンドの最大リトライ時間をコマンドが入力されてからの経過時間に応じて調整（短縮）するので、実行するコマンドのタイムアウトを抑制することができる。この場合、タイムアウト前にコマンドをエラー終了することで、ホスト１０に対してエラー報告を行うことができるので、ホスト１０側において行われる障害解析などにより、エラー原因を特定することが可能である。
【００６０】
また、本実施形態によると、リオーダリング時において、コマンドスタック時間が最大リトライ時間の初期値Ｔmax(retry)以上となっているコマンドを最優先に実行するので、最大リトライ時間が確保できなくなったコマンドを最優先で実行することでタイムアウトの発生を抑制することができる。
【００６１】
また、本実施形態では、コマンドスタック時間が、最大リトライ時間の初期値Ｔmax(retry)を超過していない場合に、コマンドキューイング処理部２６が、最大リトライ時間の初期値Ｔmax(retry)からスタック時間Ｔcurrを差し引いた時間を新たな最大リトライ時間として設定するので、簡易な計算で最大リトライ時間を適切に設定することが可能である。
【００６２】
また、本実施形態では、リオーダリング時において、コマンドスタック時間Ｔcurrが、最大リトライ時間の初期値Ｔmax(retry)とコマンド実行時間Ｔexpとの和を超過したコマンドを、強制的にエラー終了するので、タイムアウトが必然的に発生するような場合にまでコマンドを実行してしまうような事態を未然に回避することができる。これにより効率的なコマンド実行処理を実現することが可能である。
【００６３】
また、デキュー時において（コマンド実行タイミングで）、実行対象のコマンドのコマンドスタック時間Ｔcurrが、最大リトライ時間の初期値Ｔmax(retry)を超過している場合に、当該コマンドを強制的にエラー終了するので、この点からも、効率的なコマンド実行処理を実現することが可能である。
【００６４】
なお、上記実施形態では、リオーダリング時及びデキュー時（コマンド実行タイミング）のそれぞれにおいて最大リトライ時間の調整を行うこととしたが、これに限らず、いずれか一方のタイミングでのみ最大リトライ時間の調整を行うこととしても良い。
【００６５】
また、上記実施形態では、最大リトライ時間の調整処理と、最大リトライ時間とコマンドスタック時間との関係から最優先コマンドを設定する処理との両方を行う場合について説明したが、これに限らず、最大リトライ時間の調整のみを行うこととしても良い。
【００６６】
なお、コマンドにおける最大リトライ時間の初期値Ｔmax(retry)や、コマンド期待実行時間Ｔexpなどの時間は、コマンドごとに異なっているのが通常であるが、一部又は全部が同一であっても良い。
【００６７】
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。
【図面の簡単な説明】
【００６８】
【図１】一実施形態に係るＨＤＤの構成を示すブロック図である。
【図２】コマンド処理の手順を示す図である。
【図３】図２の時刻Ａ〜時刻Ｂの間におけるＭＰＵの処理を示すフローチャートである。
【図４】リオーダリング時のＭＰＵの処理を示すフローチャートである。
【図５】ケースごとの、最大リトライ時間の初期値Ｔmax(retry)及びコマンド気体実行時間Ｔexpと、コマンドスタック時間Ｔcurrとの関係を示す概念図である。
【図６】リオーダリング方法について説明するための図である。
【図７】一実施形態におけるリオーダリングによる効果を示す図（その１）である。
【図８】一実施形態におけるリオーダリングによる効果を示す図（その２）である。
【図９】デキュー時の処理を示すフローチャートである。
【図１０】従来のリオーダリング方法について示す図である。
【符号の説明】
【００６９】
１０  ホスト
２６  コマンドキューイング処理部（最適化手段、調整手段）
１００  ＨＤＤ（記憶装置）
【図１】
2010044814.tif 000003
【図２】
2010044814.tif 000004
【図３】
2010044814.tif 000005
【図４】
2010044814.tif 000006
【図５】
2010044814.tif 000007
【図６】
2010044814.tif 000008
【図７】
2010044814.tif 000009
【図８】
2010044814.tif 000010
【図９】
2010044814.tif 000011
【図１０】
2010044814.tif 000012