(57)【要約】【課題】ＲＭＷの実行回数削減による記憶装置のアクセス性能低下を抑制できる。【解決手段】記憶装置２は、第２のデータサイズのライトコマンドに対して１回の書込動作をおこなうが、第１のデータサイズのライトコマンドに対して第２のデータサイズのデータの読出動作を伴うＲＭＷをおこなう。コマンド振分部４は、受け付けたコマンドを、第２のデータサイズとバウンダリが一致しないライトコマンドである第１のコマンドと、バウンダリが一致するライトコマンドを含む第２のコマンドとに振り分けて、メモリ３に格納する。コマンド発行部５は、ＲＭＷを要する第１のコマンドに優先してＲＭＷを要しない第２のコマンドを記憶装置２に発行するとともに、所定条件成立時に第１のコマンドを第２のコマンドに変換する。【選択図】図１
2015082269.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータサイズのデータをアクセス単位とするコマンドを受け付けて、前記第１のデータサイズの所定の整数倍である第２のデータサイズのデータをアクセス単位とする記憶装置の入出力制御をおこなうストレージ制御装置において、
前記コマンドを格納可能なメモリと、
受け付けた前記コマンドを、前記第２のデータサイズとバウンダリが一致しないライトコマンドである第１のコマンドと、前記第２のデータサイズとバウンダリが一致するライトコマンドを含む第２のコマンドとに振り分けて、前記メモリに格納するコマンド振分部と、
前記第１のコマンドに優先して前記第２のコマンドを前記記憶装置に発行するとともに、所定条件成立時に前記第１のコマンドを前記第２のコマンドに変換するコマンド発行部と、
を備えるストレージ制御装置。
【請求項２】
前記メモリは、第１のキューと第２のキューとを備え、
前記コマンド振分部は、前記第２のコマンドを前記第１のキューに格納し、前記第１のコマンドを前記第２のキューに格納し、
前記コマンド発行部は、所定条件成立時に前記第２のキューからデキューした前記第１のコマンドを前記第２のコマンドに変換する、
ことを特徴とする請求項１記載のストレージ制御装置。
【請求項３】
前記コマンド発行部は、前記第１のコマンドから変換した前記第２のコマンドを前記第１のキューの先頭にキューイングする、
ことを特徴とする請求項２記載のストレージ制御装置。
【請求項４】
前記第２のコマンドは、さらに、リードコマンドを含み、
前記コマンド発行部は、前記記憶装置から受け付けたリードコマンドの応答に含まれる読出データに、前記第１のコマンドの書込データを重畳した重畳データを生成し、前記第１のコマンドを、前記重畳データを書込データとするライトコマンドに変換する、
ことを特徴とする請求項２または請求項３記載のストレージ制御装置。
【請求項５】
前記コマンド発行部は、２以上の前記第１のコマンドの書込領域が同一の物理セクタ内にある場合に、前記２以上の前記第１のコマンドを１つのライトコマンドに変換する、
ことを特徴とする請求項２または請求項３記載のストレージ制御装置。
【請求項６】
前記コマンド発行部は、前記物理セクタに書き込まれているデータのすべてを、前記２以上の前記第１のコマンドの書込データで上書きする場合に、前記２以上の前記第１のコマンドを前記第２のコマンドとしてのライトコマンドに変換する、
ことを特徴とする請求項５記載のストレージ制御装置。
【請求項７】
前記第２のコマンドは、さらに、リードコマンドを含み、
前記コマンド発行部は、リードコマンドの読出領域に隣接して、前記第１のコマンドの書込領域を含む疑似読出領域があるときに、
前記リードコマンドを、前記疑似読出領域を含む範囲に前記読出領域を拡張したリードコマンドである拡張リードコマンドに変換する、
ことを特徴とする請求項２または請求項３記載のストレージ制御装置。
【請求項８】
前記コマンド発行部は、前記第２のキューにおける前記第１のコマンドのキューイング状態を評価し、前記評価にもとづいて前記拡張リードコマンドの変換の有効化と無効化とを切り替えることを特徴とする請求項７記載のストレージ制御装置。
【請求項９】
前記第２のコマンドは、さらに、リードコマンドを含み、
前記コマンド発行部は、２以上の前記第１のコマンドの書込領域が所定範囲にある場合に、前記所定範囲を含む領域を読出領域とするリードコマンドである疑似リードコマンドを生成する、
ことを特徴とする請求項２または請求項３記載のストレージ制御装置。
【請求項１０】
前記コマンド発行部は、前記第２のキューにおける前記第１のコマンドのキューイング状態を評価し、前記評価にもとづいて前記疑似リードコマンドの生成の有効化と無効化とを切り替えることを特徴とする請求項９記載のストレージ制御装置。
【請求項１１】
第１のデータサイズのデータをアクセス単位とするコマンドを受け付けて、前記第１のデータサイズの所定の整数倍である第２のデータサイズのデータをアクセス単位とする記憶装置の入出力制御をおこなうストレージ制御装置のストレージ制御プログラムにおいて、
受け付けた前記コマンドを、前記第２のデータサイズとバウンダリが一致しないライトコマンドである第１のコマンドと、前記第２のデータサイズとバウンダリが一致するライトコマンドを含む第２のコマンドとに振り分けてメモリに格納し、
前記第１のコマンドに優先して前記第２のコマンドを前記記憶装置に発行するとともに、所定条件成立時に前記第１のコマンドを前記第２のコマンドに変換する、
処理を実行させることを特徴とするストレージ制御プログラム。
【請求項１２】
第１のデータサイズのデータをアクセス単位とするコマンドを受け付けて、前記第１のデータサイズの所定の整数倍である第２のデータサイズのデータをアクセス単位とする記憶装置の入出力制御をおこなうストレージ制御装置のストレージ制御方法において、
受け付けた前記コマンドを、前記第２のデータサイズとバウンダリが一致しないライトコマンドである第１のコマンドと、前記第２のデータサイズとバウンダリが一致するライトコマンドを含む第２のコマンドとに振り分けてメモリに格納し、
前記第１のコマンドに優先して前記第２のコマンドを前記記憶装置に発行するとともに、所定条件成立時に前記第１のコマンドを前記第２のコマンドに変換する、
処理を実行することを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法に関する。
【背景技術】
【０００２】
近年のハード ディスク ドライブ（ＨＤＤ：Hard Disk Drive）の高記録密度化を背景に、ＨＤＤの物理フォーマットが５１２バイトセクタから４０９６バイトセクタ（４Ｋ）に移行しつつある。
【０００３】
一方、既存のソフトウェアは、５１２バイトの論理セクタサイズに対応しているため、４０９６バイトの論理セクタサイズに対応した４Ｋ対応のＨＤＤ（４Ｋバイトセクタ Ｎａｔｉｖｅ）との間で互換性の問題が生じる。そこで、既存のソフトウェアが５１２バイトの論理セクタサイズでアクセス可能にエミュレートする４Ｋ対応のＨＤＤ（５１２バイトセクタ Ｅｍｕｌａｔｉｏｎ）の提案があり、ＡＦＴ（Advanced Format Technology）として知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−２２１３５０号公報
【特許文献２】特開２００５−６３４４１号公報
【特許文献３】特開２０１０−２６３４５号公報
【特許文献４】特開２０１０−２１１８８８号公報
【特許文献５】特開２０１０−８００２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、５１２バイトセクタ Ｅｍｕｌａｔｉｏｎは、アクセスデータと４０９６バイトの物理セクタサイズとのバウンダリがずれた場合に、ＲＭＷ（Read Modify Write）をおこなう。ＲＭＷは、書込動作前に読込動作をおこなうことから、ディスク媒体の回転分単位（たとえば、２回転分）の遅延を生じ、ＨＤＤ（記憶装置）のアクセス性能を低下させる。
【０００６】
１つの側面では、本発明は、ＲＭＷの実行回数削減による記憶装置のアクセス性能低下を抑制できるストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、以下に示すような、ストレージ制御装置が提供される。ストレージ制御装置は、第１のデータサイズのデータをアクセス単位とするコマンドを受け付けて、第１のデータサイズの所定の整数倍である第２のデータサイズのデータをアクセス単位とする記憶装置の入出力制御をおこなう。ストレージ制御装置は、メモリと、コマンド振分部と、コマンド発行部と、を備える。メモリは、コマンドを格納可能である。コマンド振分部は、受け付けたコマンドを、第２のデータサイズとバウンダリが一致しないライトコマンドである第１のコマンドと、第２のデータサイズとバウンダリが一致するライトコマンドを含む第２のコマンドとに振り分けて、メモリに格納する。コマンド発行部は、第１のコマンドに優先して第２のコマンドを記憶装置に発行するとともに、所定条件成立時に第１のコマンドを第２のコマンドに変換する。
【発明の効果】
【０００８】
１態様によれば、ストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法において、ＲＭＷの実行回数削減による記憶装置のアクセス性能低下を抑制できる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態のストレージ制御装置の構成の一例を示す図である。
【図２】第２の実施形態のストレージシステムの構成例と、ストレージディスクアレイ装置のハードウェア構成例を示す図である。
【図３】第２の実施形態のＩ／Ｏ発行待ちキューの一例を示す図である。
【図４】第２の実施形態の書込データにおけるバウンダリの一致例および不一致例を示す図である。
【図５】第２の実施形態のアンアラインコマンドによるアクセス遅延例である。
【図６】第２の実施形態のコマンド振分処理のフローチャートを示す図である。
【図７】第２の実施形態の通常キューまたはアンアラインキューへのコマンドの振分の一例を示す図である。
【図８】第２の実施形態のアンアラインコマンドからアラインコマンドの構成例を示す図である。
【図９】第２の実施形態の疑似リードコマンドとその動作の一例を示す図である。
【図１０】第２の実施形態の複数のアンアラインコマンドの書込領域と疑似読出領域とが重複する疑似リードコマンドとその動作の一例を示す図である。
【図１１】第２の実施形態のコマンド掃き出し処理のフローチャートを示す図である。
【図１２】第２の実施形態のデキュー処理のフローチャートを示す図である。
【図１３】第２の実施形態の応答確認処理のフローチャートを示す図である。
【図１４】第２の実施形態の疑似リード設定処理のフローチャートを示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して実施の形態を詳細に説明する。
［第１の実施形態］
まず、第１の実施形態のストレージ制御装置について図１を用いて説明する。図１は、第１の実施形態のストレージ制御装置の構成の一例を示す図である。
【００１１】
ストレージ制御装置１は、図示しない上位制御装置（たとえば、ファイルサーバなど）からコマンドを受け付けて、記憶装置２の入出力制御をおこなう。ストレージ制御装置１は、上位制御装置から第１のデータサイズをアクセス単位とするコマンドを受け付ける。
【００１２】
第１のデータサイズは、従来のＨＤＤの物理セクタサイズに対応した論理セクタサイズであり、たとえば、５１２バイトや５２０バイトなどである。第２のデータサイズは、第１のデータサイズの整数倍であり、たとえば、８倍である。より、具体的には、第２のデータサイズは、４Ｋ対応のＨＤＤの物理セクタサイズに対応し、４０９６バイト（＝５１２×８）や４１６０（＝５２０×８）バイトなどである。
【００１３】
記憶装置２は、第２のデータサイズをアクセス単位として所要のデータを記憶可能であり、第１のデータサイズのコマンドに対応して入出力をおこなう。記憶装置２は、たとえばＡＦＴに準拠し、５１２バイトの論理セクタサイズで４Ｋ対応の物理セクタサイズにアクセス可能にエミュレートする。すなわち、記憶装置２は、第２のデータサイズのライトコマンドに対して１回の書込動作をおこなうが、第１のデータサイズのライトコマンドに対して第２のデータサイズのデータの読出動作を伴うＲＭＷをおこなう。
【００１４】
ストレージ制御装置１は、メモリ３と、コマンド振分部４と、コマンド発行部５とを備える。メモリ３は、たとえばキャッシュメモリであり、上位制御装置から受け付けたコマンドを格納可能である。
【００１５】
コマンド振分部４は、受け付けたコマンドを、第２のデータサイズとバウンダリが一致しないライトコマンドである第１のコマンドと、バウンダリが一致するライトコマンドを含む第２のコマンドとに振り分けて、メモリ３に格納する。なお、言い換えれば、第１のコマンドは、記憶装置２がＲＭＷを要するコマンドであり、第２のコマンドは、記憶装置２がＲＭＷを要しないコマンドである。また、第２のコマンドは、バウンダリが一致するライトコマンドの他に、リードコマンドがある。
【００１６】
たとえば、メモリ３は、第１のキュー６と第２のキュー７とを備え、コマンド振分部４は、受け付けたコマンドを第１のキュー６と第２のキュー７とに振り分ける。コマンド振分部４は、第１のコマンドを第２のキュー７に振り分けて格納し、第２のコマンドを第１のキュー６に振り分けて格納する。
【００１７】
コマンド発行部５は、第１のコマンドに優先して第２のコマンドを記憶装置２に発行するとともに、所定条件成立時に第１のコマンドを第２のコマンドに変換する。これにより、第１のコマンドは、メモリ３に滞留する時間が第２のコマンドより大きくなる。また、第１のコマンドは、メモリ３の滞留中に変換機会を得て第２のコマンドに変換され得る。
【００１８】
したがって、ストレージ制御装置１は、受け付けたコマンドのうちＲＭＷを要するコマンドを低減して記憶装置２の入出力制御をおこなうことができる。すなわち、ストレージ制御装置１は、ＲＭＷの実行回数を削減して記憶装置２のアクセス性能低下を抑制できる。
【００１９】
［第２の実施形態］
次に、第２の実施形態のストレージシステムと、ストレージディスクアレイ装置のハードウェア構成について図２を用いて説明する。図２は、第２の実施形態のストレージシステムの構成例と、ストレージディスクアレイ装置のハードウェア構成例を示す図である。
【００２０】
ストレージシステム１０は、ストレージディスクアレイ装置２０とディスクエンクロージャ（以下、ＤＥ）３０とを含んで構成される。
ストレージシステム１０は、１以上のサーバ１１と、サーバ１１と通信可能に接続する１以上のストレージディスクアレイ装置２０とを含んで構成される。ストレージディスクアレイ装置２０は、複数のＨＤＤ３１（３１ａ，３１ｂ，・・・，３１ｎ）を収容するＤＥ３０と接続する。ＨＤＤ３１は、記憶装置の１つであり、４Ｋ対応のＨＤＤ（５１２バイトセクタ Ｅｍｕｌａｔｉｏｎ）である。
【００２１】
なお、ＤＥ３０は、複数のＨＤＤ３１とストレージディスクアレイ装置２０とを接続するインタフェースを有する。ストレージシステム１０は、１以上のＨＤＤ３１の組合せにより論理ボリュームを構成する。なお、ＤＥ３０は、ストレージディスクアレイ装置２０が内蔵するものであってもよいし、ストレージディスクアレイ装置２０に外付けされるものであってもよい。また、図示するストレージディスクアレイ装置２０は、１つのＤＥ３０と接続するが２以上のＤＥ３０と接続してもよい。
【００２２】
ストレージディスクアレイ装置２０は、論理ボリュームへのＩ／Ｏ要求として、ＨＤＤ３１へのＩ／Ｏ要求をサーバ１１から受け付ける。ストレージディスクアレイ装置２０は、１以上のコントローラモジュール（以下、ＣＭ（Controller Module））２１を含む。ストレージディスクアレイ装置２０は、ＣＭ２１ａとＣＭ２１ｂとにより冗長構成を有する。
【００２３】
ＣＭ２１ａは、ストレージ制御装置の一形態であり、サーバ１１からのＩ／Ｏ要求（たとえば、ライトコマンド、リードコマンドなど）を受け付けて、ＨＤＤ３１を制御する。ＣＭ２１ａは、プロセッサ２２、メモリ２３、ディスクアダプタ（以下、ＤＡ（Disk Adaptor））２４と、チャネルアダプタ（以下、ＣＡ（Channel Adaptor））２５とを備え、図示しないバスを介して接続されている。ＣＭ２１ａは、ＤＡ２４を介してＤＥ３０が収容するＨＤＤ３１と接続し、ＣＡ２５を介してサーバ１１と接続する。
【００２４】
プロセッサ２２は、ＣＭ２１ａ全体を制御し、ＨＤＤ３１の制御をおこなう。プロセッサ２２は、マルチプロセッサであってもよい。プロセッサ２２は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ２２は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組合せであってもよい。
【００２５】
メモリ２３は、たとえば、ＲＡＭ（Random Access Memory）や不揮発性メモリを含む。メモリ２３は、ＨＤＤ３１からデータを読み出したときにデータを保持するほか、Ｉ／Ｏ要求を一時的に蓄積するＩ／Ｏ発行待ちキューやＨＤＤ３１にデータを書き込むときのバッファとなる。また、メモリ２３は、ユーザデータや制御情報を格納する。ＤＡ２４は、ＨＤＤ３１とのインタフェース制御（アクセス制御）をおこなう。たとえば、ＲＡＭは、ＣＭ２１ａの主記憶装置として使用される。ＲＡＭには、プロセッサ２２に実行させるオペレーティングシステム（Operating System）のプログラムやファームウェア、アプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭには、プロセッサ２２による処理に必要な各種データが格納される。また、ＲＡＭは、各種データの格納に用いるメモリと別体にキャッシュメモリを含むものであってもよい。
【００２６】
不揮発性メモリは、ストレージディスクアレイ装置２０の電源遮断時においても記憶内容を保持する。不揮発性メモリは、たとえば、ＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM）やフラッシュメモリなどの半導体記憶装置や、ＨＤＤなどである。不揮発性メモリには、オペレーティングシステムのプログラムやファームウェア、アプリケーションプログラム、および各種データが格納される。
【００２７】
なお、ＣＭ２１ｂについては、ＣＭ２１ａと同様のため説明を省略する。
以上のようなハードウェア構成によって、第２の実施形態のＣＭ２１（ストレージディスクアレイ装置２０）の処理機能を実現することができる。なお、第１の実施形態に示したストレージ制御装置１も、図示したＣＭ２１と同様のハードウェアにより実現することができる。
【００２８】
ＣＭ２１（ストレージディスクアレイ装置２０）は、たとえばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施形態の処理機能を実現する。ＣＭ２１に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、ＣＭ２１に実行させるプログラムを不揮発性メモリに格納しておくことができる。プロセッサ２２は、不揮発性メモリ内のプログラムの少なくとも一部をメモリ２３にロードし、プログラムを実行する。またＣＭ２１に実行させるプログラムを、図示しない光ディスク、メモリ装置、メモリカードなどの可搬型記録媒体に記録しておくこともできる。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。メモリ装置は、図示しない入出力インタフェースあるいは機器接続インタフェースとの通信機能を搭載した記録媒体である。たとえば、メモリ装置は、メモリリーダライタによりメモリカードへのデータの書き込み、またはメモリカードからのデータの読み出しをおこなうことができる。メモリカードは、カード型の記録媒体である。
【００２９】
可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ２２からの制御により、不揮発性メモリにインストールされた後、実行可能となる。またプロセッサ２２が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００３０】
次に、第２の実施形態のＩ／Ｏ発行待ちキューについて図３を用いて説明する。図３は、第２の実施形態のＩ／Ｏ発行待ちキューの一例を示す図である。
ＣＭ２１は、ＨＤＤ３１へのコマンド（たとえば、ＳＣＳＩ（Small Computer System Interface）コマンド）の発行および応答を制御するモジュールとしてドライバ２６を有する。ドライバ２６は、プロセッサ２２が所要のプログラムを実行することで実現する。ドライバ２６は、メモリ２３上にＩ／Ｏ発行待ちキュー２７を用意する。ドライバ２６は、キャッシュメモリ２３ａを介してコマンドを受け取り、Ｉ／Ｏ発行待ちキュー２７にコマンドをキューイングする。ドライバ２６は、ＨＤＤ３１へのコマンド発行ができる場合に、Ｉ／Ｏ発行待ちキュー２７からコマンドをデキューしてＤＥ３０（ＨＤＤ３１）にコマンドを発行する。また、ドライバ２６は、ＤＥ３０（ＨＤＤ３１）から応答があった場合にキャッシュメモリ２３ａを介して上位装置に応答する。
【００３１】
Ｉ／Ｏ発行待ちキュー２７は、通常キュー（アラインキュー）２８とアンアラインキュー２９とがある。ドライバ２６は、コマンドのうちアンアラインコマンドを受け取った場合にアンアラインキュー２９にキューイングし、アンアラインコマンド以外のコマンド（アラインコマンド）を受け取った場合に通常キュー２８にキューイングする。
【００３２】
アンアラインコマンドは、ＨＤＤ３１の物理セクタサイズとバウンダリが一致しないライトコマンド（第１のコマンド）であり、ＨＤＤ３１がＲＭＷを要するコマンドである。アラインコマンドは、ＨＤＤ３１の物理セクタサイズとバウンダリが一致するライトコマンドを含むコマンド（第２のコマンド）であり、ＨＤＤ３１がＲＭＷを要しないコマンドである。なお、アラインコマンドは、ＨＤＤ３１の物理セクタサイズとのバウンダリの一致を問わないリードコマンドを含む。
【００３３】
次に、ＨＤＤ３１の物理セクタサイズとバウンダリについて図４を用いて説明する。図４は、第２の実施形態の書込データにおけるバウンダリの一致例および不一致例を示す図である。
【００３４】
ＨＤＤ３１の論理セクタサイズは、５２０バイトであり、物理セクタサイズは、５２０バイトの８倍の４１６０バイト（＝４ｋバイト）である。ＨＤＤ３１は、４ｋバイトより小さいデータ長の書き込みに対してディスク内部でＲＭＷを実行するため、４ｋバイトより小さいデータ長の書き込みは、ＨＤＤ３１のアクセス性能を低下させる。
【００３５】
たとえば、書込データ２００は、先頭２００Ｓと末尾２００Ｅの両方が、物理セクタのバウンダリ（境界）と一致することから、ＲＭＷを要しない。また、書込データ２０１は、先頭２０１Ｓが物理セクタの境界と一致せず、末尾２０１Ｅが物理セクタの境界と一致することから、先頭が位置する物理セクタでＲＭＷを要する。また、書込データ２０２は、先頭２０２Ｓが物理セクタの境界と一致し、末尾２０２Ｅが物理セクタの境界と一致しないことから、末尾が位置する物理セクタでＲＭＷを要する。また、書込データ２０３は、先頭２０３Ｓおよび末尾２０３Ｅが物理セクタの境界と一致せず、先頭が位置する物理セクタと末尾が位置する物理セクタでＲＭＷを要する。
【００３６】
したがって、書込データ２００は、すべてをアラインコマンドとすることができる。一方、書込データ２０１，２０２，２０３は、先頭が位置する物理セクタまたは末尾が位置する物理セクタ、あるいはその両方への書き込みがアンアラインコマンドとなる。
【００３７】
次に、アンアラインコマンドによるアクセス遅延について図５を用いて説明する。図５は、第２の実施形態のアンアラインコマンドによるアクセス遅延例である。
図５は、ストレージディスクアレイ装置２０がＨＤＤ３１に４ｋバイトのライトコマンド（Ｗｒｉｔｅ（＝４ｋ））、４ｋバイト未満のライトコマンド（Ｗｒｉｔｅ（≠４ｋ））、およびリードコマンド（Ｒｅａｄ）を順に発行したことを示す。
【００３８】
ＨＤＤ３１は、Ｗｒｉｔｅ（＝４ｋ）を受け付けて、ディスク媒体に４ｋバイトのデータを書き込む。一方、ＨＤＤ３１は、Ｗｒｉｔｅ（≠４ｋ）を受け付けた場合、まず、ディスク媒体から書込データの書込位置に対応する物理セクタから４ｋバイトのデータを読み出す。ＨＤＤ３１は、読み出した４ｋバイトのデータに書込データを重畳（Ｍｏｄｉｆｙ）する。ＨＤＤ３１は、書込データを重畳した４ｋバイトのデータをディスク媒体に書き戻す。すなわち、ストレージディスクアレイ装置２０がＨＤＤ３１に発行する４ｋバイト未満のライトコマンドは、ＨＤＤ３１にＲＭＷを実行させる。ＨＤＤ３１は、４ｋバイト未満のライトコマンドにより、読出動作分の遅延（およそディスク２回転分程度）を生じ、アクセス性能を低下させる。
【００３９】
このような動作遅延は、４ｋバイト未満のライトコマンドに続くリードコマンドにも影響が及ぶ。また、４ｋバイト未満のライトコマンドの頻度が高いほど、遅延時間が蓄積する。したがって、４ｋバイト未満のライトコマンドの低減がＨＤＤ３１のアクセス性能低下を抑制する。
【００４０】
次に、第２の実施形態のコマンド振分処理について図６を用いて説明する。図６は、第２の実施形態のコマンド振分処理のフローチャートを示す図である。
コマンド振分処理は、ストレージディスクアレイ装置２０が受け付けたコマンドを、通常キュー２８またはアンアラインキュー２９に振り分けてキューイングする処理である。また、コマンド振分処理は、所定条件が成立した場合に、アンアラインキュー２９にキューイングされているアンアラインコマンドをアラインコマンドに変換する。コマンド振分処理は、上位装置からコマンドを受け付けて、ドライバ２６が実行する処理である。
【００４１】
［ステップＳ１１］ドライバ２６（プロセッサ２２）は、受け付けたコマンドがアンアラインのライトコマンドであるか否かを判定する。言い換えれば、ドライバ２６は、受け付けたコマンドがＲＭＷを要するライトコマンドであるか否かを判定する。ドライバ２６は、受け付けたコマンドがアンアラインのライトコマンドである場合にステップＳ１３にすすみ、アンアラインのライトコマンドでない場合にステップＳ１２にすすむ。
【００４２】
［ステップＳ１２］ドライバ２６は、受け付けたコマンドを通常キュー２８のテイル（通常キューテイル）にキューイングし、コマンド振分処理を終了する。通常キュー２８にキューイングされたコマンドは、原則としてＦＩＦＯ（First In First Out）でデキューされて処理される。
【００４３】
［ステップＳ１３］ドライバ２６は、受け付けたコマンドをアンアラインキュー２９のテイル（アンアラインキューテイル）にキューイングする。
ここで、ストレージディスクアレイ装置２０が受け付けたコマンドの振分について図７を用いて説明する。図７は、第２の実施形態の通常キューまたはアンアラインキューへのコマンドの振分の一例を示す図である。
【００４４】
ドライバ２６は、図示する到着順（コマンドＣ１、コマンドＣ２、・・・、コマンドＣ５の順）でコマンドを受け付ける。ドライバ２６は、コマンドＣ１が「Ｗｒｉｔｅ（≠４ｋ）」、すなわちアンアラインのライトコマンド（アンアラインコマンド）であることから、アンアラインキュー２９のテイル（最後尾）にキューイングする。
【００４５】
次に、ドライバ２６は、コマンドＣ２が「Ｗｒｉｔｅ（＝４ｋ）」、すなわちアラインのライトコマンド（アラインコマンド）であることから、通常キュー２８のテイルにキューイングする。ドライバ２６は、コマンドＣ３が「Ｒｅａｄ」であることから、通常キュー２８のテイルにキューイングする。以下、ドライバ２６は、コマンドＣ４をアンアラインキュー２９のテイルに、コマンドＣ５を通常キュー２８のテイルにキューイングする。
【００４６】
これにより、ＲＭＷが不要なコマンドは通常キュー２８にキューイングされ、ＲＭＷを要するコマンドはアンアラインキュー２９にキューイングされることとなる。
再び、コマンド振分処理のフローチャートの説明に戻る。
【００４７】
［ステップＳ１４］ドライバ２６は、アンアラインキュー２９にキューイングされている２以上のアンアラインコマンドからアラインコマンドを構成できるか否かを判定する。すなわち、ドライバ２６は、アンアラインキューにキューイングされている２以上のアンアラインコマンドの書込データから同じ４ｋバウンダリの領域（同一の物理セクタ）分のデータを作成することができるか否かを判定する。
【００４８】
ここで、アンアラインコマンドからアラインコマンドを構成できる場合について図８を用いて説明する。図８は、第２の実施形態のアンアラインコマンドからアラインコマンドの構成例を示す図である。
【００４９】
コマンドＣ１１は、アンアラインのライトコマンド（アンアラインコマンド）であり、書込データ２１０は、４ｋバウンダリの一部領域に書き込まれるアンアラインのデータ（アンアラインデータ）である。コマンドＣ１２も、アンアラインコマンドであり、書込データ２１１は、アンアラインデータであり、書込データ２１０と同じ４ｋバウンダリにある。書込データ２１０と書込データ２１１は、同じ４ｋバウンダリで相互に補完する関係にあり、両者を重畳（Ｍｏｄｉｆｙ）することで書込データ２１２を得る。書込データ２１２は、４ｋバウンダリの全部領域に書き込まれるアラインのデータ（アラインデータ）である。書込データ２１２を書込対象とするコマンドＣ１３は、アラインのライトコマンドとすることができる。
【００５０】
なお、２以上のアンアラインデータを重畳してもアラインデータを生成できない場合は、アンアラインコマンドからアラインコマンドを構成できないことから、ドライバ２６は、アラインコマンドを構成可能なアンアラインコマンドの到着を待つ。
【００５１】
再び、コマンド振分処理のフローチャートの説明に戻る。
［ステップＳ１５］ドライバ２６は、ステップＳ１４のアラインコマンド構成判定の結果を参照し、アラインコマンドを構成できる場合にステップＳ１６にすすみ、アラインコマンドを構成できない場合にステップＳ１９にすすむ。
【００５２】
［ステップＳ１６］ドライバ２６は、アラインコマンドを構成可能なアンアラインコマンドをアンアラインキュー２９からデキューする。なお、この場合、ドライバ２６は、ＦＩＦＯの原則によらずに、対象となるアンアラインコマンドをアンアラインキュー２９からデキューする。
【００５３】
［ステップＳ１７］ドライバ２６は、アンアラインキュー２９からデキューしたアンアラインコマンドからアラインコマンドを生成する。すなわち、ドライバ２６は、アンアラインコマンドをアラインコマンドに変換する。
【００５４】
［ステップＳ１８］ドライバ２６は、生成したアラインコマンドを通常キュー２８のヘッド（通常キューヘッド）にキューイングし、コマンド振分処理を終了する。これにより、アンアラインコマンドから生成されたアラインコマンドは、通常キュー２８からデキューされてＨＤＤ３１にコマンド発行されることとなる。
【００５５】
このように、ストレージディスクアレイ装置２０は、アンアラインコマンドをアラインコマンドに変換することができる。したがって、ストレージディスクアレイ装置２０は、ＲＭＷを要するアンアラインコマンドを低減してＨＤＤ３１の入出力制御をおこなうことができる。すなわち、ストレージディスクアレイ装置２０は、ＲＭＷの実行回数を削減してＨＤＤ３１のアクセス性能低下を抑制できる。さらに、ストレージディスクアレイ装置２０は、ライトコマンドの数を削減することからアクセス性能向上を図ることもできる。
【００５６】
［ステップＳ１９］ドライバ２６は、アンアラインキュー２９のキャッシュ使用率が大きいか否かを判定する。ドライバ２６は、あらかじめ設定する閾値と、アンアラインキュー２９のキャッシュ使用率との比較によりキャッシュ使用率が大きいか否かを判定することができる。ドライバ２６は、アンアラインキュー２９のキャッシュ使用率が大きい場合にステップＳ２０にすすみ、アンアラインキュー２９のキャッシュ使用率が大きくない場合にコマンド振分処理を終了する。
【００５７】
なお、閾値は、ストレージディスクアレイ装置２０の稼働状態や、メモリ２３の使用率などにもとづいて変動するものであってもよい。また、アンアラインキュー２９のキャッシュ使用率が大きいか否かの判定は、アンアラインコマンドがアンアラインキュー２９に過大に蓄積することを防止するものである。したがって、キャッシュ使用率に代えてアンアラインコマンドの蓄積量、滞在時間（たとえば、平均滞在時間）などによって評価してもよい。
【００５８】
［ステップＳ２０］ドライバ２６は、アンアラインキュー２９のキャッシュ使用率が大きいことから、アンアラインキュー２９からアンアラインコマンドの掃き出しをおこなうコマンド掃き出し処理を実行する。コマンド掃き出し処理は、後述する疑似リードコマンドの生成によりＲＭＷを回避するアンアラインコマンドの掃き出しと、ＲＭＷを要するアンアラインコマンドの掃き出しとのうちいずれを実行するかを決定する処理である。コマンド掃き出し処理の詳細は、図１１を用いて後述する。
【００５９】
ここで、疑似リードコマンドについて図９、図１０を用いて説明する。まず、リードコマンドを拡張する疑似リードコマンドについて図９を用いて説明する。図９は、第２の実施形態の疑似リードコマンドとその動作の一例を示す図である。
【００６０】
ドライバ２６は、キャッシュ（メモリ２３）上に疑似リード専用領域をあらかじめ確保する。疑似リードコマンドは、リードコマンドが読出対象とする物理セクタ（読出対象セクタ）に加えて、読出対象セクタに連続する物理セクタからデータを読み出すコマンドである。すなわち、疑似リードコマンドは、リードコマンドの読出領域を疑似読出領域の分だけ拡張してＨＤＤ３１からデータを読み出すコマンドである。すなわち、リードコマンドの読出領域を疑似読出領域の分だけ拡張する疑似リードコマンドは、受け付けたリードコマンドを拡張する拡張リードコマンドともいえる。なお、疑似読出領域は、読出領域を含めて疑似リード専用領域のサイズに収まる大きさである。
【００６１】
疑似リードコマンドは、ドライバ２６が受け付けたリードコマンドの読出領域を拡張したときに、アンアラインキュー２９にあるアンアラインコマンドの書込領域と疑似読出領域とが重なる場合に、ドライバ２６によって生成される。たとえば、書込領域ＷＲ１にデータを書き込むアンアラインコマンドＣ２１と、書込領域ＷＲ２にデータを書き込むアンアラインコマンドＣ２２とがアンアラインキュー２９にある。このとき、ドライバ２６が読出領域ＲＲからデータを読み出すリードコマンドＣ２０を受け付けたとする。この場合、リードコマンドＣ２０の読出領域ＲＲを疑似読出領域ＤＲ１を含む範囲まで拡張することで、アンアラインコマンドＣ２１，Ｃ２２のＲＭＷを不要にする。
【００６２】
すなわち、ドライバ２６は、リードコマンドＣ２０に代えて疑似リードコマンドＣ２３を発行する。これにより、ドライバ２６は、疑似リード専用領域に読出データ２２１を記憶する。ドライバ２６は、アンアラインコマンドＣ２１，Ｃ２２のそれぞれの書込データ（図中横線部）を読出データ２２１（図中斜線部）に重畳した書込データ２２２で疑似リード専用領域を更新する。ドライバ２６は、書込データ２２２のアラインコマンドＣ２４を発行する。このようにして、ドライバ２６は、ＲＭＷを要するアンアラインコマンドＣ２１，Ｃ２２の発行に代えて、ＲＭＷを不要とするアラインコマンドＣ２４を発行できる。
【００６３】
次に、複数のアンアラインコマンドの書込領域と疑似読出領域とが重複する疑似リードコマンドについて図１０を用いて説明する。図１０は、第２の実施形態の複数のアンアラインコマンドの書込領域と疑似読出領域とが重複する疑似リードコマンドとその動作の一例を示す図である。
【００６４】
疑似リードコマンドは、複数のアンアラインコマンドの書込領域と疑似読出領域とが重複する場合、かつ疑似リードコマンドの発行が有効であるとされる場合に、ドライバ２６によって生成される。たとえば、書込領域ＷＲ１にデータを書き込むアンアラインコマンドＣ２１と、書込領域ＷＲ２にデータを書き込むアンアラインコマンドＣ２２と、書込領域ＷＲ３にデータを書き込むアンアラインコマンドＣ２５とがアンアラインキュー２９にある。このとき、疑似リードコマンドの発行が有効とされている場合に、ドライバ２６は、疑似リードコマンドＣ２６を生成する。疑似リードコマンドＣ２６は、アンアラインコマンドＣ２５のＲＭＷに必要な読出領域を拡張した疑似読出領域ＤＲ２からデータを読み出すコマンドである。疑似リードコマンドＣ２６は、書込領域ＷＲ１，ＷＲ２，ＷＲ３を疑似読出領域ＤＲ２の範囲内に含むので、アンアラインコマンドＣ２１，Ｃ２２，Ｃ２５のＲＭＷを不要にする。
【００６５】
すなわち、ドライバ２６は、疑似リードコマンドＣ２６を発行する。これにより、ドライバ２６は、疑似リード専用領域に読出データ２２３を記憶する。ドライバ２６は、アンアラインコマンドＣ２１，Ｃ２２，Ｃ２５のそれぞれの書込データ（図中横線部）を読出データ２２３（図中斜線部）に重畳した書込データ２２４で疑似リード専用領域を更新する。ドライバ２６は、書込データ２２４のアラインコマンドＣ２７を発行する。このようにして、ドライバ２６は、ＲＭＷを要するアンアラインコマンドＣ２１，Ｃ２２，Ｃ２５の発行に代えて、ＲＭＷを不要とするアラインコマンドＣ２７を発行できる。
【００６６】
再び、コマンド振分処理のフローチャートの説明に戻る。
［ステップＳ２１］ドライバ２６は、コマンド掃き出し処理の実行結果から、疑似リードコマンドの生成の有無を判定する。ドライバ２６は、疑似リードコマンドが生成されている場合にステップＳ２２にすすみ、疑似リードコマンドが生成されていない場合にステップＳ２３にすすむ。なお、コマンド掃き出し処理の実行結果から、生成される疑似リードコマンドは、複数のアンアラインコマンドの書込領域と疑似読出領域とが重複する疑似リードコマンドである。リードコマンドを拡張する疑似リードコマンドは、ここでは、生成対象とならない。
【００６７】
［ステップＳ２２］ドライバ２６は、生成した疑似リードコマンドを通常キュー２８のヘッド（通常キューヘッド）にキューイングし、コマンド振分処理を終了する。これにより、疑似リードコマンドは、通常キュー２８からデキューされてＨＤＤ３１にコマンド発行されることとなる。
【００６８】
［ステップＳ２３］ドライバ２６は、アンアラインキュー２９からアンアラインコマンドをデキューする。
［ステップＳ２４］ドライバ２６は、アンアラインキュー２９からデキューしたアンアラインコマンドを通常キュー２８のヘッド（通常キューヘッド）にキューイングし、コマンド振分処理を終了する。これにより、アンアラインコマンドは、通常キュー２８からデキューされてＨＤＤ３１にコマンド発行されることとなる。
【００６９】
次に、第２の実施形態のコマンド掃き出し処理について図１１を用いて説明する。図１１は、第２の実施形態のコマンド掃き出し処理のフローチャートを示す図である。
コマンド掃き出し処理は、アンアラインコマンドの掃き出しをおこなう処理である。また、コマンド掃き出し処理は、コマンド振分処理のステップＳ２０でドライバ２６が実行する処理である。
【００７０】
［ステップＳ３１］ドライバ２６（プロセッサ２２）は、疑似リードコマンドの発行が有効とされているか否かを判定する。疑似リードコマンドの発行が有効とされているか否かは、疑似リード設定処理において有効／無効を設定する疑似リードコマンドの発行の設定により判定できる。疑似リード設定処理については、図１４を用いて後で説明する。ドライバ２６は、疑似リード設定処理による疑似リードコマンド発行の設定内容を参照して疑似リードコマンドの発行が有効とされているか否かの判定をおこなう。ドライバ２６は、疑似リードコマンドの発行が有効とされている場合にステップＳ３２にすすみ、疑似リードコマンドの発行が有効とされていない場合にコマンド掃き出し処理を終了する。
【００７１】
［ステップＳ３２］ドライバ２６は、疑似読出領域と複数のアンアラインコマンドの書込領域とが重複するか否かを判定する。ドライバ２６は、疑似読出領域と複数のアンアラインコマンドの書込領域とが重複する場合にステップＳ３３にすすみ、重複しない場合にコマンド掃き出し処理を終了する。
【００７２】
［ステップＳ３３］ドライバ２６は、疑似読出領域からデータを読み出す疑似リードコマンドを生成し、コマンド掃き出し処理を終了する。
次に、第２の実施形態のデキュー処理について図１２を用いて説明する。図１２は、第２の実施形態のデキュー処理のフローチャートを示す図である。
【００７３】
デキュー処理は、Ｉ／Ｏ発行待ちキュー２７にあるコマンドを発行する処理である。デキュー処理は、ドライバ２６の起動後に、ドライバ２６が実行する処理である。
［ステップＳ４１］ドライバ２６（プロセッサ２２）は、コマンド発行が可能か否かを判定する。たとえば、ドライバ２６は、コマンドの発行先がコマンドの受付が可能か否かを判定する。ドライバ２６は、コマンド発行ができる場合にステップＳ４２にすすみ、コマンド発行ができない場合にコマンド発行可能な状態の検出を待つ。
【００７４】
［ステップＳ４２］ドライバ２６は、通常キュー２８にコマンドがあるか否かを判定する。ドライバ２６は、通常キュー２８にコマンドがある場合にステップＳ４３にすすみ、通常キュー２８にコマンドがない場合にステップＳ４４にすすむ。
【００７５】
［ステップＳ４３］ドライバ２６は、アンアラインキュー２９に待ち時間大のコマンドがあるか否かを判定する。アンアラインキュー２９にあるコマンドの待ち時間の大きさは、あらかじめ定めた閾値、あるいは稼働状態に応じて設定される閾値との比較によりおこなうことができる。ドライバ２６は、アンアラインキュー２９に待ち時間大のコマンドがある場合にステップＳ４４にすすみ、アンアラインキュー２９に待ち時間大のコマンドがない場合にステップＳ４５にすすむ。
【００７６】
［ステップＳ４４］ドライバ２６は、アンアラインキュー２９からコマンド（アンアラインコマンド）をデキューする。
［ステップＳ４５］ドライバ２６は、通常キュー２８からコマンド（アラインコマンド）をデキューする。
【００７７】
［ステップＳ４６］ドライバ２６は、Ｉ／Ｏ発行待ちキュー２７（通常キュー２８またはアンアラインキュー２９）からデキューされたコマンドをＨＤＤ３１に発行し、次のコマンドの発行機会を待つためステップＳ４１にすすむ。
【００７８】
これにより、ドライバ２６は、アンアラインキュー２９に優先して通常キュー２８からのコマンドの掃き出しをおこなう。また、ドライバ２６は、アンアラインコマンドが所定時間を超えてアンアラインキュー２９に留まることを防止する。
【００７９】
次に、第２の実施形態の応答確認処理について図１３を用いて説明する。図１３は、第２の実施形態の応答確認処理のフローチャートを示す図である。
応答確認処理は、発行先に発行したコマンドの発行先からの応答を確認する処理である。応答確認処理は、ドライバ２６が発行先からの応答を受け付けて、ドライバ２６が実行する処理である。
【００８０】
［ステップＳ５１］ドライバ２６（プロセッサ２２）は、発行先からの応答がリードコマンドに対する応答であるか否かを判定する。ドライバ２６は、発行先からの応答がリードコマンドに対する応答である場合にステップＳ５２にすすみ、リードコマンドに対する応答でない場合にステップＳ５３にすすむ。なお、ここでいうリードコマンドは、疑似リードコマンドを含むものである。
【００８１】
［ステップＳ５２］ドライバ２６は、アンアラインキュー２９にキューイングされているコマンド（アンアラインコマンド）のうち書込領域が、リードコマンドの読出領域と重複するコマンドがあるか否かを判定する。ドライバ２６は、書込領域がリードコマンドの読出領域と重複するコマンドがある場合にステップＳ５４にすすみ、重複するコマンドがない場合にステップＳ５３にすすむ。
【００８２】
［ステップＳ５３］ドライバ２６は、発行元（上位装置）に応答をおこない応答確認処理を終了する。
［ステップＳ５４］ドライバ２６は、読出データをバッファ（疑似リード専用領域）に退避する。
【００８３】
［ステップＳ５５］ドライバ２６は、書込領域がリードコマンドの読出領域と重複するコマンドを、アンアラインキュー２９からデキューする。この場合、アンアラインキュー２９からのデキューは、必ずしもアンアラインキュー２９の先頭位置からのデキューに限らない。また、デキューされるコマンドの数は、１つに限らない。
【００８４】
［ステップＳ５６］ドライバ２６は、デキューされるコマンドの書込データを、バッファに退避した読出データに重畳する。これにより、アンアラインコマンドは、ＲＭＷのためのデータの読み出しが不要となり、書込データを重畳したデータを新たな書込データとするアラインコマンドに変換可能になる。
【００８５】
［ステップＳ５７］ドライバ２６は、応答に対応するリードコマンドが疑似リードコマンドであったか否かを判定する。ドライバ２６は、応答に対応するリードコマンドが疑似リードコマンドであった場合にステップＳ５９にすすみ、疑似リードコマンドでない場合にステップＳ５８にすすむ。
【００８６】
［ステップＳ５８］ドライバ２６は、発行元（上位装置）に応答をおこなう。
［ステップＳ５９］ドライバ２６は、疑似読出領域に対応する応答を除いて、発行元（上位装置）に応答をおこなう。たとえば、図９に示したリードコマンドを拡張する疑似リードコマンドＣ２３の場合、ドライバ２６は、疑似読出領域ＤＲ１に対応する応答を除いて、読出領域ＲＲに対応する応答をおこなう。また、図１０に示した複数のアンアラインコマンドの書込領域と疑似読出領域とが重複する疑似リードコマンドＣ２６の場合、上位装置からのコマンドではないので対応する応答をおこなわない。
【００８７】
［ステップＳ６０］ドライバ２６は、アンアラインキュー２９からデキューしたアンアラインコマンドから生成したアラインコマンドを通常キュー２８の先頭（通常キューヘッド）にキューイングして、応答確認処理を終了する。
【００８８】
このように、ドライバ２６は、疑似リードコマンドを含むリードコマンドの応答を受けて、ＲＭＷが不要となるアンアラインコマンドを検索して、アラインコマンドに変換する。これにより、ドライバ２６は、アンアラインコマンドの発行によるＨＤＤ３１のＲＭＷの実行機会を低減することができる。したがって、ドライバ２６は、ＲＭＷによるＨＤＤ３１のアクセス性能低下を抑制することができる。
【００８９】
次に、第２の実施形態の疑似リード設定処理について図１４を用いて説明する。図１４は、第２の実施形態の疑似リード設定処理のフローチャートを示す図である。
疑似リード設定処理は、疑似リードコマンドの発行の有効／無効を設定する処理である。疑似リード設定処理は、所定のタイミング（たとえば、あらかじめ設定したタイマ周期、あるいはイベントトリガなど）で、ドライバ２６が実行する処理である。したがって、ドライバ２６は、所定のタイミングで疑似リードコマンドの発行の有効／無効の設定を更新する。
【００９０】
［ステップＳ７１］ドライバ２６（プロセッサ２２）は、ドライバ２６からＨＤＤ３１に発行するコマンド（発行コマンド）の情報を取得する。ここでいう発行コマンドの情報は、アンアラインキュー２９の掃けやすさの評価に用いることができる情報であり、たとえば、リードコマンドとライトコマンドの比率（リード／ライト比率）、アラインコマンドとアンアラインコマンドの比率（アライン／アンアライン比率）、アンアラインコマンドからアラインコマンドへの変換率（ヒット率）がある。発行コマンドの情報は、たとえば、図示しない集計部が統計情報として集計する情報である。
【００９１】
［ステップＳ７２］ドライバ２６は、評価値を初期化（たとえば、ゼロクリア）する。評価値は、疑似リードコマンドの発行の有効／無効の設定評価に用いられる。評価値があらかじめ定めた閾値と比較して大きい場合に、疑似リードコマンドの発行が有効化される。
【００９２】
［ステップＳ７３］ドライバ２６は、リード／ライト比率を評価する。リード／ライト比率は、着目ディスクにおいてリードコマンドをアンアラインコマンドのＲＭＷのデータ読み出しとして利用できる頻度を評価するための情報である。リードコマンドがライトコマンドと比較して多ければ、応答確認処理におけるアンアラインキュー２９からのコマンドの掃き出しが多いと評価できる。一方、リードコマンドがライトコマンドと比較して少なければ、応答確認処理におけるアンアラインキュー２９からのコマンドの掃き出しが少ないと評価できる。
【００９３】
［ステップＳ７４］ドライバ２６は、ライトコマンドがリードコマンドと比較して多ければステップＳ７５にすすみ、ライトコマンドがリードコマンドと比較して多くなければステップＳ７６にすすむ。
【００９４】
［ステップＳ７５］ドライバ２６は、アンアラインキュー２９からのコマンドの掃き出しが少ないと評価し、評価値に「１」を加点する。
［ステップＳ７６］ドライバ２６は、アライン／アンアライン比率を評価する。アライン／アンアライン比率は、着目ディスクにおいてアンアラインコマンドの発行頻度を評価するための情報である。アラインコマンドがアンアラインコマンドと比較して多ければ、アンアラインキュー２９へのコマンドの蓄積が少ないと評価できる。一方、アラインコマンドがアンアラインコマンドと比較して少なければ、アンアラインキュー２９へのコマンドの蓄積が多いと評価できる。
【００９５】
［ステップＳ７７］ドライバ２６は、アラインコマンドがアンアラインコマンドと比較して少なければステップＳ７８にすすみ、アラインコマンドがアンアラインコマンドと比較して少なくなければステップＳ７９にすすむ。
【００９６】
［ステップＳ７８］ドライバ２６は、アンアラインキュー２９へのコマンドの蓄積が多いと評価し、評価値に「１」を加点する。
［ステップＳ７９］ドライバ２６は、ヒット率を評価する。ヒット率は、着目ディスクにおいてアンアラインコマンドをアラインコマンドに変換できた頻度を評価するための情報である。ヒット率が高ければ、アンアラインキュー２９からのコマンドの掃き出しが多いと評価できる。一方、ヒット率が低ければ、アンアラインキュー２９からのコマンドの掃き出しが少ないと評価できる。なお、アンアラインコマンドの発行頻度、言い換えれば、着目ディスクのＲＭＷの実行頻度（この場合ミス率に相当）を用いるものであってもよい。なお、リード／ライト比率、アライン／アンアライン比率、およびヒット率の大小の比較は、あらかじめ定めた閾値、あるいは稼働状態に応じて設定される閾値との比較によりおこなうことができる。
【００９７】
［ステップＳ８０］ドライバ２６は、ヒット率が閾値と比較して小さければステップＳ８１にすすみ、ヒット率が閾値と比較して小さくなければステップＳ８２にすすむ。
［ステップＳ８１］ドライバ２６は、アンアラインキュー２９からのコマンドの掃き出しが少ないと評価し、評価値に「１」を加点する。
【００９８】
［ステップＳ８２］ドライバ２６は、評価値と、あらかじめ設定した閾値「２」とを比較し、評価値が「２」以上であればステップＳ８３にすすみ、評価値が「２」以上でなければステップＳ８４にすすむ。
【００９９】
［ステップＳ８３］ドライバ２６は、疑似リードコマンドの発行を有効化、すなわち、疑似リードコマンドの発行の設定を有効にして疑似リード設定処理を終了する。
［ステップＳ８４］ドライバ２６は、疑似リードコマンドの発行を無効化、すなわち、疑似リードコマンドの発行の設定を無効にして疑似リード設定処理を終了する。
【０１００】
これにより、ドライバ２６は、リード／ライト比率、アライン／アンアライン比率、およびヒット率からアンアラインキュー２９の掃けやすさ（キューイング状態）を評価し、疑似リードコマンドの発行の設定を有効／無効のうちいずれにするかを判断することができる。
【０１０１】
疑似リードコマンドの発行の設定は、コマンド掃き出し処理のステップＳ３１で参照される。これにより、ドライバ２６は、アンアラインキュー２９の掃けやすさを調整でき、アンアラインキュー２９にアンアラインコマンドが過大に蓄積されるのを防止する。また、アンアラインキュー２９にアンアラインコマンドが適度に蓄積されるように制御することで、アンアラインコマンドによるＲＭＷの実行機会を削減することができる。
【０１０２】
これにより、ストレージディスクアレイ装置２０は、ＲＭＷの実行回数削減によるＨＤＤ３１のアクセス性能低下を抑制できる。
なお、ここまでで説明したアンアラインキュー２９からアンアラインコマンドのデキューをおこなう条件を整理すると以下のようになる。
【０１０３】
条件１：アンアラインキュー２９にキューイング（蓄積）されているアンアラインコマンド（ライトコマンド）の書込領域を含むリードコマンドの応答を受け付けた場合に、アンアラインキュー２９からアンアラインコマンドのデキューをおこなう。これは、応答確認処理のステップＳ５５において実行されるデキューである。
【０１０４】
条件２：２以上のアンアラインコマンドが同じ４ｋバウンダリの領域を書込領域としてデータの読み出しを不要とする場合に、アンアラインキュー２９からアンアラインコマンドのデキューをおこなう。これは、コマンド振分処理のステップＳ１６において実行されるデキューである。
【０１０５】
条件３：アンアラインキュー２９にキューイングされているアンアラインコマンドのキャッシュ使用率が大きくなった場合に、アンアラインキュー２９からアンアラインコマンドのデキューをおこなう。これは、コマンド振分処理のステップＳ２３において実行されるデキューである。
【０１０６】
条件４：通常キュー２８が空である場合に、アンアラインキュー２９からアンアラインコマンドのデキューをおこなう。これは、デキュー処理のステップＳ４２を経てステップＳ４３を経ないステップＳ４４において実行されるデキューである。
【０１０７】
条件５：アンアラインキュー２９にアンアラインコマンドが所定時間以上滞留している場合に、アンアラインキュー２９からアンアラインコマンドのデキューをおこなう。これは、デキュー処理のステップＳ４３を経てステップＳ４４において実行されるデキューである。
【０１０８】
なお、第２の実施形態において、ドライバ２６は、受け付けたコマンドを通常キュー２８またはアンアラインキュー２９に振り分けたが、アラインコマンドとアンアラインコマンドの区別が可能であれば、１つのＩ／Ｏ発行待ちキュー２７にキューイングするものであってもよい。この場合、アラインコマンドとアンアラインコマンドとの区別が、受け付けたコマンドの振り分けに相当する。
【０１０９】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置１、ストレージディスクアレイ装置２０（ＣＭ２１）が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１１０】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１１１】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１１２】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
【符号の説明】
【０１１３】
１  ストレージ制御装置
２  記憶装置
３  メモリ
４  コマンド振分部
５  コマンド発行部
６  第１のキュー
７  第２のキュー
１０  ストレージシステム
１１  サーバ
２０  ストレージディスクアレイ装置
２１，２１ａ，２１ｂ  コントローラモジュール
２２  プロセッサ
２３  メモリ
２３ａ  キャッシュメモリ
２４  ディスクアダプタ
２５  チャネルアダプタ
２６  ドライバ
２７  Ｉ／Ｏ発行待ちキュー
２８  通常キュー
２９  アンアラインキュー
３０  ディスクエンクロージャ
３１，３１ａ，３１ｂ，…，３１ｎ  ＨＤＤ
【図１】
2015082269.tif 000003
【図２】
2015082269.tif 000004
【図３】
2015082269.tif 000005
【図４】
2015082269.tif 000006
【図５】
2015082269.tif 000007
【図６】
2015082269.tif 000008
【図７】
2015082269.tif 000009
【図８】
2015082269.tif 000010
【図９】
2015082269.tif 000011
【図１０】
2015082269.tif 000012
【図１１】
2015082269.tif 000013
【図１２】
2015082269.tif 000014
【図１３】
2015082269.tif 000015
【図１４】
2015082269.tif 000016