Understanding CPU and memory usage in Bhyve

2014-04-21 Thread Roman Bogorodskiy
Hi,

I'm trying to understand how to obtain resource usage information for a
bhyve guest.

For the CPU, there's some info provided by bhyvectl, e.g.:

/usr/sbin/bhyvectl --vm=bhyve --get-stats --cpu=1

in the field 'vcpu total runtime', for example:

vcpu total runtime  8178870653

Two question about that:

 1. What are the units used here? Looks like it's ticks, so if I want to
 convert this number, to, say, nanoseconds, would it be right to do
 something like:

 X * 1000**3 / kern.clockrate.stathz 

 (X beeing the value returned by bhyvectl and kern.clockrate is a
 sysctl name)?

 2. This value shows only vcpu time, without hypervisor time?

For the memory stats, it's less obvious. Does guest always use an amount
of memory specified at startup with '-m' (i.e. bhyve -m 1G) or it could
use less?

What is the format of bhyvectl --get-{low,high}mem output?

PS I found it a little confusing that bhyvectl displays vcpu0 stats by
default if --cpu is not provided, expected it provide info of all vcpus
in the guest by default. Also, didn't find a way to get a number of
vcpus in a running guest.

Roman Bogorodskiy


pgpdf09dm2nHF.pgp
Description: PGP signature


Re: Understanding CPU and memory usage in Bhyve

2014-04-21 Thread Peter Grehan

Hi Roman,


For the CPU, there's some info provided by bhyvectl, e.g.:

/usr/sbin/bhyvectl --vm=bhyve --get-stats --cpu=1

in the field 'vcpu total runtime', for example:

vcpu total runtime  8178870653

Two question about that:

  1. What are the units used here? Looks like it's ticks, so if I want to
  convert this number, to, say, nanoseconds, would it be right to do
  something like:

  X * 1000**3 / kern.clockrate.stathz

  (X beeing the value returned by bhyvectl and kern.clockrate is a
  sysctl name)?


 It's in TSC units so you can convert to nsecs using the 
machdep.tsc_freq sysctl node.



  2. This value shows only vcpu time, without hypervisor time?


 That's correct. To get the hypervisor and vCPU time together, you can 
use existing CPU usage reporting (e.g. that used by top et al).



For the memory stats, it's less obvious. Does guest always use an amount
of memory specified at startup with '-m' (i.e. bhyve -m 1G) or it could
use less?


 That's the maximum it can use. We currently don't expose the incore 
amount from the vmspace representing the guest's physical - that should 
be added to bhyvectl soon.



What is the format of bhyvectl --get-{low,high}mem output?


 The number reported there isn't to do with guest usage, but how the 
memory is divided between  4G and above 4G. For example, the default 
for bhyve is to use up to 3G below 4G, provide 1GB for PCI MMIO decode, 
and then put the remainder of guest memory above 4G. Here's an example 
for an 8G VM, with 3G of guest mem below 4G (starting address 0), and 5G 
above 4G (starting address 4G):


lowmem  0x/3221225472
highmem 0x0001/5368709120


PS I found it a little confusing that bhyvectl displays vcpu0 stats by
default if --cpu is not provided, expected it provide info of all vcpus
in the guest by default.


 Yes, that's a relic of the days when there was only a single vCPU 
supported :(



Also, didn't find a way to get a number of vcpus in a running guest.


 Until the vCPU state is exposed by bhyvectl, or we provide a sysctl, 
you can use heuristics: the number of vCPU threads for the bhyve 
process, or scan all vCPUs and only count those that have a non-zero RIP.


later,

Peter.

___
freebsd-virtualization@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
freebsd-virtualization-unsubscr...@freebsd.org