You are not logged in.

#1 2017-07-18 19:56:08

ShadowLim
Member
Registered: 2017-07-18
Posts: 2

[libvirt] cannot get all memory stats for domain

Hello everyone.
I'm experiencing some problems with virtual machine (guest windows 7, x86_64), running under qemu-kvm and managed by libvirt (created and ran mostly from virt-manager). The problem is that I cannot get full memory statistics either from running

virsh -c qemu:///system dommemstat win7

or by calling the

virDomainMemoryStats(...)

from c++ code (which is, as far as I understood, more or less same things). I also tested libvirt 35th example from libvirt aplication dev guide. This really concerns me, because right now I am working under project, aimed to auto-set the optimal size of memory for vm and hence I need them in my code.
The only output I get from the virsh is

actual 4194304
last_update 1500404513
rss 4161676

After searching the web I found out that these are the stats, which libvirt can obtain without applying to ballooning driver. However I already installed VirtIO ballooning driver in windows and the system claims that it is running. I don't really know, how to find out whether the qemu is aware of it or not (opened for your ideas).
Also I found that I need to set statistics period in the system xml, which I already did and which gave nothing. I also found out that qemu uses some "qom-get" script to actually measure stats, but I cannot use it from

virsh # qemu-monitor-command 1 --hmp "qom-get"

(outputs that command is unknown) and I cannot see it in my PATH. Also

pacman -Fo qom-get

and

pkgfile qom-get

give nothing.
My host system is Arch Linux. The contents of the win7.xml are

<domain type='kvm'>
  <name>win7</name>
  <uuid>438145c1-a2df-4c86-96d6-2bf7b379d70b</uuid>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static' current='2'>4</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Broadwell-noTSX</model>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/sbin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/win7.qcow2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/usr/share/virtio/virtio-win.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:9d:4e:85'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <stats period='10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
</domain>

I am definitely missing something, but I cannot see what. Could anyone, please, give me any useful links or guides? I would really appreciate it.
I think that I am going to send duplicate of this issue to Stack Overflow. If anyone will give the appropriate answer, I will share it with the other site.
================================================

UPD. balloon is working: I can do such things as

virsh # qemu-monitor-command win7 --hmp "info balloon"
balloon: actual=4096
virsh # qemu-monitor-command win7 --hmp "balloon 2048"
virsh # qemu-monitor-command win7 --hmp "info balloon"
balloon: actual=2048

But the qom-get won't do:

virsh # qemu-monitor-command windows7 '{ "execute": "qom-get",  "arguments": { "path": "/machine/peripheral/balloon0",  "property": "guest-stats" } }'
{"return":{"stats":{"stat-swap-out":-1,"stat-available-memory":-1,"stat-free-memory":-1,"stat-minor-faults":-1,"stat-major-faults":-1,"stat-total-memory":-1,"stat-swap-in":-1},"last-update":1500639136},"id":"libvirt-396"}

Help would be much appreciated.

Last edited by ShadowLim (2017-07-21 12:28:15)

Offline

#2 2017-07-25 11:25:52

ShadowLim
Member
Registered: 2017-07-18
Posts: 2

Re: [libvirt] cannot get all memory stats for domain

The problem was that the Balloon service wasn't installed properly. If you face same problem, possible solution will be to open command line, go to the CD-ROM with VirtIO drivers, go to Balloon directory and deeper, depending on your system and architecture. When you are in amd64 (x86) directory, type

blnsrv.exe -i

and the service should install itself. After that the problem will be gone (at least, this worked for me).

Offline

Board footer

Powered by FluxBB