図面を参照して、実施形態に係るI/O処理制御装置の一例である計算機システムを説明する。
なお、以下の説明では「aaaテーブル」等の表現にて本発明の情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」等について「aaa情報」と呼ぶことがある。
また、以下の説明では、プログラムを実行することにより構成される機能部を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インタフェースを用いながら行うため、処理の主語がプロセッサとされてもよい。機能部を主語として説明された処理は、プロセッサを含む装置が行う処理としてもよい。また、プロセッサが、処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであってもよい。
図1は、計算機システムの機能ブロック図である。
計算機システム1000では、記憶部1700が、記憶デバイス1800に対する未処理の複数のI/O要求を記憶する。そして、I/Oスケジューラ部400が、それら複数のI/O要求の中で、同一のI/O処理の種類であって、不連続な複数の領域をI/O先とする複数のI/O要求を、その不連続な複数の領域を包含する1つの連続する領域をI/O先とする1つのI/O要求に統合する。その後、デバイスドライバ部1500が、統合されたI/O要求に基づいて、記憶デバイス1800に対してI/O処理を実行する。これにより、記憶デバイス1800に対するI/O要求数を低減することができる。これは、例えば、多数のI/O要求が生成される環境では特に有用である。
具体的には、例えば、計算機システム1000は、I/O環境設定部1100、アプリケーション部1200、汎用ブロック部1300、I/Oスケジューラ部1400、デバイスドライバ部1500、I/O終了処理部1600、記憶部1700、及び記憶デバイス1800を有する。なお、I/Oスケジューラ部1400、デバイスドライバ部1500、及びI/O終了処理部1600は、プロセッサがプログラムを実行することにより構成するようにしてもよく、また、ハードウェアで構成するようにしてもよい。具体的には、例えば、図23に示すように、計算機システム1000は、メモリ2301、ハードウェア回路群2303及びそれらに接続されたプロセッサ2302を有してよい。図1に示した機能部のうち、アプリケーション部1200、汎用部ブロック部1300及びI/O環境設定部1100が、それぞれコンピュータプログラムであって、プロセッサ2302に実行されてよい。図1に示した機能部のうち、アプリケーション部1200、汎用部ブロック部1300及びI/O環境設定部1100以外の機能部が、それぞれハードウェア回路であって、例えばハードウェア回路群2303に含まれてよい。ハードウェア回路群2303は、例えば、オペレーティングシステム(OS)より下位のレイヤのドライバ回路であってよい。
ユーザ2000は、矢印2001に示すように、図示しない入力デバイスを使用して、アプリケーション部1200に計算処理命令を指示することができる。また、ユーザ2000は、矢印2002に示すように、図示しない入力デバイスを使用して、I/O環境設定部1100に対してI/O環境の設定変更を指示することができる。
記憶部1700は、主記憶部及び/又は補助記憶部等により構成される。例えば、主記憶部は、DRAMにより構成され、補助記憶装置は、不揮発性メモリにより構成される。記憶部1700は、各種データを記憶するデータ部3000を有する。データ部3000には、主記憶部の記憶領域である主記憶部領域1710及び/又は補助記憶部の記憶領域である補助記憶部領域1720が割り当てられる。データ部3000が記憶するデータについては、後述する。
記憶デバイス1800は、データを記憶するデバイスであり、例えば、HDDであってもよいし、SSDのようなフラッシュメモリデバイスであってもよい。
I/O環境設定部1100は、矢印1203に示すように、アプリケーション部1200からI/O環境の設定変更の命令を受ける。また、I/O環境設定部1100は、矢印2002に示すように、ユーザ2000からI/O環境の設定変更の命令を受ける。I/O環境設定部1100は、I/O環境の設定変更の命令を受けると、矢印1101に示すように、記憶部1700が保持するデータ部3000の所定のデータを更新する。
アプリケーション部1200は、ユーザ2000の計算処理命令に従って、所定の計算処理を実行する。アプリケーション部1200は、計算処理において、矢印1202に示すように、データ部3000の所望のデータにアクセスする。また、アプリケーション部1200は、計算処理において、矢印1201に示すように、必要に応じて汎用ブロック部1300にI/O処理命令を通知する。また、アプリケーション部1200は、矢印2001に示すように、ユーザ2000に計算処理結果を通知する。
汎用ブロック部1300は、矢印1302に示すように、データ部3000の所望のデータにアクセス可能である。また、汎用ブロック部1300は、矢印1301に示すように、I/Oスケジューラ部1400にI/O処理命令を通知する。また、汎用ブロック部1300は、矢印1301Aに示すように、I/O終了処理部1600にI/O処理命令を通知する。
I/Oスケジューラ部1400は、矢印1402に示すように、データ部3000の所望のデータにアクセス可能である。また、I/Oスケジューラ部1400は、矢印1401に示すように、デバイスドライバ部1500にI/O処理命令を通知する。
デバイスドライバ部1500は、矢印1502に示すように、データ部3000の所望のデータにアクセス可能である。また、デバイスドライバ部1500は、矢印1503に示すように、記憶デバイス1800の所望のデータにアクセス可能である。また、デバイスドライバ部1500は、I/O処理を終了した場合に、矢印1501に示すように、I/O終了処理部1600にI/O処理完了を通知する。
I/O終了処理部1600は、矢印1602に示すように、データ部3000の任意のデータにアクセス可能である。また、I/O終了処理部1600は、矢印1601に示すように、アプリケーション部1200にI/O処理完了を通知する。
図2は、データ部3000の構成の一例を示す図である。
データ部3000は、I/Oセクタテーブル3100、I/Oセグメントテーブル3200、I/O要求テーブル3300、I/O環境設定テーブル3400、I/O要求キューテーブル3500、I/O情報リスト3600、I/O要求リスト3700、I/Oセクタ参照テーブル3800、I/Oセクタ再構築テーブル3900、及びセグメント領域4100を有する。なお、各テーブル等の詳細は後述する。
図3は、セグメント領域4100を説明する図である。
セグメント領域4100は、アプリケーション部1200が利用するデータをデータ部3000で管理する管理単位であるセグメント(4110、4111等)を記憶する領域である。図3においては、発行対象のI/O要求が対象とするセグメント中の領域をI/O発行データ部(4150、4151等)とし、それ以外の領域をI/O未発行データ部(4160、4161、4162、4163等)としている。
例えば、セグメント4110のI/O発行データ部4150は、セグメント4110の先頭アドレス4120と、セグメント4110の先頭からI/O発行データ部4150の先頭までのアドレス長を示すオフセット4130と、I/O発行データ部4150のデータ長4140とによって規定される。同様に、セグメント4111のI/O発行データ部4151の領域は、セグメント4111の先頭アドレス4121と、セグメント4111の先頭からI/O発行データ部4151の先頭までのアドレス長を示すオフセット4131と、I/O発行データ部4151のデータ長4141とによって規定される。
図4は、記憶デバイス1800の構成を説明する図である。
記憶デバイス1800は、記憶デバイス1800に対するI/O処理におけるデータアクセス単位となる領域であるセクタを管理するセクタ領域4200を有する。
図5は、セクタ領域4200を説明する図である。
セクタ領域4200は、複数のセクタ(4210、4211等)を格納する。例えば、セクタ4210からセクタ4211の直前のセクタまでの領域については、領域の先頭セクタ4220であるセクタ4210のセクタ番号と、その領域の次の先頭セクタ4221であるセクタ4211のセクタ番号と先頭セクタ4220のセクタ番号との差であるセクタ数4230とによって規定される。
図6は、I/Oセクタテーブル3100の一例の構成図である。
I/Oセクタテーブル3100は、I/O処理の対象となる記憶デバイス1800の領域を管理するためのI/Oセクタ情報要素(3150、3151、3152等)を有する。I/Oセクタ情報要素の構成は同様なので、ここではI/Oセクタ情報要素3150を例に説明する。I/Oセクタ情報要素3150は、項目3101と、項目に該当する設定値を格納する設定値3102とのフィールドを有する。項目3101の列には、先頭セクタ3110、セクタ数3111、I/Oセグメントテーブルポインタ3112、I/O要求キューテーブルポインタ3113、セグメント数3114、R/Rフラグ3115、I/O終了処理設定3116、I/O情報リストポインタ3117、I/Oセクタ連結ポインタ3118、開始時刻3119、及び追加I/Oフラグ3120が格納されている。設定値3102の列には、項目3101の各項目に該当する設定値が格納される。
先頭セクタ3110は、I/O要求の対象とする記憶デバイス1800の領域(I/O対象セクタ領域)の先頭セクタのセクタ番号を示す。セクタ数3111は、I/O対象セクタ領域のセクタ数を示す。I/Oセグメントテーブルポインタ3112は、I/O要求の対象となるデータ部3000の領域を管理するI/Oセグメントテーブル3200へのポインタを示す。I/O要求キューテーブルポインタ3113は、I/O要求キューテーブル3500へのポインタを示す。セグメント数3114は、セグメント数を示す。R/Wフラグ3115は、I/O要求に基づくI/O処理の種別を示すフラグ、例えば、READ(R:読み込み)又はWRITE(W:書き込み)のいずれであるかを示すフラグを示す。I/O終了処理設定3116は、I/O終了処理の設定を示す。I/O情報リストポインタ3117は、I/O情報リスト3600へのポインタを示す。I/Oセクタ連結ポインタ3118は、1つのI/O要求に含まれる他のI/Oセクタ情報要素へのポインタを示す。開始時刻3119は、I/Oセクタ情報要素に係る記憶デバイス1800の領域に対するI/O処理を開始した時刻を示す。追加I/Oフラグ3120は、I/Oセクタ情報要素に係る領域が、複数のI/O要求を1つのI/O要求に統合する際に追加された記憶デバイス1800の領域(追加領域)であるかを示すフラグである。I/O要求に統合する際に追加された記憶デバイス1800の領域である場合には、追加I/Oフラグ3120の設定値は、ON(オン)に設定され、それ以外の場合は、OFF(オフ)に設定される。
図7は、I/Oセグメントテーブル3200の一例の構成図である。
I/Oセグメントテーブル3200は、I/O要求の対象となる記憶部1700の領域を管理するためのI/Oセグメント情報要素(3250、3251等)を有する。I/Oセグメント情報要素の構成は同様なので、ここではI/Oセグメント情報要素3250を例に説明する。I/Oセクタ情報要素3250は、項目3201と、項目に該当する設定値を格納する設定値3202とのフィールドを有する。項目3201の列には、先頭アドレス3210、アドレス長3211、及びオフセット3212が格納されている。設定値3202の列には、項目3201の各項目に該当する設定値が格納される。
先頭アドレス3210は、I/O要求の対象となるデータ部3000の領域を含むセグメントの先頭アドレスを示す。アドレス長3211は、I/O要求の対象となるデータ部3000の領域のアドレス長を示す。オフセット3212は、セグメントの先頭からI/O要求の対象となるデータ部3000の領域の先頭までのオフセットを示す。
図8は、I/O要求テーブル3300の一例の構成図である。
I/O要求テーブル3300は、記憶デバイス1800に対する1つのI/O要求毎に1つのI/O要求情報要素(3350、3351等)を有する。従って、1つのI/O要求情報要素は、1つのI/O要求に相当し、1つのI/O要求情報要素により、記憶デバイス1800に対する1つの(1回の)I/O処理が実行される。I/O要求情報要素の構成は同様なので、ここではI/O要求情報要素3350を例に説明する。I/O要求情報要素3350は、項目3301と、項目に該当する設定値を格納する設定値3302とのフィールドを有する。項目3301の列には、R/Wフラグ3310、I/O要求リストポインタ3311、先頭セクタ3312、未転送セクタ数3313、合計セクタ数3314、合計セグメント数3315、先頭I/Oセクタポインタ3316、及び終端I/Oセクタポインタ3317が格納されている。設定値3302の列には、項目3301の各項目に該当する設定値が格納される。
R/Wフラグ3310は、実行するI/O処理の種別を示すフラグを示す。R/Wフラグ3310の設定値には、記憶デバイス1800にデータを書き込むWRITEと、記憶デバイス1800からデータを読み出すREADがある。I/O要求リストポインタ3311は、複数のI/O要求情報要素を管理するI/O要求リスト3700へのポインタを示す。先頭セクタ3312は、I/O要求の対象とする記憶デバイス1800の領域の先頭セクタのセクタ番号を示す。未転送セクタ数3313は、I/O要求の対象のセクタの中の未転送のセクタの数を示す。合計セクタ数3314は、I/O要求の対象の領域のセクタの合計数を示す。合計セグメント数3315は、I/O要求の対象の記憶部1700の領域のセグメントの合計数を示す。先頭I/Oセクタポインタ3316は、I/O要求情報要素に対応するI/O要求の対象の先頭の領域を示すI/Oセクタ情報要素へのポインタを示す。終端I/Oセクタポインタ3317は、I/O要求情報要素に対応するI/O要求の対象の終端の領域を示すI/Oセクタ情報要素へのポインタを示す。
図9は、I/O環境設定テーブル3400の一例の構成図である。
I/O環境設定テーブル3400は、I/O環境の設定を管理するテーブルであり、項目3401と、項目に該当する設定値を格納する設定値3402とのフィールドを有する。項目3401の列には、I/O環境の設定項目として、動的I/O判定フラグ3410、RMWフラグ3411、キャッシュフラグ3412、簡易チェックフラグ3413、及び追加I/O平均化セグメント数3414が格納されている。設定値3402の列には、項目3401が有する各項目に該当する設定値が格納される。ここで、各項目に対する設定値は、ユーザ及び/又はアプリケーション部1200によって設定される。
動的I/O判定フラグ3410は、複数のI/O要求を動的に1つのI/O要求に統合するか否かを判定する動的I/O判定を行うか否かを示すフラグを示す。動的I/O判定フラグ3410の設定値は、動的I/O判定を行う場合には、ON(オン)が設定され、動的I/O判定を行わない場合には、OFF(オフ)が設定される。RMWフラグ3411は、記憶デバイス1800に対してRMW(読出しモディファイ書込み)を実行するか否かを示すフラグを示す。例えば、記憶デバイス1800がSSDの場合には、RMWフラグ3411の設定値がONに設定されることもある。キャッシュフラグ3412は、記憶デバイス1800から読み出したデータのキャッシュを行うか否かを示すフラグを示す。キャッシュフラグ3412の設定値は、キャッシュを行う場合には、ONが設定され、キャッシュを行わない場合には、OFFが設定される。簡易チェックフラグ3413は、動的I/O判定において、簡易チェックのみとするか否かを示すフラグを示す。簡易チェックのみとする場合には、簡易チェックフラグ3413の設定値は、ONに設定され、詳細なチェックを行う場合にはOFFに設定される。追加I/O平均化セグメント数3414は、複数のI/O要求を動的に1つのI/O要求に統合する際に、統合するためにI/O要求に追加されることとなるセグメントの平均の数を示す。
図10は、I/O要求キューテーブル3500の一例の構成図である。
I/O要求キューテーブル3500は、I/O要求のキュー(I/O要求キュー)を管理するテーブルであり、項目3501、及び、項目に該当する設定値を格納する設定値3502を有する。項目3501の列には、要求数3510、I/O要求リストポインタ3511、状態フラグ3512、プラグフラグ3513、最大保留時間制限3514、最大要求数制限3515、最大セクタ数制限3516、最大セグメント数制限3517、開始時間3518、I/O情報リストポインタ3519、及びI/Oセクタ参照テーブルポインタ3520が格納される。設定値3502の列には、項目3501の各項目に該当する設定値が格納される。
要求数3510は、I/O要求キューに管理されているI/O要求の数を示す。I/O要求リストポインタ3511は、I/O要求を管理するI/O要求リスト3700へのポインタを示す。状態フラグ3512は、I/O要求の受付状態を示すフラグを示す。新たなI/O要求を受付可能である場合には、状態フラグ3512の設定値は、受付可となり、新たなI/O要求を受付可能でない場合には、状態フラグ3512の設定値は、受付不可となる。プラグフラグ3513は、I/O要求をキューにためている状態か否かを示すフラグである。I/O要求をキューにためていない場合には、プラグフラグ3513の設定値は、閉鎖となり、I/O要求をキューにためている場合には、プラグフラグ3513の設定値は、開放となる。最大保留時間制限3514は、I/O要求をキューに保留してよい最大の時間を示す。最大要求数制限3515は、I/O要求をキューに蓄積できる最大の数を示す。最大セクタ数制限3516は、1つのI/O要求で対象とすることのできる最大のセクタ数を示す。最大セグメント数制限3517は、1つのI/O要求で対象とすることのできる最大のセグメント数を示す。開始時間3518は、I/O要求の保留を開始した時間を示す。I/O情報リストポインタ3519は、後述するI/O情報要素を管理するI/O情報リスト3600へのポインタを示す。I/Oセクタ参照テーブルポインタ3520は、I/Oセクタ参照テーブル3800へのポインタを示す。
図11は、I/O情報リスト3600の一例の構成図である。
I/O情報リスト3600は、1つのI/O要求毎に1つのI/O情報要素(3650、3651等)を有する。I/O情報要素の構成は同様なので、ここではI/O情報要素3650を例に説明する。I/O情報要素3650は、項目3601と、項目に該当する設定値を格納する設定値3602とのフィールドを有する。項目3601の列には、合計セクタ数3610、合計セグメント数3611、開始時刻3612、終了時刻3613、及び終了セクタ数3614が格納される。設定値3602の列には、項目3601の各項目に該当する設定値が格納される。
合計セクタ数3610は、I/O要求の対象となる記憶デバイス1800の領域のセクタの合計数を示す。合計セクタ数3610の設定値により、I/O処理が対象とした記憶デバイス1800の領域の長さを特定することができる。合計セグメント数3611は、I/O要求の対象となる記憶部170の領域のセグメントの合計数を示す。開始時刻3612は、I/O要求に基づくI/O処理を開始した時刻を示す。終了時刻3613は、I/O要求に基づくI/O処理を終了した時刻を示す。ここで、終了時刻3613の設定値から、開始時刻3612の設定値を減算することにより、I/O処理の実行時間を特定することができる。設定終了セクタ数3614は、I/O要求に基づくI/O処理が終了したセクタの数を示す。
図12は、I/O要求リスト3700の一例の構成図である。
I/O要求リスト3700は、複数のI/O要求に対応するI/O要求情報要素を管理するリストであり、項目3701、及び、項目に該当する設定値を格納する設定値3702を有する。項目3701の列には、I/O要求情報要素ポインタ(3710、3711、・・)が格納される。設定値3702の列には、項目3701の各項目に該当する設定値が格納される。I/O要求情報要素ポインタ3710、3711、・・は、それぞれのI/O要求に対応するI/O要求情報要素へのポインタを示す。
図13は、I/Oセクタ参照テーブル3800の一例の構成図である。
I/Oセクタ参照テーブル3800は、記憶部1700にデータがキャッシュされている記憶デバイス1800の領域に対応するI/Oセクタ情報要素を参照可能に管理するテーブルであり、項目3801、及び、項目に該当する設定値を格納する設定値3802を有する。項目3801の列には、I/Oセクタ情報要素ポインタ(3810、3811、・・・)が格納される。設定値3802の列には、項目3801の各項目に該当する設定値が格納される。I/Oセクタ情報要素ポインタ(3810、3811、・・・)は、記憶部1700にデータがキャッシュされている記憶デバイス1800の領域に対応するI/Oセクタ情報要素へのポインタを示す。
図14は、I/Oセクタ再構築テーブル3900の一例の構成図である。
I/Oセクタ再構築テーブル3900は、項目3901、及び、項目に該当する設定値を格納する設定値3902を有する。項目3901の列には、I/Oセクタ情報要素ポインタID3910、3911、・・・が格納される。設定値3902の列には、項目3901の各項目に該当する設定値が記入される。I/Oセクタ情報要素ポインタID3910、3911、・・・は、I/Oセクタ情報要素ポインタのIDを示す。本実施形態では、このIDの設定値は、I/O終了処理における設定を示す。I/Oセクタ情報要素ポインタIDは、I/Oセクタ情報要素が有するユニークな値である。I/Oセクタ情報要素ポインタIDは、例えば、先頭セクタ、セクタ数、R/Wフラグ及び開始時刻などによって定義されてもよい。I/O終了処理A,Bは,I/O終了処理設定3116を動的I/O判定モードに変更する際、元データ(動的I/O判定モードに変更する以前のデータ)を保存するための領域である。この元データには、I/O完了を通知又は隠蔽するなどの命令が記載されてよい。
図15は、汎用ブロック部1300の機能ブロック図である。
汎用ブロック部1300は、I/O解釈部1310、I/Oセクタ生成部1320、I/Oセグメント生成部1330、及びキャッシュ判定部1340を有する。
汎用ブロック部1300のI/O解釈部1310は、矢印1201に示すように、アプリケーション部1200からI/O処理命令を受信する。I/O解釈部1310は、I/O処理命令から、I/O処理命令に含まれているデータ(例えば、記憶デバイス1800のI/O処理の対象の領域の先頭のセクタ、その対象の領域内のセクタ数、I/O要求キューテーブルのポインタ、R/Wフラグ、I/O終了処理設定、記憶部1700のI/O処理の対象の領域を含むセグメントの先頭アドレス、その対象の領域のアドレス長、及びセグメントの先頭から対象の領域までのオフセット)を抽出する。I/O解釈部1310は、抽出したデータ群を矢印1203に示すように、I/Oセクタ生成部1320へ送信する。
I/Oセクタ生成部1320は、矢印1302に示すように、記憶部1700のI/Oセクタテーブル3100にI/O処理命令に対応するI/Oセクタ情報要素(例えば、I/Oセクタ情報要素3150)を生成する。I/Oセクタ生成部1320は、I/Oセクタ情報要素3150の先頭セクタ3110、セクタ数3111、I/O要求キューテーブルポインタ3113、R/Wフラグ3115、及び、I/O終了処理設定3116に該当する設定値3102の列に、I/O解釈部1310から受信したデータ群に含まれるそれぞれの項目に対応する値を格納する。次いで、I/Oセクタ生成部1320は、矢印1204に示すように、I/Oセクタ情報要素3150と、I/O解釈部1310から受信した先頭アドレス、アドレス長、及びオフセットをI/Oセグメント生成部1330へ送信する。
I/Oセグメント生成部1330は、矢印1302に示すように、I/Oセクタ生成部1320から送信された各種データに基づいて、記憶部1700のI/Oセグメントテーブル3200にI/Oセグメント情報要素(例えば、I/Oセグメント情報要素3250)を生成する。I/Oセグメント生成部1330は、I/Oセグメント情報要素3250の先頭アドレス3210、アドレス長3211、及びオフセット3212に該当する設定値3202の列に、I/Oセクタ生成部1320から受信した値を格納する。また、I/Oセグメント生成部1330は、I/Oセクタ情報要素3150のI/Oセグメントテーブルポインタ3112に該当する設定値として、I/Oセグメント情報要素3250が属するI/Oセグメントテーブル3200へのポインタを設定する。また、I/Oセグメント生成部1330は、I/Oセグメントテーブル3200が保有するI/Oセグメント情報要素3250の総数を、I/Oセクタ情報要素3150のセグメント数3114に該当する設定値として設定する。最後に、I/Oセグメント生成部1330は、矢印1205に示すように、キャッシュ判定部1340へI/Oセクタ情報要素3150、I/Oセグメント情報要素3250を転送する。
キャッシュ判定部1340は、矢印1302に示すように、記憶部1700のI/O環境設定テーブル3400のキャッシュフラグ3412の設定値を参照する。キャッシュフラグ3412の設定値がOFFの場合、記憶部1700にI/O要求の対象のデータがキャッシュされていないことを意味するので、キャッシュ判定部1340は、矢印1301に示すように、I/Oスケジューラ部1400へI/Oセクタ情報要素3150を送信する。
一方、キャッシュフラグ3412の設定値がONの場合、記憶部1700にキャッシュされている可能性があるので、キャッシュ判定部1340は、矢印1302に示すように、記憶部1700のI/Oセクタ参照テーブル3800を参照する。この際、I/Oセグメント生成部1330から受信したI/Oセクタ情報要素3150のR/Wフラグ3115の設定値がWRITEの場合、キャッシュ判定部1340は、I/Oスケジューラ部1400へI/Oセクタ情報要素3150を転送する。一方、I/Oセグメント生成部1330から受信したI/Oセクタ情報要素3150のR/Wフラグ3115の設定値がREADの場合、キャッシュ判定部1340は、記憶部1700にI/O要求に対応するデータがキャッシュされているか否かを判定する。具体的には、キャッシュ判定部1340は、I/Oセクタ情報要素3150の先頭セクタ3110の設定値が示す先頭セクタからセクタ数3111の設定値分のセクタを含む領域(キャッシュ判定部1340の処理の説明においてI/O対象領域という)を含んでいる領域を対象としているI/Oセクタ情報要素をI/Oセクタ参照テーブル3800が保持しているか否か確認する。この結果、このようなI/Oセクタ情報要素をI/Oセクタ参照テーブル3800が保持していない場合、キャッシュされていないことを意味しているので、キャッシュ判定部1340は、I/Oスケジューラ部1400へI/Oセクタ情報要素3150を送信する。
一方、このようなI/Oセクタ情報要素をI/Oセクタ参照テーブル3800が保持している場合、キャッシュされていることを意味しているので、キャッシュ判定部1340は、I/Oセクタ参照テーブル3800が保持しているI/Oセクタ情報要素のI/Oセグメントテーブルポインタ3112の設定値からI/Oセグメントテーブル3200を特定し、特定したI/Oセグメントテーブル3200から、IO対象領域のデータを格納している記憶部1700の領域を特定し、特定した領域のデータを、I/Oセグメント生成部1330から受信したI/Oセグメント情報要素3250により規定される記憶部1700の領域に複製する。その後、キャッシュ判定部1340は、I/Oセクタ参照テーブル3800から、参照したI/Oセクタ情報要素を削除し、矢印1301Aに示すように、I/O終了処理部1600へ処理を移す。
図16は、I/Oスケジューラ部1400の機能ブロック図である。
I/Oスケジューラ部1400は、I/O要求変更判定部1410、I/Oセクタ再構成部1411、I/O要求生成判定部1420、I/Oセクタ追加部1421、I/O要求生成部1422、I/O要求統合追加判定部1440、追加I/Oセクタ生成部1441、I/Oセクタ追加部1442、I/O統合部1450、I/O要求発行判定部1460、I/Oセクタ参照テーブル更新部1470、及びI/O情報設定部1480を有する。
I/O要求変更判定部1410は、矢印1301に示すように、汎用ブロック部1300からI/Oセクタ情報要素3150を受信する。I/Oセクタ情報要素を受信すると、I/O要求変更判定部1410は、矢印1402に示すように、記憶部1700のI/O環境設定テーブル3400の動的I/O判定フラグ3410の設定値を参照し、動的I/O判定フラグ3410の設定値がONの場合、矢印1303A1に示すように、I/Oセクタ再構成部1411に処理を移す一方、動的I/O判定フラグ3410の設定値がOFFの場合、矢印1303に示すように、I/O要求生成判定部1420へ処理を移す。
I/Oセクタ再構成部1411は、受信したI/Oセクタ情報要素3150とI/O終了処理設定3116をI/Oセクタ再構築テーブル3900のI/Oセクタ情報ポインタID3910に関連付けて格納する。この後、I/Oセクタ再構成部1411は、I/Oセクタ情報要素3150のI/O終了処理設定3116の設定値を動的I/O判定モードに変更する。I/Oセクタ再構成部1411は、矢印1303A2に示すように、I/O要求生成判定部1420へI/Oセクタ情報要素3150を送信する。
I/O要求生成判定部1420は、I/O要求変更判定部1410、又は、I/Oセクタ再構成部1411からI/Oセクタ情報要素3150を受信する。ここで、I/O要求生成判定部1420の処理を、図面を参照して説明する。
図19は、I/O要求生成判定部1420の処理のフローチャートである。
S5001で、I/O要求生成判定部1420は、受信したI/Oセクタ情報要素3150のI/O要求キューテーブルポインタ3113の設定値が示すI/O要求キューテーブル3500の状態フラグ3512の設定値を参照し、I/O要求が受付可であるか否かを判定する。この判定の結果、I/O要求が受付可である場合(S5001:Yes)、I/O要求生成判定部1420は、処理をS5002に進める一方、I/O要求が受付可でない場合(S5001:No)、S5001の処理を再び実行する。
S5002で、I/O要求生成判定部1420は、I/O要求キューテーブル3500のプラグフラグ3513の設定値が開放であるか否かを判定する。この結果、プラグフラグ3513の設定値が開放であると判定した場合(S5002:Yes)、I/O要求生成判定部1420は、I/O要求キューテーブル3500の状態フラグ3512の設定値を受付不可とし、処理をS5003に進める一方、プラグフラグ3513の設定値が開放でないと判定した場合(S5002:No)、I/O要求生成判定部1420は、処理をS5001に進める。
S5003で、I/O要求生成判定部1420は、I/O要求キューテーブル3500の要求数3510の設定値が1以上であるか否かを判定する。この結果、要求数3510の設定値が1以上でない場合(S5003:No)、I/O要求生成判定部1420は、処理をS5004に進める一方、要求数3510の設定値が1以上である場合(S5003:Yes)、処理をS5005に進める。
S5004で、I/O要求生成判定部1420は、現在の時刻をI/O要求キューテーブル3500の開始時間3518に設定し、I/O要求生成部1422に処理を移行する。
S5005で、I/O要求生成判定部1420は、I/O要求キューテーブル3500のI/O要求リストポインタ3511が示すI/O要求リスト3700を特定し、特定したI/O要求リスト3700のI/O要求情報要素ポインタ(3710、3711、・・・)の全てを処理対象として選択したか否かを判定する。この結果、未選択のI/O要求情報要素ポインタがある場合(S5005:Yes)、I/O要求生成判定部1420は、I/O要求情報要素ポインタ3710が示すI/O要求情報要素を処理対象として取得し、処理をS5006に進める一方、未選択のI/O要求情報要素がない場合(S5005:No)、I/O要求生成部1422に処理を移行する。
S5006で、I/O要求生成判定部1420は、取得したI/O要求情報要素のR/Wフラグ3310の設定値と、I/Oセクタ情報要素3150のR/Wフラグ3115の設定値が同じであるか否かを判定する。この結果、R/Wフラグ3310の設定値と、I/Oセクタ情報要素3150のR/Wフラグ3115の設定値とが同じ場合(S5006:Yes)、複数のI/O要求を一つに統合できる可能性があるので、I/O要求生成判定部1420は、処理をS5007に進める一方、R/Wフラグ3310の設定値と、I/Oセクタ情報要素3150のR/Wフラグ3115の設定値とが同じでない場合(S5006:No)、処理をS5005に進める。
S5007で、I/O要求生成判定部1420は、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350の先頭セクタ3312の前に連続するセクタであるか否かを判定する。具体的には、I/O要求生成判定部1420は、I/Oセクタ情報要素3150の先頭セクタ3110の設定値と、セクタ数3111の設定値との和が、I/O要求情報要素3350の先頭セクタ3312の設定値と等しいか否かにより判定する。この結果、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350の先頭セクタ3312の前に連続するセクタである場合(S5007:Yes)、I/O要求生成判定部1420は、処理をS5009に進める一方、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350の先頭セクタ3312の前に連続するセクタでない場合(S5007:No)、処理をS5008に進める。
S5008で、I/O要求生成判定部1420は、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350に対応する範囲のセクタの後に連続するセクタであるか否かを判定する。具体的には、I/O要求生成判定部1420は、I/O要求情報要素3350の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和が、I/Oセクタ情報要素3150の先頭セクタ3110の設定値と等しいか否かにより判定する。この結果、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350に対応する範囲のセクタの後に連続するセクタである場合(S5008:Yes)、I/O要求生成判定部1420は、処理をS5009に進める一方、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350に対応する範囲のセクタの後に連続するセクタでない場合(S5008:No)、処理をS5005に進める。
S5009で、I/O要求生成判定部1420は、I/O要求キューテーブル3500の最大セクタ数制限3516の制限の違反であるか否かを判定する。具体的には、I/O要求生成判定部1420は、I/O要求情報要素の合計セクタ数3314の設定値と、I/Oセクタ情報要素3150のセクタ数3111の設定値の和が、最大セクタ数制限3516の設定値以下であるか否かを判定する。この結果、I/O要求キューテーブル3500の最大セクタ数制限3516の制限の違反である場合、すなわち、I/O要求情報要素の合計セクタ数3314の設定値と、I/Oセクタ情報要素3150のセクタ数3111の設定値の和が、最大セクタ数制限3516の設定値以下でない場合(S5009:Yes)、I/O要求生成判定部1420は、処理をS5005に進める一方、I/O要求キューテーブル3500の最大セクタ数制限3516の制限の違反でない場合(S5009:No)、処理をS5010に進める。
S5010で、I/O要求生成判定部1420は、I/O要求キューテーブル3500の最大セグメント数制限3517の制限の違反であるか否かを判定する。具体的には、I/O要求生成判定部1420は、I/O要求情報要素の合計セグメント数3315の設定値と、I/Oセクタ情報要素3150のセグメント数3114の設定値の和が、最大セグメント数制限3517の設定値以下であるか否かを判定する。この結果、I/O要求キューテーブル3500の最大セグメント数制限3517の制限の違反である場合、すなわち、I/O要求情報要素の合計セグメント数3315の設定値と、I/Oセクタ情報要素3150のセグメント数3114の設定値の和が、最大セグメント数制限3517の設定値以下でない場合(S5010:Yes)、I/O要求生成判定部1420は、処理をS5005に進める一方、I/O要求キューテーブル3500の最大セグメント数制限3517の制限の違反でない場合(S5010:No)、対象とするセクタが連続するI/Oセクタ情報要素と、I/O要求情報要素とをI/Oセクタ追加部1421に送信し、I/Oセクタ追加部1421の処理に移行する。
図16の説明に戻り、I/Oセクタ追加部1421は、矢印1304B1に示すように、I/Oセクタ情報要素3150と、I/Oセクタ情報要素3150の対象とする範囲と連続するセクタを対象とするI/O要求情報要素3350とを受信する。I/Oセクタ追加部1421は、図19のS5007と同様な処理により、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350の先頭セクタ3312の前に連続するセクタであるか否かを判定する。
この結果、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350の先頭セクタ3312の前に連続するセクタである場合、I/Oセクタ追加部1421は、I/O要求情報要素3350の先頭セクタ3312の設定値を、I/Oセクタ情報要素3150の先頭セクタ3110の設定値に変更し、未転送セクタ数3313の設定値に、セクタ数3111の設定値を加え、合計セクタ数3314の設定値にセクタ数3111の設定値を加え、合計セグメント数3315の設定値にセグメント数3114の設定値を加え、I/Oセクタ連結ポインタ3118の設定値を、先頭I/Oセクタポイント3316の設定値に変更し、先頭I/Oセクタポイント3316の設定値をI/Oセクタ情報要素3150へのポインタに変更する。これにより、連続する領域を対象とするI/O処理を1つのI/O要求に統合することができる。すなわち、連続する領域を対象とするI/O処理を1つのI/O処理として実行することができ、I/O数を低減できるとともに、全体としてのI/O処理の時間を短縮することができる。一方、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350の先頭セクタ3312の前に連続するセクタでない場合には、I/Oセクタ情報要素3150に対応する範囲のセクタが、I/O要求情報要素3350に対応する範囲のセクタの後に連続するセクタであることを意味しているので、I/Oセクタ追加部1421は、先頭セクタ3312の設定値を、先頭セクタ3110の設定値に変更し、未転送セクタ数3313の設定値に、セクタ数3111の設定値を加え、合計セクタ数3314の設定値にセクタ数3111の設定値を加え、合計セグメント数3315の設定値にセグメント数3114の設定値を加え、終端I/Oセクタポインタ3317が示すI/Oセクタ情報要素3153のI/Oセクタ連結ポインタ3118の設定値をI/Oセクタ情報要素3150のポインタに変更し、終端I/Oセクタポインタ3317の設定値をI/Oセクタ情報要素3150のポインタに変更する。これにより、連続する領域を対象とするI/O処理を1つのI/O要求に統合することができる。すなわち、連続する領域を対象とするI/O処理を1つのI/O処理として実行することができ、I/O数を低減できるとともに、全体としてのI/O処理の時間を短縮することができる。この後、I/Oセクタ追加部1421は、I/O要求統合追加判定部1440に処理を移す。
I/O要求生成部1422は、矢印1304A1に示すように、I/Oセクタ情報要素3150を受信する。I/Oセクタ情報要素3150を受信すると、I/O要求生成部1422は、I/O要求テーブル3300にI/O要求情報要素3350を生成し、I/O要求情報要素3350のR/Wフラグ3310の設定値に、I/Oセクタ情報要素3150のR/Wフラグ3115の設定値を設定し、I/O要求リストポインタ3311の設定値に、I/O要求キューテーブルポインタ3113が示すI/O要求キューテーブル3500のI/O要求リストポインタ3511の設定値を設定し、先頭セクタ3312の設定値に、先頭セクタ3110の設定値を設定し、未転送セクタ数3313の設定値に、セクタ数3111の設定値を設定し、合計セクタ数3314の設定値にセクタ数3111の設定値を設定し、合計セグメント数3315の設定値にセグメント数3114の設定値を設定し、先頭I/Oセクタポインタ3316の設定値に、I/Oセクタ情報要素3150を示すポインタを設定する。更に、I/O要求生成部1422は、I/O要求キューテーブル3500の要求数3510の設定値が1未満である場合、I/O要求リスト3700のI/O要求情報ポインタ3710の設定値にI/O要求情報要素3350を示すポインタを格納する。一方、I/O要求キューテーブル3500の要求数3510の設定値が1以上である場合、I/O要求リスト3700の未使用のI/O要求情報要素ポインタの設定値にI/O要求情報要素3350を示すポインタを格納するとともに、I/O要求リスト3700に格納されているI/O要求情報要素ポインタ(3710、3711、・・・)を、各I/O要素情報要素ポインタが示すI/O要求情報要素3350、3351、・・・の先頭セクタ3312の設定値が小さい順に並ぶように並び替える。この後、I/O要求生成部1422は、I/O要求統合追加判定部1440に命令を送信し、処理を移す。
I/O要求統合追加判定部1440は、I/Oセクタ追加部1421、又は、I/O要求生成部1422から命令を受ける。I/O要求統合追加判定部1440の処理を、図面を参照して説明する。
図20は、I/O要求統合追加判定部1440の処理のフローチャートである。
S5101で、I/O要求統合追加判定部1440は、I/O要求リスト3700の全てのI/O要求情報要素ポインタを用いてI/O要求情報要素が統合可能であるかを確認したか否かを判定する。この結果、全てのI/O要求情報要素ポインタを用いてI/O要求情報要素が統合可能であるかを確認した場合(S5101:Yes)、I/O要求統合追加判定部1440は、I/O要求発行判定部1460に処理を移す一方、全てのI/O要求情報要素ポインタを用いてI/O要求情報要素が統合可能であるかを確認していない場合(S5101:No)、処理をS5102に進める。
S5102で、I/O要求統合追加判定部1440は、I/O要求リスト3700から連続するI/O要求情報要素であり、かつ、それぞれのR/Wフラグ3310の設定値が同じであるI/O要求情報要素の組みが取得可能か否かを判定する。この結果、このようなI/O要求情報要素の組みが取得可能である場合(S5102:Yes)、I/O要求統合追加判定部1440は、該当するI/O要求情報要素の組を取得し、処理をS5103に進める一方、このようなI/O要求情報要素の組みが取得可能でない場合(S5102:No)、I/O要求発行判定部1460に処理を移す。
S5103で、I/O要求統合追加判定部1440は、I/O要求情報要素の組のそれぞれが対象とするセクタが連続しているか否かを判定する。具体的には、I/O要求統合追加判定部1440は、一方のI/O要求情報要素の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和が、他方のI/O要求情報要素の先頭セクタ3312の設定値と等しいか、もしくは、他方のI/O要求情報要素の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和が一方のI/O要求情報3350の先頭セクタ3312の設定値と等しいか否かにより判断する。この結果、I/O要求情報要素の組のそれぞれが対象とするセクタが連続している場合(S5103:Yes)、I/O要求統合追加判定部1440は、処理をI/O統合部1450に移行する一方、I/O要求情報要素の組のそれぞれが対象とするセクタが連続していない場合(S5103:No)、処理をS5104に進める。
S5104で、I/O要求統合追加判定部1440は、対象とするセクタが不連続なI/O要求情報要素の組を、1つのI/O要求として統合するための後続の処理を実行するか否かを判定する。具体的には、I/O要求統合追加判定部1440は、I/O環境設定テーブル3400のRMWフラグ3411の設定値がONであり、かつ、R/Wフラグ3310の設定値がWRITEであるか否かを判断する。または、I/O要求統合追加判定部1440は、R/Wフラグ3310の設定値がREAD、かつ、キャッシュフラグ3412の設定値がONであるか否かを判断する。そして、I/O要求統合追加判定部1440は、I/O環境設定テーブル3400のRMWフラグ3411の設定値がONであり、かつ、R/Wフラグ3310の設定値がWRITEである場合、又はR/Wフラグ3310の設定値がREAD、かつ、キャッシュフラグ3412の設定値がONである場合、対象とするセクタが不連続なI/O要求情報要素の組を、1つのI/O要求として統合するための後続の処理を実行すると判定する。
S5104の結果、対象とするセクタが不連続なI/O要求情報要素の組を1つのI/O要求として統合するための後続の処理を実行すると判定した場合(S5104:Yes)、I/O要求統合追加判定部1440は、処理をS5105に進める一方、対象とするセクタが不連続なI/O要求情報要素の組を1つのI/O要求として統合するための後続の処理を実行すると判定しなかった場合(S5104:No)には、処理をS5101に進める。
S5105で、I/O要求統合追加判定部1440は、I/O要求キューテーブル3500の最大セクタ数制限3516の制限の違反であるか否かを判定する。具体的には、I/O要求統合追加判定部1440は、対象とする領域が後方のI/O要求情報要素(後方対象I/O要求情報要素という)の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和と、対象とする領域が前方のI/O要求情報要素(前方対象I/O要求情報要素という)の先頭セクタ3312の設定値との差が、最大セクタ数制限3516の設定値以下であるか否かを判定する。この結果、対象とする領域が後方のI/O要求情報要素の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和と、対象とする領域が前方のI/O要求情報要素の先頭セクタ3312の設定値との差が、最大セクタ数制限3516の設定値より大きい場合、すなわち、I/O要求キューテーブル3500の最大セクタ数制限3516の制限の違反である場合(S5105:Yes)、I/O要求統合追加判定部1440は、処理をS5101に進める一方、後方対象I/O要求情報要素の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和と、前方対象I/O要求情報要素の先頭セクタ3312の設定値との差が、最大セクタ数制限3516の設定値以下である場合、すなわち、I/O要求キューテーブル3500の最大セクタ数制限3516の制限の違反でない場合(S5105:No)、処理をS5106に進める。
S5106で、I/O要求統合追加判定部1440は、I/O要求キューテーブル3500の最大セグメント数制限3517の制限の違反であるか否かを判定する。具体的には、I/O要求統合追加判定部1440は、I/O要求情報要素の組の合計セグメント数3315の設定値の和が、最大セグメント数制限3517の設定値以下であるか否かを判定する。この結果、I/O要求キューテーブル3500の最大セグメント数制限3517の制限の違反である場合(S5106:Yes)、1つのI/O要求に統合できないので、I/O要求統合追加判定部1440は、処理をS5101に進める一方、I/O要求キューテーブル3500の最大セグメント数制限3517の制限の違反でない場合(S5106:No)、処理をS5107に進める。
S5107で、I/O要求統合追加判定部1440は、対象とするセクタが不連続なI/O要求情報要素の組を1つのI/O要求として統合することができるか否かを更に判定する判定処理(図21参照)を実行する。この結果、対象とするセクタが不連続なI/O要求情報要素の組を1つのI/O要求として統合することができると判定した場合(S5107:Yes)、I/O要求統合追加判定部1440は、追加I/O要求生成部1441に、I/O要求情報要素の組を送信し、処理を移行する一方、対象とするセクタが不連続なI/O要求情報要素の組を1つのI/O要求として統合することができると判定しなかった場合(S5107:No)、処理をS5101に進める。
S5107の判定処理を、図面を参照して説明する。
図21は、I/O要求統合追加判定部1440の判定処理のフローチャートである。
S5112で、I/O要求統合追加判定部1440は、I/O要求情報要素3350のR/Wフラグ3310の設定値がREADであるか否かを判定する。この結果、R/Wフラグ3310の設定値がREADである場合(S5112:Yes)、I/O要求統合追加判定部1440は、処理をS5115に進める一方、R/Wフラグ3310の設定値がREADでない場合(S5112:No)、処理をS5113に進める。
S5113で、I/O要求統合追加判定部1440は、I/O要求情報要素の組のそれぞれが対象とする領域の間に存在する区間(空きセクタ区間)を算出する。空きセクタ区間の先頭セクタAは、対象とする領域が前方のI/O要求情報要素の先頭セクタ3312の設定値と合計セクタ数3314の設定値との和で決まる。また、空きセクタ区間のセクタ数Bは、対象とする領域が後方のI/O要求情報の先頭セクタ3312の設定値と、空きセクタ区間の先頭セクタAとの差で決まる。
S5114で、I/O要求統合追加判定部1440は、先頭セクタAとセクタ数Bとにより規定される空きセクタ区間に対応するI/Oセクタ情報要素がI/Oセクタ参照テーブル3800に存在するか否かを判断する。この結果、空きセクタ区間に対応するI/Oセクタ情報要素がI/Oセクタ参照テーブル3800に存在する場合(S5114:Yes)、空きセクタ区間に対応するデータが記憶部1700にキャッシュされていることを示しているので、I/O要求統合追加判定部1440は、判定処理の結果をYesと判定する。これにより、I/O要求情報要素の組が1つのI/O要求に統合され、1つのI/O処理として実行されることとなる。一方、空きセクタ区間に対応するI/Oセクタ情報要素がI/Oセクタ参照テーブル3800に存在しない場合(S5114:No)、I/O要求統合追加判定部1440は、判定処理の結果をNoと判定する。
S5115で、I/O要求統合追加判定部1440は、I/O要求情報要素の組のそれぞれが対象とする区間の間の空きセクタ数(セクタ間隔:空きセクタ空間の大きさ)を算出する。空きセクタ数は、S5113のセクタ数Bと同様な処理により算出できる。
S5116で、I/O要求統合追加判定部1440は、セクタ間隔が所定の数以下であるか否かを判定する。なお、I/O要求情報要素の組のそれぞれが対象とする区間は連続しておらず、セクタ間隔が0とはならないので、所定の数を1とした場合には、所定の数以下のセクタ間隔は、1に限られるため、図21の例では、セクタ間隔が1と一致するか否かを判定するようにしている。なお、所定の数としては、1に限らず、2以上の数でもよく、要は、それぞれのI/O要求としてI/O処理を実行するよりも、1つのI/O要求としてI/O処理を実行した場合に実行時間が短いことを比較的高い確率で保証できるセクタ間隔であればよい。
この結果、セクタ間隔が所定の数以下である場合(S5116:Yes)、1つのI/O要求に統合した方がI/O処理の実行時間が短いと推定できるため、I/O要求統合追加判定部1440は、判定処理の結果をYesと判定する。これにより、I/O要求情報要素の組が1つのI/O要求に統合され、1つのI/O処理として実行されることとなり、I/O処理数を低減でき、I/O処理時間を短縮することができる。一方、セクタ間隔が所定の数を超える場合(S5116:No)、I/O要求統合追加判定部1440は、処理をS5117に進める。
S5117で、I/O要求統合追加判定部1440は、I/O環境設定テーブル3400の簡易チェックフラグ3413の設定値がONであるか否かを判定する。この結果、簡易チェックフラグ3413の設定値がONの場合(S5117:Yes)、簡易チェック(S5116のチェック)のみであることを意味しているので、I/O要求統合追加判定部1440は、判定処理の結果をNoと判定する。こ一方、簡易チェックフラグ3413の設定値がOFFの場合(S5117:No)、後続の詳細チェックを行うことを意味しているので、I/O要求統合追加判定部1440は、処理をS5118に進める。
S5118で、I/O要求統合追加判定部1440は、I/O情報リスト3600を参照し、不連続な領域を対象とするI/O要求情報要素の組を1つのI/O要求として統合した方が記憶デバイス1800のI/O処理の実行時間を短縮できるか否かを判定する。ここで、I/O要求情報要素に対応するI/O処理を別々に実行する場合に推定される実行時間(個別時実行時間:第1の処理時間)は、それぞれのI/O要求情報要素について、合計セクタ数3314及び合計セグメント数3315と、I/O情報リスト3600のI/O情報要素の合計セクタ数3610及び合計セグメント数3611とが最も近しい値であるI/O情報要素3650を特定し、このI/O情報要素の終了時刻3613の設定値と開始時刻3612の設定値との差をそれぞれのI/O要求情報要素に対応するI/O処理の実行時間として算出し、I/O要求情報要素の組の3351の実行時間の和を取ることにより推定することができる。また、不連続な領域を対象とするI/O要求情報要素の組のI/O要求を1つのI/O要求に統合してI/O処理を実行する場合に推定される実行時間(統合時実行時間:第2の処理時間)は、I/O要求情報要素の組の合計セクタ数3314と合計セグメント数3315とのそれぞれの和を取ることにより求められる統合合計セクタ数と統合合計セグメント数とを算出し、この統合合計セクタ数に、不連続区間(不連続な領域)に該当するセクタの数を加えた統合後合計セクタ数を算出し、統合後合計セクタ数及び統合合計セグメント数と、I/O情報リスト3600のI/O情報要素の合計セクタ数3610の設定値と合計セグメント数3611の設定値とが最も近しい値であるI/O情報要素を特定し、このI/O情報要素の終了時刻3613の設定値と開始時刻3612の設定値との差を取ることにより推定することができる。I/O要求統合追加判定部1440は、不連続なI/O要求情報要素の組のI/O要求を統合してI/O処理を実行する場合の実行時間が、I/O要求を統合しない場合の実行時間より短くなるか否かを判定する。
この結果、不連続な領域を対象とするI/O要求情報要素の組を1つのI/O要求として統合した方が記憶デバイス1800のI/O処理の実行時間を短縮できると判定した場合(S5118:Yes)、I/O要求統合追加判定部1440は、判定処理の結果をYesと判定する。これにより、不連続なI/O要求情報要素の組のI/O要求を統合してI/O処理を実行する場合の実行時間が、I/O要求を統合しない場合の実行時間より短くなると推定されるときに、1つのI/O要求に統合され、1つのI/O処理として実行されることとなり、I/O処理数を低減でき、I/O処理時間を短縮することができる。一方、不連続な領域を対象とするI/O要求情報要素の組を1つのI/O要求として統合した方が記憶デバイス1800のI/O処理の実行時間を短縮できないと判定した場合(S5118:No)、I/O要求統合追加判定部1440は、判定処理の結果をNoと判定する。
図16の説明に戻り、追加I/Oセクタ生成部1441は、I/O要求統合追加判定部1440から受信したI/O要求情報要素の組に基づいて、これらI/O要求情報要素の組のI/O要求を統合する際に追加するセクタの領域、すなわち、I/O要求情報要素の組が対象とする不連続なセクタの領域を連続する領域にするために追加するセクタの領域(追加領域)に対応する、I/Oセクタ情報要素とI/Oセグメント情報要素とを追加する。
具体的には、まず、追加I/Oセクタ生成部1441は、I/O要素情報要素の組のR/Wフラグ3310の設定値がREADであるか否かを判定する。
この結果、R/Wフラグ3310の設定値がREADである場合には、追加I/Oセクタ生成部1441は、I/Oセクタ情報要素を生成し、I/Oセクタ情報要素の各項目3101の設定値3102に、I/O要求情報要素に対応するI/Oセクタ情報要素の設定値3102を複製する。更に、追加I/Oセクタ生成部1441は、S5114と同様の方法で追加区間の先頭セクタAとセクタ数Bとを算出して、生成したI/Oセクタ情報要素の先頭セクタ3110とセクタ数3111とに設定する。また、追加I/Oセクタ生成部1441は、追加I/Oフラグ3120の設定値を、追加領域であることを示すONにする。次に、追加I/Oセクタ生成部1441は、セクタ数Bと同じアドレス長となる記憶部1700の領域を示す1、又は、複数のI/Oセグメント情報要素を生成する。次いで、追加I/Oセクタ生成部1441は、生成した1又は複数のI/Oセグメント情報要素を含むI/Oセグメントテーブル3200のポインタを、生成したI/Oセクタ情報要素のI/Oセグメントテーブルポインタ3112の設定値に設定し、生成したI/Oセグメント情報要素の数をセグメント数3114に設定する。
一方、R/Wフラグ3310の設定値がWRITEである場合には、追加I/Oセクタ生成部1441は、S5114と同様の方法で追加領域の先頭セクタAとセクタ数Bとを算出して、I/Oセクタ参照テーブル3800から先頭セクタAとセクタ数Bが示す追加領域を含む領域に対応するI/Oセクタ情報要素を特定する。追加I/Oセクタ生成部1441は、I/Oセクタ参照テーブル3800から特定したI/Oセクタ情報要素のI/Oセクタ情報要素ポインタを削除する。
更に、追加I/Oセクタ生成部1441は、特定したI/Oセクタ情報要素の先頭セクタ3110の設定値と先頭セクタAが異なる場合、先頭セクタ3110の設定値と先頭セクタAとの差分の領域に対応する領域を示すI/Oセグメント情報要素を削除するとともに、セクタ数3111の設定値から、先頭セクタ3110の設定値と先頭セクタAとの差分を引いた値を新たな設定値とし、セグメント数3114の設定値から、削除したI/Oセグメント情報要素の数を引いた値を新たな設定値とする。また、追加I/Oセクタ生成部1441は、セクタ数3111の設定値とセクタ数Bとが異なる場合、セクタ数3111の設定値とセクタ数Bとの差分が示す領域に対応する領域を示すI/Oセグメント情報要素を削除し、セクタ数3111の設定値をセクタ数Bとし、削除したI/Oセグメント情報要素の数だけセグメント数3114の設定値から引く。次に、追加I/Oセクタ生成部1441は、特定したI/Oセグメント情報要素のR/Wフラグ3115の設定値をWRITEとし、追加I/Oフラグ3120の設定値をONとする。
追加I/Oセクタ生成部1441は、I/Oセクタ情報要素を追加した後、矢印1305B2に示すように、I/Oセクタ情報要素と、I/O要求情報要素の組と、をI/Oセクタ追加部1442に送信する。
I/Oセクタ追加部1442は、追加I/Oセクタ生成部1441からI/Oセクタ情報要素と、I/O要求情報要素の組とを受信すると、受信したI/Oセクタ情報要素のセグメント数3114の設定値と、I/O要求情報要素の組の合計セグメント数3314との和が最大セグメント数制限3517の設定値以下である場合、I/Oセクタ追加部1421と同様の処理を行って、矢印1305B3に示すように、I/O要求情報要素の組をI/O統合部1450へ送信する。
I/O統合部1450は、I/Oセクタ追加部1442から受信したI/O要求情報要素の組を1つのI/O要求情報要素に統合する。具体的には、I/O統合部1450は、先頭セクタ3312の設定値が小さいI/O要求情報要素(すなわち、前方対象I/O要求情報要素)の未転送セクタ数3313、合計セクタ数3314、及び合計セグメント数3315の設定値に、後方対象I/O要求情報要素の設定値を加算し、前方対象I/O要求情報の終端I/Oセクタポインタ3317が示すI/Oセクタ情報要素のI/Oセクタ連結ポインタ3118の設定値を、後方対象I/O要求情報要素の先頭I/Oセクタポインタ3316の設定値とし、前方対象I/O要求情報要素の終端I/Oセクタポインタ3317の設定値を、後方対象I/O要求情報要素の終端I/Oセクタポインタ3317の設定値とする。その後、I/O統合部1450は、前方対象I/O要求情報要素のI/O要求リストポインタ3311の設定値が示すI/O要求リスト3700から、後方対象I/O要求情報要素に対応する項目及び設定値を削除し、後方対象I/O要求情報要素を削除する。この処理により、前方対象I/O要求情報要素は、追加領域と、後方対象I/O要求情報要素が対象とする領域とを含む連続した領域を対象とすることとなる。すなわち、1つのI/O要求情報要素に統合されることとなる。
最後に、I/O統合部1450は、矢印1306に示すように、処理をI/O要求発行判定部1460に移す。
I/O要求発行判定部1460は、I/O要求を発行すべきか否かを判定する。具体的には、I/O要求発行判定部1460は、まず、現時刻とI/O要求キューテーブル3500の開始時間3518の設定値との差が最大保留時間制限3514の設定値以上である場合、又は、要求数3510の設定値が最大要求数制限3515の設定値以上である場合、プラグフラグ3513の設定値を閉鎖とし、状態フラグ3512の設定値を受付不可とし、矢印1307に示すように、I/Oセクタ参照テーブル更新部1470へ処理を移す。一方、上記以外の場合は、I/O要求発行判定部1460は、状態フラグ3512の設定値を受付可とし、汎用ブロック部1300からI/Oセクタ情報要素3150を受信するまで、I/O要求発行判定部1460の処理を繰り返し実行する。
I/Oセクタ参照テーブル更新部1470は、I/O要求キューテーブル3500のI/O要求リストポインタ3511からI/O要求リスト3700が示すI/O要求情報要素が対象とするセクタの領域と、I/Oセクタ参照テーブル3800が示すI/Oセクタ情報要素が対象とするセクタの領域とが重複しているか否かを判定し、重複している場合、I/Oセクタ参照テーブル3800から、対象とするセクタの領域が重複しているI/Oセクタ情報要素のポインタを削除し、その後、I/O情報設定部1480に処理を移行する。
I/O情報設定部1480は、I/O要求キューテーブル3500のI/O情報リストポインタ3519が示すI/O情報リスト3600に、I/O要求キューテーブル3500のI/O要求リストポインタ3511の設定値が示すI/O要求リスト3700に登録されているI/O要求情報要素の数分のI/O情報要素を生成する。具体的には、I/O情報設定部1480は、各I/O情報要素の合計セクタ数3610及び合計セグメント数3611の設定値を、各I/O要求情報要素の合計セクタ数3314及び合計セグメント数3315に設定し、各I/O情報要素の開始時刻3612の設定値と、各I/O要求情報要素に対応する全てのI/Oセクタ情報要素の開始時刻3119の設定値とに現時刻を記載し、各I/O要求情報要素に対応する全てのI/Oセクタ情報要素のI/O情報リストポインタ3117の設定値にI/O情報リストポインタ3519の設定値を設定する。最後に、I/O情報設定部1480は、I/O要求リストポインタ3511が示すI/O要求リスト3700を、矢印1401に示すように、デバイスドライバ部1500へ送信する。
図17は、デバイスドライバ部1500の機能ブロック図である。
デバイスドライバ部1500は、データ転送部1520、及びデータ転送完了通知部1530を有する。
データ転送部1520は、I/Oスケジューラ部1400からI/O要求リスト3700を受信する。データ転送部1520は、I/O要求リスト3700を受信すると、I/O要求リスト3700が示すI/O要求情報要素のR/Wフラグ3310の設定値がREADの場合、I/O要求情報要素の先頭I/Oセクタポインタ3316が示すI/Oセクタ情報要素の先頭セクタ3110の設定値が示す先頭セクタから、セクタ数3111の設定値が示すセクタ数分の領域のデータを記憶デバイス1800から読み出し、I/Oセグメントテーブルポインタ3112の設定値が示すI/Oセグメントテーブル3200のI/Oセグメント情報要素の先頭アドレス3210の設定値が示す先頭アドレスからオフセット3212の設定値だけ後のアドレスから、アドレス長3211の設定値のアドレス長分の、記憶部1700の領域に読み出したデータを書込む。ここで、データ転送部1520は、セクタから読んだデータを、複数のI/Oセグメント情報要素に対応する複数の領域に分散して書込むことも可能である。
データ転送部1520は、I/Oセクタ情報要素に対応する領域のデータ転送が全て終わると、I/O要求情報要素の未転送セクタ数3313の設定値からI/Oセクタ情報要素のセクタ数3111の設定値を引き、矢印1403に示すように、I/Oセクタ情報要素をデータ転送完了通知部1530へ転送する。
一方、I/O要求リスト3700が示すI/O要求情報要素のR/Wフラグ3310がWRITEの場合、データ転送部1520は、記憶部1700のI/Oセグメント情報要素に対応する領域からデータを読み出し、記憶デバイス1800のI/Oセクタ情報要素の先頭セクタからセクタ数3111の設定値分のセクタ数までの領域に記憶部1700から読み出したデータを書込む。
その後、データ転送部1520は、I/O要求情報要素の未転送セクタ数3313の設定値を更新し、I/Oセクタ情報要素をデータ転送完了通知部1530へ転送する。
また、データ転送部1520は、I/O要求リスト3700が示す全てのI/O要求情報要素が示すI/O処理を処理すると、I/O要求キューテーブル3500のプラグフラグ3513の設定値を開放に設定する。
データ転送完了通知部1530は、I/Oセクタ情報要素のI/O終了処理設定3116の設定値である処理命令をI/O終了処理部1600へ通知する。
図18は、I/O終了処理部1600の機能ブロック図である。
I/O終了処理部1600は、I/Oセクタ終了判定部1610、追加I/Oセクタ終了処理部1620、及びI/Oセクタ終了処理部1630を有する。
I/Oセクタ終了判定部1610は、矢印1501に示すように、デバイスドライバ部1500からI/Oセクタ情報要素を受信する。I/Oセクタ情報要素を受信した場合のI/Oセクタ終了判定部1610の処理を、別図を用いて説明する。
図22は、I/Oセクタ終了判定部1610の処理のフローチャートである。
S5201で、I/Oセクタ終了判定部1610は、I/O環境設定テーブル3400の動的I/O判定フラグ3410の設定値がONであるか否かを判定する。この結果、動的I/O判定フラグ3410の設定値がONである場合、I/Oセクタ終了判定部1610は、処理をS5202に進める一方、動的I/O判定フラグ3410の設定値がOFFである場合、I/Oセクタ終了判定部1610は、処理をS5204に進める。
S5202で、I/Oセクタ終了判定部1610は、I/O情報リスト3600から、I/Oセクタ情報要素の開始時刻3119の設定値と同じ開始時刻3612の設定値を持つI/O情報要素を取得し、取得したI/O情報要素の終了時刻3613の設定値に現時刻を書込み、終了セクタ数3614の設定値にセクタ数3111の設定値を加算する。
S5203で、I/Oセクタ終了判定部1610は、I/Oセクタ情報ポインタのIDを用いてI/Oセクタ再構築テーブル3900から終了処理の設定(例えば、I/O終了処理設定A)を取得し、I/Oセクタ情報要素のI/O終了処理設定3116の設定値を、取得した終了処理の設定に変更する。
S5204で、I/Oセクタ終了判定部1610は、I/Oセクタ情報要素の追加I/Oフラグ3120の設定値がONであるか否かを判定する。この結果、追加I/Oフラグ3120の設定値がONである場合(S5204:Yes)、I/Oセクタ終了判定部1610は、追加I/Oセクタ終了処理部1620にI/Oセクタ情報要素を送信して、処理を移行する一方、追加I/Oフラグ3120の設定値がONでない場合(S5204:No)、I/O終了処理設定3116の設定値に対応する処理を実行するようにI/Oセクタ終了処理部1630を起動する。
図18の説明に戻り、追加I/Oセクタ終了処理部1620は、I/Oセクタ終了判定部1610から受信したI/Oセクタ情報要素のR/Wフラグ3115の設定値がWRITEの場合、そのまま処理を終了する。
一方、I/Oセクタ情報要素のR/Wフラグ3115の設定値がREADの場合であって、I/O環境設定テーブル3400のRMWフラグ3411の設定値がONである場合、又は、I/O環境設定テーブル3400のキャッシュフラグ3412の設定値がONである場合、追加I/Oセクタ終了処理部1620は、I/Oセクタ参照テーブル3800に、I/Oセクタ情報要素へのポインタを追加する一方、上記以外の場合は、I/Oセクタ参照テーブル3800を更新しない。
このように、RMWフラグ3411の設定値がONである場合、すなわち、RMWを行う場合又はキャッシュが必要な場合には、本来必要のデータではなかった追加領域に対応するデータをI/Oセクタ参照テーブル3800に登録するようにしているので、後に、I/Oセクタ参照テーブル3800を参照してI/Oセクタ情報要素を取得し、追加領域のデータが記憶部1700にキャッシュされていることを特定し、そのデータを利用することができる。例えば、アプリケーション部1200の処理においては、読み出したデータを処理して更新データを作成し、記憶デバイス1800に書込むことが行われることがあり、記憶デバイス1800に対してRMWを行う場合には、一般には、記憶デバイス1800の処理に用いたデータの領域に連続する領域のデータを記憶デバイス180から読み出し、更新データと連続するデータとを用いて記憶デバイス1800の他の領域にデータを書き込むこととなるが、本実施形態では、読み出したデータの領域に連続する領域のデータ、すなわち、アプリケーション部1200の処理に必要のなかった追加領域のデータについて記憶部1700にキャッシュしているので、RMWに必要なデータを、記憶デバイス1800から読み出す必要性を低減でき、処理を軽減することができる。また、記憶デバイス1800がRMWに対応する処理を実行する必要がないので、記憶デバイス1800の処理を軽減することができる。
I/Oセクタ終了処理部1630は、I/Oセクタ終了判定部1610から命令されたI/O終了処理設定3116として設定された終了処理を実行し、矢印1601に示すように、I/O処理完了通知をアプリケーション部1200へ送信する。これにより、アプリケーション部1200は、I/O終了処理部1600からI/O処理完了通知を受け取り、所定の処理を継続する。
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。