In this post, I’ll teach you how to gather all the available Virtual Machine information from Dom0, and on later posts, I’ll teach you how to do something useful with it. In this case the available commands are used to get information from the Xen hypervisor, without the need to install specific daemons inside each virtual machine. Some of the commands might be used without Xen. All commands were tested under Debian Testing x64.
//
In this approach, we’ll try to gather as much information as needed from the DomU Virtual Machines without the need to install a daemon inside them. In this case, all we have to do is to obtain external information by examining Dom0’s events. There are some existing applications to help us in this approach, as we will see through this chapter.
Network Information
To gather the available network information, we must know that all the virtual machine’s network interconnections are based on the creation of “virtual bridges” inside Dom0. In this way, we can just monitor some stats inside domain 0 and monitor the output of /proc/net/dev in order to know what’s happening inside each virtual connection.
Example of information obtained (cat /proc/net/dev):
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:11057561497 29704758 0 0 0 0 0 0 11057561497 29704758 0 0 0 0 0 0
peth0:11571633325 32617843 39 76 0 20 0 1371334 188033813708 141820549 0 0 0 0 0 0
eth0:8135468250 22099821 0 0 0 0 0 3878810 50425653969 49284734 0 0 0 0 0 0
xenbr1:69518661167 38933555 0 0 0 0 0 16 946684071 9312595 0 0 0 0 0 0
xenbr2:1451764730 3177266 0 0 0 0 0 53007 25266007984 16786057 0 0 0 0 0 0
xenbr3:131143810 1161664 0 0 0 0 0 36999 17574585288 11619502 0 0 0 0 0 0
vif57.0: 19980 50 0 0 0 0 0 0 25691555 17010 0 7 0 0 0 0
vif63.0:156382479 133845 0 0 0 0 0 0 122291227 527508 0 17 0 0 0 0
vif63.1:1114455320 1222978 0 0 0 0 0 0 4858388654 3253890 0 2 0 0 0 0
Receive:
Bytes received
Number of received packets
Number of dropped packets
Transmit:
System Information (General)
Xm dmesg
Equivalent to Linux dmesg.
Usage:
xm dmesg
XenTop
The xentop command gives an general view of what’s happening on Dom0, and on each other virtual machines.
Example (xentop -i 1 -b)
NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR SSID
Domain-0 -----r 75742 0.0 1370112 66.2 no limit n/a 2 4 0 0 0 0 0 0 2149627072
xenvm.pendotiba.gta.ufrj.br --b--- 54 0.0 131072 6.3 131072 6.3 2 1 19 25089 2 0 2782 3426 2149627072
xenvm.varzeadasmocas.gta.ufrj.br --b--- 1000 0.0 131072 6.3 131072 6.3 2 2 1241054 4863993 2 0 15680 60743 2149627072
Name of the virtual machine
Current state of the virtual machine ( r- running; b- blocked; p- paused; s- shutdown; c- crashed; d- dying)
Average CPU use.
Used memory in kb
Percentage of used memory
Max memory avaiable
Percentage of used memory
Number of virtual CPUs allocated to the machine
Number of network interfaces
VMstat
VMstat is a program that allows gathering of some system information.
command:
jacarepagua:/etc/xen-tools/role.d# xm info
returns:
host : jacarepagua
release : 2.6.26-2-xen-amd64
version : #1 SMP Fri Mar 27 07:12:15 UTC 2009
machine : x86_64
nr_cpus : 2
nr_nodes : 1
cores_per_socket : 2
threads_per_core : 1
cpu_mhz : 2397
hw_caps : bfebfbff:20100800:00000000:00000140:0000e3bd:00000000:00000001
total_memory : 2021
free_memory : 384
node_to_cpu : node0:0-1
xen_major : 3
xen_minor : 2
xen_extra : -1
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler : credit
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset : unavailable
cc_compiler : gcc version 4.3.1 (Debian 4.3.1-2)
cc_compile_by : waldi
cc_compile_domain : debian.org
cc_compile_date : Sat Jun 28 09:32:18 UTC 2008
xend_config_format : 4
Some explanations:
A vector showing what hardware capabilities are supported by your processor. This is equivalent to, though more cryptic, the flags field in /proc/cpuinfo on a normal Linux machine.
Available memory (in MB ) not allocated to Xen, or any other Domains.
The xen version, architecture. Architecture values can be one of: x86_32, x86_32p (i.e. PAE enabled), x86_64, ia64. xen_changeset The xen mercurial changeset id. Very useful for determining exactly what version of code your Xen system was built from.
Example ( vmstat -S M #used in megabytes… might be K or k):
Command:
jacarepagua:/etc/xen-tools/role.d# vmstat -S M #megabytes
returns:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 51 20 105 119 0 0 6 13 7 7 0 0 99 0
r: The number of processes waiting for run time.
b: The number of processes in uninterpretable sleep.
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
System Information (Processor)
Usage:
jacarepagua:/etc/xen-tools/role.d# iostat -c
returns:
Linux 2.6.26-2-xen-amd64 (jacarepagua) 07/10/2009 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.43 0.00 0.22 0.09 0.04 99.22
ps. CPU Utilization Report The first report generated by the iostat command is the CPU Utilization Report. For multiprocessor systems, the CPU values are global averages among all processors. The report has the following format:
Show the percentage of CPU utilization that occurred while executing at the user level (application).
Show the percentage of CPU utilization that occurred while executing at the user level with nice priority.
Show the percentage of CPU utilization that occurred while executing at the system level (kernel).
Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.
Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.
System Information (Disk)
Example (vmstat -d):
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 948812 257177 38732699 5055948 2231588 7198104 75491800 101776092 0 5059
sdb 356 2589 8330 2296 119 42 1264 124 0 1
Reads:
Total reads completed successfully
grouped reads (resulting in one I/O)
Sectors read successfully
milliseconds spent reading
Writes:
Total writes completed successfully
grouped writes (resulting in one I/O)
Sectors written successfully
milliseconds spent writing
IO:
I/O in progress
seconds spent for I/O
System Information (Disk I/O)
Only Total per disk:
jacarepagua:/etc/xen-tools/role.d# iostat -d
Linux 2.6.26-2-xen-amd64 (jacarepagua) 07/10/2009 _x86_64_ (2 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.53 18.57 36.21 38801171 75636160
sdb 0.00 0.00 0.00 8330 1264
Per partition:
jacarepagua:/etc/xen-tools/role.d# iostat -p -d
Linux 2.6.26-2-xen-amd64 (jacarepagua) 07/10/2009 _x86_64_ (2 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.53 18.57 36.21 38801171 75638944
sda1 1.18 10.69 19.80 22328339 41363880
sda2 0.02 0.53 0.53 1106774 1105528
sda3 0.33 7.35 15.88 15365434 33169536
sdb 0.00 0.00 0.00 8330 1264
sdb1 0.00 0.00 0.00 7474 1264
More detailed info:
jacarepagua:/etc/xen-tools/role.d# iostat -p -x
Linux 2.6.26-2-xen-amd64 (jacarepagua) 07/10/2009 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.43 0.00 0.22 0.09 0.04 99.22
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.12 3.45 0.46 1.07 18.57 36.20 35.88 0.05 33.57 1.59 0.24
sda1 0.06 1.63 0.33 0.85 10.69 19.80 25.94 0.02 21.02 1.64 0.19
sda2 0.05 0.06 0.02 0.00 0.53 0.53 50.09 0.00 36.04 3.97 0.01
sda3 0.02 1.76 0.11 0.22 7.35 15.88 70.38 0.03 78.10 2.04 0.07
sdb 0.00 0.00 0.00 0.00 0.00 0.00 20.20 0.00 5.09 3.70 0.00
sdb1 0.00 0.00 0.00 0.00 0.00 0.00 21.00 0.00 4.27 3.02 0.00
Indicate the number of transfers per second that were issued to the device. A transfer is an I/O request to the device. Multiple logical requests can be combined into a single I/O request to the device. A transfer is of indeterminate size.
Indicate the amount of data read from the device expressed in a number of blocks per second. Blocks are equivalent to sectors with 2.4 kernels and newer and therefore have a size of 512 bytes. With older kernels, a block is of indeterminate size.
Indicate the amount of data written to the device expressed in a number of blocks per second.
The total number of blocks read.
The total number of blocks written.
Indicate the amount of data read from the device expressed in kilobytes per second.
Indicate the amount of data written to the device expressed in kilobytes per second.
The total number of kilobytes read.
The total number of kilobytes written.
Indicate the amount of data read from the device expressed in megabytes per second.
Indicate the amount of data written to the device expressed in megabytes per second.
The total number of megabytes read.
The total number of megabytes written.
The number of read requests merged per second that were queued to the device.
The number of write requests merged per second that were queued to the device.
The number of read requests that were issued to the device per second.
The number of write requests that were issued to the device per second.
The number of sectors read from the device per second.
The number of sectors written to the device per second.
The number of kilobytes read from the device per second.
The number of kilobytes written to the device per second.
The number of megabytes read from the device per second.
The number of megabytes written to the device per second.
The average size (in sectors) of the requests that were issued to the device.
The average queue length of the requests that were issued to the device.
The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
The average service time (in milliseconds) for I/O requests that were issued to the device.
Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.
Some References
http://linux.die.net
http://www.debianhelp.co.uk/resources.htm