mazinlabsのブログ

RubyとかCloudとかその辺の記事を書いたり書かなかったり

libvirtのvirDomainMemoryStatsが使えない

XえんやKVMなどの仮想マシン用のAPIを提供しているlibvirtに現在仮想マシンが内部で実際に利用しているメモリの値を取得するvirDomainMemoryStatsという関数がある。


実装はlibvirt 0.7.5からされているようなので使えると思って試してみることに。
Ubuntuにデフォルトで入っていたlibvirt 0.8.3を使って実験。


とりあえず関係ありそうな環境は以下のとおり


まずはvirshを確認する。

% virsh help | grep memstat
    dommemstat      get memory statistics for a domain
% virsh list
 Id 名前               状態
                                                                  • -
1 Ubuntu 実行中 % virsh dommemstat 1 %

空行が表示された・・・


続いてRubyでやってみるためにirbを起動。

require 'rubygems'
require 'libvirt'

conn = Libvirt::open("qemu:///system")
dom = conn.lookup_domain_by_id(1)
dom.public_methods.grep(/mem/)
=> ["max_memory", "max_memory=", "memory="]

そもそもメソッドがねえorz


次の手段としてCも考えたけどlibvirtならpythonだろうというよくわからない考えの元pythonに手を出す。

import libvirt

conn = libvirt.open("qemu:///system")
for domID in conn.listDomainsID():
    dom = conn.lookupByID(domID)
    print dom.memoryStats()

結果

{}

メソッドあるのに値がとれないorz


ちなみに関連の有りそうなページは以下のとおり