search
LoginSignup
0

More than 5 years have passed since last update.

posted at

updated at

BitVisor tools/logの使い方

もうみなさんご存知かも知れませんが、BitVisorのtools/logの使い方の紹介です。

tools/logとは

このディレクトリには、BitVisorのログをLinuxのログに出すためのカーネルモジュールのソースコードが入っています。

BitVisorのログを見る手っ取り早い方法としてはtools/dbgshがありますが、インタラクティブなインターフェイスでprintfデバッグのログを観察するには不便なところがあります。tools/logでは、Linuxカーネルのタイマー機能を用いて自動的にログをポーリングして出してくれて、しかもたいていのGNU/Linuxディストリビューションでは最初からカーネルログがファイルに書き込まれる設定になっているので、ファイルにも残って便利というわけです。

BitVisor側の設定

make configでLOG_TO_GUESTを有効にしましょう。

$ make config

本機能はdbgshとは異なり、特権レベル0からしか制御できないようになっていますので、一般ユーザーからどうこうできるようなものではありませんが、デフォルトではオフになっています。

カーネルモジュールのビルド

tools/logディレクトリでmakeコマンドを実行すると、現在動作中のカーネルソースあるいはヘッダーを用いてカーネルモジュールがビルドされます。

$ make -C tools/log

Debian GNU/Linuxをお使いであればlinux-headers-amd64などの必要なパッケージをインストールしておきましょう。別のカーネルソースを利用する場合は、そのディレクトリに移動して、make SUBDIRS=/path/to/tools/log modulesという風にしてビルドします。

カーネルモジュールのロード

BitVisor上でGNU/Linuxを起動したら、tools/logディレクトリでmake loadコマンドを実行すると、カーネルモジュールがロードされます。

# make -C tools/log load

余談ですが、GNU Make 4.0からはload directiveというものが追加されたため、以下のMakefileの記述はload directiveに:という引数を与えたと解釈されてしまい、エラーになります:

load :

これの対策のため現在は以下のようにスペースを除いた記述となっています:

load:

なお、GNU Makeのinfoを見ても:の前後にスペースを入れるのは普通のことであるようですし、他のmakeコマンドの実装ではload directiveなどというものは存在しないので、こんな回避策を入れなければならないのは奇妙な話ではあります。loadというファイルをターゲットにすることはありそうですが、:なんてファイル名を使うことはまず考えられないので、GNU Make側でうまく解釈してくれよ、という感じがします。

ログの確認

カーネルモジュールをロードしたらログが出るようになっています。試しにdbgshで以下のように"free"宛にmsgsendintします:

$ ~/dbgsh
> sendint 
sendint> free
send 0 to free
sendint>
> exit

これはBitVisor内の空きメモリーの容量を出力するものです。以下のように出力されていることが確認できます:

$ dmesg|tail -1
[  438.934984] VMM: 2663 pages (10652 KiB) free

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0