特許文献1記載のネットワークブートシステムでは、コンピュータ(以下、PCを例に説明)によって記憶装置の既定の論理ブロック番地が読み出されたこと、あるいはコンピュータを使用開始しようとするユーザによるユーザ認証が成功したこと、を契機としてデータ先読みが開始する。そうすると、キャッシュ装置が、PCの動作に必要なデータを読み出し開始してから、PCの動作に伴ってPCがリード要求の発行を開始するまでの時間は、数秒〜10数秒しかない。
そのため、キャッシュ装置と記憶装置との間のネットワークの伝送遅延時間や帯域の影響が無視できない場合、ならびにストレージアクセスの待ち時間が無視できない場合、キャッシュ装置がリード要求を発行してから、対象データの取得を完了するまでの時間(以下、「ネットワークレスポンス時間」と呼ぶ)が増加し、データ先読みに必要な時間に対する、ネットワークレスポンス時間の占める割合が無視できなくなり、データ先読みに必要な時間が増加する恐れがある。ネットワークの伝送遅延時間や帯域、ストレージアクセスの待ち時間がネットワークレスポンス時間に影響を与える様子を図1に示す。
その結果、PCからのリード要求発行時に、その対象データの先読みが未実行となり、キャッシュ装置に対象データが保存されていないという状態(以下、「キャッシュミスヒット」という)が発生する。その場合PCのリード要求発行後、伝送遅延時間が大きく、あるいは帯域が小さい(以下、「性能が低い」と表現する)ネットワークを使用して記憶装置からデータの取得を待たなければならない。その結果、PCの動作に必要なデータの取得が遅延し、PCの動作速度の劣化防止効果が十分得られず、PCの使用者にとってはPCの動作が遅く感じられ、利便性が低下する。
また、キャッシュ装置と記憶装置との間のネットワークとして、通信事業者が提供するベストエフォート型の商用ネットワークを利用した場合、ベストエフォートネットワークの伝送遅延時間や帯域が時々刻々変動することにより、PCの動作に必要なデータの取得時間も変動し、PCの動作速度が不安定化する。
本発明は、前記課題を解決するためのものであって、キャッシュ装置によるデータ先読みを高速化することによって、データ先読みのためのリード要求が、コンピュータからのリード要求に先行して行われることを確実とするものである。すなわち、コンピュータによるリード要求の対象データはキャッシュ装置内に既に保存されていること(これを、「キャッシュヒット」という)が確実となる。
そうすると、コンピュータは、リード要求発行後、逐次、記憶装置からデータの取得を待つ必要がなく、同一のデータは、アクセス時間の短いキャッシュ装置から取得することができる。これは、より性能の高いネットワークを介してデータを取得することを意味するから、コンピュータの動作性能が向上する。
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下のとおりである。
第1の発明は、先読みパターンデータを格納する先読みパターンデータ格納領域を有する記憶デバイスと、コンピュータが発行するリード要求と同一の条件による先行リード要求を発行するための先読みパターンデータを先読みパターンデータ格納領域に格納する手段と、コンピュータが特定の動作に必要なデータを取得するためにリード要求の発行を開始する前に、先読みパターンデータの記述に従って先行リード要求を発行することにより、記憶装置からデータを取得して、当該データをキャッシュデータ格納領域内に一時的に記憶させる手段と、を備えることを特徴とする。
第2の発明は、先読みパターンデータを格納する先読みパターンデータ格納領域を有する記憶デバイスと、コンピュータが発行するリード要求において、時間的に連続して発行される複数のリード要求が読み出し対象とするブロック番地領域が連続している場合には、当該連続したブロック領域のすべてを読み出し対象とする1回の先行リード要求を発行するように変換した先読みパターンデータを先読みパターンデータ格納領域に格納する手段と、コンピュータが特定の動作に必要なデータを取得するためにリード要求の発行を開始する前に、先読みパターンデータの記述に従って先行リード要求を発行することにより、記憶装置からデータを取得して、当該データをキャッシュデータ格納領域内に一時的に記憶させる手段と、を備えることを特徴とする。
第3の発明は、先読みパターンデータを格納する先読みパターンデータ格納領域を有する記憶デバイスと、コンピュータが発行するリード要求において、同一のブロック番地が複数のリード要求によって読み出される場合には、当該ブロック番地は1回の先行リード要求によって読み出され、かつ番地が連続する複数のブロックは、1回の先行リード要求によって読み出されるように変換した先読みパターンデータを先読みパターンデータ格納領域に格納する手段と、コンピュータが特定の動作に必要なデータを取得するためにリード要求の発行を開始する前に、先読みパターンデータの記述に従って先行リード要求を発行することにより、記憶装置からデータを取得して、当該データをキャッシュデータ格納領域内に一時的に記憶させる手段と、を備えることを特徴とする。
第4の発明は、第3の発明において、格納する手段は、リード要求が、当該リード要求が対象とする読み出しブロックのブロック番地の昇順または降順で発行されるように変換して格納することを特徴とする。
第5の発明は、第3の発明において、格納する手段は、コンピュータによる、より早期の読み出し対象となるブロックを含むリード要求が、より早期に発行されるように変換して格納することを特徴とする。
第6の発明は、第1〜5の発明において、記憶装置との間で2以上のセッションを確立し、データ先読みのために発行される任意のリード要求は、当該2以上のセッションのいずれかを選択して発行する手段を備えることを特徴とする。
以下、第1〜第6の発明を、変数を用いて説明する。
コンピュータは、所定の動作をするにあたり、記憶装置内のあるブロック番地を対象としたリード要求を発行することによって、当該動作に必要なデータを取得する。そして、そのリード要求の回数が合計N回であり、i番目のリード要求が読み出し対象とする記憶装置内ブロック番地は、開始ブロック番地をBi、総ブロック数をLiとする連続した複数のブロック番地であることが、キャッシュ装置にとって既知であるとする。以下、このようなコンピュータの所定の動作に伴うリード要求の発行パターンを、「読み出しパターンサンプル(Bi,Li)」と表現することとする。また、[Bi,Li]の表記は、論理ブロック番地Biから論理ブロック番地Bi+Li−1の区間を意味するものとする。
第1〜6の発明は、既知の読み出しパターンサンプル(Bi,Li)に基づき、データ先読みを行うことにある。そのうち、第2〜5の発明は、読み出しパターンサンプル(Bi,Li)に対し、一定のアルゴリズムに基づいた加工を施すことにより、第1の発明と比較して、リード要求の発行を削減してデータ先読みを行うことにある。当該アルゴリズムは、第2〜5の発明においてそれぞれ異なる。また、第6の発明は、リード要求の発行を削減することはないが、リード要求を多重に発行することによって、ネットワークレスポンス時間の影響を極力排除しようとするものである。
第1の発明は、データ先読みをN回のリード要求を発行することにより行うものであって、i番目のリード要求は[Bi,Li]を対象とすることを特徴とするものである。要するに、キャッシュ装置が、読み出しパターンサンプル(Bi,Li)によるリード要求の発行条件を完全に模倣して、データ先読みを行うものである。
この発明によれば、データ先読みが完了する前にコンピュータの動作が開始したとしても、コンピュータからのリード要求が対象とするデータが既にキャッシュ装置内に記憶されていることがより確実となり、キャッシュヒットの割合を高めることができる。その結果、コンピュータは、記憶装置からデータを取得する必要がなく、同一のデータはキャッシュ装置から取得することができる。これは、より性能の高いネットワークを介してデータを取得することを意味するから、コンピュータの動作性能が向上する。
第2の発明を説明する。読み出しパターンサンプル(Bi,Li)におけるi番目ないしj番目の合計j−i+1個のリード要求に着目したときに、連続する(i番目とi+1番目,i+1番目とi+2番目,・・・j−1番目とj番目の)リード要求の読み出し対象のブロック番地が連続している(Bi+Li=Bi+1,Bi+1+Li+1=Bi+2,・・・Bj−1+Lj−1=Bjとなる)場合がある。
第2の発明は、このような場合において、第1の発明が発行するi番目ないしj番目のリード要求(合計j−i+1個)を、[Bi,Bj+Lj−Bi]を読み出し対象とする1回のリード要求に置き換えて記憶装置に発行することにより、データ先読みを行うことを特徴とする。例えば、2番目のリード要求が[2,2]、3番目のリード要求が[4,3]、4番目のリード要求が[7,4]であったとすると、これら3回のリード要求を、1回のリード要求[2,9]に置き換えて記憶装置に発行することにより、データ先読みを行うことを特徴とする。
この発明によれば、第1の発明では、データ先読みのためのリード要求の発行回数がN回であったものを、N回未満に削減することができる。その結果、リード要求を発行する度に発生するネットワークレスポンス時間の累積時間を削減することができ、データ先読みに必要な時間を短縮することができる。そうすると、キャッシュヒット率(リード要求1回当たりのキャッシュヒット数をいう。以下同じ)を高めることができ、PCの動作性能を向上させることができる。
第3の発明は、読み出しパターンサンプル(Bi,Li)に基づいてリード要求を発行する点では第1および2の発明と類似するが、読み出しパターンサンプル(Bi,Li)を以下の方法により加工して、第1および2の発明とは異なる条件によってリード要求を発行するという特徴を持つ。
まず、読み出しパターンサンプル(Bi,Li)(1≦i≦N)において、整数kを1≦k≦Nの範囲で変化させた結果、Bk≦m≦Bk+Lk−1を1回以上満たしたすべての整数mを抽出する。これは、読み出しパターンサンプルにおいて、1回以上読み出し対象となったブロック番地をすべて抽出することを意味する。
次に、抽出したブロック番地mを読み出し対象とするリード要求を発行することにより、データ先読みを行う。ただし、ブロック番地mが連続して存在(例えば、m=0,1,2,3,5,6,7・・・である場合には、m=0,1,2,3で連続して存在)している場合には、当該連続領域の開始ブロック番地をbi,ブロック数をliとして、[bi,li](上記の例では、[0,4])を読み出し対象とする1個だけのリード要求を発行する。
本発明によれば、番地が連続するブロックを1回のリード要求で読み出し、かつ同一のブロック番地が2回以上のリード要求によって読み出されることがない。すると、同一のブロックが2回以上読み出される余地を残す第2の発明と比較して、リード要求の回数をさらに削減することができる。その結果、リード要求を発行する度に発生するネットワークレスポンス時間の累積時間を、第2の発明と比較してさらに削減することができ、データ先読み時間を短縮することができる。そうすると、第2の発明と比較して、キャッシュヒット率をさらに高めることができ、PCの動作性能を向上させることができる。
第3の発明では、リード要求による読み出し対象のみが特徴となっていて、リード要求の発行順序には特徴がない。一方で、後述する第4および第5の発明は、第3の発明において、リード要求の発行順序に特徴を持たせたものである。
第4の発明は、第3の発明において発行されうるリード要求の発行順序を、その開始ブロック番地の昇順または降順とするものである。
この発明によれば、論理ブロック番地が小さい順または大きい順にリード要求が発行され、記憶装置からデータを取得する。そうすると、記憶装置が磁気ディスク装置であり、磁気ディスク上の中心から外周にかけて、あるいはその逆方向にブロック番地が順番に分布している場合では、データ先読みに伴って磁気ヘッドが中心から外周またはその逆方向に滑らかに移動し、無駄な往復動作をすることがないから、記憶装置からデータを高速に取得できることが期待でき、データ先読み時間を短縮することができる。また、記憶装置が、RAID(Redundant Array of Independent Disks)装置である場合、一般的に、内蔵する磁気ディスク装置と、大きなデータサイズでの入出力が成されるので、この読み出されたデータの無駄が軽減され、データ先読み時間を短縮することができる。そうすると、第1および2の発明と比較して、キャッシュヒット率をさらに高めることができ、PCの動作性能を向上させることができる。
第5の発明は、第3の発明において発行されうるリード要求の発行順序を、読み出しパターンサンプル(Bi,Li)と比較して決定することに特徴がある。
まず、第3の発明において発行されうるリード要求のうち、読み出しパターンサンプル(B1,L1)の読み出し対象範囲を完全に含む、[bi,li](bi≦B1≦B1+L1≦bi+li)を対象とするリード要求を選択して発行する。次に、読み出しパターンサンプル(B2,L2)について、同様に当該読み出し対象範囲を完全に含むリード要求を発行する。読み出しパターンサンプル(B3,L3)、(B4,L4)・・・についても、同様の選択を行う。
本発明によれば、データ先読みが完了する前にコンピュータの動作が開始したとしても、コンピュータからのリード要求が対象とするデータが既にキャッシュ装置内に保存されていることが、第4の発明と比較してより確実となり、キャッシュヒット率をさらに高めることができ、PCの動作性能を向上させることができる。
第6の発明は、PCが、記憶装置からデータを取得するために、リード要求を発行し、データが返送されてきたことを確認してから次のリード要求を発行するという制約があるという点に着目したものである。本発明においては、キャッシュ装置と記憶装置との間に複数のセッションを確立し、データ先読みに伴うリード要求を複数のセッションに振り分けて発行することによって、前記制約を回避するものである。
この発明によれば、i番目のリード要求を発行した後、当該リードコマンドに対応するデータが返送されてくる前に、別のセッションを使用して次のi+1番目のリード要求を発行することができるから、ネットワークレスポンス時間の単純な累積を回避し、データ先読みの高速化を図ることができる。そうすると、第1ないし5の発明と比較して、キャッシュヒット率をさらに高めることができ、PCの動作性能を向上させることができる。
データ先読みにともなうリード要求の発行回数を削減し、あるいは複数のセッションを介してリード要求を発行することによって、データ先読み実行時のネットワーク利用率を上昇させ、データ先読みを高速化させることができる。その結果、PCからの任意のリード要求があった時には、当該リード要求の対象データは既にキャッシュ装置に保存されていることとなるから、キャッシュヒット率をほぼ100%とすることができ、PCの動作(OSやアプリケーションソフトの起動)を、さらに高速化することができる。
さらに、キャッシュヒット率がほぼ100%となることで、PCは、必要なデータを、ストレージ装置からではなく、キャッシュ装置から取得することとなる。そうすると、状態(帯域や遅延時間等)が変動しやすいWANを経由することなく、状態が比較的安定しているLANのみを経由して必要なデータを取得することになるから、WANの状態変化の影響をほとんど受けることなく、PCにおけるOSやアプリケーションソフトの起動時間を安定化することができる。
本発明の実施例のネットワークキャッシュ装置を含む全体のシステム構成例を図2に示す。図2において、PC1〜PC3はコンピュータの一例となるパーソナルコンピュータ(以下、PC)である。S1は記憶装置の一例となるストレージ装置である。C1はネットワークキャッシュ装置(以下、「キャッシュ装置」と記載する。)である。PC1〜PC3、キャッシュ装置C1、ストレージ装置S1はIP(Internet Protocol)網N1で接続されている。ここで、PC1〜PC3とキャッシュ装置C1の間のネットワーク性能(遅延の小ささ、帯域の大きさ、パケット損失の小ささ等)は、キャッシュ装置C1とストレージ装置S1の間のネットワーク性能よりも高いものとする。例えば、PC1〜PC3とキャッシュ装置C1は同一のLAN(Local Area Network)に属し、地理的にも相互に近い位置に設置されているものとする。一方、当該LANとストレージ装置S1は、WAN(Wide Area Network)で接続されていて、地理的にも遠い位置にあるものとする。
PC1〜PC3、キャッシュ装置C1、ストレージ装置S1の各ノードには、IP(Internet Protocol)アドレスとTCP(Transmission Control Protocol)ポート番号が付与されていて、IP網N1(LANやWAN)を介して相互にTCP/IP通信が可能である。PC1〜PC3に割り当てられているIPアドレスをp1〜p3、キャッシュ装置C1に割り当てられているIPアドレスをc1、ストレージ装置S1に割り当てられているIPアドレスをs1とする。
PC1〜PC3の内部には、イニシエータI1〜I3がある。一方、ストレージ装置S1の内部にはターゲットT1があり、ターゲット名tn1が割り当てられている。ターゲットT1には論理ユニットLU1〜LU3が接続され、それぞれに論理ユニット番号lun1〜lun3が割り当てられている。1つの論理ユニットLU(Logical Unit)内の記憶領域は、多数の論理ブロックによって構成され、各論理ブロックには論理ブロックアドレス(LBA:Logical Block Address)が割り当てられている。1つの論理ブロックの容量は通常512Byteであって、これより大きなデータが論理ユニットLUに保存される場合には、複数の論理ブロックに分けて保存される。
PC1〜PC3は、自らが特定の動作をするために、ストレージ装置S1内の特定の論理ユニットLUに保存されたデータをiSCSI(Internet Small Computer System Interface)プロトコルを使用して取得する。iSCSIはIETF(Internet Engineering Task Force)で標準化されたプロトコルであって、その詳細な仕様はRFC(Request for Comments)3720に記載されている。
具体的には、まずPC1〜PC3のイニシエータI1〜I3が、Login Requestオペレーションをストレージ装置S1内ターゲットT1に対して送信し、ストレージ装置S1内ターゲットT1からLogin Responseを返送してもらうことにより、PC1〜PC3内イニシエータI1〜I3とストレージ装置S1内ターゲットT1との間でiSCSIセッションを確立する。次に、当該iSCSIセッションを使用して、イニシエータI1〜I3がターゲットT1に対してリード要求を送信し、Data−Inを返却してもらうことでデータを取得する。ここで、「リード要求」とは、具体的にはSCSI RequestオペレーションにSCSIコマンド「READ」を載せたものであり、以後これを「SCSI−READ」と表記する。SCSI−READによれば、LU内の論理ブロックアドレスBと論理ブロックの総数Lを指定することで、先頭の論理ブロックアドレスをB、論理ブロックの総数をLブロックとする複数の連続した論理ブロックのデータを1度に読み出すことができる。以後、BとLで表される連続論理ブロック領域を[B,L]、当該領域を読み出し対象とするSCSI−READを「SCSI−READ[B,L]」と表記する。例えば、論理ブロック[0,12]は、論理ブロックアドレス0〜11の合計12個の連続論理ブロック領域を指し、SCSI−READ[0,12]は、当該論理ブロック領域のデータを読み出し対象とするSCSI−READである。通常、1つのデータは複数の不連続な論理ブロックに散在していることが多く、その場合、複数のSCSI−READによる読み出しが必要になる。
ここから以下においては、PC1〜PC3のうち、PC1が動作する場合の実施例を詳述する。そこで、ストレージ装置S1内LU1には、PC1の動作に必要な一切のデータ(オペレーティングシステム(以下、OS)やアプリケーションプログラム等)が保存されているものとする。
キャッシュ装置C1は、上記手順に伴ってPC1とストレージ装置S1の間で送受信されるiSCSIオペレーションやデータを中継する役割を持つ。すなわち、PC1がストレージ装置S1に対して送信するLogin Request、SCSI−READ、その他のオペレーションは一旦キャッシュ装置C1に送信され、キャッシュ装置C1によってストレージ装置S1に中継される。逆にストレージ装置S1からPC1に対して返送されるデータも、同様にキャッシュ装置C1によって中継される。
キャッシュ装置C1が、PC1とストレージ装置S1の間で送受信されるiSCSIオペレーションやデータを中継する方法には様々なものがあるが、その一つの方法を以下に詳述する。
その方法とは、キャッシュ装置C1をIP網N1(LAN)における1つのIPホスト(IPアドレスc1を持ったノード)として設置し、PC1からストレージ装置S1、あるいはストレージ装置S1からPC1に対して送信するiSCSIオペレーションやデータを転送するIPパケットの着信IPアドレスをc1とする方法である。この方法によるiSCSIオペレーション等の中継シーケンスを図3に示す。
まず、PC1はキャッシュ装置C1との間でTCPコネクション1を確立し、当該コネクションを利用して、Login Requestをキャッシュ装置C1に送信する。Login Requestを受信したキャッシュ装置C1は、Login Request送信元IPアドレス(PC1のp1)から、Table1を検索することにより、当該Login Requestの中継先を検索し、検索した中継先であるストレージ装置S1(IPアドレスs1、TCPポート3260)との間でTCPコネクション2を確立して、当該TCPコネクション2を利用してLogin Requestを中継する。この時、キャッシュ装置C1は、TCPコネクション1とTCPコネクション2が対であることを管理する。
Login Requestを受信したストレージ装置S1は、TCPコネクション2を利用してLogin Responseをキャッシュ装置C1に返送し、Login Responseを受信したキャッシュ装置C1は、TCPコネクション2に対応するTCPコネクション1を利用して、Login RequestをPC1に中継する。この時、PC1とストレージ装置S1との間にはiSCSIセッションが確立する。
以降、PC1とストレージ装置S1との間で送受信されるiSCSIオペレーション、レスポンス、データは、すべてコネクション1とTCPコネクション2およびiSCSIセッションを利用して送受信されることとなる。
キャッシュ装置C1は、さらにデータキャッシュ機能も持つ。データキャッシュ機能は、パッシブ(受動的)なものと、アクティブ(能動的)なものがある。
パッシブなキャッシュ機能とは、イニシエータがターゲットからデータを取得したことを契機に、当該データをキャッシュ装置内にも保存(キャッシュ)する機能である。すなわち、ストレージ装置S1からPC1に対して返送されたデータは、キャッシュ装置C1によって中継されるとともに、キャッシュ装置C1内の記憶デバイス(メモリ、ハードディスクドライブ等)にも保存される。その結果、再度PC1からストレージ装置S1に対して同一データを読み出すためにSCSI−READが発行された場合には、キャッシュ装置C1は当該SCSI−READをストレージ装置S1に中継することなく、キャッシュ装置C1は折り返し当該データをPC1に対して返送する(キャッシュヒットする)。
アクティブなキャッシュ機能とは、パッシブなキャッシュ機能に加え、イニシエータがターゲットからデータを取得する前に、キャッシュ装置が自律的にデータをターゲットから取得し、キャッシュする機能である。すなわち、PC1がストレージ装置S1からデータを取得するためにストレージ装置S1に対してSCSI−READを発行する前に、キャッシュ装置C1が自律的にストレージ装置S1に対してSCSI−READを発行することにより、PC1が取得すると予想されるデータを前もって取得(以下、「データ先読み」と呼ぶ)し、キャッシュ装置内に保存する。そして、PC1がストレージ装置S1に対してSCSI−READを発行し、ストレージ装置S1からデータを取得しようとした時には、既に同一のデータがキャッシュされている(キャッシュヒットする)ことが期待できるから、キャッシュ装置C1は当該SCSI−READをストレージ装置S1に中継することなく、キャッシュ装置C1は折り返し当該データをPC1に対して返送する。
上記「PC1が取得すると予想されるデータ」は、「先読みパターンデータ」によって特定する。先読みパターンデータとは、キャッシュ装置C1内の記憶デバイスに保存されるデータであって、データ先読みを行う際にキャッシュ装置C1がストレージ装置S1に対して発行するSCSI−READの発行条件を記述したものである。
先読みパターンデータの形式例を図4に示す。図4において、1行目〜3行目はデータ先読み対象のLUを特定する情報である。1行目はデータ先読み対象LUが属するストレージのIPアドレスとTCPポート番号、2行目は当該LUが属するターゲット名、3行目は当該LUの論理ユニット番号LUNである。4行目以降は、3行目までに特定された論理ユニット番号LUNにおける、読み出し対象LBAを特定する情報であり、各行が1個のSCSI−READ[B,L]の発行に対応し、第1カラムは読み出し対象の先頭論理ブロックアドレス(=B)、第2カラムは読み出しブロック総数(=L)に対応する。
ただし、必要な情報が特定できる限り、先読みパターンデータの形式は図4のものに限られない。また、図4の1行目(IPアドレス、TCPポート番号)、2行目(ターゲット名)、3行目(LU)の情報は、先読みパターンデータに含まれる必要はなく、先読みパターンデータとは別に保持してもよい。
図4の先読みパターンデータによれば、キャッシュ装置C1は、IPアドレス192.168.1.1、ポート番号3260、ターゲット名iqn.com.hitachi−ntt−labsで特定されるターゲットとの間でiSCSIセッションを確立し、LU=0に対してSCSI−READを発行することによって、データ先読みを行う。図4によれば、SCSI−READ[0,2]が1番目に発行され、SCSI−READ[2,2]が2番目に発行されることとなる。
先読みパターンデータは、データ先読みの目的(PCの動作のうち、何を高速化させたいか)に応じて、システム管理者等が自由に作成することができる。例えば、特定のアプリケーションソフトウェアの起動を高速化するには、当該アプリケーションソフトウェアが保存されているLUとLBAがデータ先読み対象となるように、先読みパターンデータを作成する。
ここから以下では、PC(ハードディスクドライブを内蔵しない)でのOS起動を高速化するために、OS起動の際に必要なデータを先読みすることを想定して、先読みパターンデータの作成方法を詳述する。
先読みパターンデータを作成する最も簡便な方法は、実際にPC1の電源を投入して(必要ならばユーザ認証を行って)OSを起動させ、OSの起動が完了するまでの間に、PC1からキャッシュ装置C1に対して送信されるすべての(N個の)SCSI−READ[Bi,Li](1≦i≦N)をキャプチャし、その内容[Bi,Li](1≦i≦N)どおりに先読みパターンデータ(図4では4行目以降)を記述するというものである。
キャプチャの方法としては、PC1とキャッシュ装置C1との間のネットワークにパケットキャプチャ装置を設置し、通過するSCSI−READのパケット内容を解析して、[Bi,Li](1≦i≦N)の値を抽出する方法がある。また、別の方法としては、通過するSCSI−READの内容を解析、[Bi,Li](1≦i≦N)を記録する機能をキャッシュ装置自身が配備し、それを使用する方法がある。いずれを選択しても問題ない。
以上の方法で作成した先読みパターンデータを、そのままキャッシュ装置C1に保存してデータ先読みをさせた場合、PC1がOS起動に際して発行するn個のSCSI−READ[Bi,Li](0≦i≦n)と、データ先読みによってキャッシュ装置C1がストレージ装置S1に対して発行するSCSI−READは、同一となる。このように、データ先読みにおいて、PC1が発行するSCSI−READを忠実に再現させるような先読みパターンデータの形式を、以後「形式1」と呼ぶこととする。
形式1の先読みパターンデータを使ってデータ先読みを行い、その後PC1でOSが起動すれば、PC1が発行するSCSI−READコマンドの読み出し対象データは、常にキャッシュ装置に存在することになる。そうすると、PC1はストレージ装置S1ではなくキャッシュ装置C1から必要なデータを取得することができるから、PC1におけるOS起動はより高速となる。
OSの起動に際しては、例えばマイクロソフト株式会社(商標)のOSであるWindows XP(商標)の場合、PCは200〜300MByte程度のデータを取得することがわかっている。そして、形式1による先読みパターンデータによって同程度サイズのデータを先読みすると、数十秒の時間を要することがわかっている。そのため、データ先読みの開始からPC1のOS起動開始までの時間が比較的短い場合は、データ先読みによるSCSI−READの発行が、PCからのSCSI−READ発行に間に合わないこともある。そうすると、結局PC1はストレージ装置S1からデータの取得を待たなければならないこととなるから、PC1におけるOS起動の高速化の効果が減退するという問題がある。
そこで、形式1におけるデータ先読みの冗長性を以下のような方法で排除し、データ先読みを高速化する。
PC1がOS起動に際して発行するSCSI−READ[Bi,Li]を図示すると、一般的に図5のようになる。図5において、横軸はLBAであり、縦軸は何度目に発行されたSCSI−READであるかを表す。1本の線分は、1個のSCSI−READによる読み出し対象論理ブロックの範囲を表す。Bは線分(1回のSCSI−READコマンドによる読み出し範囲)の開始位置(先頭LBA)を表し、Lは線分の長さ(1回のSCSI−READコマンドにより読み出されるブロック総数)を表す。
図5の例では、計14個のSCSI−READが発行されているが、1〜3番目、4〜5番目、6〜8番目、9〜11番目、12〜14番目のSCSI−READコマンドは、それぞれ連続した論理ブロック領域を読み出している。
ここで、SCSIによるデータ取得手順を図6に示す。図6は、9ブロックのデータを2つのSCSI−READにより取得する場合(左)と、1つのSCSI−READで取得する場合(右)を比較している。SCSIによれば、SCSI−READを連続して発行するには、前に発行したSCSI−READにより要求したデータがData−Inによって返送された後でなければ、次のSCSI−READコマンドを発行することができない。そうすると、連続した論理ブロック(図6では9ブロック)のデータを図6(左)のように複数のSCSI−READに分割して(図6(左)では、1番目に3ブロック、2番目に6ブロック)読み出すよりも、図6(右)のように1回のSCSI−READですべてのブロックを読み出した方が、SCSI−READの発行回数も減少するから、より短時間で読み出しを完了することができる。
図5の場合であれば、1〜3番目、4〜5番目、6〜8番目、9〜11番目、12〜14番目のSCSI−READは、それぞれ1回のSCSI−READに置き換えればよい。そうすると、図7のように、形式1の先読みパターンデータを「形式2」に変換した先読みパターンデータによっても、同一のデータ先読み効果が得られる。
形式1におけるSCSI−READの発行回数が14回であるのに対し、形式2の先読みパターンデータでは5回である。その結果、SCSI−READの発行にともなって発生するネットワークレスポンス時間の累積時間を削減することができるから、ネットワーク利用効率が上昇し、データ先読みに必要な時間を削減することができる。データ先読みに必要な時間を削減することができれば、キャッシュヒット率を高めることができるから、PC1の動作性能は向上する。
形式2によるSCSI−READの発行条件を見てみると、3回目と5回目で同一の論理ブロック領域を読み出している。ところが、データ先読みにおいては、同一のデータを1度読み出してキャッシュすれば、再度読み出す必要はない。
また、形式2においては、2番目と4番目のSCSI−READによる読み出し対象は連続しているにもかかわらず、別個のSCSI−READを発行することになる。これは、形式1から形式2への変換においては、時間的に連続しているSCSI−READの読み出し対象が連続論理ブロックである場合のみに、それらを1回のSCSI−READに置換するからである。しかし、読み出し対象論理ブロックの連続性によるSCSI−READの置換対象は、時間的に連続して発行されているものに限定する必要はない。
そこで、以上のような冗長性を排除するために、形式1の先読みパターンデータを「形式3」に変換する。形式3への変換アルゴリズムは、図8に示した通りである。
形式3の先読みパターンデータでは、形式1において2回以上読み出し対象となったブロック(図7における[B6,L6],[B7,L7],[B8,L8])であっても、SCSI−READにより読み出される回数は1回のみとする。また、論理ブロックアドレスが連続した領域は、1回のみのSCSI−READによって読み出されるようにする。さらに、SCSI−READの発行順序は、読み出し対象論理ブロックアドレスの小さい順または大きい順(図7では小さい順)とする。
形式3の効果は2つある。まず、形式1におけるSCSI−READの発行回数が14回、形式2では5回であるのに対し、形式3の先読みパターンデータによればSCSI−READの発行回数を3回に削減することができる。その結果、データ先読みに必要な時間を、形式1や形式2と比較して削減することができる。
さらに、ストレージ装置S1が磁気ディスク装置であり、磁気ディスク上の中心から外周にかけて、あるいはその逆方向に論理ブロックアドレスが順番に分布している場合では、形式3に基づくデータ先読みに伴って磁気ヘッドが中心から外周またはその逆方向に滑らかに移動し、無駄な往復動作をすることがないから、ストレージ装置S1からデータを高速に取得できることが期待できる。
以上の2点より、形式1や2と比較してキャッシュヒット率をさらに高めることができるから、PC1の動作性能は向上する。
形式1(PC1におけるOS起動においてデータ読み出しそのまま)によるSCSI−READの発行条件を見てみると、論理ブロック[B4,L4]と[B5,L5]が、論理ブロック[B6,L6]、[B7,L7]、[B8,L8]よりも先に読み出されているにもかかわらず、形式3ではその順序が逆である。
そうすると、論理ブロック[B6,L6]、[B7,L7]、[B8,L8]のデータの読み出しが優先され、論理ブロック[B6,L6]、[B7,L7]のデータが必要になる時期に、当該データがキャッシュ装置C1に保存されていない事態が生じる恐れもある。その結果、SCSI−READがキャッシュ装置C1によってストレージ装置S1に中継され、ストレージ装置S1から比較的性能の低いネットワーク(WAN)を介してデータを取得することになるから、データ先読みの高速化の効果が減退する。
以上の問題を解決するには、形式3においてSCSI−READの発行順序のみを変更した、「形式4」の先読みパターンデータを使用する。形式1から形式4への変換アルゴリズムを図9に示す。
図9によれば、形式4におけるSCSI−READの発行回数は3回であり、その回数は形式3と変わらない。そのため、データ先読みに必要な時間は形式3と変わらない。しかし、PC1が実際に必要とするデータをより早期に先読みする点で、形式3と比較してキャッシュヒット率を改善することができる。その結果、PC1におけるOS起動をより高速化することができる。
形式2〜形式4の先読みパターンデータは、上述のアルゴリズムに基づき動作するプログラムによって形式1の先読みパターンデータを読み込み、それぞれの形式に変換、出力することによって得ることができる。
以上に説明した実施例は、先読みパターンデータの形式を変換することによって、データ先読みを高速化するものである。以下では、先読みパターンデータの形式は同一としつつ、データ先読みのためにPC1内イニシエータI1とストレージ装置S1内ターゲットT1との間に確立するiSCSIセッション数を増加し、複数のiSCSIセッションを使用してSCSI−READを発行することにより、データ先読みを高速化する原理および方法を詳述する。
iSCSIおよびSCSIによれば、SCSI−READを連続して発行する場合、SCSI−READによって要求したデータが返送されないと、次のSCSI−READを発行されないという制約は、コンピュータが、ユーザ操作によって、先に読み出されたデータに基づき、次の動作を決定する非決定的な条件に基づいているためである。本実施例のデータ先読み処理は、先読みパターンデータに基づく、ストレージ装置のアクセスであるので、複数のiSCSIセッションを確立し、SCSI−READを各セッションに振り分けて発行する。そうすると、当該制約の影響は最小限に抑えることができ、ネットワークの利用率が上昇する。その原理を図10に示す。
図10では、5個のSCSI−READを単一のiSCSIセッションで発行する場合(図10(左)参照)と、3つのiSCSIセッションに振り分けて発行する場合(図10(右)参照)を比較している。SCSI−READの振り分け方は、図10のようなラウンドロビン方式でもよいし、ランダム選択でもよい。
また、ストレージ装置へ、多重にリード要求を発行するインタフェースとして、複数のセッションを利用する他に、単一のセッションにおいて、SCSI2仕様以降に定められたCommand Queuingを使用しても、差し支えない。
以上の実施例は、PCにおけるOSの起動を高速化する場合を想定して詳述したが、OSの起動後に必要となるアプリケーションソフトウェアの起動も、本願発明を利用して高速化することができる。その方法を以下に詳述する。
先読みパターンデータを作成する最も簡便な方法として、実際にPC1の電源を投入して(必要ならばユーザ認証を行って)OSを起動させ、OSの起動が完了するまでの間に、PC1からキャッシュ装置C1に対して送信されるすべての(N個の)SCSI−READ[Bi,Li](1≦i≦N)をキャプチャし、その内容[Bi,Li](1≦i≦N)どおりに先読みパターンデータ(図4では4行目以降)を記述するという方法を説明ずみである。
ここで、OS起動が完了したことをもってSCSI−READ[Bi,Li]のキャプチャを停止することなく、OS起動完了後、引き続き起動を高速化したいアプリケーションソフトウェアを起動させ、その起動完了後にキャプチャを停止し、そのキャプチャ内容[Bi,Li]どおりに先読みパターンデータを作成する。そうすると、当該先読みパターンデータの対象に、当該アプリケーションソフトウェアの起動に必要なデータも含まれることとなるから、OSの起動だけではなく、当該アプリケーションソフトウェアの起動によって読み出されるデータもキャッシュ装置に前もって保存されている状態となる。その結果、当該アプリケーションソフトウェアの起動を高速化することができる。
また、先読みパターンデータの対象を、アプリケーションソフトウェアの起動に必要なデータのみとすることもできる。その場合、OSの起動は高速化できないが、当該アプリケーションソフトウェアの起動のみを高速化することができる。
次に、キャッシュ装置C1の内部構造(ソフトウェア構造)の例について、図11を用いて説明する。キャッシュ装置C1は、図11に示すように、iSCSIターゲットC101、キャッシュメモリ制御機能C102、キャッシュメモリ管理機能C103、先読みパターンデータ変換機能C104、iSCSIイニシエータC105をソフトウェアとして有し、記憶デバイスC106をハードウェアとして備える。記憶デバイスC106としては、メモリまたはハードディスクまたはその他の記憶手段を用いることができる。記憶デバイスC106は、キャッシュデータ格納領域C107、先読みパターンデータ格納領域C108を有する。キャッシュデータ格納領域C107、先読みパターンデータ格納領域C108はプログラムによって記憶デバイスC106内に作成される。
キャッシュメモリ制御機能C102は、図には示していないが、PCが発行するリード要求と同一の条件による先行リード要求を発行するための先読みパターンデータを先読みパターンデータ格納領域C108に格納する機能と、PCが特定の動作に必要なデータを取得するためにリード要求の発行を開始する前に、先読みパターンデータ格納領域C108内の先読みパターンデータの記述に従って先行リード要求を発行することにより、ストレージ装置S1からデータを取得して、当該データをキャッシュデータ格納領域C107内に一時的に記憶させる機能と、ストレージ装置S1との間で2以上のセッションを確立し、データ先読みのために発行される任意のリード要求は、当該2以上のセッションのいずれかを選択して発行する機能を備える。
先読みパターンデータ変換機能C104は、図には示していないが、PCが発行するリード要求において、時間的に連続して発行される複数のリード要求が読み出し対象とするブロック番地領域が連続している場合には、当該連続したブロック領域のすべてを読み出し対象とする1回の先行リード要求を発行するように変換した先読みパターンデータを先読みパターンデータ格納領域C108に格納する機能と、PCが発行するリード要求において、同一のブロック番地が複数のリード要求によって読み出される場合には、当該ブロック番地は1回の先行リード要求によって読み出され、かつ番地が連続する複数のブロックは、1回の先行リード要求によって読み出されるように変換した先読みパターンデータを先読みパターンデータ格納領域C108に格納する機能と、を備える。
図11に示すように、iSCSIターゲットC101、キャッシュメモリ制御機能C102、キャッシュメモリ管理機能C103、先読みパターンデータ変換機能C104はアプリケーションプログラムであり、iSCSIイニシエータはオペレーティングシステムが有する機能である。キャッシュ装置C1は、これらのプログラムをCPUが実行することにより、それぞれの機能を実現する手段を備える。なお、キャッシュ装置C1の内部構造(ソフトウェア構造)の一部または全部をハードウェアで構成しもよい。
図11において、iSCSIターゲットC101は、PC1〜3が持つiSCSIイニシエータ機能と通信し、PC1〜3との間でiSCSIコマンドやデータを送受信する機能を持つ。一方、iSCSIイニシエータC105は、ストレージ装置S1が持つiSCSIターゲット機能と通信し、ストレージ装置S1との間でiSCSIコマンドやデータを送受信する機能を持つ。
キャッシュメモリ制御機能C102は、iSCSIターゲットC101とiSCSIイニシエータC105(オペレーティングシステム内)との間の入出力制御を仲介し、まずは従来技術に係る機能を提供する。
すなわち、PC1からのSCSI−READをiSCSIターゲットC101経由で受信すると、キャッシュメモリ管理機能C103を介して、当該SCSI−READが読み出し対象とするデータがキャッシュデータ格納領域C107内に存在するか否かを検索する。検索の結果、キャッシュデータが存在しない(ミスヒット)と判断したならば、当該SCSI−READを、iSCSIイニシエータC105を介してストレージ装置S1に送信する。逆に、検索の結果、キャッシュデータが存在している(ヒット)と判断したならば、対象データを、キャッシュメモリ管理機能C103を介してキャッシュデータ格納領域C107から取得し、iSCSIターゲットC101を介してPC1に返送する。また、PC1が送信したSCSI−READがキャッシュミスヒットによりストレージ装置S1に到達した結果、読み出し対象のデータがストレージ装置S1からData−Inによって返送されてきた時には、当該Data−InをPC1に対して中継するとともに、当該Data−Inに搭載されていたデータをキャッシュメモリ管理機能C103を介してキャッシュデータ格納領域C107に保存する。
キャッシュメモリ制御機能C102は、キャプチャされたSCSI−READのとおりの先読みパターンデータを、キャッシュメモリ管理機能C103を介して、先読みパターンデータ格納領域C108に例えば図4に示すように書き込む。この書き込みは、前回、PC1が起動した時、あるいは専らキャプチャを目的としてPC1を試験起動した時に行われる。OSが起動開始してからOSが起動完了するまでに、SCSI−READが数千〜数万回発行されるので、その全てをキャプチャし、先読みパターンデータとして、先読みパターンデータ格納領域C108に格納する。
さらに、キャッシュメモリ制御機能C102は、従来技術に係るデータ先読み機能、および多重セッション確立機能も提供する。すなわち、キャッシュメモリ制御機能C102は、先読みパターン格納領域C108に保存された先読みパターンデータを読み込み、iSCSIイニシエータC105とストレージ装置S1との間で多重のiSCSIセッションを確立する。そして、当該iSCSIセッションを介して、SCSI−READを先読みパターンデータの記述に従ってストレージ装置S1に発行することにより、ストレージ装置S1からデータを取得し、当該データをキャッシュメモリ管理機能C103を介してキャッシュデータ格納領域C107に保存する。多重セッション確立機能を用いない場合は、iSCSIイニシエータC105とストレージ装置S1との間で一つのiSCSIセッションを確立し、同様な処理を行う。
次に、先読みパターンデータ変換機能C104について説明する。先読みパターン変換機能C104は、先読みパターンデータ格納領域C108に保存された先読みパターンデータを読み込み、各形式に変換し、変換後の先読みパターンデータを先読みパターンデータ格納領域C108に書き戻す。
次に、キャッシュ装置C1の内部構造(ハードウェア構造)の例について、図12を用いて説明する。
図12において、ハードウェアは、CPU(Central Processing Unit)C111、メモリC112、ハードディスク(HDD:Hard Disk Unit)C113、NIC(Network Interface card)C114、そして各部を接続するシステムバスC115から構成される。
CPU(C111)は、従来技術に係る処理、および本願発明の実施例に詳述した処理を実現するために必要な、一切の演算処理を行う。
図11におけるオペレーティングシステム、iSCSIターゲット、iSCSIイニシエータ、従来技術に係るプログラム、本願発明に係る一切のプログラムは、メモリC112またはハードディスクC113に格納することができる。そして、これらのプログラムは適宜メモリC112にロードされて実行される(メモリC112に格納されていたプログラムは、メモリC112内の別の領域にロードされて実行される)。NIC(C114)は、IPネットワークN1と接続され、PC1〜PC3およびストレージ装置S1との間でIPによる通信を行う。
図11における記憶デバイスはC106、メモリC112またはハードディスクC113を割り当てることができる。メモリC112を割り当てた場合、キャッシュデータの書き込みまたは読み出しが高速に行うことができる一方で、単位容量あたりの価格が高いという欠点がある。一方、ハードディスクC113に割り当てた場合、単位容量あたりの価格が安い一方で、データの書き込みまたは読み出しが高速に行えないという欠点がある。
以上に説明したハードウェア構造は、当該構造の要件を満たす通常のパーソナルコンピュータ、ワークステーション、サーバ等などで提供することもできる。
以上、本発明者によってなされた発明を、前記実施形態に基づき具体的に説明したが、本発明は、前記実施形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは勿論である。
PC1〜PC3…パーソナルコンピュータ、p1〜p3…PC1〜PC3に割り当てられているIPアドレス、I1〜I3…イニシエータ、C1…ネットワークキャッシュ装置、c1…ネットワークキャシュ装置C1に割り当てられているIPアドレス、N1…ネットワーク、S1…ストレージ装置、s1…ストレージ装置S1に割り当てられているIPアドレス、LU1〜LU3…論理ユニット、lun1〜lun…論理ユニットU1〜LU3に割り当てられている論理ユニット番号、C101…iSCSIターゲット、C102…キャッシュメモリ制御機能、C103…キャッシュメモリ管理機能、C104…先読みパターンデータ変換機能、C105…iSCSIイニシエータ、C106記憶デバイス、C107…キャッシュデータ格納領域、C108…先読みパターンデータ格納領域、C111…CPU、C112…メモリ、C113…HDD、C114…NIC、C115…システムバス