日本ソフトウェア科学会第 30 回大会 (2013 年度) 講演論文集

仮想 AMT を用いた仮想マシンと PC の一元管理
大薗 弘記

光来 健一

PC があらゆる部署で使われるようになり，組織の管理者が管理しなければならない PC の数は膨大になってきている．管理者は障害が発生すると PC の設置場所まで行って修復作業を行わなければならない場合もある．このような管理者の負担を軽減するために，最近の PC には Intel AMT が搭載されるようになってきている．AMT を用いることで，管理者は PC をリモートから一元的に管理することができるようになる．しかし，近年，仮想デスクトップの普及により，組織内には PC と仮想デスクトップが混在している．AMT では PC の管理を行うことしかできないため，仮想デスクトップの管理は別に行う必要があった．本論文では，仮想デスクトップと PC を一元的に管理できるようにするために仮想マシン（VM）に対して仮想的な AMT を提供する仮想 AMT（vAMT）を提案する．
vAMT は物理マシンを管理する AMT と同様のインタフェースで VM を管理することを可能にする．
As PCs are being used at every department, the number of PCs that administrators have to manage isincreasing. Administrators sometimes go to the location of PCs to repair them on failures. To reduce sucha burden, the latest PCs are equipped with Intel AMT. AMT enables administrators to remotely manage
PCs in a unified fashion. However, due to the prevalence of virtual desktops, PCs and virtual desktops
intermingle inside an organization in recent years. Since AMT can manage only PCs, virtual desktops haveto be managed independently. In this paper, we propose vAMT, which is virtual AMT for a virtual machine(VM), to enable unified management of virtual desktops and PCs. vAMT manages a VM by providing thesame interface as AMT does for a physical machine.になる．OS が動作していて，リモートコントロール

1 はじめに用のエージェントがその上で正常に動作している場

企業など組織の IT 化の進展に伴い，組織で使用さ合は，リモートでの障害対応もかなり容易ではある．

れる PC の数は膨大になってきている．組織の IT 部

しかし，OS そのものが起動しない場合や BIOS 設定

門の管理者はこれらすべての PC を管理しなければなを変更する必要がある場合，あるいはハードウェアにらない．管理の内容は，ヘルプデスクサポートやパッ問題がある場合などは，ソフトウェアベースの管理だ

チ配布，ソフトウェアのアップグレード，ウィルス対けでは対応しきれない．

策など多岐にわたる．例えば，離れた部署のユーザかそのような問題から，最近の PC には Intel AMTらの障害報告への対応を行う場合，問題になっているが搭載されるようになってきている．AMT を用いるシステムが管理者の目の前にないために対応が難しい

ことで，管理者はリモートから PC を一元的に管理ことがある．その場合，管理者は障害の発生した PCすることができるようになる．AMT により PC をの設置場所まで赴き，問題箇所を特定してから，障害ハードウェアレベルで管理することができるため，リの原因によっては交換の必要な部品を取りに戻ること

モートで PC の OS 起動前の画面表示を確認したり，BIOS 設定画面をリモートで操作したりすることがで
Unified Management of Virtual Machines and PCs Using Virtual AMT.
Kouki Oozono, Kenichi Kourai, 九州工業大学, Kyushu
Institute of Technology.

き，管理者の負担は大きく軽減される．
しかし，近年，サーバの仮想マシン（VM）上でシステムを動作させ，その画面だけを PC 上で表示する仮想デスクトップが普及してきている．これによの動作を監視することができる．管理エージェントはり，組織内は物理マシンである PC と VM が混在する

定期的に AMT に対してハートビートを送っている環境になっている．このような環境において，AMTので，ハートビートが停止した場合に AMT が管理

では物理マシンの管理を行うことしかできないため，者にアラートを送信したり，NIC の制御を行うことVM の管理は別に行う必要がある．

でネットワークへの接続を制限したりすることがでそこで，仮想デスクトップと PC を一元的に管理できる．

きるようにするために，VM に対して仮想的な AMT

近年，仮想デスクトップと呼ばれる利用形態が普及を提供する仮想 AMT（vAMT）を提案する．vAMTしてきている．仮想デスクトップはサーバ上で VM

は物理マシンを管理する AMT と同様のインタフェーを動作させて，ネットワークを通じて VM に接続しスで VM を管理することを可能にする．AMT とてその画面だけを PC に表示するシステムである．仮vAMT を用いることで，PC と仮想デスクトップの違想デスクトップを使用することで，システムをサーバいを意識することなく，既存の AMT 用管理ツールをで集中管理することができ，ソフトウェアの追加や用いて一元的な管理を行うことができるようになる．

