(57)【特許請求の範囲】
【請求項１】
上位装置からのリード命令に応じて、備えられた媒体からデータを読み取って当該データを命令元の前記上位装置に送信するディスク装置であって、
前記上位装置からリード命令を受けていないアドレスのデータを与えられたデータサイズ分前記媒体から読み取るデータ先読みの動作を行う先読み動作実行部と、
前記上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部と、
前記上位装置から連続したアドレスに対する複数のリード命令を受けると１番目のリード命令において前記要求データサイズ分の前記データ先読みを前記先読み動作実行部に実行させ、これ以降のリード命令における前記データ先読みの動作を抑制する先読み動作制御部と
を有することを特徴とするディスク装置。
【請求項２】
前記先読み動作制御部が、
前記先読み動作実行部が前記データ先読みを行ったアドレスの範囲から次回の前記データ先読みを行うか否かを判定する基準である先読み再開判定アドレスを算出してこれを前記動作パラメータ記憶部に記憶させ、前記先読み再開判定アドレス以降のアドレスに対するリード命令を前記上位装置から受けるまで前記データ先読みの動作を抑制することを特徴とする、請求項１に記載のディスク装置。
【請求項３】
前記リード命令が連続したアドレスに対して発行されたものであるか否かを判定し、連続したアドレスに対して発行されたリード命令の転送長を合算してこれを前記要求データサイズとして前記動作パラメータ記憶部に記憶させるリードサイズ判定部を備えることを特徴とする、請求項１に記載のディスク装置。
【請求項４】
前記リードサイズ判定部が、
前記リード命令が連続したアドレスに対して発行されたものであり、かつ第１の転送長のリード命令が単数または複数回と前記第１の転送長より小さい第２の転送長のリード命令が１回というパターンで繰り返されている場合に、このパターン１回分の各リード命令の転送長の合計値を前記要求データサイズとすることを特徴とする、請求項３に記載のディスク装置。
【請求項５】
複数の前記上位装置および前記アプリケーションソフトごとの前記要求データサイズをデータベース化して記憶するＩ／Ｏパターンデータベースを備えることを特徴とする、請求項１ないし請求項４のうちいずれか１項に記載のディスク装置。
【請求項６】
上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置にあって、
前記上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、当該アドレスから始まる前記要求データサイズ分のデータを前記媒体から読み取るデータ先読みを先読み動作実行部が実行し、
前記上位装置から受けた第２のリード命令に応じて、この第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものであるか否かを先読み動作制御部が判定し、
前記第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものである場合に、既に前記データ先読みが行われたアドレスの範囲に対する前記データ先読みの動作を抑制するよう前記先読み動作制御部が前記先読み動作実行部に指令する
ことを特徴とする先読み制御方法。
【請求項７】
前記第１のリード命令に対して前記先読み動作実行部が前記データ先読みを行ったアドレスの範囲から、次回の前記データ先読みを行うか否かを判定する基準である先読み再開判定アドレスを前記先読み動作制御部が算出してこれを前記動作パラメータ記憶部に記憶させると共に、
前記データ先読みの動作を抑制するよう指令する工程が、前記第２のリード命令が前記先読み再開判定アドレス以降のアドレスに対するリード命令であるか否かを前記先読み動作制御部が判定し、前記第２のリード命令が前記先読み再開判定アドレス以降のアドレスに対するリード命令でない場合に前記先読み動作制御部が前記データ先読みの動作を抑制することを特徴とする、請求項６に記載の先読み制御方法。
【請求項８】
上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置にあって、
前記ディスク装置が備えるプロセッサに、
前記上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、当該アドレスから始まる前記要求データサイズ分のデータを前記媒体から読み取るデータ先読みを実行させる手順、
前記上位装置から受けた第２のリード命令に応じて、この第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものであるか否かを判定する手順、
および前記第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものである場合に、既に前記データ先読みが行われたアドレスの範囲に対する前記データ先読みの動作を抑制するよう指令する手順
を実行させることを特徴とする先読み制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスク装置、ディスク装置における先読み制御方法およびプログラムに関し、特に必要外のデータ先読みの動作が発生することによるパフォーマンスの低下を抑制しうるディスク装置等に関する。
【背景技術】
【０００２】
コンピュータの磁気ディスクなどの外部記憶装置で取り扱うデータの容量は、増大する一方である。このため、データの読み込みをより高速化かつ効率化するために、データの先読み（プリフェッチ）が一般的に行われるようになっている。
【０００３】
これは、磁気ディスクや光ディスクへのアクセスを監視し、当該ディスク上のデータがどのようにアクセスされるかを調査した上で、次回からは実際のリード命令よりも先にそのデータを読み込んでキャッシュメモリに記憶しておくという動作である。このデータ先読みは、米国マイクロソフト・コーポレーションのウィンドウズ（登録商標）・シリーズではＷｉｎｄｏｗｓ  ＸＰ（登録商標）から既に標準搭載されている（非特許文献１記載）機能である。
【０００４】
図１３は、既存技術に係るストレージシステム９０１の接続構成について示す説明図である。ストレージシステム９０１は、磁気ディスク装置９１０にサーバマシン９２０が接続されて構成される。磁気ディスク装置９１０は、外部に接続されたコンピュータ装置であるサーバマシン９２０の外部記憶装置として動作するものであり、このサーバマシン９２０からのリード命令およびライト命令に応じてデータの読み書きを行う。
【０００５】
サーバマシン９２０のプロセッサ９２１では、磁気ディスク装置９１０から読み出されたデータを利用して何らかの処理を行うアプリケーション９２１ａと、アプリケーション９２１ａからの要求に応じて磁気ディスク装置９１０に対して直接リード命令およびライト命令を発するデバイスドライバ９２１ｂとが動作している。デバイスドライバ９２１ｂは、アプリケーション９２１ａからのリード要求を、送受信するデータを一時的に記憶するために自らが備えるバッファメモリ９２２のサイズに合わせて分割して送信する機能を持つ。
【０００６】
図１４は、図１３に示した磁気ディスク装置９１０の構成をより詳しく示す説明図である。磁気ディスク装置９１０は、サーバマシン９２０からのリード命令およびライト命令を受けてデータの読み書きを制御するプロセッサ９１１と、このプロセッサ９１１からの指令を受けて実際の記憶媒体にデータを読み書きする記憶媒体動作部９１２と、記憶媒体動作部９１２がデータの読み書きを行う際に設定された動作パラメータを記憶する動作パラメータ記憶部９１３とを備える。
【０００７】
動作パラメータ記憶部９１３は、たとえばプロセッサ９１１に併設された不揮発性ＲＡＭでもよいし、記憶媒体動作部９１２によって読み書きされる記憶媒体の一部領域でもよい。動作パラメータ記憶部９１３には、開始アドレス（ＬＢＡ）、転送サイズ（ＬＥＮ）、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）、次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）といった各々の動作パラメータが記憶される。
【０００８】
プロセッサ９１１は、制御プログラムの動作により、先読み動作制御部９３１、および先読み動作実行部９３２の各々として機能する。先読み動作制御部９３１は、記憶媒体動作部９３２からデータを読み込む際に、先読みを実行するか否かを判定する。先読み動作実行部９３２は、実際にその先読みの動作を行う。
【０００９】
図１５は、図１３に示した磁気ディスク装置９１０の、サーバマシン９２０からのリード命令を受けた場合の動作について示すフローチャートである。サーバマシン９２０からのリード命令を受けると（ステップＳ９５１）、先読み動作制御部９３１はそのリード命令以前に有効なリード命令があるか、即ち次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）が有効であるか否かを判定する（ステップＳ９５２）。有効であればステップＳ９５３、無効ならステップＳ９５４に処理を進める。
【００１０】
有効なリード命令があるなら、今回受信したリード命令が連続したＬＢＡに対して発行されているか、即ち次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）が今回受信したリード命令のＬＢＡに等しいか否かを判定する（ステップＳ９５３）。等しければステップＳ９５５、等しくなければステップＳ９５４に処理を進める。
【００１１】
ステップＳ９５２で有効なリード命令が無い、またはステップＳ９５３で連続したＬＢＡに対して発行されたリード命令でない場合、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）をリード要求アドレス（ＬＢＡ＋ＬＥＮ）に設定し、さらに次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）を有効に設定して（ステップＳ９５４）処理を終了する。
【００１２】
一方、ステップＳ９５３で今回受信したリード命令が連続したＬＢＡに対して発行されていると判断された場合には、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）をリード要求アドレス（ＬＢＡ＋ＬＥＮ）に設定して（ステップＳ９５５）、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）からＬＥＮ×８セクタ分の先読みを先読み動作実行部９３２に実行させて（ステップＳ９５６）処理を終了する。なお、この先読みのＬＥＮ「×８」セクタ分、この「×８」の数値は条件に応じて任意に設定が可能なものである。
【００１３】
この処理によって、磁気ディスクの媒体上にある程度以上連続して記録されているデータに対しては、有効に先読み処理を行って、データの読み取りを効率化させることが可能となる。
【００１４】
これに関連する文献として、次の各々の技術資料がある。その中でも特許文献１には、バッファメモリに格納された先読みデータのアドレスとリード要求されたアドレスとの差が小さければ先読み処理を続行し、大きければ中断するというディスク再生装置が記載されている。特許文献２には、アクセスの方向性と領域間の間隔とから、連続的なリード命令に対してデータの先読みを継続するというディスク装置が記載されている。
【００１５】
特許文献３には、前回アクセスした領域の続きを先読みしているディスク装置に対して、それとは別の領域に対してリード命令があった場合にその先読みを中断するというディスクアレイの制御装置が記載されている。特許文献４には、アクセスパターンから先読みを行う領域を決定するというディスク装置が記載されている。非特許文献１には、前述のようにＷｉｎｄｏｗｓ  ＸＰにおけるデータ先読み機能の概要が記載されている。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００２−２８８９２７号公報
【特許文献２】特開２００１−２８５８０５号公報
【特許文献３】特開２０００−０３０４１９号公報
【特許文献４】特開２００７−３０４６９１号公報
【非特許文献】
【００１７】
【非特許文献１】デジタルアドバンテージ、「Ｗｉｎｄｏｗｓ  ＸＰ性能評価（２）ＯＳ起動／アプリケーション起動性能  １．ディスク・アクセスをモニタし、先読みすることで高速化を図るプリフェッチ機能（Ｗｉｎｄｏｗｓ  ＸＰの正体より）」、平成１３年１月１０日、アイティメディア株式会社、［平成２４年５月１４日検索］、インターネット＜URL：http://www.atmarkit.co.jp/fwin2k/xp_feature/016xpperftes02/xpperftes02_02.html＞
【発明の概要】
【発明が解決しようとする課題】
【００１８】
図１３〜１５で説明した既存技術に係るストレージシステム９０１では、磁気ディスクの媒体上にある程度以上連続して記録されているデータに対して先読み処理を行い、データ読み込みに掛かる時間を短縮してパフォーマンス（動作性能）を向上させることが可能である。
【００１９】
しかしながら、サーバマシン９２０の側でアプリケーション９２１ａがリード要求するデータサイズと、デバイスドライバ９２１ｂが実際に磁気ディスク装置９１０に送信するリード命令のデータサイズは、必ずしも一致するものではない。
【００２０】
デバイスドライバ９２１ｂは、バッファメモリ９２２のサイズに合わせてリード命令を発するものであり、アプリケーション９２１ａがそれより大きなサイズのリード要求を出した場合には、その要求を複数のリード命令に分割して送信する。その場合にも、アプリケーション９２１ａの出したリード要求のデータサイズは磁気ディスク装置９１０に対して知らされることはなく、あくまで「連続した複数のリード命令」として磁気ディスク装置９１０に送られることとなる。
【００２１】
特に最近は、１つの磁気ディスク装置が複数のサーバマシンやアプリケーションで共有されることが多くなり、その各々の間でアプリケーションからのリード要求のデータサイズが異なることが多くなっている。このため、サーバマシンやアプリケーションの側の設定を、リード要求のデータサイズをバッファメモリ９２２のサイズに合わせて変更すること自体が困難、かつ無意味になっている。
【００２２】
たとえば、以下のようなパターンで連続して４本のリード命令を、磁気ディスク装置９１０が受信したものとする。これは上記の通り、アプリケーション９２１ａが出した「開始アドレス（ＬＢＡ）＝ＬＢＡ１、転送サイズ（ＬＥＮ）＝２０４８ＭＢ」のリード要求をデバイスドライバ９２１ｂが分割して磁気ディスク装置９１０に対して発したものである。デバイスドライバ９２１ｂは、バッファメモリ９１４のサイズが５１２ＫＢであるので、このリード要求を５１２ＫＢ×４に分割するものである。
【００２３】
１番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１、転送サイズ（ＬＥＮ）＝５１２ＫＢ
２番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋５１２ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
３番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋１０２４ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
４番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋１５３６ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
【００２４】
そしてアプリケーション９２１ａは、これに続いて「開始アドレス（ＬＢＡ）＝ＬＢＡ２、転送サイズ（ＬＥＮ）＝２０４８ＭＢ」のリード要求を出している。ＬＢＡ２は、ＬＢＡ１から２０４８ＭＢ以上離れた論理アドレスを示す。図１６は、図１３に示した磁気ディスク装置９１０で、サーバマシン９２０のアプリケーションが互いに離れたアドレスに２ＭＢ（＝２０４８ＫＢ）単位でリード要求を発した場合の動作について示す説明図である。この図１６の中で、記憶媒体上の□のブロックは５１２ＫＢを表している。
【００２５】
先読み動作制御部９３１は、この１番目のリード要求に対しては、次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）は初期値の「無効」であるのでステップＳ９５４に進み、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）をＬＢＡ１＋５１２ＫＢに設定し、次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）を「有効」として設定して処理を終了する。
【００２６】
そして２番目のリード要求は、開始アドレス（ＬＢＡ）＝「ＬＢＡ１＋５１２ＫＢ」である。これは前回の処理で設定された次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）と等しい。かつ、前回の処理で次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）が「有効」となっている。
【００２７】
従って、ステップＳ９５３→ステップＳ９５５と処理が進み、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）を「ＬＢＡ１＋１０２４ＫＢ」に設定して（ステップＳ９５５）、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）からＬＥＮ×８セクタ分の先読みを先読み動作実行部９３２に実行させて（ステップＳ９５６）処理を終了する。３〜４番目のリード要求についても、同様に処理される。
【００２８】
しかしながら、ＬＢＡ１＋２０４８ＫＢ以降のアドレスについては、そもそもアプリケーション９２１ａはリード要求を出していない。従って、当該アドレスで先読みされたデータはバッファメモリ９１４からサーバマシン９２０に対して送られることはなく、無駄になってしまう。この後の「開始アドレス（ＬＢＡ）＝ＬＢＡ２、転送サイズ（ＬＥＮ）＝２０４８ＭＢ」のリード要求についても、同じように無駄な先読みが発生することとなる。これは磁気ディスク装置９１０のパフォーマンス（動作性能）を低下させるのみばかりか、この先読みを行った分の時間や電力も浪費されたことになってしまう。
【００２９】
本発明の目的は、デバイスドライバによって分割された「連続した複数のリード命令」に対しても、必要以上のデータ先読み動作が発生することによるパフォーマンスの低下を防止することを可能とするディスク装置、ディスク装置における先読み制御方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００３０】
上記目的を達成するため、本発明に係るディスク装置は、上位装置からのリード命令に応じて、備えられた媒体からデータを読み取って当該データを命令元の上位装置に送信するディスク装置であって、上位装置からリード命令を受けていないアドレスのデータを与えられたデータサイズ分媒体から読み取るデータ先読みの動作を行う先読み動作実行部と、上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部と、上位装置から連続したアドレスに対する複数のリード命令を受けると１番目のリード命令において要求データサイズ分のデータ先読みを先読み動作実行部に実行させ、これ以降のリード命令におけるデータ先読みの動作を抑制する先読み動作制御部とを有することを特徴とする。
【００３１】
上記目的を達成するため、本発明に係る先読み制御方法は、上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置にあって、上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、当該アドレスから始まる要求データサイズ分のデータを媒体から読み取るデータ先読みを先読み動作実行部が実行し、上位装置から受けた第２のリード命令に応じて、この第２のリード命令が第１のリード命令と連続したアドレスに対して発せられたものであるか否かを先読み動作制御部が判定し、第２のリード命令が第１のリード命令と連続したアドレスに対して発せられたものである場合に、既にデータ先読みが行われたアドレスの範囲に対するデータ先読みの動作を抑制するよう先読み動作制御部が先読み動作実行部に指令することを特徴とする。
【００３２】
上記目的を達成するため、本発明に係る先読み制御プログラムは、上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置にあって、ディスク装置が備えるプロセッサに、上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、当該アドレスから始まる要求データサイズ分のデータを媒体から読み取るデータ先読みを実行させる手順、上位装置から受けた第２のリード命令に応じて、この第２のリード命令が第１のリード命令と連続したアドレスに対して発せられたものであるか否かを判定する手順、および第２のリード命令が第１のリード命令と連続したアドレスに対して発せられたものである場合に、既にデータ先読みが行われたアドレスの範囲に対するデータ先読みの動作を抑制するよう指令する手順を実行させることを特徴とする。
【発明の効果】
【００３３】
本発明は、上記したように、既にデータ先読みを行った要求データサイズの範囲以降のデータ先読みの動作を抑制するように構成したので、実際にこの範囲以降に対してリード命令を受信するまではデータ先読みが行われることはない。これによって、「連続した複数のリード命令」に対しても、必要以上のデータ先読み動作が発生することによるパフォーマンスの低下を防止することを可能であるという、優れた特徴を持つディスク装置、ディスク装置における先読み制御方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００３４】
【図１】本発明の第１の実施形態に係るストレージシステムの接続構成について示す説明図である。
【図２】図１に示した磁気ディスク装置の構成をより詳しく示す説明図である。
【図３】図１に示した磁気ディスク装置の、サーバマシンからのリード命令を受けた場合の動作について示すフローチャートである。
【図４】図１に示した磁気ディスク装置で、サーバマシンのアプリケーションが互いに離れたアドレスに２ＭＢ（＝２０４８ＫＢ）単位でリード命令を発した場合の動作について示す説明図である。
【図５】本発明の第２の実施形態に係るストレージシステムの接続構成について示す説明図である。
【図６】図５に示した磁気ディスク装置の構成をより詳しく示す説明図である。
【図７】図６に示したリードサイズ判定部の動作について示すフローチャートである。
【図８】図６に示した転送サイズ決定部の動作について示すフローチャートである。
【図９】本発明の第３の実施形態に係るストレージシステムの接続構成について示す説明図である。
【図１０】図９に示した磁気ディスク装置の構成をより詳しく示す説明図である。
【図１１ａ】図１０で示したリードサイズ判定部の動作について示すフローチャートである。
【図１１ｂ】図１１ａの続きである。
【図１２】本発明の第４の実施形態に係るストレージシステムの接続構成について示す説明図である。
【図１３】既存技術に係るストレージシステムの接続構成について示す説明図である。
【図１４】図１３に示した磁気ディスク装置の構成をより詳しく示す説明図である。
【図１５】図１３に示した磁気ディスク装置の、サーバマシンからのリード命令を受けた場合の動作について示すフローチャートである。
【図１６】図１３に示した磁気ディスク装置で、サーバマシンのアプリケーションが互いに離れたアドレスに２ＭＢ（＝２０４８ＫＢ）単位でリード命令を発した場合の動作について示す説明図である。
【発明を実施するための形態】
【００３５】
（第１の実施形態）
以下、本発明の第１の実施形態の構成について添付図１〜２に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係るディスク装置（磁気ディスク装置１０）は、上位装置（サーバマシン２０）からのリード命令に応じて、備えられた媒体からデータを読み取って当該データを命令元の上位装置に送信するディスク装置であり、上位装置からリード命令を受けていないアドレスのデータを与えられたデータサイズ分媒体から読み取るデータ先読みの動作を行う先読み動作実行部１０２と、上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズ（アプリケーションのリードサイズ）を予め記憶している動作パラメータ記憶部１３と、上位装置から連続したアドレスに対するリード命令を受けると要求データサイズ分のデータ先読みを先読み動作実行部に実行させ、これ以降のデータ先読みの動作を抑制する先読み動作制御部１０１とを有する。
【００３６】
また、先読み動作制御部１０１は、先読み動作実行部がデータ先読みを行ったアドレスの範囲から次回のデータ先読みを行うか否かを判定する基準である先読み再開判定アドレスを算出してこれを動作パラメータ記憶部に記憶ざせ、先読み再開判定アドレス以降のアドレスに対するリード命令を上位装置から受けるまでデータ先読みの動作を抑制する。
【００３７】
以上の構成を備えることにより、磁気ディスク装置１０は、「連続した複数のリード命令」に対しても、必要以上のデータ先読み動作が発生することによるパフォーマンスの低下を防止することを可能となる。
以下、これをより詳細に説明する。
【００３８】
図１は、本発明の第１の実施形態に係るストレージシステム１の接続構成について示す説明図である。ストレージシステム１は、磁気ディスク装置１０にサーバマシン２０および保守端末３０が接続されて構成される。
【００３９】
磁気ディスク装置１０は、外部に接続されたコンピュータ装置であるサーバマシン２０の外部記憶装置として動作するものであり、このサーバマシン２０からのリード命令およびライト命令に応じてデータの読み書きを行う。磁気ディスク装置１０とサーバマシン２０との間の接続については任意の規格や方法を利用することが可能であるが、典型的にはＦＣやｉＳＣＳＩなどである。
【００４０】
また、磁気ディスク装置１０は、典型的には複数の磁気ディスクドライブを組み合わせてＲＡＩＤを構成したものであるが、単数の磁気ディスクドライブ、あるいは複数または単数の光ディスクなどに置換することもできる。
【００４１】
さらに、磁気ディスク装置１０に対しては、サーバマシン２０とはさらに別個のコンピュータ装置である保守端末３０から、装置管理に関する操作、特に後述する各種動作パラメータの設定の操作を行うこともできる。この設定は、サーバマシン２０から行うこともできる。
【００４２】
サーバマシン２０のプロセッサ２１では、磁気ディスク装置１０から読み出されたデータを利用して何らかの処理を行うアプリケーション２１ａと、アプリケーション２１ａからの要求に応じて磁気ディスク装置１０に対して直接リード命令およびライト命令を発するデバイスドライバ２１ｂとが動作している。さらに、磁気ディスク装置１０との間で送受信するデータを一時的に記憶するためのバッファメモリ２２も備えられている。デバイスドライバ２１ｂは、アプリケーション２１ａからのリード命令を、バッファメモリ２２のサイズに合わせて分割して、磁気ディスク装置１０に送信する機能を持つ。
【００４３】
図２は、図１に示した磁気ディスク装置１０の構成をより詳しく示す説明図である。磁気ディスク装置１０は、サーバマシン２０からのリード命令およびライト命令を受けてデータの読み書きを制御するプロセッサ１１と、このプロセッサ１１からの指令を受けて実際の記憶媒体にデータを読み書きする記憶媒体動作部１２と、記憶媒体動作部１２がデータの読み書きを行う際に設定された動作パラメータを記憶する動作パラメータ記憶部１３とを備える。
【００４４】
動作パラメータ記憶部１３は、たとえばプロセッサ１１に併設された不揮発性ＲＡＭでもよいし、記憶媒体動作部１２によって読み書きされる記憶媒体の一部領域でもよい。動作パラメータ記憶部１３には、既存技術と同じく、開始アドレス（ＬＢＡ）、転送サイズ（ＬＥＮ）、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）、次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）といった各々の動作パラメータが記憶される。
【００４５】
動作パラメータ記憶部１３には、これらに加えて、本実施形態に特有の動作パラメータである、最初のリード開始アドレス（１ｓｔ  Ｒｅａｄ  ＬＢＡ）、アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）、アプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）、先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）、および先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）が記憶される。
【００４６】
上記の動作パラメータの中で、特にアプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）は、サーバマシン２０もしくは保守端末３０から、任意の値に設定することが可能である。また、アプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）の「有効」と「無効」の設定も同様に可能である。その他の動作パラメータについても同様であるが、このアプリケーションのリードサイズとその有効フラグが特に、アプリケーションの種類などに応じて変更されることが多いものである。
【００４７】
プロセッサ１１は、制御プログラムの動作により、先読み動作制御部１０１、および先読み動作実行部１０２の各々として機能する。先読み動作制御部１０１は、記憶媒体動作部１２からデータを読み込む際に、先読みを実行するか否かを判定する。先読み動作実行部１０２は、実際にその先読みの動作を行う。
【００４８】
図３は、図１に示した磁気ディスク装置１０の、サーバマシン２０からのリード命令を受けた場合の動作について示すフローチャートである。サーバマシン２０からのリード命令を受けると（ステップＳ２０１）、先読み動作制御部１０１はそのリード命令以前に有効なリード命令があるか、即ち次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）が有効であるか否かを判定する（ステップＳ２０２）。有効であればステップＳ２０３、無効ならステップＳ２０４に処理を進める。
【００４９】
有効なリード命令があるなら、今回受信したリード命令が連続したＬＢＡに対して発行されているか、即ち次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）が今回受信したリード命令のＬＢＡに等しいか否かを判定する（ステップＳ２０３）。等しければステップＳ２０５、等しくなければステップＳ２０４に処理を進める。
【００５０】
ステップＳ２０２で有効なリード命令が無い、またはステップＳ２０３で連続したＬＢＡに対して発行されたリード命令でない場合、最初のリード開始アドレス（１ｓｔ  Ｒｅａｄ  ＬＢＡ）をリード要求ＬＢＡに設定し、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）をリード要求アドレス（ＬＢＡ＋ＬＥＮ）に設定し、さらに次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）を有効に設定する（ステップＳ２０４）。
【００５１】
その上で、アプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）が有効か否かを判定し（ステップＳ２１１）、無効ならそのまま処理を終了する。有効なら、設定されているアプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）分の先読みを先読み動作実行部１０２に実行させ（ステップＳ２１２）、先読み動作制御部１０１は先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）を最初のリード開始アドレス（１ｓｔ  Ｒｅａｄ  ＬＢＡ）＋アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）の数値に設定し、先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）を先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）に設定する（ステップＳ２１３）。
【００５２】
一方、ステップＳ２０３で今回受信したリード命令が連続したＬＢＡに対して発行されていると判断された場合には、続いてアプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）が有効であるか否かを確認し（ステップＳ２０７）、有効でなければ次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）からＬＥＮ×８セクタ分の先読みを先読み動作実行部１０２に実行させて（ステップＳ２０６）処理を終了する。
【００５３】
アプリケーションのリードサイズ有効フラグが有効であれば、リード要求（ＬＢＡ＋ＬＥＮ）が先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）よりも大きいか否かを判定し（ステップＳ２０８）、大きくなければそのまま処理を終了する。大きければ先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）から｛先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）＋アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）×３｝−先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）セクタ分の先読みを先読み動作実行部１０２に実行させる（ステップＳ２０９）。
【００５４】
そして先読み動作制御部１０１は先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）を先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）＋アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）×３に設定し、先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）にアプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）を加算して（ステップＳ２１０）処理を終了する。
【００５５】
なお、ステップＳ２０６で実行する先読みのＬＥＮ「×８」セクタ分、あるいはステップＳ２０９〜２１０で実行する先読みのアプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）「×３」セクタ分、これらの「×８」「×３」の数値は条件に応じて任意に設定が可能なものである。
【００５６】
図４は、図１に示した磁気ディスク装置１０で、サーバマシン２０のアプリケーション２１ａが互いに離れたアドレスに２ＭＢ（＝２０４８ＫＢ）単位でリード要求を発した場合の動作について示す説明図である。この図４の中で、記憶媒体上の□のブロックは５１２ＫＢを表している。この図４に示した場合でも、バッファメモリ１４のサイズが５１２ＫＢであるので、サーバマシン２０側のデバイスドライバ２１ｂはこのリード要求を５１２ＫＢ×４に分割してから磁気ディスク装置１０に送信する。
【００５７】
磁気ディスク装置１０側は、前述した既存技術の例と同じく、サーバマシン２０側のアプリケーション２１ａは２ＭＢ単位でリード要求が発していることを知らされていない。しかしながら、サーバマシン２０もしくは保守端末３０から、アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）＝２０４８ＫＢという設定を予め与えられている。そして、これと同様にして、アプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）＝「有効」という設定も予め与えられている。
【００５８】
ここで、以下のようなパターンで連続して４本のリード命令を、磁気ディスク装置１０は受信した。これは上記の通り、アプリケーション２１ａが出した「開始アドレス（ＬＢＡ）＝ＬＢＡ１、転送サイズ（ＬＥＮ）＝２０４８ＭＢ」のリード要求をデバイスドライバ２１ｂが分割して磁気ディスク装置１０に対して発したものである。
【００５９】
１番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１、転送サイズ（ＬＥＮ）＝５１２ＫＢ
２番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋５１２ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
３番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋１０２４ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
４番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋１５３６ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
【００６０】
これに対して、磁気ディスク装置１０が１番目のリード要求を受信した時点では、次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）は初期値の「無効」であるのでステップＳ２０４に進み、最初のリード開始アドレス（１ｓｔ  Ｒｅａｄ  ＬＢＡ）をそのＬＢＡに、次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）をＬＢＡ１＋５１２ＫＢに設定し、次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）を「有効」として設定する。
【００６１】
その上でステップＳ２１１に進み、アプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）が「有効」であることを確認してステップＳ２１２〜２１３の処理に進み、ＬＢＡ１＋２０４８ＫＢ分のデータ先読みを実行し、先読み終端アドレス（Ｐｒｅｆｅｔｃｈ  Ｅｎｄ  ＬＢＡ）＝ＬＢＡ１＋２０４８ＫＢとし、先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）を＝ＬＢＡ１＋２０４８ＫＢ以上とする。
【００６２】
これに続いて磁気ディスク装置１０が受信した２番目のリード要求は、開始アドレス（ＬＢＡ）＝「ＬＢＡ１＋５１２ＫＢ」である。これは前回の処理で設定された次のリード開始アドレス（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ）と等しい。かつ、前回の処理で次のリード開始アドレス有効フラグ（Ｎｅｘｔ  Ｒｅａｄ  ＬＢＡ．ｖａｌｉｄ＿ｆｌａｇ）が「有効」となっているので、ステップＳ２０３→ステップＳ２０５と処理が進み、アプリケーションのリードサイズ有効フラグ（ＡＰ  Ｒｅａｄ  ＬＥＮ．ｖａｌｉｄ＿ｆｌａｇ）も「有効」であるのでステップＳ２０８に進む。
【００６３】
しかしながら、ステップＳ２０８では先読み再開判定アドレス（Ｐｒｅｆｅｔｃｈ  ＲｅＳｔａｒｔ  ＬＢＡ）が「ＬＢＡ１＋２０４８ＫＢ以上」であるのに対して、リード要求（ＬＢＡ＋ＬＥＮ）が「ＬＢＡ１＋１０２４ＫＢ」である。そのため、ステップＳ２０９〜２１０の先読みは実行されない。これは３番目および４番目のリード要求に対しても同様に処理される。
【００６４】
従って、１番目のリード命令で行われた「ＬＢＡ１＋２０４８ＫＢ」の分以上のデータ先読みは実行されない。その先のデータに対するリード命令が来た場合に、初めてその分のデータ先読みが実行される。
【００６５】
従って、１つのリード命令がドライバによって複数の連続したアドレスに対するリード命令としてストレージに伝達される環境においても、必要外のデータ先読みの発生を抑制して、リード命令に対するパフォーマンスの向上を図ることが可能となる。また、無駄なデータ先読みの発生が抑制されるので、消費電力の軽減にもなる。
【００６６】
（第１の実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。
本実施形態に係る先読み制御方法は、上位装置２０で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置１０にあって、上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、要求データサイズ分のデータを媒体から読み取るデータ先読みを先読み動作実行部が実行し（図３・ステップＳ２１２〜２１３）、上位装置から受けた第２のリード命令に応じて、この第２のリード命令が第１のリード命令と連続したアドレスに対して発せられたものであるか否かを先読み動作制御部が判定し（図３・ステップＳ２０３）、第２のリード命令が第１のリード命令と連続したアドレスに対して発せられたものである場合に、既にデータ先読みが行われたアドレスの範囲に対するデータ先読みの動作を抑制するよう先読み動作制御部が先読み動作実行部に指令する（図３・ステップＳ２０８）。
【００６７】
ここで、第１のリード命令に対して先読み動作実行部がデータ先読みを行ったアドレスの範囲から、次回のデータ先読みを行うか否かを判定する基準である先読み再開判定アドレスを先読み動作制御部が算出してこれを動作パラメータ記憶部に記憶させ（図３・ステップＳ２１３）、データ先読みの動作を抑制するよう指令する工程（図３・ステップＳ２０８）が、第２のリード命令が先読み再開判定アドレス以降のアドレスに対するリード命令であるか否かを先読み動作制御部が判定し、第２のリード命令が先読み再開判定アドレス以降のアドレスに対するリード命令でない場合に先読み動作制御部がデータ先読みの動作を抑制させる。
【００６８】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行するディスク装置１０のプロセッサ１１に実行させるようにしてもよい。本プログラムは、非一時的な記録媒体、例えば、ＤＶＤ、ＣＤ、フラッシュメモリ等に記録されてもよい。その場合、本プログラムは、記録媒体からコンピュータによって読み出され、実行される。
この動作により、本実施形態は以下のような効果を奏する。
【００６９】
本実施形態によれば、連続して発行されたリード命令に対して、アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）＝２０４８ＫＢ以上のデータ先読みは実行されない。従って、このアプリケーションのリードサイズに適切な数値を予め設定してさえあれば、必要外のデータ先読みの発生はなく、従ってこれに伴うパフォーマンスの低下や、時間や消費電力の浪費を抑制するという効果を得ることが可能となる。
【００７０】
（第２の実施形態）
本発明の第２の実施形態に係るディスク装置（磁気ディスク装置３１０）は、第１の実施形態で説明した構成に加えて、リード命令が連続したアドレスに対して発行されたものであるか否かを判定し、連続したアドレスに対して発行されたリード命令の転送長を合算してこれを要求データサイズとして動作パラメータ記憶部に記憶するリードサイズ判定部（リードサイズ判定部４０３および転送サイズ決定部４０４）を備える構成とした。
【００７１】
この構成によっても、第１の実施形態と同じ効果が得られることに加えて、さらに要求データサイズの適切な設定値を外部から予め与えておく必要がなくなるという効果を得ることも可能となる。
以下、これをより詳細に説明する。
【００７２】
第１の実施形態で説明した動作は、要求データサイズ（アプリケーションのリードサイズ）が適切な値に予め設定されていることを前提として、前述の効果を発揮するものである。従って、適切な設定が予め与えられている必要がある。本発明の第２の実施形態は、その設定をアプリケーション２１ａが実際に行うＩ／Ｏパターンから適切な設定値を検出することによって行うように構成したものである。
【００７３】
図５は、本発明の第２の実施形態に係るストレージシステム３０１の接続構成について示す説明図である。ストレージシステム３０１は、磁気ディスク装置３１０に、第１の実施形態と同一のサーバマシン２０および保守端末３０が接続されて構成される。
【００７４】
図６は、図５に示した磁気ディスク装置３１０の構成をより詳しく示す説明図である。磁気ディスク装置３１０は、ハードウェア的な構成は第１の実施形態で説明した磁気ディスク装置１０と同一である。プロセッサ１１では、制御プログラムの動作により、前述の先読み動作制御部１０１および先読み動作実行部１０２に加えて、さらにリードサイズ判定部４０３と転送サイズ決定部４０４とが機能している。
【００７５】
また、動作パラメータ記憶部１３には、前述の各パラメータに加えて、「アプリケーションの転送サイズ」、「最初のリード開始アドレス」、「ＡＰ転送サイズ更新期間」、「連続リード最小値」、「連続リードサイズ」といった各パラメータが記憶されている。
【００７６】
このうち、「最初のリード開始アドレス」は前述の最初のリード開始アドレス（１ｓｔ  Ｒｅａｄ  ＬＢＡ）の値をそのまま利用することができる。「アプリケーションの転送サイズ」は、前述のアプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）として適用される値である。「ＡＰ転送サイズ更新期間」は、この動作のために予め与えられた更新周期である。この他のパラメータは、次に示すリードサイズ判定部４０３の動作によって決定される。
【００７７】
図７は、図６に示したリードサイズ判定部４０３の動作について示すフローチャートである。サーバマシン２０からのリード命令を受けると（ステップＳ５０１）、リードサイズ判定部４０３は図３のステップＳ２０３と同様にして、このリード命令が連続したＬＢＡに対して発行されたリード命令であるか否かを判定する（ステップＳ５０２）。連続したＬＢＡに対して発行されたリード命令であれば、連続リードサイズ（初期値＝０）に対してそのリード命令の転送長を加算して、これを動作パラメータ記憶部１３に記憶させて処理を終了する（ステップＳ５０３）。
【００７８】
ステップＳ５０２で、連続したＬＢＡに対して発行されたリード命令でなければ、動作パラメータ記憶部１３に記憶された連続リードサイズと連続リード最小値とを比較し（ステップＳ５０４）、連続リードサイズの方が小さければ連続リード最小値としてこの値を動作パラメータ記憶部１３に記憶させて（ステップＳ５０５）ステップＳ５０６に進む。連続リード最小値の方が小さければそのままステップＳ５０６に進む。そして連続リードサイズ値としてそのリード命令の転送長を動作パラメータ記憶部１３に記憶させて（ステップＳ５０６）処理を終了する。
【００７９】
図８は、図６に示した転送サイズ決定部４０４の動作について示すフローチャートである。転送サイズ決定部４０４は、ＡＰ転送サイズ更新期間が経過するたびに（ステップＳ５５１）、連続リード最小値として動作パラメータ記憶部１３に記憶された値をアプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）として設定する（ステップＳ５５２）。先読み動作制御部１０１および先読み動作実行部１０２は、設定されたこの値に基づいて動作する。
【００８０】
（第３の実施形態）
本発明の第３の実施形態に係るディスク装置（磁気ディスク装置６１０）は、第２の実施形態で説明した構成に加えて、リードサイズ判定部７０３が、リード命令が連続したアドレスに対して発行されたものであり、かつ第１の転送長のリード命令が単数または複数回と第１の転送長より小さい第２の転送長のリード命令が１回というパターンで繰り返されている場合に、このパターン１回分の各リード命令の転送長の合計値を要求データサイズとするように構成した。
【００８１】
この構成によって、元々のアプリケーションが発行したリード要求のサイズが要求データサイズの整数倍でなくても、第２の実施形態と同じ効果が得ることも可能となる。
以下、これをより詳細に説明する。
【００８２】
第１〜２の実施形態で説明した動作は、アプリケーションのリードサイズ（ＡＰ  Ｒｅａｄ  ＬＥＮ）＝２０４８ＫＢであるのに対して、ドライバで分割された各リード命令の転送サイズ（ＬＥＮ）＝５１２ＫＢであるという動作例である。しかしながら、このリードサイズが毎回必ずバッファメモリ１４のサイズの整数倍になるということは無い。本発明の第３の実施形態は、アプリケーションのリードサイズがたとえば１２００ＫＢなどのような、バッファメモリ１４のサイズの整数倍でなく端数が出る場合にも対応しうる構成としている。
【００８３】
図９は、本発明の第３の実施形態に係るストレージシステム６０１の接続構成について示す説明図である。ストレージシステム６０１は、磁気ディスク装置６１０に、第１の実施形態と同一のサーバマシン２０および保守端末３０が接続されて構成される。
【００８４】
図１０は、図９に示した磁気ディスク装置６１０の構成をより詳しく示す説明図である。磁気ディスク装置６１０は、ハードウェア的な構成は第１の実施形態で説明した磁気ディスク装置１０と同一である。プロセッサ１１では、制御プログラムの動作により、前述の先読み動作制御部１０１および先読み動作実行部１０２に加えて、さらにリードサイズ判定部７０３が機能している。
【００８５】
また、動作パラメータ記憶部１３には、第２の実施形態で説明した各パラメータに加えて、「分割サイズ」「分割端数」「分割サイズ候補」「分割端数候補」「連続リードサイズ」「連続リード最小値」といった各パラメータが記憶されている。これらの各数値は初期値＝０である。
【００８６】
図１１ａ〜１１ｂは、図１０で示したリードサイズ判定部７０３の動作について示すフローチャートである。サーバマシン２０からのリード命令を受けると（ステップＳ８０１）、リードサイズ判定部７０３は、まず分割サイズの値が０であるか否かを判定する（ステップＳ８０２）。０でなければそのまま処理を終了し、０であればステップＳ８０３以降に処理を進める。
【００８７】
引き続いて、図３のステップＳ２０３と同様にして、このリード命令が連続したＬＢＡに対して発行されたリード命令であるか否かを判定する（ステップＳ８０３）。連続したＬＢＡに対して発行されたリード命令でなければ、そのＬＢＡを最初のリード開始アドレスとして記憶し（ステップＳ８２０）、転送サイズ（ＬＥＮ）を分割サイズ候補の値として記憶し、さらに分割端数候補の値を０として記憶する（ステップＳ８２１）。
【００８８】
これに引き続いて、連続リードサイズが連続リード最小値より小さいか否かについて判定し（ステップＳ８２２）、小さくなければ後述のステップＳ８２４に進む。ステップＳ８１２で連続リードサイズが連続リード最小値より小さければ、連続リード最小値＝連続リードサイズとして（ステップＳ８２３）、そして連続リードサイズ＝転送サイズとして記憶して（ステップＳ８２４）処理を終了する。
【００８９】
ステップＳ８０３で連続したＬＢＡに対して発行されたリード命令であると判断されれば、連続リードサイズの値に転送サイズを加算し（ステップＳ８０４）、引き続いて分割サイズ候補の値が０であるか否かを判定する（ステップＳ８０５）。０であればそのまま処理を終了し、０でなければ引き続いて分割サイズ候補の値が０であるか否かを判定する（ステップＳ８０６）。分割サイズ候補の値が０であれば、今度は転送サイズが分割サイズ候補の値と一致するか否かを判定する（ステップＳ８０７）。一致すれば分割サイズ候補＝０として（ステップＳ８１１）処理を終了し、一致しなければ転送サイズの値を分割端数候補として記憶して（ステップＳ８０８）処理を終了する。
【００９０】
ステップＳ８０６で分割端数候補の値が０でなければ、引き続いて転送サイズが分割サイズ候補の値と一致するか否かを判定する（ステップＳ８０９）。一致すれば、分割サイズ候補の値を分割サイズとして記憶し、分割端数候補の値を分割端数として記憶し、さらに分割サイズ候補の値をアプリケーションのリードサイズとして設定して（ステップＳ８１０）処理を終了する。転送サイズが分割サイズ候補の値と一致しなければ、分割サイズ候補の値を０として（ステップＳ８１１）処理を終了する。
【００９１】
前述のように、アプリケーションのリードサイズ＝１２００ＫＢに対して、転送サイズ（ＬＥＮ）＝５１２ＫＢである場合、リード要求は以下のパターンで連続したものとなる。
１番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１、転送サイズ（ＬＥＮ）＝５１２ＫＢ
２番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋５１２ＫＢ、転送サイズ（ＬＥＮ）＝５１２ＫＢ
３番目のリード要求：開始アドレス（ＬＢＡ）＝ＬＢＡ１＋１０２４ＫＢ、転送サイズ（ＬＥＮ）＝１７６ＫＢ
このように、転送サイズ（ＬＥＮ）＝５１２ＫＢのリード要求２組に、端数の転送サイズ（ＬＥＮ）＝１７６ＫＢが１組続くパターンとなる。
【００９２】
この場合、１番目のリード要求に対しては、ステップＳ８０３で連続したＬＢＡに対して発行されたリード命令でないと判断されるので、ステップＳ８２０でリード開始アドレス＝ＬＢＡ１、ステップＳ８２１で分割サイズ候補＝５１２ＫＢ、分割端数候補＝０となる。連続リードサイズと連続リード最小値はいずれも０であるのでステップＳ８２４に進んで連続リードサイズ＝５１２ＫＢとなって、処理を終了する。
【００９３】
２番目のリード要求に対しては、ステップＳ８０３で連続したＬＢＡに対して発行されたリード命令であると判断されるので、ステップＳ８０４で連続リードサイズに５１２ＫＢが加算されて１０２４ＫＢとなる。そしてステップＳ８０５で分割サイズ候補はまだ０なのでステップＳ８０６に進み、分割端数候補＝０なのでステップＳ８０７に進み、さらに転送サイズ（＝５１２ＫＢ）は分割サイズ候補（＝０）と一致しないので、ステップＳ８０７に進んで分割サイズ候補＝０として処理を終了する。
【００９４】
３番目のリード要求に対しては、ステップＳ８０３で連続したＬＢＡに対して発行されたリード命令であると判断されるので、ステップＳ８０４で連続リードサイズに１７６ＫＢが加算されて１２００ＫＢとなる。そしてステップＳ８０５で分割サイズ候補はまだ０なのでステップＳ８０６に進み、分割端数候補＝０なのでステップＳ８０７に進むが、ここで転送サイズ（＝１７６ＫＢ）は分割サイズ候補（＝０）と一致しないので、ステップＳ８０７に進んで分割サイズ候補＝１７６ＫＢとして処理を終了する。
【００９５】
このようにして、この第３の実施形態では、分割すると端数が出るリードサイズのリード要求に対しても、第１〜２の実施形態と同等の効果を発揮することが可能となる。
【００９６】
（第４の実施形態）
本発明の第４の実施形態に係るディスク装置（磁気ディスク装置８１０）は、第１〜３の実施形態で説明した構成に加えて、複数の上位装置およびアプリケーションソフトごとの要求データサイズをデータベース化して記憶するＩ／Ｏパターンデータベース８１５を備える構成とした。
【００９７】
この構成によって、上位装置およびアプリケーションソフトごとに異なる要求データサイズを設定して、第１〜３の実施形態と同じ効果が得ることも可能となる。
以下、これをより詳細に説明する。
【００９８】
図１２は、本発明の第４の実施形態に係るストレージシステムストレージシステム８０１の構成について示す説明図である。ストレージシステムストレージシステム８０１は、磁気ディスク装置８１０に、複数台のサーバマシン２０、および１台以上の保守端末３０が接続されて構成される。サーバマシン２０および保守端末３０は、第１の実施形態と同一のものであるが、サーバマシン２０は複数台、もしくは１台であってもその中で動作するアプリケーション２１ａが複数種類存在する。
【００９９】
磁気ディスク装置８１０は、第１の実施形態の磁気ディスク装置１０に加えて、さらにＩ／Ｏパターンデータベース８１５が、プロセッサ１１で動作する構成となっている。これに対応するデータを記憶するＩ／Ｏパターンデータ記憶部８１６も、動作パラメータ記憶部１３内に設けられている。
【０１００】
複数存在するサーバマシン２０もしくはアプリケーション２１ａの各々が、互いに異なるアプリケーションのリードサイズで動作している可能性がある。そのような場合には、磁気ディスク装置８１０に対してはデバイスドライバによって全て同一サイズに分割されたリード命令が届くことになる。
【０１０１】
そのような場合に備えて、Ｉ／Ｏパターンデータベース８１５はＩ／Ｏパターンデータ記憶部８１６に、各サーバマシン２０および各アプリケーション２１ａごとに設定されたアプリケーションのリードサイズを設定して、第１〜３の実施形態として説明した動作を先読み動作制御部１０１および先読み動作実行部１０２に行わせることができる。また、第２〜３の実施形態にあるように、実際のＩ／Ｏパターンからアプリケーションのリードサイズの設定を行う構成としてもよい。
【０１０２】
このような構成とすることによって、１つの磁気ディスク装置が複数のサーバマシンやアプリケーションで共有されて、その各々の間でアプリケーションからのリード要求のデータサイズが異なる場合にも、第１〜３の実施形態と同一の効果を得ることが可能となる。
【０１０３】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【０１０４】
上述した実施形態について、その新規な技術内容の要点をまとめると、以下のようになる。なお、上記実施形態の一部または全部は、新規な技術として以下のようにまとめられるが、本発明は必ずしもこれに限定されるものではない。
【０１０５】
（付記１）  上位装置からのリード命令に応じて、備えられた媒体からデータを読み取って当該データを命令元の前記上位装置に送信するディスク装置であって、
前記上位装置からリード命令を受けていないアドレスのデータを与えられたデータサイズ分前記媒体から読み取るデータ先読みの動作を行う先読み動作実行部と、
前記上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部と、
前記上位装置から連続したアドレスに対するリード命令を受けると前記要求データサイズ分の前記データ先読みを前記先読み動作実行部に実行させ、これ以降の前記データ先読みの動作を抑制する先読み動作制御部と
を有することを特徴とするディスク装置。
【０１０６】
（付記２）  前記先読み動作制御部が、
前記先読み動作実行部が前記データ先読みを行ったアドレスの範囲から次回の前記データ先読みを行うか否かを判定する基準である先読み再開判定アドレスを算出してこれを前記動作パラメータ記憶部に記憶させ、前記先読み再開判定アドレス以降のアドレスに対するリード命令を前記上位装置から受けるまで前記データ先読みの動作を抑制することを特徴とする、付記１に記載のディスク装置。
【０１０７】
（付記３）  前記リード命令が連続したアドレスに対して発行されたものであるか否かを判定し、連続したアドレスに対して発行されたリード命令の転送長を合算してこれを前記要求データサイズとして前記動作パラメータ記憶部に記憶させるリードサイズ判定部を備えることを特徴とする、付記１に記載のディスク装置。
【０１０８】
（付記４）  前記リードサイズ判定部が、
前記リード命令が連続したアドレスに対して発行されたものであり、かつ第１の転送長のリード命令が単数または複数回と前記第１の転送長より小さい第２の転送長のリード命令が１回というパターンで繰り返されている場合に、このパターン１回分の各リード命令の転送長の合計値を前記要求データサイズとすることを特徴とする、付記３に記載のディスク装置。
【０１０９】
（付記５）  複数の前記上位装置および前記アプリケーションソフトごとの前記要求データサイズをデータベース化して記憶するＩ／Ｏパターンデータベースを備えることを特徴とする、付記１ないし付記４のうちいずれか１項に記載のディスク装置。
【０１１０】
（付記６）  上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置にあって、
前記上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、前記要求データサイズ分のデータを前記媒体から読み取るデータ先読みを先読み動作実行部が実行し、
前記上位装置から受けた第２のリード命令に応じて、この第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものであるか否かを先読み動作制御部が判定し、
前記第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものである場合に、既に前記データ先読みが行われたアドレスの範囲に対する前記データ先読みの動作を抑制するよう前記先読み動作制御部が前記先読み動作実行部に指令する
ことを特徴とする先読み制御方法。
【０１１１】
（付記７）  前記第１のリード命令に対して前記先読み動作実行部が前記データ先読みを行ったアドレスの範囲から、次回の前記データ先読みを行うか否かを判定する基準である先読み再開判定アドレスを前記先読み動作制御部が算出してこれを前記動作パラメータ記憶部に記憶させると共に、
前記データ先読みの動作を抑制するよう指令する工程が、前記第２のリード命令が前記先読み再開判定アドレス以降のアドレスに対するリード命令であるか否かを前記先読み動作制御部が判定し、前記第２のリード命令が前記先読み再開判定アドレス以降のアドレスに対するリード命令でない場合に前記先読み動作制御部が前記データ先読みの動作を抑制することを特徴とする、付記６に記載の先読み制御方法。
【０１１２】
（付記８）  上位装置で動作するアプリケーションソフトが１回のリード要求で要求するデータサイズである要求データサイズを予め記憶している動作パラメータ記憶部を備えるディスク装置にあって、
前記ディスク装置が備えるプロセッサに、
前記上位装置から受けた第１のリード命令に応じて、当該リード命令に含まれるアドレスおよび転送長のデータを備えられた媒体から読み取ると共に、前記要求データサイズ分のデータを前記媒体から読み取るデータ先読みを実行させる手順、
前記上位装置から受けた第２のリード命令に応じて、この第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものであるか否かを判定する手順、
および前記第２のリード命令が前記第１のリード命令と連続したアドレスに対して発せられたものである場合に、既に前記データ先読みが行われたアドレスの範囲に対する前記データ先読みの動作を抑制するよう指令する手順
を実行させることを特徴とする先読み制御プログラム。
【産業上の利用可能性】
【０１１３】
本発明は、ディスク媒体にデータを読み書きする外部記憶装置に対して、幅広く適用可能である。磁気ディスクの他には光ディスクなどでもよく、また複数のディスク装置を備えたディスクアレイ装置などにも適用可能である。
【符号の説明】
【０１１４】
１、３０１、６０１、８０１  ストレージシステム
１０、３１０、６１０、８１０  磁気ディスク装置
１１、２１  プロセッサ
１２  記憶媒体動作部
１３  動作パラメータ記憶部
１４  バッファメモリ
２０  サーバマシン
２１ａ  アプリケーション
２１ｂ  デバイスドライバ
３０  保守端末
１０１  先読み動作制御部
１０２  先読み動作実行部
４０３、７０３  リードサイズ判定部
４０４  転送サイズ決定部
８１５  Ｉ／Ｏパターンデータベース
８１６  Ｉ／Ｏパターンデータ記憶部
【図１】
0005895918.tif 000002
【図２】
0005895918.tif 000003
【図３】
0005895918.tif 000004
【図４】
0005895918.tif 000005
【図５】
0005895918.tif 000006
【図６】
0005895918.tif 000007
【図７】
0005895918.tif 000008
【図８】
0005895918.tif 000009
【図９】
0005895918.tif 000010
【図１０】
0005895918.tif 000011
【図１１ａ】
0005895918.tif 000012
【図１１ｂ】
0005895918.tif 000013
【図１２】
0005895918.tif 000014
【図１３】
0005895918.tif 000015
【図１４】
0005895918.tif 000016
【図１５】
0005895918.tif 000017
【図１６】
0005895918.tif 000018