(57)【要約】【課題】ホストプロセッサからのＩ／Ｏ負荷の高いポートが全プロセッサに亘って高負荷をかけるため、それ以外のホストプロセッサのＩ／Ｏ要求についてのレスポンス低下の問題を解決する。【解決手段】各チャネル制御部３２のメモリに中央処理装置１０対応のパスグループごとに各プロセッサ３３に配分する負荷割合を設定するための領域を設け、サービスプロセッサ５０からその値を設定する。各負荷制御部３２は、対応するポート３１からＩ／Ｏ要求を受信し、関係するパスグループに関しプロセッサの各々について現在の負荷割合を計算し、現在の負荷割合を設定された負荷割合に近づけるようにＩ／Ｏ要求を投入するプロセッサを決定する。【選択図】図１
2004171172.tif 000002
【特許請求の範囲】
【請求項１】
パスを介して上位装置からＩ／Ｏ要求を受信する複数のポートと、前記Ｉ／Ｏ要求を受け取ってＩ／Ｏ処理を実行する複数のプロセッサと、前記ポートと前記プロセッサとの間に介在し前記ポート対応に設けられる複数のチャネル制御手段と、前記パスの集合であり前記上位装置対応のパスグループごとに前記プロセッサの各々に配分する負荷割合を設定する記憶手段とを有し、
前記チャネル制御手段は、対応する前記ポートから前記Ｉ／Ｏ要求を受信する手段と、受信した前記Ｉ／Ｏ要求が経由した前記パスグループに関し前記プロセッサの各々について現在の負荷割合を計算する手段と、前記プロセッサの各々について計算された前記負荷割合から前記記憶手段に設定された前記負荷割合を引いて差分を計算する手段と、前記差分が最大のプロセッサに受信した前記Ｉ／Ｏ要求を転送する手段とを有することを特徴とする記憶制御装置。
【請求項２】
さらに前記記憶制御装置は、前記記憶制御装置に接続される管理入出力装置から入力される前記負荷割合についての情報を受け取り前記記憶手段に設定する手段を有することを特徴とする請求項１記載の記憶制御装置。
【請求項３】
前記記憶制御装置は、さらに前記記憶制御装置全体に関し前記プロセッサの各々について現在の稼動率を取得する手段と、前記プロセッサ間の前記稼動率の差が所定値を越えているか否か判定する手段と、前記差が前記所定値を越えている場合に、最大の稼動率をもつプロセッサと最小の稼動率をもつプロセッサを選択する手段と、稼動率最大の前記プロセッサのペンディングタイムが稼動率最小のプロセッサのペンディングタイムより大きい前記パスグループを抽出する手段と、抽出された前記パスグループの各々に関し単位時間当りのＩ／Ｏ処理数に基づいて稼動率最大の前記プロセッサの前記負荷割合を減少させ、稼動率最小の前記プロセッサの前記負荷割合を増加させるよう前記記憶手段上の前記負荷割合を更新する手段とを有することを特徴とする請求項１記載の記憶制御装置。
【請求項４】
前記記憶制御装置は、さらに前記記憶制御装置全体に関し前記プロセッサの各々について現在の稼動率を取得する手段と、前記プロセッサ間の前記稼動率の差が所定値を越えているか否か判定する手段と、前記差が前記所定値を越えている場合に、最大の稼動率をもつプロセッサと最小の稼動率をもつプロセッサを選択する手段と、稼動率最大の前記プロセッサのペンディングタイムが稼動率最小のプロセッサのペンディングタイムより大きい前記チャネル制御手段を抽出する手段と、抽出された前記チャネル制御手段の各々に関し単位時間当たりのＩ／Ｏ処理数に基づいて稼動率最大の前記プロセッサの前記負荷割合を減少させ、稼動率最小の前記プロセッサの前記負荷割合を増加させるよう前記記憶手段上の前記負荷割合を更新する手段とを有することを特徴とする請求項１記載の記憶制御装置。
【請求項５】
記憶制御装置と複数の記憶デバイスとを有する記憶サブシステムであって、前記記憶制御装置は、パスを介して上位装置からＩ／Ｏ要求を受信する複数のポートと、前記Ｉ／Ｏ要求を受け取って前記記憶デバイスに対するＩ／Ｏ処理を実行する複数のプロセッサと、前記ポートと前記プロセッサとの間に介在し前記ポート対応に設けられる複数のチャネル制御手段と、前記パスの集合であり前記上位装置対応のパスグループごとに前記プロセッサの各々に配分する負荷割合を設定する記憶手段とを有し、
前記チャネル制御手段は、対応する前記ポートから前記Ｉ／Ｏ要求を受信する手段と、受信した前記Ｉ／Ｏ要求が経由した前記パスグループに関し前記プロセッサの各々について現在の負荷割合を計算する手段と、前記プロセッサの各々について計算された前記負荷割合から前記記憶手段に設定された前記負荷割合を引いて差分を計算する手段と、前記差分が最大のプロセッサに受信した前記Ｉ／Ｏ要求を転送する手段とを有することを特徴とする記憶サブシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のプロセッサによって並行してＩ／Ｏ処理を実行する記憶制御装置に係わり、特にこれらプロセッサにかかる負荷を制御する機能をもつ記憶制御装置に関する。
【０００２】
【従来の技術】
大規模な計算機システムにおいては、複数のホストプロセッサがファイバーチャネルのような伝送路を介してディスク制御装置に接続される。ディスク制御装置は、そのポートを介してこれらホストプロセッサから投入される大量のＩ／Ｏ要求を効率よく処理しスループットを上げるために、複数のプロセッサが並行してＩ／Ｏ処理を実行するように構成される。従来のディスク制御装置のポートあるいはチャネル制御装置は、ファイバーチャネルを介してＩ／Ｏ要求を受信すると、Ｉ／Ｏ処理すべきプロセッサを順に選択し、選択したプロセッサにＩ／Ｏ要求を転送する。ファイバーチャネル環境ではポートは多重にＩ／Ｏ要求を受信する。このためホストプロセッサからのＩ／Ｏ負荷の高いポートとＩ／Ｏ負荷の低いポートとが混在する場合、Ｉ／Ｏ負荷の高いポートが全プロセッサに亘って高い負荷をかけてしまうため、それ以外のポートから受信したＩ／Ｏ要求についてはレスポンスタイムやスループットが低下するという問題が生じる。
【０００３】
なおこの種の技術に関連するものとして、特開２００２−１０８５６７号公報（特許文献１）がある。特許文献１は、ホストプロセッサ、記憶制御装置側のチャネルポート及び記憶デバイスを各々優先するものと非優先のものとに分け、非優先側ホストプロセッサのＩ／Ｏ処理を抑制することを特徴とする。
【０００４】
【特許文献１】
特開２００２−１０８５６７号公報
【０００５】
【発明が解決しようとする課題】
従来技術には上記のような問題があった。また特許文献１に記載の技術では非優先ホストプロセッサのＩ／Ｏ処理を抑制するので、そのレスポンスタイムやスループットの低下が発生し、この問題を解決することができない。
【０００６】
本発明の目的は、上記課題を解決するように記憶制御装置内プロセッサにかかる負荷を制御することにある。
【０００７】
【課題を解決するための手段】
本発明は、パスを介して上位装置からＩ／Ｏ要求を受信する複数のポートと、これらＩ／Ｏ要求を受け取ってＩ／Ｏ処理を実行する複数のプロセッサと、ポートとプロセッサとの間に介在しポート対応に設けられる複数のチャネル制御手段と、パスの集合であり上位装置対応のパスグループごとにプロセッサの各々に配分する負荷割合を設定する記憶手段とを有し、チャネル制御手段は、対応するポートからＩ／Ｏ要求を受信する手段と、受信したＩ／Ｏ要求が経由したパスグループに関しプロセッサの各々について現在の負荷割合を計算する手段と、プロセッサの各々について計算された負荷割合から記憶手段に設定された負荷割合を引いて差分を計算する手段と、差分が最大のプロセッサに受信したＩ／Ｏ要求を転送する手段とを有する記憶制御技術を特徴とする。
【０００８】
【発明の実施の形態】
以下、本発明の実施形態について図面を用いて説明する。
【０００９】
図１は、システム全体の構成を示す図である。システムは、複数の中央処理装置１０、記憶制御装置３０、複数の記憶デバイス４０及びサービスプロセッサ５０から構成される。中央処理装置１０は、記憶制御装置３０の上位装置となるホストプロセッサである。記憶制御装置３０とこれに接続される複数の記憶デバイス４０とが記憶サブシステムを構成する。中央処理装置１０と記憶制御装置３０との間は、ファイバーチャネルの伝送路によって接続される。一般に１台の中央処理装置１０と記憶制御装置３０との間は複数のパスによって接続され、これらパスの集合が１つのパスグループ２０を構成する。記憶デバイス４０とサービスプロセッサ５０は、図示するように記憶制御装置３０に接続される。サービスプロセッサ５０は、記憶制御装置３０のメモリに情報を設定するための管理入出力装置である。なお本実施形態では、同種の構成要素のうちの個々の構成要素を指すときには中央処理装置１０−１、中央処理装置１０−２のように中央処理装置１０に枝番を付して示し、いずれかの構成要素を指すときには中央処理装置１０のように枝番を省略して示す。
【００１０】
記憶制御装置３０は、複数のポート３１、複数のチャネル制御部３２、複数のプロセッサ３３及び負荷制御部３４を有する。各ポート３１は、パスグループ２０中の伝送路を介して中央処理装置１０と接続され、中央処理装置１０及びこれら伝送路との間のインタフェース部として機能する。各チャネル制御部３２は、各ポートと１対１対応に設けられる。各チャネル制御部３２は、図示のようにすべてのプロセッサ３３と接続されている。チャネル制御部３２は、独立したプロセッサとメモリを備え、ポート３１を介して中央処理装置１０からのＩ／Ｏ要求を受け取り、負荷配分設定に従ってこのＩ／Ｏ要求を転送すべきプロセッサ３３を決定し、決定したプロセッサ３３にＩ／Ｏ要求を転送する。またチャネル制御部３２は、プロセッサ３３からＩ／Ｏ処理の結果である応答情報やデータを受け取って、対応するポートに転送する。各プロセッサ３３は、記憶デバイス４０と接続され、チャネル制御部３２からＩ／Ｏ要求を受け取り、記憶デバイス４０に対するＩ／Ｏ処理を他のプロセッサ３３と並行して実行する。Ｉ／Ｏ要求を受け取った各プロセッサ３３は、その要求に関するＩ／Ｏ処理が完了するまで継続して処理を実行する。
【００１１】
負荷制御部３４は、独立したプロセッサとメモリを備え、サービスプロセッサ５０から入力された負荷配分に関する情報を受け取り、各チャネル制御部３２へ転送する。また負荷制御部３４は、パスグループ２０ごとに各プロセッサ３３の稼動率が平均化するように各チャネル制御部３２に設定した負荷配分設定を変更する。
【００１２】
図２は、各チャネル制御部３２がそのメモリに保持するプロセッサ負荷テーブル６０のデータ構成を示す図である。プロセッサ負荷テーブル６０は、少なくともそのチャネル制御部３２が取り扱うＩ／Ｏ要求を転送するパスグループ１，２，…，ｎの各々について、総ＩＯＰＳ６１、各プロセッサごとのＩＯＰＳ６２、各プロセッサごとのペンディングタイム６３及び各プロセッサの負荷割合６４を設定する。ＩＯＰＳ（ＩＯ  ｐｅｒ  ｓｅｃｏｎｄ）は、毎秒処理されるＩ／Ｏ要求数である。
【００１３】
例えばプロセッサ１ＩＯＰＳ６２−１はプロセッサ３３−１についてのＩＯＰＳの稼動値、プロセッサ２ＩＯＰＳ６２−２はプロセッサ３３−２についてのＩＯＰＳの稼動値、…である。またプロセッサ１ペンディングタイム６３−１は、プロセッサ３３−１についてのペンディングタイムの平均値、プロセッサ２ペンディングタイム６３−２は、プロセッサ３３−２についてのペンディングタイムの平均値、…である。またプロセッサ１負荷割合６４−１は、プロセッサ３３−１について指定された負荷の割合、プロセッサ２負荷割合６４−２は、プロセッサ３３−２について指定された負荷の割合、…である。
【００１４】
総ＩＯＰＳ６１は、プロセッサ１ＩＯＰＳ６２−１からプロセッサ４ＩＯＰＳ６２−４までのＩＯＰＳの合計である。ペンディングタイムは、プロセッサがＩ／Ｏ要求を受けてから処理を開始するまでの時間であり、Ｉ／Ｏ要求が処理待ちキューに滞在する時間にほぼ等しい。
【００１５】
プロセッサ負荷割合６４は、総ＩＯＰＳ６１に対するそのプロセッサのＩＯＰＳの割合である。各プロセッサの負荷割合は、第１の実施例ではサービスプロセッサ５０から入力されたデータが負荷制御部３４を介して各チャネル制御部３２に送られ、そのプロセッサ負荷テーブル６０に設定される。第１の実施例では、プロセッサ負荷割合６４は常にサービスプロセッサ５０からの指定によって設定又は変更される。第２の実施例では、サービスプロセッサ５０又は負荷制御部３４によってプロセッサ負荷割合６４の初期値が設定され、その後各パスグループ２０について各プロセッサの負荷が均等になるように負荷制御部３４によって動的に変更される。
【００１６】
図２ではパスグループ１についてのデータ形式を示しているが、パスグループ２，３，…またはｎについてのデータ形式も同じであり、各々総ＩＯＰＳ６１、各プロセッサごとのＩＯＰＳ６２、各プロセッサごとのペンディングタイム６３および各プロセッサの負荷割合６４を全プロセッサに亘って設定する。プロセッサ負荷テーブル６０をすべてのチャネル制御部３２がアクセス可能な共通メモリ上に設けてもよい。
【００１７】
図１の構成例では、１つのパスグループに属する複数のパスがそれぞれ別々のポート３１に接続している。この場合に各パスグループごとに単一のプロセッサ負荷テーブルを有し、関連する複数のチャネル制御部３２がこのプロセッサ負荷テーブルを共有してもよい。あるいは１つのパスグループに関連する複数のチャネル制御部３２がそれぞれ重複してこのパスグループのプロセッサ負荷テーブルを設け、各チャネル制御部３２が受け取るＩ／Ｏ要求についてのみＩＯＰＳを計数してもよい。後者の場合も同一パスグループに属するパスを介して転送されるＩ／Ｏ要求がほぼ均等であり、同一グループの同一プロセッサについて同一の負荷割合を設定するならば、前者の場合と同様にパスグループ単位のプロセッサ負荷制御の効果をあげることができる。
【００１８】
各チャネル制御部３２は、一定時間についての各パスグループのプロセッサごとのＩＯＰＳを計数し、その一定時間間隔で総ＩＯＰＳを計算し、総ＩＯＰＳ６１及び各プロセッサのＩＯＰＳ６２を更新する。また各チャネル制御部３２は、第２の実施例においてＩ／Ｏ要求を転送したプロセッサごとのペンディングタイムを計測し、一定時間間隔でその平均値を計算してプロセッサペンディングタイム６３を更新する。
【００１９】
図３は、各チャネル制御部３２の処理手順を示すフローチャートである。チャネル制御部３２は、ポート３１を介して中央処理装置１０からのＩ／Ｏ要求を受信する（ステップ７１）。次にチャネル制御部３２は、プロセッサ負荷テーブル６０を参照し、当該Ｉ／Ｏ要求が転送された該当するパスグループのテーブルを取得する（ステップ７２）。次にそのパスグループの各プロセッサについてプロセッサＩＯＰＳ６２を総ＩＯＰＳ６１で割り、現在の負荷割合を計算する（ステップ７３）。次に各プロセッサについて指定された負荷割合６４からステップ７３で計算した負荷割合を引いて両者の差分を計算する（ステップ７４）。次に差分が最大のプロセッサに図示しないバッファメモリを介して当該Ｉ／Ｏ要求を転送する（ステップ７５）。
【００２０】
以上述べたように本実施形態によれば、各プロセッサへのＩＯ負荷がパスグループ単位に負荷割合６４に近づくように制御されるので、各ポート３１が受信するＩ／Ｏ要求についてパスグループごとに各プロセッサへの負荷のウェイトを変えることができる。これによってＩＯ負荷の高いポートが全プロセッサに亘って高い負荷をかける従来の問題点を解決できる。各パスグループの全プロセッサについて負荷割合６４を均等に設定するならば、プロセッサ負荷制御に関して従来技術と同等となり、本発明の課題を解決することができないが、負荷割合６４を不均等に設定することによって本発明の課題を解決することができる。例えば特定のプロセッサについてＩＯ負荷の高いポートのパスグループはより小さい負荷割合を設定し、ＩＯ負荷の低いポートのパスグループはより大きい負荷割合を設定することによって、ＩＯ負荷の低いポートから受信したＩ／Ｏ要求はこの特定のプロセッサに多く投入され、このポートに関するＩ／Ｏ要求についてレスポンスタイムやスループットを向上させることができる。また中央処理装置１０側のＩＯ負荷の時間変化に応じ時間帯によってサービスプロセッサ５０からパスグループごとにプロセッサ負荷割合６４の設定を変更することもできる。第１の実施例では、各パスグループごとのＩＯＰＳ及びレスポンスタイムの統計データに基づいてプロセッサ負荷割合６４を設定及び更新するのが望ましい。
【００２１】
図４は、負荷制御部３４がそのメモリに保持するプロセッサ稼動状況テーブル８０のデータ構成を示す図である。プロセッサ稼動状況テーブル８０は、第２の実施例で使用される。プロセッサ稼動状況テーブル８０は、各プロセッサごとに稼動率８１及び平均ペンディングタイム８２を設定する。稼動率８１はそのプロセッサのＣＰＵ利用率である。平均ペンディングタイム８２はそのプロセッサの平均ペンディングタイムである。ペンディングタイムは上記定義による時間である。
【００２２】
負荷制御部３４は、一定時間についての各プロセッサ３３の稼動率を測定し、その一定時間間隔でプロセッサ稼動状況テーブル８０の各稼動率８１を更新する。またその一定時間間隔で各チャネル制御部３２から各パスグループの各プロセッサのペンディングタイム６３を収集し、各プロセッサについてペンディングタイムの平均値を求めて各平均ペンディングタイム８２を更新する。
【００２３】
図５は、第２の実施例について負荷制御部３４の処理手順を示すフローチャートである。負荷制御部３４は、タイマを設定し（ステップ９１）、監視時刻になったか否か判定する（ステップ９２）。監視時刻でないときステップ９１に戻る。監視時刻になったとき、プロセッサ稼動状況テーブル８０からすべてのプロセッサについて稼働率８１を取得し、プロセッサ稼動率に差があるか否か判定する（ステップ９３）。最大のプロセッサ稼動率と最小のプロセッサ稼動率との差が所定の閾値を越えているとき、プロセッサ稼動率に差があると判定する。プロセッサ稼動率に差がない場合にはステップ９１に戻る。プロセッサ稼動率に差がある場合には、最も稼動率の高いプロセッサ（Ａ）と最も低いプロセッサ（Ｂ）を選択する（ステップ９４）。
【００２４】
次に負荷制御部３４は、選択したプロセッサ（Ａ）のペンディングタイムがプロセッサ（Ｂ）のペンディングタイムより小さいか否か判定する（ステップ９５）。ペンディングタイムが（Ａ）＜（Ｂ）であれば（ステップ９５Ｙｅｓ）、プロセッサ稼動率が次に低いプロセッサがあるか否か判定する（ステップ９６）。プロセッサ稼動率が次に低いプロセッサがあったとしてもステップ９３と同じ意味でプロセッサ稼動率に差がない場合には、該当するプロセッサがないと判定してよい。該当するプロセッサがない場合には（ステップ９６Ｎｏ）、ステップ９１に戻る。プロセッサ稼動率に差があり、プロセッサ稼動率が（Ａ）＞（Ｂ）であれば通常ペンディングタイムが（Ａ）＞（Ｂ）となる。稼動率が（Ａ）＞（Ｂ）にもかかわらずペンディングタイムが（Ａ）＜（Ｂ）であるということは、プロセッサ稼動率に差があるのは一時的な現象とみなして負荷割合の変更対策を保留する。該当するプロセッサがある場合には（ステップ９６Ｙｅｓ）、そのプロセッサを改めてプロセッサ（Ｂ）と置いてステップ９５に戻る。
【００２５】
ペンディングタイムが（Ａ）≧（Ｂ）であれば（ステップ９５Ｎｏ）、負荷制御部３４は、各チャネル制御部３２からプロセッサ（Ａ），（Ｂ）のペンディングタイム６３及び負荷割合６４を取得し、チャネル制御部ごとの各々の平均ペンディングタイムを計算する（ステップ９８）。各チャネル制御部３２についてプロセッサ（Ａ），（Ｂ）の各々についてすべてのパスグループのペンディングタイム６３を平均した値が目的の平均ペンディングタイムである。各グループごとに単一のプロセッサ負荷テーブルをもつ場合には、パスグループごとに平均ペンディングタイムを計算する。次にペンディングタイムが（Ａ）＞（Ｂ）であるチャネル制御部３２があるか否か判定する（ステップ９９）。該当するチャネル制御部３２がない場合には、ステップ９６へ行く。該当するチャネル制御部３２がある場合には、該当するチャネル制御部３２の各々についてプロセッサ（Ａ），（Ｂ）のＩＯＰＳを基にしてプロセッサ（Ａ），（Ｂ）について変化させる負荷割合を決定する（ステップ１００）。各パスグループごとに単一のプロセッサ負荷テーブルをもつ場合には、ステップ９９，１００はパスグループ単位の処理となる。
【００２６】
例えば該当するチャネル制御部３２のすべてのパスグループについてプロセッサ（Ａ），（Ｂ）の各々についてプロセッサＩＯＰＳ６２を合計し、負荷割合６４が現在の合計ＩＯＰＳに反比例するように負荷割合を配分するなどである。すなわちこの場合には、プロセッサ（Ａ）の新しい負荷割合は、（負荷割合（Ａ）＋負荷割合（Ｂ））×合計ＩＯＰＳ（Ｂ）／（合計ＩＯＰＳ（Ａ）＋合計ＩＯＰＳ（Ｂ））となる。またプロセッサ（Ｂ）の新しい負荷割合は、この式の分子の合計ＩＯＰＳ（Ｂ）を合計ＩＯＰＳ（Ａ）に置き換えたものとなる。なおＩＯＰＳ（Ａ）の代わりに合計ＩＯＰＳ（Ａ）×平均ペンディングタイム（Ａ）のように負荷割合を決定するファクタの１つとして、ペンディングタイムを加えてもよい。
【００２７】
該当する各チャネル制御部３２について変更する負荷割合が決定したとき、負荷制御部３４は、それらのチャネル制御部３２へパスグループ番号、プロセッサ番号及び新しい負荷割合を送信する（ステップ１０１）。これら負荷割合を受信したチャネル制御部３２は、プロセッサ負荷テーブル６０上の該当するプロセッサ負荷割合６４を更新する。
【００２８】
以上述べたように第２の実施例によれば、同一パスグループ内で各プロセッサの稼動率が平均化するように各チャネル制御部３２のプロセッサ負荷割合６４が動的に変更される。その際にプロセッサ稼動率だけでなく平均ペンディングタイムも考慮されるので、記憶制御装置３０のスループットの向上が図られるだけでなく、レスポンスタイムの向上を図ることもできる。
【００２９】
【発明の効果】
以上述べたように本発明によれば、ホストプロセッサから記憶制御装置へ投入されるＩ／Ｏ負荷が低い場合であってもレスポンスタイムやスループットを保証できるように記憶制御装置内プロセッサにかかる負荷を制御できる。また同一パスグループについてのシステム性能が安定するようにプロセッサ負荷を制御できる。
【図面の簡単な説明】
【図１】実施形態のシステム全体の構成を示す図である。
【図２】実施形態のプロセッサ負荷テーブル６０のデータ構成を示す図である。
【図３】実施形態のチャネル制御部３２の処理手順を示すフローチャートである。
【図４】実施形態のプロセッサ稼動状況テーブル８０のデータ構成を示す図である。
【図５】実施形態の負荷制御部３４の処理手順を示すフローチャートである。
【符号の説明】
１０：中央処理装置、２０：パスグループ、３０：記憶制御装置、３１：ポート、３２：チャネル制御部、３３：プロセッサ、３４：負荷制御部、５０：サービスプロセッサ、６０：プロセッサ負荷テーブル、６１：総ＩＯＰＳ、６２：プロセッサＩＯＰＳ、６４：プロセッサ負荷割合、８０：プロセッサ稼動状況テーブル。
【図１】
2004171172.tif 000003
【図２】
2004171172.tif 000004
【図３】
2004171172.tif 000005
【図４】
2004171172.tif 000006
【図５】
2004171172.tif 000007