更新，修正などのメンテナンスが容易となる．仮想2 章では AMT の基本的な機能と仮想デスクトップデスクトップの普及はまだ過渡期であることや，ネッとの混在環境における問題点について述べる．3 章でトワークが繋がらない環境で使用されるマシンは仮

は vAMT を提案し，vAMT のインタフェースである想デスクトップに置き換えることができないなどのCIM ついて説明する．4 章で vAMT の機能を実現す問題により，現在，組織内では PC と仮想デスクトッるために作成した CIM プロバイダについて述べる．

プが混在している．

5 章で vAMT の動作に関する実験について述べる．

そのため，組織内の全てのマシンの管理を行う場

最後に 6 章で本論文のまとめと今後の課題を述べる．

合，物理マシンである PC と仮想デスクトップであるVM の両方を管理する必要がある．しかし，AMT は2 従来の PC 管理物理マシンの管理を行うための技術であるため，VM

AMT は，インテル社が提供する vPro の管理機能の管理には別の管理ツールを用いる必要がある．そのの核となる技術であり，PC をハードウェアレベルでため，管理者は少なくとも 2 種類の管理ツールを使管理することができる．AMT の基本的な機能としてい分けなければならず，管理が煩雑になる．

は，検出，障害回復，保護がある．AMT はシステムの起動時に System Management BIOS（SMBIOS）

3 vAMT[1] テーブルからハードウェアとソフトウェアに関す本研究では，仮想的な AMT である vAMT を VMる情報を取得し，それを独自のフラッシュメモリに格に対して提供する．vAMT は物理マシンを管理する納している．これにより，PC の電源がオフの状態でAMT と同様のインタフェースで VM を管理することもリモートから情報の取得を可能にする．

を可能にする．リモートの管理ツールは Web Services

障害回復機能としては，PC に接続されているキー

for Management（WS-Management） [2] というプ

ボードやマウス，PC の電源をリモートから操作するロトコルを用いて vAMT にアクセスを行う．vAMTことができる．AMT はハードウェアレベルで管理をから情報を取得したり，管理を実行したりするため行えるため，管理エージェントが起動していない状態に，システム管理の標準となっている Common In-でも自由に電源を操作できる．OS が起動しない場合

