(57)【要約】【課題】並行処理が禁止される複数プロセスを実行するプロセッサコアの負荷の監視に伴う処理量を抑えることができる情報処理装置を提供する。【解決手段】並行処理が禁止される複数プロセスを実行する複数のプロセッサコアのそれぞれの負荷を監視する監視部と、監視される複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、複数プロセスと第１のプロセッサコアとの対応関係に基づいて特定する特定部とを有する情報処理装置を提供する。【選択図】図１
2019003493.tif 000002
【特許請求の範囲】
【請求項１】
並行処理が禁止される複数プロセスを実行する複数のプロセッサコアのそれぞれの負荷を監視する監視部と、
前記監視される前記複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、前記複数プロセスと前記第１のプロセッサコアとの対応関係に基づいて特定する特定部と
を有することを特徴とする情報処理装置。
【請求項２】
前記第１のプロセッサコアでプロセスが起動されたときに、並行処理が禁止されるプロセスを示す情報に基づいて、前記起動されたプロセスが並行処理が禁止されるプロセスであるか否かを判定する判定部と、
前記判定部によって並行処理が禁止されるプロセスであると判定されたプロセスと前記第１のプロセッサコアの対応関係を記憶する記憶部と
をさらに有し、
前記特定部は、前記記憶部に記憶された前記対応関係に基づいて、前記第１のプロセッサコアで実行されているプロセスを特定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１のプロセッサコアの負荷が、前記特定部によって特定されたプロセスにより第２の負荷以上になっている場合に、前記特定部によって特定されたプロセスを前記第１のプロセッサコアとは別の第２のプロセッサコアに割り付ける割り付け部をさらに有する、ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記特定部によって特定されたプロセスと前記第２のプロセッサコアとの対応関係に基づいて、前記記憶部に記憶されたプロセスとプロセッサコアとの対応関係を更新する更新部をさらに有する、ことを特徴とする請求項２を引用する請求項３に記載の情報処理装置。
【請求項５】
前記情報処理装置において発行される、プロセスに関するシステムコールを検出する検出部をさらに有し、
前記判定部は、前記検出されたシステムコールによって起動されるプロセスが並行処理が禁止されるプロセスであるか否かを判定する
ことを特徴とする請求項２から４のいずれか一項に記載の情報処理装置。
【請求項６】
並行処理が禁止されるプロセスを実行する複数のプロセッサコアは、前記情報処理装置内の物理マシン上のプロセスによって仮想的に形成される仮想マシン上の複数の仮想プロセッサコアであり、
前記監視部は、前記情報処理装置の物理プロセッサコアの負荷に基づいて、前記複数の仮想プロセッサコアの負荷を監視する
ことを特徴とする請求項１から５のいずれか一項に記載の情報処理装置。
【請求項７】
コンピュータの監視部によって、並行処理が禁止される複数プロセスを実行する複数のプロセッサコアのそれぞれの負荷を監視し、
前記コンピュータの特定部によって、前記監視される前記複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、前記複数プロセスと前記第１のプロセッサコアとの対応関係に基づいて特定する
ことを特徴とする情報処理方法。
【請求項８】
コンピュータの監視部によって、並行処理が禁止される複数プロセスを実行する複数の
プロセッサコアのそれぞれの負荷を監視し、
前記コンピュータの特定部によって、前記監視される前記複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、前記複数プロセスと前記第１のプロセッサコアとの対応関係に基づいて特定する
処理を前記コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
サーバなどの情報処理装置において、複数のCentral Processing Unit（ＣＰＵ）コア
（マルチコア）を用いて複数のスレッド（マルチスレッド）でインタプリタが実行されることがある。マルチスレッドで処理が実行される場合、各スレッドに対してアクセス可能なメモリ領域は制限されず、各スレッドが同じアドレス空間にアクセスすることができる。このため、インタプリタがいわゆるスレッドセーフでないコードを複数のスレッドで並列的に実行するとき、複数のスレッドが同じアドレス空間にアクセスする結果、予期しない動作が発生する可能性がある。
【０００３】
上記の現象を回避することを目的として、インタプリタの実行時にGlobal Interpreter
Lock（ＧＩＬ）と呼ばれるロックが使用されることがある。ＧＩＬは、ロックを取得し
たスレッドが割り当てられたＣＰＵコアにインタプリタを実行させ、ロックを取得していないスレッドが割り当てられた他のＣＰＵコアにインタプリタを実行させない排他的なロックである。スレッドは、定期的にロックの取得と解放を繰り返してＣＰＵコア間でロックの受け渡しを行いながらインタプリタを実行する。また、当該ロックを用いてインタプリタの実行の最適化や共有データの保護を図る技術が提案されている（特許文献１から４）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１６−５３７７０９号公報
【特許文献２】特開２０１２−１２８６２８号公報
【特許文献３】特開２００５−３３９４３７号公報
【特許文献４】特開２００７−２４９４６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
複数プロセスによる並行処理が禁止されるプログラムの一例としてのインタプリタを、ＣＰＵコアを複数用いて実行する場合、１つのＣＰＵコアがロックを占有する現象が発生する可能性がある。例えば、複数のＣＰＵコアに割り当てられている各スレッドが１つのロックを取得し合うことでインタプリタが実行される場合、各ＣＰＵコアのスレッドは、ロックを取得するとロックの状態を示す共有フラグをメモリから取得し、自コアが使用するキャッシュに書き込む。また、ロックを取得したＣＰＵコアのスレッドは、ロックを解放する際にフラグを更新し、他のＣＰＵコアにロックを解放したことを通知する。
【０００６】
ロックを解放したスレッドを有するＣＰＵコアが使用するキャッシュにはフラグが存在するが、他のＣＰＵが使用するキャッシュにはフラグは存在しない。このため、他のＣＰＵのスレッドは、ロックを取得するために、メモリからフラグを取得してキャッシュに書き込む。しかし、この処理の間に、ロックを解放したスレッドは、自コアが使用するキャッシュのフラグを参照し、再度ロックを取得することができる。この結果、負荷の高いＣＰＵコアのスレッドがロックの解放と取得を繰り返し、他のＣＰＵコアのスレッドがロックを取得できない可能性がある。
【０００７】
１つのＣＰＵコアがロックを占有する現象を回避するために、ＣＰＵコアに対するサン
プリング処理によって各ＣＰＵコアのシステム時間やユーザ時間などの情報を収集し、ＣＰＵコアの負荷の高いプロセスを特定する技術がある。しかし、サンプリング処理では、監視対象のプロセスが増加するとチェック対象となるプロセス構造体が増加するなどの理由から、ＣＰＵコアの負荷が高くなる可能性がある。
【０００８】
上記の事情に鑑みて、１つの側面では、並行処理が禁止される複数プロセスを実行するプロセッサコアの負荷の監視に伴う処理量を抑えることができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本件開示の技術の一側面によれば、情報処理装置は、複数プロセスによる並行処理が禁止されるプログラムを実行する複数のプロセッサコアのそれぞれの負荷を監視する監視部と、監視される複数のプロセッサコアの少なくとも１つのプロセッサコアの負荷が所定の負荷以上になった場合に、プログラムに関連するプロセスとプロセッサコアとの対応関係に基づいて、負荷が所定の負荷以上になったプロセッサコアで実行されているプロセスを特定する特定部とを有する。
【発明の効果】
【００１０】
本件開示の技術によれば、並行処理が禁止される複数プロセスを実行するプロセッサコアの負荷の監視に伴う処理量を抑えることができる情報処理装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、一実施形態に係るサーバの構成の一例を示す図である。
【図２】図２は、一実施形態に係るサーバの仮想環境の一例を示す図である。
【図３】図３は、一実施形態に係るＶＭホストエージェントの構成の一例を示す図である。
【図４】図４は、一実施形態に係るテーブルの一例を示す図である。
【図５】図５は、一実施形態に係るホストトレースプログラムの構成の一例を示す図である。
【図６】図６は、一実施形態に係るＶＭエージェントの構成の一例を示す図である。
【図７】図７は、一実施形態に係るサーバにおいて実行される処理のフローチャートの一例を示す図である。
【図８】図８は、一実施形態に係るサーバにおいて図７の処理に続いて実行される処理のフローチャートの一例を示す図である。
【図９】図９は、一実施形態に係るサーバにおいて図７、８の処理とは別に実行される処理のフローチャートの一例を示す図である。
【図１０】図１０は、一変形例に係るサーバの物理環境の一例を示す図である。
【図１１】図１１は、一変形例に係るテーブルの一例を示す図である。
【図１２】図１２は、一変形例に係るサーバにおいて実行される処理のフローチャートの一例を示す図である。
【図１３】図１３は、一変形例に係るサーバにおいて図１３の処理に続いて実行される処理のフローチャートの一例を示す図である。
【図１４】図１４は、一実施形態に係るサーバにおいて図１２、１３の処理とは別に実行される処理のフローチャートの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本件開示の技術に係る実施形態について図面を参照しながら説明する。なお、以下の詳細な説明は例示的なものであり、実施形態の構成を限定するものではない。
【００１３】
図１に、一実施形態におけるサーバ１０の構成の一例を示す。なお、サーバ１０が情報処理装置の一例である。サーバ１０は、Central Processing Unit（ＣＰＵ）１０１、Random Access Memory（ＲＡＭ）１０２、Hard Disk Drive（ＨＤＤ）１０３、Graphics Processing Unit（ＧＰＵ）１０４、入力インタフェース１０５、通信インタフェース１０６を有する。また、ＧＰＵ１０４、入力インタフェース１０５、通信インタフェース１０６は、モニタ２０、入力装置３０、ネットワーク１５にそれぞれ接続されている。ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、ＧＰＵ１０４、入力インタフェース１０５、通信インタフェース１０６は、バス１０７を介して互いに接続されている。
【００１４】
サーバ１０のユーザは、入力装置３０を用いてサーバ１０に種々の指示を行い、サーバ１０の処理結果をモニタ２０で確認する。本実施形態において、ＣＰＵ１０１は、ＨＤＤ１０３に記憶されている各種プログラムをＲＡＭ１０２に展開して実行することで、以下に説明する種々の処理を実行する。
【００１５】
図２に、サーバ１０に実装される構成要素の一例を示す。サーバ１０において、サーバ１０のハードウェア１０ａ上でハイパーバイザ１０ｂが動作している。なお、ハードウェア１０ａは、一例としてサーバ１０のＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、ＧＰＵ１０４、入力インタフェース１０５、通信インタフェース１０６に相当する。また、ハイパーバイザ１０ｂ上には、Virtual Machine（ＶＭ）ホスト１０ｃおよびＶＭゲスト１
０ｄが作成されている。ここで、ＶＭホスト１０ｃは、仮想マシンを動作させるためにサーバ１０上で動作するサーバ仮想化ソフトウェアである。また、ＶＭゲスト１０ｄは、ＶＭホスト１０ｃによって提供される仮想化サーバなどの仮想環境である。
【００１６】
ＶＭホストエージェント（図中「ＶＭＨＡｇｔ」）１０ｅは、ＶＭホスト１０ｃ、ハイパーバイザ１０ｂ、ＶＭゲスト１０ｄ上のＶＭエージェント（図中「ＶＭＡｇｔ」）１０ｆをそれぞれ管理する。また、ハイパーバイザ１０ｂでは、サーバ１０上の各ＶＭゲストを監視するホストトレースプログラム（図中「ＨＴＰ」）１０ｇが実行される。また、ＶＭゲスト１０ｄでは、インタプリタの実行プログラム１０ｈ（図中「ＩＥＰ」）が実行される。ホストトレースプログラム１０ｇは、サーバ１０のユーザによる指示に従ってシステムコール（ハイパーバイザ１０ｂの呼び出し）を検出（フック）する。また、システムコールによってＶＭゲストにおいて実行中の実行プログラム１０ｈの処理の制御がハイパーバイザに移る、いわゆるＶＭＥｘｉｔが発生する。
【００１７】
図３にＶＭホストエージェント１０ｅの構成の一例を示す。ＶＭホストエージェント１０ｅは、ホスト負荷監視部１００ａ、ホスト監視スクリプト生成部１００ｂ、ホスト操作部１００ｃ、ゲスト操作部１００ｄ、データベース１００ｅを有する。ホスト負荷監視部１００ａは、ホストトレースプログラム１０ｇと通信し、ハイパーバイザ１０ｂやＶＭゲスト１０ｄの負荷に関する情報を取得する。また、ホスト負荷監視部１００ａは、取得した情報に基づいて種々の判定を行う。例えば、ホスト負荷監視部１００ａは、サーバ１０の起動時に、ハイパーバイザ１０ｂにホストトレースプログラム１０ｇが存在しないことを検出すると、ホスト操作部１００ｃに、ハイパーバイザ１０ｂでホストトレースプログラム１０ｇを実行するための処理を実行させる。また、ホスト負荷監視部１００ａは、ホストトレースプログラム１０ｇから、ＶＭゲスト１０ｄ上でのプロセスの起動に関する通知を受信する。そして、ホスト負荷監視部１００ａは、当該通知を受信すると、通知されたプロセスに対応するＣＰＵコアの設定をゲスト操作部１００ｄに指示する。
【００１８】
ホスト監視スクリプト生成部１００ｂは、ホスト負荷監視部１００ａからの指示に基づいて、ハイパーバイザ１０ｂに実行させるプログラムを生成する。また、ホスト監視スクリプト生成部１００ｂは、ＶＭゲスト１０ｄ上で実行されるプロセスの検出に使用されるファイルパスなどのデータも生成する。ホスト操作部１００ｃは、ホスト負荷監視部１０
０ａからの指示に基づいて、ホスト監視スクリプト生成部１００ｂが生成したプログラムをハイパーバイザ１０ｂに送信する。また、ホスト操作部１００ｃはハイパーバイザ１０ｂと通信して、ハイパーバイザ１０ｂが実行するツールやインタフェースを介してＶＭゲスト１０ｄの監視を行う。ゲスト操作部１００ｄは、ホスト負荷監視部１００ａからの指示に基づいて、ＶＭエージェント１０ｆと通信することで、ＶＭゲスト１０ｄの操作を実行する。
【００１９】
また、データベース１００ｅには、ＶＭゲスト１０ｄで実行されるプロセスと仮想ＣＰＵコアに関連する情報が格納される。図４に、データベース１００ｅに記憶されるテーブルの一例を示す。図４に示すように、データベース１００ｅには、ＶＭゲスト１０ｄの各仮想ＣＰＵコアと各仮想ＣＰＵコアで実行されるプロセスとの対応関係が格納されるテーブル（図中「テーブル１」）が記憶される。具体例として、テーブル１には、ＶＭゲストに割り当てられている識別子（図中「ゲストＩＤ」）が格納される。また、テーブル１には、ゲストＩＤが示すＶＭゲストで実行されるプロセスに割り当てられている識別子（図中「プロセスＩＤ」）が格納される。さらに、テーブル１には、プロセスＩＤが示すプロセスを実行するＶＭゲストの仮想ＣＰＵコアに割り当てられている識別子（図中「ゲストＣＰＵコアＩＤ」）が格納される。
【００２０】
また、データベース１００ｅには、ＶＭゲストの監視において監視対象となるプロセスに関する情報が格納されるテーブル（図中「テーブル２」）が記憶される。具体例として、テーブル２には、ＶＭゲストに割り当てられている識別子（図中「ゲストＩＤ」）が格納される。また、テーブル２には、ＶＭゲストで実行されるプロセスのうち監視対象となるプロセスのプロセス名（「ゲストプロセス名」）が格納される。
【００２１】
また、データベース１００ｅには、サーバ１０の物理ＣＰＵコアの負荷に対する判定に使用される閾値（図中「ＣＰＵコアの負荷検出用閾値」）を格納するテーブル（図中「テーブル３」）が記憶される。また、データベース１００ｅには、監視対象であるプロセスのプロセス名を格納するテーブル（図中「テーブル４」）が記憶される。また、データベース１００ｅには、ＶＭゲストの仮想ＣＰＵコアで実行されるプロセスＩＤ群のプロセスの負荷の判定に使用される閾値（図中「プロセスＩＤ群の負荷検出用閾値」）を格納するテーブル（図中「テーブル５」）が記憶される。なお、図４に示す各テーブルに格納されている情報は一例にすぎず、各欄には異なる情報が格納されてもよい。
【００２２】
図５に、ホストトレースプログラム（ＨＴＰ）１０ｇの構成の一例を示す。ホストトレースプログラム１０ｇは、ＶＭ  Ｅｘｉｔ解析部１００ｆ、ＶＭホストエージェント通信部１００ｇ、パス名データ１００ｈを含む。本実施形態では、ＶＭゲスト１０ｄは、ユーザインターフェイスあるいはユーザプログラムからのＶＭゲスト１０ｄに対するプロセスの起動指示を受け付ける。このとき、ＶＭゲスト１０ｄのゲストＯＳによって、起動するプロセスのプログラムが指定されたシステムコール（ハイパーバイザの呼び出し）が発行される。そして、例えば起動するプロセスのプロセスイメージを取得するため、制御がＶＭゲスト１０ｄからハイパーバイザ１０ｂに移る。このとき、ハードウェアによっていわゆるＶＭ  Ｅｘｉｔと呼ばれる状態遷移の処理が発生する。ＶＭ  Ｅｘｉｔ解析部１００ｆは、発生したＶＭ  Ｅｘｉｔの情報を取得して制御が移った原因などを解析し、実行されるプログラムを特定する。
【００２３】
パス名データ１００ｈには、ＶＭゲスト１０ｄで実行されるプロセスのうち、インタプリタに関連するプロセスの実行プログラムのパス名が格納されている。ＶＭ  Ｅｘｉｔ解析部１００ｆは、上記の解析で特定したプログラムがパス名データ１００ｈに格納されているプログラムのパス名に対応するプログラムである場合に、当該プログラムが監視対象であると特定する。そして、ＶＭ  Ｅｘｉｔ解析部１００ｆは、監視対象であると特定し
たプログラムを、ＶＭホストエージェント通信部１００ｇを介してＶＭホストエージェント１０ｅに通知する。したがって、本実施形態では、ＶＭ  Ｅｘｉｔ解析部１００ｆは、パス名データ１００ｈに格納されたプログラムのパス名を用いて、検出したシステムコールに起因して実行されるプログラムがインタプリタであるか否かを判定することができる。
【００２４】
図６に、ＶＭエージェント１０ｆの構成の一例を示す。図６に示すように、ＶＭエージェント１０ｆは、プロセス操作部１００ｊ、プロセス負荷監視部１００ｋ、ＶＭホストエージェント通信部１００ｍを含む。プロセス操作部１００ｊは、ＶＭゲスト１０ｄで実行されるプロセスとＶＭゲスト１０ｄ上の仮想ＣＰＵコアとの対応関係を決定する。プロセス負荷監視部１００ｋは、ＶＭゲスト１０ｄで実行されるプロセスとＶＭゲスト１０ｄ上の仮想ＣＰＵコアの対応関係の監視や特定のプロセスを実行する仮想ＣＰＵコアの負荷の監視を行う。ＶＭホストエージェント通信部１００ｍは、ＶＭホストエージェント１０ｅとの通信を行う。
【００２５】
次に、本実施形態において、サーバ１０において実行される処理について、図７および８を参照しながら説明する。一例として、サーバ１０の電源がオンになると、ホストトレースプログラム１０ｇが図７の処理を開始する。ＯＰ１０１において、ホストトレースプログラム１０ｇは、検出部として機能し、ＶＭゲスト１０ｄのゲストＯＳが発行したシステムコールを検出する。次いで、処理はＯＰ１０２に進められる。ＯＰ１０２において、ホストトレースプログラム１０ｇは、検出したシステムコールがプロセス起動によるものであるか否かを判定する。システムコールがプロセス起動によるものである場合は（ＯＰ１０２：Ｙｅｓ）、ホストトレースプログラム１０ｇは、処理をＯＰ１０３に進める。システムコールがプロセス起動によるものでない場合は（ＯＰ１０２：Ｎｏ）、ホストトレースプログラム１０ｇは、本フローチャートの処理を終了する。
【００２６】
ＯＰ１０３において、ホストトレースプログラム１０ｇは、ＶＭ  Ｅｘｉｔ解析部１００ｆの上記解析処理により、検出したシステムコールにおいて実行されるプログラムのパス名を特定する。次いで、処理はＯＰ１０４に進められる。ＯＰ１０４において、ホストトレースプログラム１０ｇは、判定部として機能し、ＶＭ  Ｅｘｉｔ解析部１００ｆの解析処理により特定したプログラムのパス名が、パス名データ１００ｈに格納されているか否かに基づいて、当該プログラムがインタプリタであるか否かを判定する。プログラムがインタプリタである場合は（ＯＰ１０４：Ｙｅｓ）、ホストトレースプログラム１０ｇは、処理をＯＰ１０５に進める。プログラムがインタプリタでない場合は（ＯＰ１０４：Ｎｏ）、ホストトレースプログラム１０ｇは、本フローチャートの処理を終了する。
【００２７】
ＯＰ１０５において、ホストトレースプログラム１０ｇは、ＶＭ  Ｅｘｉｔ解析部１００ｆの上記解析結果から、ＯＰ１０４においてインタプリタであると判定したプログラムのプロセスＩＤを取得する。次いで、ＯＰ１０６において、ホストトレースプログラム１０ｇは、ＯＰ１０５において取得したプロセスＩＤと、ＶＭ  Ｅｘｉｔ解析部１００ｆの上記解析によって得られたＶＭゲスト１０ｄのゲストＩＤと、ＶＭ  Ｅｘｉｔ解析部１００ｆの上記解析によって得られたプロセスＩＤに対応するプロセスのプロセス名とを、ＶＭホストエージェント１０ｅに送信する。
【００２８】
次いで、処理は、ＯＰ１０６から図８のＯＰ１０７に進められる。ここで、本フローチャートの処理の主体がホストトレースプログラム１０ｇからＶＭホストエージェント１０ｅに移る。ＯＰ１０７において、ＶＭホストエージェント１０ｅは、ホストトレースプログラム１０ｇから受信したプロセス名が、データベース１００ｅのテーブル４に格納された監視対象のプロセス名であるか否かを判定する。ホストトレースプログラム１０ｇから受信したプロセス名が監視対象である場合は（ＯＰ１０７：Ｙｅｓ）、ＶＭホストエージ
ェント１０ｅは、処理をＯＰ１０８に進める。ホストトレースプログラム１０ｇから受信したプロセス名が監視対象でない場合は（ＯＰ１０７：Ｎｏ）、ＶＭホストエージェント１０ｅは本フローチャートの処理を終了する。
【００２９】
ＯＰ１０８において、ＶＭホストエージェント１０ｅは、記憶部として機能し、ＯＰ１０５において取得したプロセスＩＤと、ＶＭ  Ｅｘｉｔ解析部１００ｆの解析処理によって得られたＶＭゲスト１０ｄのゲストＩＤをデータベース１００ｅのテーブル１に登録する。また、ＶＭホストエージェント１０ｅは、ＶＭ  Ｅｘｉｔ解析部１００ｆの解析処理によって得られたＶＭゲスト１０ｄのゲストＩＤとプロセスＩＤに対応するプロセスのプロセス名とを、データベース１００ｅのテーブル２に登録する。ＶＭホストエージェント１０ｅは、ゲストＩＤ、プロセスＩＤ、プロセス名をデータベース１００ｅの各テーブルに登録すると、処理をＯＰ１０９に進める。
【００３０】
ＯＰ１０９において、ＶＭホストエージェント１０ｅは、ＶＭエージェント１０ｆに対して、ＯＰ１０８において登録したプロセスに対するＶＭゲスト１０ｄのＣＰＵコアの割り付けを指示する。ＶＭエージェント１０ｆは、ＶＭホストエージェント１０ｅの指示に従って、仮想ＣＰＵコアをプロセスに割り付ける。次いで、処理はＯＰ１１０に進められる。ＯＰ１１０において、ＶＭエージェント１０ｆは、仮想ＣＰＵコアの割り付けが完了すると、プロセスに割り付けた仮想ＣＰＵコアのＣＰＵコアＩＤをＶＭホストエージェント１０ｅに通知する。そして、ＶＭホストエージェント１０ｅは、ＶＭエージェント１０ｆによって通知されたＶＭゲスト１０ｄの仮想ＣＰＵコアのＣＰＵコアＩＤを、データベース１００ｅのテーブル１に登録する。ＶＭホストエージェント１０ｅは、仮想ＣＰＵコアのＣＰＵコアＩＤの登録が完了すると、本フローチャートの処理を終了する。
【００３１】
次に、図９に、図７、８に示すフローチャートの処理によってＣＰＵコアの割り付けが行われた後にサーバ１０において実行される処理の一例を示す。一例として、ＶＭホストエージェント１０ｅが、図７、８に示す処理を実行した後に、データベース１００ｅに格納されている情報を使用して図９に示す処理を実行する。ＯＰ２０１において、ＶＭホストエージェント１０ｅは、サーバ１０の各物理ＣＰＵコアの負荷に関する情報を取得する。例えば、ＶＭホストエージェント１０ｅは、周知の技術を用いてサーバ１０の各物理ＣＰＵコアのコア使用率を、物理ＣＰＵコアの負荷に関する情報として取得する。ＶＭホストエージェント１０ｅは、サーバ１０の各物理ＣＰＵコアの負荷に関する情報を取得すると、処理をＯＰ２０２に進める。
【００３２】
ＯＰ２０２において、ＶＭホストエージェント１０ｅは、監視部として機能し、ＯＰ２０１において取得した情報から各物理ＣＰＵコアの負荷が閾値以上であるか否かを判定する。なお、当該閾値が第１の負荷の一例である。ＶＭホストエージェント１０ｅは、閾値の情報をデータベース１００ｅのテーブル３から取得する。そして、ＶＭホストエージェント１０ｅは、例えば各物理ＣＰＵコアのコア使用率が、閾値以上であるか否かを判定する。コア使用率が閾値以上である物理ＣＰＵコアが存在する場合は（ＯＰ２０２：Ｙｅｓ）、ＶＭホストエージェント１０ｅは、処理をＯＰ２０３に進める。一方、各物理ＣＰＵコアのコア使用率が閾値未満である場合は（ＯＰ２０２：Ｎｏ）、ＶＭホストエージェント１０ｅは、処理をＯＰ２０１に戻す。
【００３３】
ＯＰ２０３において、ＶＭホストエージェント１０ｅは、ハイパーバイザ１０ｂの制御情報を取得する。さらに、ＶＭホストエージェント１０ｅは、ハイパーバイザ１０ｂの制御情報に含まれる仮想ＣＰＵコアに対する物理ＣＰＵコアの割り当て情報から、負荷が閾値以上であると判定した物理ＣＰＵコアを使用する仮想ＣＰＵコアを特定する。そして、ＶＭホストエージェント１０ｅは、特定した仮想ＣＰＵコアを有するＶＭゲストに対応するゲストＩＤを特定する。さらに、ＶＭホストエージェント１０ｅは、特定した仮想ＣＰ
Ｕコアに対応するＣＰＵコアＩＤを特定する。ＶＭホストエージェント１０ｅは、ゲストＩＤおよびＣＰＵコアＩＤを特定すると、処理をＯＰ２０４に進める。
【００３４】
ＯＰ２０４において、ＶＭホストエージェント１０ｅは、特定部として機能し、データベース１００ｅのテーブル１に格納されている情報から、ＯＰ２０３において特定したＣＰＵコアＩＤに対応する仮想ＣＰＵコアで実行中のプロセスＩＤを特定する。複数のプロセスＩＤが特定される場合があるため、ＯＰ２０４において特定されるプロセスＩＤをプロセスＩＤ群と称する。ＶＭホストエージェント１０ｅは、プロセスＩＤ群を特定すると、処理をＯＰ２０５に進める。
【００３５】
ＯＰ２０５において、ＶＭホストエージェント１０ｅは、ＶＭエージェント１０ｆに対して、ＯＰ２０４で特定したプロセスＩＤ群のプロセスを実行することによる仮想ＣＰＵコアの負荷の確認を指示する。ここで、本フローチャートの処理における主体がＶＭホストエージェント１０ｅからＶＭエージェント１０ｆに移る。ＶＭエージェント１０ｆは、ＶＭホストエージェント１０ｅからの指示に従い、ＯＰ２０４で特定したプロセスＩＤ群のプロセスの実行に伴う仮想ＣＰＵコアの負荷に関する情報を取得する。例えば、ＶＭエージェント１０ｆは、当該仮想ＣＰＵコアのコア使用率を、仮想ＣＰＵコアの負荷に関する情報として取得する。これにより、当該仮想ＣＰＵコアの負荷全体に対するプロセスＩＤ群のプロセスの負荷がわかる。ＶＭエージェント１０ｆは、仮想ＣＰＵコアの負荷に関する情報を取得すると、処理をＯＰ２０６に進める。
【００３６】
ＯＰ２０６において、ＶＭエージェント１０ｆは、ＯＰ２０５において取得した情報から、仮想ＣＰＵコアにおけるプロセスＩＤ群のプロセスの負荷が閾値以上であるか否かを判定する。なお、当該閾値が第２の負荷の一例である。ＶＭエージェント１０ｆは、閾値の情報をデータベース１００ｅのテーブル５から取得する。ＶＭエージェント１０ｆは、例えばプロセスＩＤ群のプロセスのコア使用率が、閾値以上であるか否かを判定する。プロセスＩＤ群のプロセスのコア使用率が閾値以上である場合は（ＯＰ２０６：Ｙｅｓ）、ＶＭエージェント１０ｆは、処理をＯＰ２０７に進める。一方、プロセスＩＤ群のプロセスのコア使用率が閾値未満である場合は（ＯＰ２０６：Ｎｏ）、ＶＭエージェント１０ｆは、処理をＯＰ２０１に戻す。
【００３７】
ＯＰ２０７において、ＶＭエージェント１０ｆは、割り付け部として機能し、ＯＰ２０４において特定されたプロセスＩＤ群のうち１つのプロセスＩＤに対応するプロセスを現在の仮想ＣＰＵコア、すなわちＯＰ２０３において特定された仮想ＣＰＵコアに割り付ける。さらに、ＶＭエージェント１０ｆは、プロセスＩＤ群のうちの残りのプロセスＩＤに対応するプロセスをＶＭゲスト内の他の仮想ＣＰＵコアに割り付けることでプロセスを移動する。なお、現在の仮想ＣＰＵコアへの割り付けを維持するプロセスと他の仮想ＣＰＵコアに移動するプロセスをどのように決定するかは、乱数を用いるなど、周知の技術を用いて行えばよい。ＶＭエージェント１０ｆは、プロセスの移動が完了すると、処理をＯＰ２０８に進める。
【００３８】
ＯＰ２０８において、ＶＭエージェント１０ｆは、更新部として機能し、プロセスＩＤ群の各プロセスＩＤと割り付けられている仮想ＣＰＵコアのＣＰＵコアＩＤとの対応関係をＶＭホストエージェント１０ｅに通知する。ここで、処理の主体がＶＭエージェント１０ｆからＶＭホストエージェント１０ｅに移る。ＶＭホストエージェント１０ｅは、ＶＭエージェント１０ｆから通知されたプロセスＩＤとＣＰＵコアＩＤとの対応関係を用いて、データベース１００ｅのテーブル１に格納されているプロセスＩＤとＣＰＵコアＩＤとの対応関係を更新する。そして、ＶＭホストエージェント１０ｅは、本フローチャートの処理を終了する。
【００３９】
以上のように、ＯＰ１０１の処理によって、仮想マシンにおいて実行されるプロセスの制御が仮想ＣＰＵコアからハイパーバイザに移る際に、当該プロセスに関する情報を取得することができる。また、ＯＰ１０２〜ＯＰ１０４の処理によって、当該プロセスがインタプリタに関するものであるか否か、すなわち監視対象のプロセスであるか否かを判定することができる。また、ＯＰ１０５〜ＯＰ１１０の処理によって、監視対象のプロセスと当該プロセスを実行する仮想ＣＰＵコアの対応関係を、監視対象のプロセスに関する情報として取得および記憶することができる。
【００４０】
さらに、ＯＰ２０１、ＯＰ２０２の処理によって、サーバ１０上で仮想マシンを稼働させる場合に、物理ＣＰＵコアの負荷に対する判定に基づいて、当該物理ＣＰＵコアを使用する仮想ＣＰＵコアの負荷の状態を監視することができる。これにより、ＶＭゲストに仮想ＣＰＵコアの負荷に関する情報を取得するプログラムを組み込むなどＶＭゲストの構成を変えることなく、仮想ＣＰＵコアの負荷の状態を監視することができる。
【００４１】
また、ＯＰ２０３〜ＯＰ２０６の処理によって、あらかじめ取得した監視対象のプロセスに関する情報に基づいて、仮想ＣＰＵコアにおいて監視対象のプロセスを実行することにより負荷が所定の負荷以上であるか否かを判定する。これにより、監視対象のプロセスを実行することによって負荷が高くなっている仮想ＣＰＵコアを特定することができる。そして、ＯＰ２０７の処理によって、仮想ＣＰＵコアの負荷が所定の負荷以上である場合に、プロセスを他の仮想ＣＰＵコアに割り付けることで、仮想ＣＰＵコアの負荷を分散させることができる。この結果、ＶＭゲストの仮想ＣＰＵコアがいわゆるスレッドセーフでないコードを含むインタプリタなどのプログラムを実行する際に、当該仮想ＣＰＵコアが他の仮想ＣＰＵコアにプログラムの実行を禁止するＧＩＬなどのロックを占有する現象の発生を抑えることができる。さらに、ＯＰ２０８の処理によって、プロセスの割り付け後におけるプロセスとプロセッサコアとの対応関係を把握することができる。
【００４２】
以上が本実施形態に関する説明であるが、上記のサーバなどの構成や処理は、上記の実施形態に限定されるものではなく、本発明の技術的思想と同一性を失わない範囲内において種々の変更が可能である。例えば、上記の実施形態では、監視対象のプロセスをインタプリタによって実行されるプロセスとしたが、複数プロセスによる並行処理が禁止されるプログラムであればインタプリタに限らず監視対象とすることができる。
【００４３】
次に、上記の実施形態の変形例について説明する。なお、本変形例において、上記の実施形態と同様の構成要素については同一の符号を付し、詳細な説明は省略する。上記の実施形態では、ＶＭゲストの仮想ＣＰＵコアで実行されるプロセスを監視するが、本変形例では、物理ＣＰＵコアで実行されるプロセスを監視する。このため、本変形例では、ＶＭホスト、ＶＭゲスト、ＶＭ  Ｅｘｉｔ、ＶＭエージェントは削除されている。本変形例では、サーバ２００のハードウェア２００ａ上でＯＳ２００ｂが稼働している場合にプロセスの監視を行うことを想定している。
【００４４】
図１０に示すように、ＯＳ２００ｂには、物理サーバトレースプログラム（図中「ＰＴＰ」）２００ｄが組み込まれている。物理サーバトレースプログラム２００ｄは、ホストトレースプログラムと同様、サーバ２００のユーザの指示に基づくシステムコールの呼び出し時に起動されるプログラムである。また、ＯＳ２００ｂ上で、物理サーバエージェント（Physical Server Agent）（図中「ＰＳＡｇｔ」）２００ｃおよびインタプリタの実
行プログラム（図中「ＩＥＰ」）２００ｅが実行される。物理サーバエージェント２００ｃ、物理サーバトレースプログラム２００ｄ、インタプリタの実行プログラム２００ｅは、上記のＶＭホストエージェント１０ｅ、ホストトレースプログラム１０ｇ、インタプリタの実行プログラム１０ｈに対応する。
【００４５】
また、図１１に示すように、データベース１００ｅには、テーブル１１、テーブル１２、テーブル１３、テーブル１４、テーブル１５が格納されている。テーブル１１、テーブル１２、テーブル１３、テーブル１４、テーブル１５は、それぞれ上記のテーブル１、テーブル２、テーブル３、テーブル４、テーブル５に対応する。
【００４６】
図１２〜１４に本変形例のサーバ２００において実行される処理のフローチャートを示す。ＯＰ３０１〜ＯＰ３１０は、それぞれ上記のＯＰ１０１〜ＯＰ１１０に対応する処理である。ただし、本変形例では、ゲストＯＳのシステムコールの代わりにＯＳ２００ｂのシステムコールが検出される。また、本変形例では、ＶＭホストおよびＶＭゲストは存在しないため、ゲストＩＤの登録は実行されない。また、ＶＭゲストで実行されるプロセスのプロセスＩＤの代わりに物理ＣＰＵコアで実行されるプロセスのプロセスＩＤが取得、送信、登録される。ＯＰ３０１〜ＯＰ３１０の処理によって、サーバ２００で実行されるプロセスと物理ＣＰＵコアとの対応関係が特定される。
【００４７】
また、ＯＰ４０１〜ＯＰ４０８は、それぞれ上記のＯＰ２０１〜ＯＰ２０８に対応する処理である。ただし、本変形例では、ＯＰ４０５において仮想ＣＰＵコアにおけるプロセスＩＤ群のプロセスの負荷の代わりに物理ＣＰＵコアにおけるプロセスＩＤ群のプロセスの負荷が確認される。ＯＰ４０１〜ＯＰ４０８の処理によって、サーバ２００で実行される監視対象のプロセスの実行によって負荷が高くなっている物理ＣＰＵコアが特定される。さらに、物理ＣＰＵコアの負荷が高くなる要因となるプロセスを他の物理ＣＰＵコアに移動することで、物理ＣＰＵコアの負荷を分散させることができる。
【００４８】
また、上記の実施形態において、上記の少なくとも一部の処理は、ＣＰＵ以外のプロセッサ、例えば、Digital Signal Processor（ＤＳＰ）、Graphics Processing Unit（ＧＰＵ）、数値演算プロセッサ、ベクトルプロセッサ、画像処理プロセッサ等の専用プロセッサで行われてもよい。また、上記の少なくとも一部の処理は、集積回路（ＩＣ）、その他のディジタル回路であってもよい。また、上記各部の少なくとも一部にアナログ回路が含まれてもよい。集積回路は、Large-scale Integration（ＬＳＩ）、Application Specific Integrated Circuit（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）を含む。ＰＬＤは、例えば、Field-Programmable Gate Array(ＦＰＧＡ)を含む。上記各部は、
プロセッサと集積回路との組み合わせであってもよい。組み合わせは、例えば、マイクロコントローラ（ＭＣＵ）、System-on-a-Chip（ＳｏＣ）、システムＬＳＩ、チップセットなどと呼ばれる。
【００４９】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記サーバの設定を行うための管理ツール、ＯＳその他を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【００５０】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリ等のメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【００５１】
以上の実施形態に関し、さらに以下の付記を開示する。
【００５２】
（付記１）
並行処理が禁止される複数プロセスを実行する複数のプロセッサコアのそれぞれの負荷を監視する監視部と、
前記監視される前記複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、前記複数プロセスと前記第１のプロセッサコアとの対応関係に基づいて特定する特定部と
を有することを特徴とする情報処理装置。
（付記２）
前記第１のプロセッサコアでプロセスが起動されたときに、並行処理が禁止されるプロセスを示す情報に基づいて、前記起動されたプロセスが並行処理が禁止されるプロセスであるか否かを判定する判定部と、
前記判定部によって並行処理が禁止されるプロセスであると判定されたプロセスと前記第１のプロセッサコアの対応関係を記憶する記憶部と
をさらに有し、
前記特定部は、前記記憶部に記憶された前記対応関係に基づいて、前記第１のプロセッサコアで実行されているプロセスを特定する
ことを特徴とする付記１に記載の情報処理装置。
（付記３）
前記第１のプロセッサコアの負荷が、前記特定部によって特定されたプロセスにより第２の負荷以上になっている場合に、前記特定部によって特定されたプロセスを前記第１のプロセッサコアとは別の第２のプロセッサコアに割り付ける割り付け部をさらに有する、ことを特徴とする付記１または２に記載の情報処理装置。
（付記４）
前記特定部によって特定されたプロセスと前記第２のプロセッサコアとの対応関係に基づいて、前記記憶部に記憶されたプロセスとプロセッサコアとの対応関係を更新する更新部をさらに有する、ことを特徴とする付記２を引用する付記３に記載の情報処理装置。
（付記５）
前記情報処理装置において発行される、プロセスに関するシステムコールを検出する検出部をさらに有し、
前記判定部は、前記検出されたシステムコールによって起動されるプロセスが並行処理が禁止されるプロセスであるか否かを判定する
ことを特徴とする付記２から４のいずれかに記載の情報処理装置。
（付記６）
並行処理が禁止されるプロセスを実行する複数のプロセッサコアは、前記情報処理装置内の物理マシン上のプロセスによって仮想的に形成される仮想マシン上の複数の仮想プロセッサコアであり、
前記監視部は、前記情報処理装置の物理プロセッサコアの負荷に基づいて、前記複数の仮想プロセッサコアの負荷を監視する
ことを特徴とする付記１から５のいずれかに記載の情報処理装置。
（付記７）
コンピュータの監視部によって、並行処理が禁止される複数プロセスを実行する複数のプロセッサコアのそれぞれの負荷を監視し、
前記コンピュータの特定部によって、前記監視される前記複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、前記複数プロセスと前記第１のプロセッサコアとの対応関係に基づいて特定する
ことを特徴とする情報処理方法。
（付記８）
前記コンピュータの判定部によって、前記第１のプロセッサコアでプロセスが起動されたときに、並行処理が禁止されるプロセスを示す情報に基づいて、前記起動されたプロセスが並行処理が禁止されるプロセスであるか否かを判定し、
前記コンピュータの記憶部によって、前記判定部によって並行処理が禁止されるプロセスであると判定されたプロセスと前記第１のプロセッサコアの対応関係を記憶し、
前記特定部は、前記記憶部に記憶された前記対応関係に基づいて、前記第１のプロセッサコアで実行されているプロセスを特定する
ことを特徴とする付記７に記載の情報処理方法。
（付記９）
前記コンピュータの割り付け部によって、前記第１のプロセッサコアの負荷が、前記特定部によって特定されたプロセスにより第２の負荷以上になっている場合に、前記特定部によって特定されたプロセスを前記第１のプロセッサコアとは別の第２のプロセッサコアに割り付ける、ことを特徴とする付記７または８に記載の情報処理方法。
（付記１０）
前記コンピュータの更新部によって、前記特定部によって特定されたプロセスと前記第２のプロセッサコアとの対応関係に基づいて、前記記憶部に記憶されたプロセスとプロセッサコアとの対応関係を更新する、ことを特徴とする付記８を引用する付記９に記載の情報処理方法。
（付記１１）
前記コンピュータの検出部によって、前記情報処理装置において発行される、プロセスに関するシステムコールを検出し、
前記判定部は、前記検出されたシステムコールによって起動されるプロセスが並行処理が禁止されるプロセスであるか否かを判定する
ことを特徴とする付記８から１０のいずれかに記載の情報処理方法。
（付記１２）
並行処理が禁止されるプロセスを実行する複数のプロセッサコアは、前記情報処理装置内の物理マシン上のプロセスによって仮想的に形成される仮想マシン上の複数の仮想プロセッサコアであり、
前記監視部は、前記情報処理装置の物理プロセッサコアの負荷に基づいて、前記複数の仮想プロセッサコアの負荷を監視する
ことを特徴とする付記７から１１のいずれかに記載の情報処理方法。
（付記１３）
コンピュータの監視部によって、並行処理が禁止される複数プロセスを実行する複数のプロセッサコアのそれぞれの負荷を監視し、
前記コンピュータの特定部によって、前記監視される前記複数のプロセッサコアのうち負荷が第１の負荷以上になった第１のプロセッサコアで実行されているプロセスを、前記複数プロセスと前記第１のプロセッサコアとの対応関係に基づいて特定する
処理を前記コンピュータに実行させるためのプログラム。
（付記１４）
前記コンピュータの判定部によって、前記第１のプロセッサコアでプロセスが起動されたときに、並行処理が禁止されるプロセスを示す情報に基づいて、前記起動されたプロセスが並行処理が禁止されるプロセスであるか否かを判定し、
前記コンピュータの記憶部によって、前記判定部によって並行処理が禁止されるプロセスであると判定されたプロセスと前記第１のプロセッサコアの対応関係を記憶する、
処理を前記コンピュータにさらに実行させ、
前記特定部は、前記記憶部に記憶された前記対応関係に基づいて、前記第１のプロセッサコアで実行されているプロセスを特定する
ことを特徴とする付記１３に記載のプログラム。
（付記１５）
前記コンピュータの割り付け部によって、前記第１のプロセッサコアの負荷が、前記特定部によって特定されたプロセスにより第２の負荷以上になっている場合に、前記特定部によって特定されたプロセスを前記第１のプロセッサコアとは別の第２のプロセッサコアに割り付ける、処理を前記コンピュータにさらに実行させることを特徴とする付記１３ま
たは１４に記載のプログラム。
（付記１６）
前記コンピュータの更新部によって、前記特定部によって特定されたプロセスと前記第２のプロセッサコアとの対応関係に基づいて、前記記憶部に記憶されたプロセスとプロセッサコアとの対応関係を更新する、処理を前記コンピュータにさらに実行させることを特徴とする付記１４を引用する付記１５に記載のプログラム。
（付記１７）
前記コンピュータの検出部によって、前記情報処理装置において発行される、プロセスに関するシステムコールを検出する、処理を前記コンピュータにさらに実行させ、
前記判定部は、前記検出されたシステムコールによって起動されるプロセスが並行処理が禁止されるプロセスであるか否かを判定する
ことを特徴とする付記１４から１６のいずれかに記載のプログラム。
（付記１８）
並行処理が禁止されるプロセスを実行する複数のプロセッサコアは、前記情報処理装置内の物理マシン上のプロセスによって仮想的に形成される仮想マシン上の複数の仮想プロセッサコアであり、
前記監視部は、前記情報処理装置の物理プロセッサコアの負荷に基づいて、前記複数の仮想プロセッサコアの負荷を監視する
ことを特徴とする付記１３から１７のいずれかに記載のプログラム。
【符号の説明】
【００５３】
１０、２００    サーバ
１０１    ＣＰＵ
１０２    ＲＡＭ
１０３    ＨＤＤ
１０ｂ    ハイパーバイザ
１０ｃ    ＶＭホスト
１０ｄ    ＶＭゲスト
１０ｅ    ＶＭホストエージェント
１０ｆ    ＶＭエージェント
１０ｇ    ホストトレースプログラム
２００ｂ    ＯＳ
２００ｃ    物理サーバエージェント
２００ｄ    物理サーバトレースプログラム
【図１】
2019003493.tif 000003
【図２】
2019003493.tif 000004
【図３】
2019003493.tif 000005
【図４】
2019003493.tif 000006
【図５】
2019003493.tif 000007
【図６】
2019003493.tif 000008
【図７】
2019003493.tif 000009
【図８】
2019003493.tif 000010
【図９】
2019003493.tif 000011
【図１０】
2019003493.tif 000012
【図１１】
2019003493.tif 000013
【図１２】
2019003493.tif 000014
【図１３】
2019003493.tif 000015
【図１４】
2019003493.tif 000016