(57)【要約】【課題】ディスクリトライが多発するＬＢＡに対応するコマンドの実行を後回しにしてコマンドタイムアウトの発生を抑制するディスク装置及びコマンド処理方法を提供する。【解決手段】ディスク装置が備える制御部１０が、コマンドをキュー２０に格納し、キュー２０に格納されたコマンドの実行が所定時間内に完了しなかった場合に、上記所定時間内に実行されたコマンドであってディスクリトライの回数が所定回数を超えたコマンドに対応するＬＢＡを監視対象ＬＢＡとして監視対象ＬＢＡ管理テーブル１０４に記憶する。また、制御部１０が、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４に記憶された監視対象ＬＢＡに該当する場合に、該コマンドをキュー２０の最後尾の位置に並び替える。【選択図】図２
2009282871.tif 000002
【特許請求の範囲】
【請求項１】
ディスクと、該ディスクに対するコマンドを実行する制御手段とを備えるディスク装置であって、
前記制御手段が、
前記コマンドをキューに格納し、該キューの先頭の位置に格納されているコマンドを取り出して、実行対象のコマンドとして実行し、
前記キューに格納されたコマンドの該制御手段における滞在時間を監視し、該コマンドの実行が所定時間内に完了しなかった場合に、該所定時間内に実行されたコマンドであってディスクリトライの回数が所定回数を超えたコマンドに対応する論理ブロックアドレスを監視対象アドレスとして第１の記憶手段に記憶し、
実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されているかを判断し、実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されていると判断した場合に、該実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当するかを判断し、
前記実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当すると判断された場合に、該コマンドを前記キューの最後尾の位置に並び替える
ことを特徴とするディスク装置。
【請求項２】
前記制御手段が、前記実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当すると判断した場合に、前記キューに格納されているコマンドのうち、コマンドの種別が前記実行対象のコマンドの種別と異なり、かつ、該キューに格納されているコマンドに対応する論理ブロックアドレスが前記監視対象アドレスと重なるコマンドを選択コマンドとして選択し、前記キューにおいて前記実行対象のコマンドを該選択コマンドの直前の位置に並び替える
ことを特徴とする請求項１に記載のディスク装置。
【請求項３】
前記制御手段が、前記監視対象アドレスを不揮発性の第２の記憶手段に記憶する
ことを特徴とする請求項１又は請求項２に記載のディスク装置。
【請求項４】
ディスクと、該ディスクに対するコマンドを実行する制御手段とを備えるディスク装置におけるコマンド処理方法であって、
前記制御手段が、前記コマンドをキューに格納し、該キューの先頭の位置に格納されているコマンドを取り出して、実行対象のコマンドとして実行し、
前記キューに格納されたコマンドの該制御手段における滞在時間を監視し、該コマンドの実行が所定時間内に完了しなかった場合に、該所定時間内に実行されたコマンドであってディスクリトライの回数が所定回数を超えたコマンドに対応する論理ブロックアドレスを監視対象アドレスとして第１の記憶手段に記憶し、
実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されているかを判断し、実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されていると判断した場合に、該実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当するかを判断し、
前記実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当すると判断された場合に、該コマンドを前記キューの最後尾の位置に並び替える
ことを特徴とするコマンド処理方法。
【請求項５】
前記実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当すると判断された場合に、前記キューに格納されているコマンドのうち、コマンドの種別が前記実行対象のコマンドの種別と異なり、かつ、該キューに格納されているコマンドに対応する論理ブロックアドレスが前記監視対象アドレスと重なるコマンドを選択コマンドとして選択し、前記キューにおいて前記実行対象のコマンドを該選択コマンドの直前の位置に並び替える
ことを特徴とする請求項４に記載のコマンド処理方法。
【請求項６】
前記制御手段が、前記監視対象アドレスを不揮発性の第２の記憶手段に記憶する
ことを特徴とする請求項４又は請求項５に記載のコマンド処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コマンドのタイムアウトの発生を抑制するディスク装置及びコマンド処理方法に関する。
【背景技術】
【０００２】
従来のコマンド処理技術として、コマンドの実行中にエラーが発生した場合に、実行中のコマンドをコマンドキューに戻し、実行待ちコマンドの中から次に実行するコマンドを選択するディスク装置が提案されている（例えば、特許文献１を参照）。
【０００３】
また、記憶装置における回復処理状況に応じたコマンド並べ替え処理を行うリオーダリングコントローラが提案されている（例えば、特許文献２を参照）。
【特許文献１】特開２００１−１００９３５号公報
【特許文献２】特開２００２−３０４８２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
近年、ディスク装置は、装置容量の増加に伴う媒体面の記録密度向上により、データの品質を維持する事が難しくなってきている。そのため、エラー発生時には、ディスクリトライ（エラーリトライ）処理でのエラー救済を重視しており、その結果、ディスクリトライ処理時間が増大している。逆に、ディスク装置に対してコマンドの実行を要求するホストコンピュータは、性能が向上している。従って、ディスク装置のコマンド処理時間の高速化が求められている。
【０００５】
ディスク装置が、エラー救済の為、ディスクリトライ処理を延々と実施すると、ホストコンピュータにおいてコマンドタイムアウトが頻発し、ホストコンピュータは、コマンドのアボート処理および再発行処理を実施する。その結果、ホストコンピュータの処理の負荷が過大になるという問題が生じる。
【０００６】
また、ディスク装置は、通常、コマンドの論理ブロックアドレス(LBA:Logical Block Address) に基づいて、最も効率良くアクセス出来る順にコマンドを実行する。しかし、本発明者の検討によれば、該コマンドを実行するアルゴリズムは、ディスクリトライを想定していない。従って、あるＬＢＡに対応するコマンドの実行処理においてエラーが発生した場合に、ディスクリトライ処理の実行時間が長くなると、エラーが発生したコマンド以降に実行対象となるコマンドであって、正常に応答できる可能性のあるコマンド（他のＬＢＡに対応するコマンド）までコマンドタイムアウトの対象となってしまう。
【０００７】
ホストコンピュータは、例えばコマンドタイムアウトの累積検出回数が閾値に達したディスク装置を交換対象としてホストコンピュータから切り離す。従って、ディスク装置が、ディスクリトライが多発する特定のＬＢＡに対応するディスクリトライが原因となってコマンドタイムアウトの発生回数が増加し、ホストコンピュータから切り離されてしまうという問題が発生する。
【０００８】
図１１は、ディスク装置におけるコマンド処理の問題点について説明する図である。図１１中のＣＭＤ＃１乃至ＣＭＤ＃Ｎは、ホストコンピュータからディスク装置に対して送信されたコマンドである。また、Ｘ＃１はＣＭＤ＃１の発行時間を示すタイムスタンプ、Ｘ＃２はＣＭＤ＃２の発行時間を示すタイムスタンプ、Ｘ＃３はＣＭＤ＃３の発行時間を示すタイムスタンプ、Ｘ＃４はＣＭＤ＃４の発行時間を示すタイムスタンプ、Ｘ＃ＮはＣＭＤ＃Ｎの発行時間を示すタイムスタンプである。ＣＭＤ＃２がディスクリトライが多発するＬＢＡに対応するコマンドであるものとする。図１１中の＃Ａに示すように、ディスク装置は、時刻ｔ１にＣＭＤ＃１を実行し、＃Ｂに示すように、時刻ｔ２にＣＭＤ＃２を実行する。時刻ｔ３においてＣＭＤ＃２の実行エラーが発生して、＃Ｃに示すように、ディスク装置がディスクリトライ処理を実行する。例えば、図中の時刻ｔ４までディスクリトライ処理が完了しない等、該ディスクリトライ処理に時間がかかると、ＣＭＤ＃２の実行以降に実行対象となるコマンドであるＣＭＤ＃３、ＣＭＤ＃４、ＣＭＤ＃Ｎがコマンドタイムアウトとなってしまう。
【０００９】
本発明は、ディスクリトライが多発するＬＢＡに対応するコマンドの実行を後回しにして、コマンドタイムアウトの発生を抑制するディスク装置の提供を目的とする。
【００１０】
また、本発明は、ディスクリトライが多発するＬＢＡに対応するコマンドの実行を後回しにして、コマンドタイムアウトの発生を抑制するコマンド処理方法の提供を目的とする。
【課題を解決するための手段】
【００１１】
本ディスク装置は、ディスクと、該ディスクに対するコマンドを実行する制御手段とを備えるディスク装置であって、前記制御手段が、前記コマンドをキューに格納し、該キューの先頭の位置に格納されているコマンドを取り出して、実行対象のコマンドとして実行し、前記キューに格納されたコマンドの該制御手段における滞在時間を監視し、該コマンドの実行が所定時間内に完了しなかった場合に、該所定時間内に実行されたコマンドであってディスクリトライの回数が所定回数を超えたコマンドに対応する論理ブロックアドレスを監視対象アドレスとして第１の記憶手段に記憶し、実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されているかを判断し、実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されていると判断した場合に、該実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当するかを判断し、前記実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当すると判断された場合に、該コマンドを前記キューの最後尾の位置に並び替える。
【００１２】
また、本コマンド処理方法は、ディスクと、該ディスクに対するコマンドを実行する制御手段とを備えるディスク装置におけるコマンド処理方法であって、前記制御手段が、前記コマンドをキューに格納し、該キューの先頭の位置に格納されているコマンドを取り出して、実行対象のコマンドとして実行し、前記キューに格納されたコマンドの該制御手段における滞在時間を監視し、該コマンドの実行が所定時間内に完了しなかった場合に、該所定時間内に実行されたコマンドであってディスクリトライの回数が所定回数を超えたコマンドに対応する論理ブロックアドレスを監視対象アドレスとして第１の記憶手段に記憶し、実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されているかを判断し、実行対象のコマンドの実行以降に実行されるコマンドが前記キューに格納されていると判断した場合に、該実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当するかを判断し、前記実行対象のコマンドに対応する論理ブロックアドレスが前記第１の記憶手段に記憶された監視対象アドレスに該当すると判断された場合に、該コマンドを前記キューの最後尾の位置に並び替える。
【発明の効果】
【００１３】
本ディスク装置及び本コマンド処理方法は、ディスクリトライの回数が所定回数を超えている論理ブロックアドレス（ＬＢＡ）に対応するコマンドをキューの最後尾に並び替えることによって、該コマンドの処理を後回しにする。従って、本ディスク装置及び本コマンド処理方法によれば、ディスクリトライの発生回数が少なく正常に応答できる可能性が高いＬＢＡ（正常なＬＢＡ）に対応するコマンドが優先して実行されることとなるため、ホストによるコマンドタイムアウトの累積検出回数を大幅に減らすことができる。
【発明を実施するための最良の形態】
【００１４】
図１は、本実施形態のディスク装置のハードウェア構成例を示す図である。図１に示すディスク装置１は、ＭＰＵ（Micro Processing Unit ）１１、ＨＤＤ（Hard Disk Drive ）コントローラ１２、バッファ１３、メモリ１４、ディスク１５、ロム１６を備える。ホストコンピュータ（以下、ホストという）２は、コマンドを発行し、インタフェース（Ｉ／Ｆ）を通じてディスク装置１に対して該コマンドを送信して、該コマンドの実行をディスク装置１に要求する。ホスト２が発行するコマンドは、例えば、ディスク１５に対してデータを書き込むコマンド（ライトコマンド）又はディスク１５からデータを読み込むコマンド（リードコマンド）である。
【００１５】
ＭＰＵ１１は、後述するメモリ１４内のコマンド処理プログラムに従って、後述するコマンドの並べ替え処理により得たコマンドをＨＤＤコントローラ１２に指示して、コマンド処理を行わせる。
【００１６】
ＨＤＤコントローラ１２は、バッファ１３を介してディスク１５へデータの書き込み（ライトコマンド）／読み込み（リードコマンド）を実行する。
【００１７】
バッファ１３は、コマンド、データ等を記憶する記憶手段である。メモリ１４には、本実施形態のコマンド処理方法を実現するコマンド処理プログラムがロードされる。ディスク１５は、ＨＤＤコントローラ１２によるコマンドの実行対象となる磁気記録媒体である。ディスク１５は、ユーザエリアとシステムエリアを有している。ユーザエリアは、ホスト２からディスク装置１に対して送信されるコマンドの対象となるデータが格納される領域である。システムエリアは、後述する監視対象ＬＢＡが格納される不揮発性の記憶領域である。該システムエリアに監視対象ＬＢＡが格納されることによって、ディスク装置１の電源ＯＦＦ中にも監視対象ＬＢＡが消去されることなくディスク装置１内において保持される。
【００１８】
監視対象ＬＢＡは、ディスクリトライの発生回数が所定回数以上であるコマンドに対応するＬＢＡである。ロム１６には、コマンド処理プログラムが予め格納されている。ロム１６に格納されているコマンド処理プログラムは、ディスク装置１の電源投入時にメモリ１４内にロードされる。図中に示すＭＰＵ１１、ＨＤＤコントローラ１２、バッファ１３、メモリ１４が、本実施形態のコマンド処理方法を実現する制御部１０を構成する。
【００１９】
図２は、図１に示す制御部の機能ブロック図の例を示す図である。制御部１０は、コマンド実行部１０１、キューイング部１０２、ディスクリトライ検出部１０３、監視対象ＬＢＡ管理テーブル１０４を備える。
【００２０】
コマンド実行部１０１は、ディスク１５に対するコマンドを実行する。具体的には、コマンド実行部１０１は、キューイング部１０２に指示して、図１に示すホスト２から送信されたコマンドを所定のキュー２０に格納させ、キュー２０の先頭から順次コマンドを取り出して、実行対象のコマンドとして実行する。また、コマンド実行部１０１は、ホスト２から送信されたコマンドの滞在時間を監視し、該コマンドの実行が所定時間内に完了しなかった場合に、該所定時間内に実行されたコマンドであってディスクリトライの回数が所定回数を超えたコマンドに対応するＬＢＡを監視対象アドレス（監視対象ＬＢＡ）として監視対象ＬＢＡ管理テーブル１０４に記憶する。コマンドの滞在時間は、制御部１０が該コマンドをホスト２から受信してから現時点までの経過時間である。具体的には、コマンド実行部１０１が備えるタイムアウト監視部１１０が、コマンドの滞在時間が所定時間を超えたかを判断する。また、コマンド実行部１０１は、後述するディスクリトライ検出部１０３からディスクリトライの発生の検出結果に基づいて、ディスクリトライの回数が所定回数を超えたかを判断する。
【００２１】
また、コマンド実行部１０１は、実行対象のコマンドの実行以降に実行されるコマンドが上記キュー２０に格納されているかを判断し、実行対象のコマンドの実行以降に実行されるコマンドがキュー２０に格納されていると判断した場合に、該実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４に記憶された監視対象ＬＢＡに該当するかを判断し、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡに該当すると判断された場合に、該コマンドをキュー２０の最後尾の位置に並び替える。該コマンドがキュー２０の最後尾の位置に並び替えられることにより、該コマンド（ディスクリトライの発生回数が所定回数以上である監視対象ＬＢＡに対応するコマンド）の実行が後回しにされる。
【００２２】
例えば、図３（Ａ）に示すように、当初キュー２０においてＣＭＤ＃１というコマンドを先頭にして、ＣＭＤ＃２、ＣＭＤ＃３、ＣＭＤ＃４、ＣＭＤ＃５というコマンドが順次格納されているものとする。ＣＭＤ＃１が現時点における実行対象のコマンドである。ＣＭＤ＃１が、監視対象ＬＢＡである場合、制御部１０は、ＣＭＤ＃１をキュー２０の最後尾の位置に並び替える。その結果、キュー２０におけるコマンドの並び順は、図３（Ｂ）に示すように、ＣＭＤ＃２、ＣＭＤ＃３、ＣＭＤ＃４、ＣＭＤ＃５、ＣＭＤ＃１の順となる。
【００２３】
キューイング部１０２は、ホスト２から送信されたコマンドをキュー２０に格納する。ディスクリトライ検出部１０３は、ディスク１５からのディスクリトライ（エラーリトライ）発生の割り込みに基づいて、ディスクリトライの発生を検出して、検出結果をコマンド実行部１０１に通知する。監視対象ＬＢＡ管理テーブル１０４には、監視対象ＬＢＡが記憶される。
【００２４】
本発明の一実施形態によれば、制御部１０が、上記実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡに該当すると判断した場合に、キュー２０に格納されているコマンドのうち、コマンドの種別が実行対象のコマンドの種別と異なり、かつ、キュー２０に格納されているコマンドに対応する論理ブロックアドレスが上記監視対象アドレスと重なるコマンドを選択コマンドとして選択し、キュー２０において上記実行対象のコマンドを該選択コマンドの直前の位置に並び替えるようにしてもよい。上記コマンドの種別は、コマンドがライトコマンドであるかリードコマンドであるかを示す。
【００２５】
例えば、上述した図３（Ａ）のキュー２０に格納されているコマンドのうち、ＣＭＤ＃１、ＣＭＤ＃２、ＣＭＤ＃４がリードコマンドであり、ＣＭＤ＃３、ＣＭＤ＃５がライトドコマンドであるものとする。また、ＣＭＤ＃３に対応するＬＢＡとＣＭＤ＃１に対応するＬＢＡとがアドレス範囲が重なり、ＣＭＤ＃５に対応するＬＢＡとＣＭＤ＃１に対応するＬＢＡとはアドレス範囲が重ならないものとする。
【００２６】
図３（Ａ）に示すコマンドの格納例において、現時点で実行対象のコマンドであるＣＭＤ＃１が監視対象ＬＢＡである場合、制御部１０は、ＣＭＤ＃２乃至ＣＭＤ＃５のうち、ＣＭＤ＃１とコマンドの種別が異なり、かつ、対応するＬＢＡの範囲が重なるＣＭＤ＃３を選択コマンドとして選択する。そして、制御部１０は、キュー２０においてＣＭＤ＃１をＣＭＤ＃３の直前の位置に並び替える。その結果、キュー２０におけるコマンドの並び順は、図３（Ｃ）に示すように、ＣＭＤ＃２、ＣＭＤ＃１、ＣＭＤ＃３、ＣＭＤ＃４、ＣＭＤ＃５の順となる。
【００２７】
制御部１０が、上記実行対象のコマンドを選択コマンドの直前の位置に並び替えることによって、コマンドの位置の並び替え後のコマンドの実行結果がホスト２が要求したコマンドの実行結果と矛盾することを防止することができる。例えば、当初図３（Ａ）に示すような格納順でコマンドがキュー２０に格納されている場合には、ホスト２が、ＣＭＤ＃１、ＣＭＤ＃３に対応するＬＢＡについて、ＣＭＤ＃１でデータをリードした後にＣＭＤ＃３でデータをライトすることを要求したことがわかる。図３（Ｃ）に示すように、制御部１０がリードコマンドであるＣＭＤ＃１をライトコマンドであるＣＭＤ＃３の直前の位置に並び替えることによって、ＣＭＤ＃１、ＣＭＤ＃３に対応するＬＢＡについては、ＣＭＤ＃１でデータがリードした後にＣＭＤ＃３でデータがライトされるので、該ＣＭＤ＃１、ＣＭＤ＃３の実行結果は、ホスト２が本来要求したコマンドの実行結果と矛盾しない。
【００２８】
図４は、監視対象ＬＢＡ管理テーブルに記憶される監視対象ＬＢＡの例を示す図である。監視対象ＬＢＡ管理テーブル１０４は、例えば４バイト（Ｂｙｔｅ）形式の配列で表現される。コマンド実行部１０１は、図４に示す監視対象ＬＢＡ管理テーブル１０４の各レコード（一行分の格納領域）に監視対象ＬＢＡを記憶する。
【００２９】
図５及び図６は、本実施形態のディスク装置によるコマンド処理フローの一例を示す図である。まず、図５のステップＳ１において、ディスク装置が電源ＯＮされ、制御部１０が、ディスク装置１の電源ＯＦＦ以前にディスク１５のシステムエリアに記憶された監視対象ＬＢＡを該システムエリアから監視対象ＬＢＡ管理テーブル１０４にロードする（ステップＳ１）。なお、制御部１０が、監視対象ＬＢＡをディスク１５のシステムエリアからではなく、監視対象ＬＢＡが記憶された任意の不揮発性の記憶手段からロードするようにしてもよい。制御部１０が、ホスト２からコマンドを受信したかを判断する（ステップＳ２）。制御部１０が、ホスト２からコマンドを受信したと判断した場合は、ステップＳ３に進む。制御部１０が、ホスト２からコマンドを受信していないと判断した場合、制御部１０は、予め定められた時間経過したかを判断する（ステップＳ８）。制御部１０が、予め定められた時間経過していないと判断した場合は、ステップＳ８に戻る。制御部１０が、予め定められた時間経過したと判断した場合は、制御部１０は、監視対象ＬＢＡを監視対象ＬＢＡ管理テーブル１０４からディスク１５のシステムエリアにセーブして（ステップＳ９）、ステップＳ２に戻る。なお、制御部１０が、監視対象ＬＢＡをディスク１５のシステムエリアにではなく、任意の不揮発性の記憶手段に記憶するようにしてもよい。ステップＳ３において、制御部１０が、受信されたコマンドをキュー２０の最後尾に追加し（ステップＳ３）、図６のステップＳ４に進む。
【００３０】
図６のステップＳ４において、制御部１０が、実行対象のコマンド（キュー２０の先頭に格納されているコマンド）に対応するＬＢＡが監視対象ＬＢＡであり、かつ、実行対象のコマンドの実行以降に実行される他のコマンドがキュー２０に格納されているかを判断する（ステップＳ４）。
【００３１】
制御部１０が、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡであり、かつ、実行対象のコマンドの実行以降に実行される他のコマンドがキュー２０に格納されていると判断した場合、制御部１０は、実行対象のコマンドをキュー２０の最後尾に並び替えて（ステップＳ１０）、ステップＳ４に戻る。
【００３２】
制御部１０が、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡでないと判断した場合、又は、実行対象のコマンドの実行以降に実行される他のコマンドがキュー２０に格納されていないと判断した場合、制御部１０は、実行対象のコマンドを実行する（ステップＳ５）。制御部１０が、コマンドの実行が完了したかを判断する（ステップＳ６）。制御部１０が、コマンドの実行が完了したと判断した場合、制御部１０は、キュー２０内にコマンドが残っているかを判断する（ステップＳ７）、制御部１０が、キュー２０内にコマンドが残っていると判断した場合は、ステップＳ４に戻る。制御部１０が、キュー２０内にコマンドが残っていないと判断した場合は、図５のステップＳ２に戻る。
【００３３】
上記ステップＳ６において、制御部１０が、コマンドの実行が完了していないと判断した場合、制御部１０は、図８を参照して説明するコマンドタイムアウト検出処理を行う（ステップＳ１１）。
【００３４】
図７は、図６のステップＳ４、Ｓ１０における処理（コマンドの並び替え処理）の詳細を説明する図である。図７中のステップＳ１０、ステップＳ５において実行される処理は、図６中のステップＳ１０、ステップＳ５において実行される処理と同様である。
【００３５】
まず、制御部１０が、監視対象ＬＢＡ管理テーブル１０４を参照し、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４内にあるかを判断する（ステップＳ２１）。制御部１０が、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４内にないと判断した場合は、ステップＳ５に進んで、制御部１０がコマンドを実行する。制御部１０が、実行対象のコマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４内にあると判断した場合は、制御部１０が、実行対象のコマンドの実行以降に実行される他のコマンドがキュー２０に格納されているかを判断する（ステップＳ２２）。制御部１０が、実行対象のコマンドの実行以降に実行される他のコマンドがキュー２０に格納されていないと判断した場合は、ステップＳ５に進む。制御部１０が、実行対象のコマンドの実行以降に実行される他のコマンドがキュー２０に格納されていると判断した場合は、ステップＳ１０に進んで、制御部１０が、実行対象のコマンドをキュー２０の最後尾に並び替える。
【００３６】
図８は、図６のステップＳ１１におけるコマンドタイムアウト検出処理の詳細を説明する図である。まず、制御部１０が、コマンドを受信してからの経過時間が所定の制限時間（タイムアウト制限時間）を超えているかを判断する（ステップＳ３１）。制御部１０が、コマンドを受信してからの経過時間がタイムアウト制限時間を超えていないと判断した場合は、制御部１０は、コマンドの実行が終了したかを判断する（ステップＳ３２）。制御部１０が、コマンドの実行が終了していないと判断した場合は、上記ステップＳ３１に戻る。制御部１０が、コマンドの実行が終了したと判断した場合は該コマンドの実行を完了する（ステップＳ３３）。
【００３７】
上記ステップＳ３１において、制御部１０が、コマンドを受信してからの経過時間がタイムアウト制限時間を超えていると判断した場合、制御部１０は、コマンドタイムアウトを検出して、監視対象ＬＢＡの登録処理を実行する（ステップＳ３４）。
【００３８】
図９は、図８のステップＳ３４における監視対象ＬＢＡの登録処理の詳細を説明する図である。まず、制御部１０が、コマンドタイムアウトが検出されたコマンドの実行前に実行されたコマンドのうち、コマンドタイムアウトが検出されたコマンドの実行の直前に実行されたコマンドを対象コマンドとして選択し、対象コマンドが該コマンドタイムアウトが検出されたコマンドについてのタイムアウト制限時間中に実行されていたコマンドであるかを判断する（ステップＳ４１）。例えば、コマンドＣＭＤ＃１、コマンドＣＭＤ＃２、コマンドＣＭＤ＃３の順に各々のコマンドが実行されて、コマンドＣＭＤ＃３についてコマンドタイムアウトが検出された場合を想定する。制御部１０は、例えば、コマンドＣＭＤ＃３が実行される直前に実行されたコマンドＣＭＤ＃２を対象コマンドとして、該コマンドＣＭＤ＃２がコマンドＣＭＤ＃３についてのタイムアウト制限時間中に実行されていたコマンドであるかを判断する。
【００３９】
制御部１０が、対象コマンドがタイムアウト制限時間中に実行されていたコマンドでないと判断した場合は、処理を終了する。制御部１０が、対象コマンドがタイムアウト制限時間中に実行されていたコマンドであると判断した場合は、制御部１０は、対象コマンドについてのディスクリトライ回数が所定回数以上であるかを判断する（ステップＳ４２）。制御部１０が、対象コマンドについてのディスクリトライ回数が所定回数以上でないと判断した場合は、ステップＳ４５に進む。制御部１０が、対象コマンドについてのディスクリトライ回数が所定回数以上であると判断した場合は、制御部１０は、対象コマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４に既に登録されている監視対象ＬＢＡと一致しないかを判断する（ステップＳ４３）。制御部１０が、対象コマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４に既に登録されている監視対象ＬＢＡと一致すると判断した場合は、ステップＳ４５に進む。制御部１０が、対象コマンドに対応するＬＢＡが監視対象ＬＢＡ管理テーブル１０４に既に登録されている監視対象ＬＢＡと一致しないと判断した場合は、対象コマンドに対応するＬＢＡを監視対象ＬＢＡとして監視対象ＬＢＡ管理テーブル１０４に登録する（ステップＳ４４）。そして、制御部１０が、該対象コマンドの直前に実行されたコマンドを新たな対象コマンドとして選択して（ステップＳ４５）、ステップＳ４１に戻る。
【００４０】
図１０は、本実施形態のディスク装置によるコマンド処理方法の適用例を示す図である。図中のＣＭＤ＃１乃至ＣＭＤ＃Ｎ、Ｘ＃１乃至Ｘ＃Ｎは、それぞれ、図１１を参照して前述したＣＭＤ＃１乃至ＣＭＤ＃Ｎ、Ｘ＃１乃至Ｘ＃Ｎと同様である。また、ＣＭＤ＃２に対応するＬＢＡが監視対象ＬＢＡであるものとする。
【００４１】
本実施形態のディスク装置１は、時刻ｔ１にＣＭＤ＃１を実行した後（図１０中の＃Ａを参照）、ＣＭＤ＃２をキュー２０の最後尾に並び替えることによってＣＭＤ＃２の実行を後回しにして（図１０中の＃Ｂを参照）、時刻ｔ２、時刻ｔ３に、それぞれ、ＣＭＤ＃３、ＣＭＤ＃４を順次実行する（図１０中の＃Ｃ及び＃Ｄを参照）。そして、時刻ｔ４にＣＭＤ＃Ｎを実行し（図１０中の＃Ｅを参照）、キュー２０に格納されているコマンドがＣＭＤ＃２のみになった時（時刻ｔ５）に、ＣＭＤ＃２の実行を開始する（図１０中の＃Ｆを参照）。ディスク装置１が、図１０を参照して上述したコマンド処理を行うことによって、ディスクリトライ発生回数が多いＬＢＡに対応するコマンドであるＣＭＤ＃２以外のコマンドが優先して実行されるため、ＣＭＤ＃２以外のコマンドについてのコマンドタイムアウトの発生回数を抑えることができる。
【図面の簡単な説明】
【００４２】
【図１】本実施形態のディスク装置のハードウェア構成例を示す図である。
【図２】制御部の機能ブロック図の例を示す図である。
【図３】キューへのコマンドの格納例を示す図である。
【図４】監視対象ＬＢＡの例を示す図である。
【図５】コマンド処理フローの一例を示す図である。
【図６】コマンド処理フローの一例を示す図である。
【図７】コマンドの並び替え処理の詳細を説明する図である。
【図８】コマンドタイムアウトの検出処理の詳細を説明する図である。
【図９】監視対象ＬＢＡの登録処理の詳細を説明する図である。
【図１０】コマンド処理方法の適用例を示す図である。
【図１１】ディスク装置におけるコマンド処理の問題点について説明する図である。
【符号の説明】
【００４３】
１  ディスク装置
２  ホストコンピュータ
３  Ｉ／Ｆ
１０  制御部
１１  ＭＰＵ
１２  ＨＤＤコントローラ
１３  バッファ
１４  メモリ
１５  ディスク
１６  ロム
２０  キュー
１０１  コマンド実行部
１０２  キューイング部
１０３  ディスクリトライ検出部
１０４  監視対象ＬＢＡ管理テーブル
１１０  タイムアウト監視部
【図１】
2009282871.tif 000003
【図２】
2009282871.tif 000004
【図３】
2009282871.tif 000005
【図４】
2009282871.tif 000006
【図５】
2009282871.tif 000007
【図６】
2009282871.tif 000008
【図７】
2009282871.tif 000009
【図８】
2009282871.tif 000010
【図９】
2009282871.tif 000011
【図１０】
2009282871.tif 000012
【図１１】
2009282871.tif 000013