formation Model (CIM） [3] を AMT 用に拡張したは，管理者側にあるハードウェア診断ツールの入ったインタフェースを用いる．AMT と vAMT を用いる

起動ディスクイメージを使って対象の PC を起動し，ことで，図 1 のように物理マシンと VM の違いを意問題のある箇所を特定することができる．

識することなく，既存の管理ツールを用いて一元的な保護機能としては，OS 上で動く管理エージェント管理を行うことができるようになる．

CIM Processor はデバイスの論理的な情報を扱うための CIM クラス CIM LogicalDevice を継承したクラスで，CPU 番号を示す Number というプロパティと，CPU の有効化・無効化を行うための Enable というメソッドを持っている．Number に付いている [Key]という修飾子はそのプロパティがインスタンスを識別するのに用いられることを表しており，キープロパティと呼ばれる．また，Enable メソッドの引数であ
図1

システムの全体構成

る Enabled に付いている [IN] という修飾子はその引数が入力引数であることを示す．

3. 1 CIM インタフェース

CIM Chip はデバイスを物理要素として見た時の情管理モデルとして CIM を利用することで管理対象報を扱うための CIM クラス CIM PhysicalElement

をメーカや種類に関わらず一貫して管理することがを 継 承 し た ク ラ ス で あ る ．CIM Realizes はできる．CIM は異なる管理対象オブジェクトの複雑

CIM PhysicalElement と CIM LogicalDevice の 参

な相互依存や関連性をたどったり，表現したりするこ

照型をプロパティに持つ関連クラスである．データ型とを容易にするためにオブジェクト指向の階層的アーの後の REF は参照型であることを表している．これキテクチャになっている．CIM を定義するための要は各デバイスの論理情報と物理情報を対応づけるた素として，クラス，プロパティ，メソッド，修飾子，めのクラスである．

参照，関連がある．
クラス クラスには特定の種類のオブジェクトに共通するプロパティやメソッドを定義する．
プロパティ クラスの特徴を表現するための値で，名前，データ型，値を持つ．
メソッド メソッドが定義されているクラスのインスタンスに対して操作を行うために呼び出さ

CIM の ク ラ ス や イ ン ス タ ン ス を 操 作 す る た めに，CIM オペレーションが用いられる．例えば，インスタンスの取得方法には EnumerateInstances とGetInstance の 2 種類がある．EnumerateInstances
では CIM クラスのすべてのインスタンスを取得するのに対して，GetInstance ではプロパティの値を指定することで 1 つのインスタンスのみを取得する．

れる．
修飾子 クラス，メソッド，メソッドの引数，プロ

3. 2 その他のインタフェース

パティ，参照，関連に関する追加情報を提供する．

VNC 接続を行うことで，リモートから VM の画面参照 他のインスタンスへのポインタであることを確認したりキーボードやマウスを操作したりするこを示す特別なデータ型である．
関連 2 つ以上の参照を含むクラスの一種であり，とができる．AMT を経由した VNC 接続にはデフォ
ルトポートを使用する方法とリダイレクションポー

異なるクラスのインスタンスの関係を表す．

トを使用する方法の 2 種類がある．デフォルトポー

CIM のクラスを実際に定義するためには Managed

トを使用すると，通常の VNC 接続を行うことができ

Object Format （MOF）が用いられる．MOF は構る．リダイレクションポートを使用すると，AMT 独文仕様のために BNF 記法を拡張したもので，CIM

自のプロトコルを用いて TLS によるセキュリティのの仕様で定められている．CIM クラスを MOF で高い接続を行える．

書いた例を図 2 に示す．この例では CIM Processor，CIM Chip，CIM Realizes という 3 つのクラスが定義されている．ただし，説明を簡単にするために，図 2は実際の定義とは少し異なる．

class CIM_Processor : CIM_LogicalDevice {源間の通信を管理する．管理インタフェースとして[Key] uint32 Number;

XML/HTTP 通信間のマッピング，管理情報を保持す

uint32 Enable([IN] boolean Enabled);

るリポジトリへのインタフェース，実際にコンピュータの資源にアクセスを行う CIM プロバイダへのイン};タフェースなど，様々なインタフェースを提供する．

class CIM_Chip : CIM_PhysicalElement {[Key] string Tag;

OpenPegasus で vAMT へのリクエストを処理できるようにするには 2 つの修正を行う必要があった．1
つは名前空間が指定されていないときにデフォルトの};名前空間を使うようにすることであり，もう 1 つは参class CIM_Realizes {[Key] CIM_PhysicalElement REF Antecedent;[Key] CIM_LogicalDevice REF Dependent;

照先のアドレス指定が “default” のときに CIM サー
バを指すようにすることである．
現在の実装では，仮想化ソフトウェアとして LinuxKVM を対象としている．vAMT はホスト OS 上で};
図2

MOF で記述された CIM クラスの例

動作し，同じくホスト OS 上で動作する VM に対して管理を行う．

4. 2 CIM プロバイダ
vAMT を実現するには VM に対してアクセスを行う CIM プロバイダを作成する必要がある．CIM プ
ロバイダの作成には，CIMPLE [5] というツールを利用した．CIMPLE を用いることで，CIM クラスが定義されている MOF から CIM プロバイダの雛形を
図3

vAMT の構成生成することができる．

CIMPLE は CIM クラスに対応する C++のクラスと CIM プロバイダの雛形となるクラスを生成する．

4 実装

前者のクラスは CIM クラスのプロパティに対応す

4. 1 システム構成るメンバを持つ．後者のクラスにはメンバ関数としvAMT は図 3 のように，WS-Management サーて enum instances や get instance などが定義され

バ，CIM オブジェクトマネージャ（CIMOM），リている．例えば，enum instances 関数は CIM オペ

ポ ジ ト リ，CIM プ ロ バ イ ダ に よって 構 成 さ れ る ．

レーションの EnumerateInstances が実行される時に

WS-Management サーバは送られてきたリクエス呼び出される．我々は AMT で使用される CIM クラトを CIM のリクエストに変換して CIMOM に渡す．

スの MOF から全ての CIM プロバイダの雛形を生成

CIMOM は CIM プロバイダの登録情報が格納されした．その際に，AMT 用に文法拡張された CIM クているリポジトリを参照して，リクエストを適切なラスが存在したため，CIMPLE の文法チェックを修

CIM プロバイダに送る．CIM プロバイダでは，VM正した．の仮想ハードウェアにアクセスすることで VM の情報を取得したり，管理を実行したりする．

図 2 の CIM Processor のための CIM プロバイダに enum instances 関数を記述する例を図 4 に示す．

この実装には OpenPegasus [6] を用いた．Open-

この例では CIM Processor の create メソッドを用

Pegasus は CIM サーバを提供するオープンソース実

いて CPU の数だけインスタンスを作成し，各インス装で，管理アプリケーションとコンピュータの各資タンスに CPU 番号を設定している．初期化を終えた

Enum_Instances_Status

Get_Instance_Status

CIM_Processor_Provider::enum_instances(

CIM_Processor_Provider::get_instance(

const CIM_Processor* model,

const CIM_Processor* model,

Enum_Handler<CIM_Processor>* handler)

CIM_Processor*& instance){{

int val = model->Number.value;for (i = 0; i < nCPUs; i++) {if (val >= 0 && val < nCPUs){

CIM_Processor *cpu =instance->Number.set(val);

CIM_Processor::create();return GET_INSTANCE_OK;

cpu->Number.set(i);}handler->handle(cpu);

return GET_INSTANCE_NOT_FOUND;}
return ENUM_INSTANCES_OK;}

}

図5
図4

get instance の記述例

enum instances の記述例Invoke_Method_Status
インスタンスはハンドラに登録することで要求元にCIM_Processor_Provider::Enable(送られる．

const CIM_Processor* self,

get instance 関数にはその CIM クラス中の 1 つconst Property<boolean>& Enabled,のインスタンスを返すように記述する．get instance

Property<uint32>& return_value)の記述例を図 5 に示す．要求されたインスタンスの{//ここに処理を記述持つプロパティの値が引数 model に格納されており，一致するインスタンスが存在する場合にはそのインスタンスを返す．この例では，要求された CPU 番号を持つ CPU が存在すれば対応するインスタンスを返

return INVOKE_METHOD_OK;}
図6

Invoke Method の記述例

している．enum instances や get instance によって対応する CIM クラスが持つインスタンスを返すた

代入する．この時，それぞれを CIM PhysicalElement

めに用いられる CIM プロバイダをインスタンスプロと CIM LogicalDevice にキャストしている．このよバイダと呼ぶ．
図 6 は CIM Processor の Enable メソッドの記述

うに，関連付けを行うために用いられる CIM プロバ
イダを関連プロバイダと呼ぶ．

例である．引数 self で対象となるインスタンスが指定され，Enabled で引数が渡される．この関数の中に

4. 3 開発した CIM プロバイダ

必要な処理を記述し，引数 return value に返り値をこれまでにいくつかの vAMT 用の CIM プロバイ設定することで CIM クラスのメソッドを実現できる．
図 2 の CIM Realizes の CIM プ ロ バ イ ダ にダを作成し，以下の機能を実現した．

• バージョン情報の取得

enum instances 関数を記述する例を図 7 に示す．ま

管理ツールは CIM SoftwareIdentity クラスをず，関連づけを行う CIM Chip と CIM Processor のイ

用いて AMT のバージョンを取得している．そンスタンスをそれぞれ作成し，キープロパティに値をこで，リクエストされた InstanceID プロパティ代入して初期化を行う．次に，CIM Realizes のインの値が “AMT” の場合に vAMT のバージョンをスタンスを作成し，CIM Chip と CIM Processor のイ
ンスタンスをメンバの Antecedent と Dependent に返すようにした．

• 電源の制御

Enum_Instances_Status
CIM_Realizes_Provider::enum_instances(const CIM_Realizes* model,Enum_Instances_Handler<CIM_Realizes>*
handler){
CIM_Chip* chip =CIM_Chip::create(true);chip->Tag.set("CPU 0");

CIM_Processor* cpu =CIM_Processor::create(true);cpu->Number.set(0);図8NAPT による変換ができる．VM の場合は物理的なハードウェアがないため，例えば，製造メーカやモデル名は仮想化ソフトウェアの製造元や種類を取得するようにした．システム情報を取得するために 3 つのイ

CIM_Realizes* link =CIM_Realizes::create(true);link->Antecedent =ンスタンスプロバイダ，CPU 情報を取得するた
めに 3 つのインスタンスプロバイダと 2 つの関連プロバイダをそれぞれ作成した．

cast<CIM_PhysicalElement*>(chip);link->Dependent =cast<CIM_LogicalDevice*>(cpu);

4. 4 vAMT へのアクセス
リモートの管理ツールが AMT にアクセスする時

handler->handle(link);には，AMT が搭載された PC の IP アドレスを指定

return ENUM_INSTANCES_OK;

して接続を行う．同様に，vAMT にアクセスする時には，対応する VM の IP アドレスを指定して接続を}
図7

関連づけの記述例行えるようにすべきである．しかし，vAMT はホスト OS 上で動作しているため，ホスト OS の IP アドvAMT を 用 い て VM の 電 源 制 御 を 行 う にレスを指定しなければアクセスすることができない．

は ，3 つ の CIM ク ラ ス が 用 い ら れ る ．ま ず，また，同一ホスト OS 上で複数の vAMT が動作する

CIM AssociatedPowerManagementService クラため，それらすべてが標準の 16992 番ポートを用い

ス の プ ロ パ ティで あ る PowerState の 値 を 取ることはできない．

得することで，VM の電源状態を調べる．次

そこで，図 8 のようにホスト OS で静的 NAPT のに ，電 源 操 作 を 行 う VM の シ ス テ ム 情 報 を設定を行い，vAMT へのアクセスを転送する．VM

CIM ComputerSystem クラスのインスタンスかの IP アドレスに対する 16992 番ポート宛てのパケッら取得し，CIM PowerManagementService クラトは，ホスト OS の IP アドレスと vAMT が用いる

スの RequestPowerStateChange メソッドによっポート番号に変換する．同様に，VNC 接続についてて，取得した情報を持つ VM の電源操作を行う．

も，VM の 5900 番ポートへのアクセスはホスト OS

VM の電源操作は libvirt [4] を用いて行った．の vAMT のポート番号に変換する．これにより，管• AssetDisplay
AssetDisplay は AMT の SDK に含まれるシステムのハードウェア情報を取得するコマンドであり，オプションで取得する情報を切り替えること

理ツールは AMT と同じアドレス，ポートの指定方
法で vAMT にアクセスすることができる．

フェースを vAMT にも持たせることによって，既存の管理ツールを用いて PC と VM を一元的に管理することができる．OpenPegasus を用いて vAMT のシステムを構築し，CIMPLE を用いて VM を管理するためのいくつかの CIM プロバイダを作成した．既存の AMT 対応の管理ツールから vAMT に対してコマンドを実行して AMT の場合と同様の結果を得る
図9

CPU 情報の取得にかかる時間ことができた．これにより，vAMT を用いて VM の管理を行えることを確認した．
今後の課題は，AMT の基本機能の中の保護機能を5 実験実現できるようにすることである．そのためにまず，

AMT SDK の AssetDisplay を AMT と vAMT にネットワークの設定を行うのに必要な CIM プロバイ対して実行した．CPU 情報を取得する場合，3 種類

ダを実装して，管理者側からリモートでパケットフィのインスタンスプロバイダと 2 種類の関連プロバイルタリングを行えるようにする．

ダが使用される．実行の結果，AMT と同じように謝辞 本研究の一部は，科学技術振興機構 戦略的創

vAMT から CPU 情報を取得することができた．

造研究推進事業 (CREST) 研究領域「実用化を目指し次に，CPU 情報を取得するのにかかる時間を比較した．図 9 に測定結果を示す．通常の AMT ではリた組み込みシステム用ディペンダブル・オペレーティ
ングシステム」による．

クエストを送り始めてから情報を取得し終えるまでに 1370ms かかったのに対して，vAMT では 389ms

参 考 文 献しかかからなかった．これは vAMT を搭載している[ 1 ] DMTF: System Management BIOS （SMBIOS）
Reference Specification Version 2.7.1. 2011.
[ 2 ] DMTF: Web Services for Management (WSManagement) Specification Version 1.1.1. 2012.
[ 3 ] DMTF: Common Information Model (CIM) Infrastructure Version 2.7.0. 2012.
[ 4 ] Red Hat: libvirt, http://libvirt.org/.
[ 5 ] Schopmeyer, K and Brasher, M.: CIMPLE,
http://simplewbem.org/.
[ 6 ] The Open Group: OpenPegasus, http://www.
openpegasus.org/.

PC 本体の CPU に比べて AMT の性能が低いためと考えられる．

6 まとめ
本論文では，VM を管理するための仮想的な AMTである vAMT を提案した．AMT と同様のインタ