BitVisor
BitVisorDay 10

BitVisorのvmmstatusの使い方

More than 1 year has passed since last update.

BitVisorのtools/vmmstatus-gtkおよびtools/vmmstatus-win32の使い方を紹介します。

vmmstatusとは

VMMの状況を出力するツールです。

VMM側設定

make configでCONFIG_STATUSをセットします。

$ make config

また、defconfigまたはbitvisor.confにて、vmm.status=1にします。

tools/vmmstatus-gtkのビルド方法

gtk+2.0を使用していますので、必要なライブラリなどは事前にインストールしておきます。カレントディレクトリを移動して、./autogen.sh && makeで完了です。src/vmmstatus-gtkというファイルができます。

tools/vmmstatus-win32のビルド方法

MinGWクロスコンパイラーを事前にインストールしておきます。カレントディレクトリを移動してmakeで完了です。vmmstatus.exeというファイルができます。

Makefileはコマンド等がUnix環境のGNU Make用になっていますので、Windowsで使用される場合は必要に応じて修正してください。

出力内容の追加方法

coreディレクトリにあるソースコードにおいて、

#include "vmmcall_status.h"

としておいて、register_status_callback()関数にchar *(*func) (void)型の関数ポインターを渡して登録することができます。登録すると、vmmstatusのVMM呼び出しが来た時に、その関数ポインターの関数が呼び出されます。登録されている関数がすべて呼び出された後、返されたchar *型のポインターが指すUS ASCIIテキストが連結されて、vmmstatusのコマンドに返される仕組みになっています。通常staticの配列を返すように実装します。最後に'\n'を入れておきます。

本機能は、オーバーヘッドを調べたり、性能改善をしたりする際に、各処理の呼び出し回数などを数えて、それを定期的に取得して変化を見るのが目的です。そのような回数カウントは、複数の論理プロセッサから同時に実行される場所においては、asm_lock_incl()関数を使用するなどして、値が壊れないよう注意深く実装するのが普通です。これは、lock命令を使用するため性能に影響し、本機能を使用しない場合には消しておきたいものです。そのために、STATUS_UPDATEというマクロが用意されており、このマクロの引数に渡された文は、CONFIG_STATUSがセットされている場合にのみ展開されるようになっています。