Understanding CPU and memory usage in Bhyve
Roman Bogorodskiy
novel at FreeBSD.org
Thu Apr 24 16:09:01 UTC 2014
Peter Grehan wrote:
> 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).
Thanks for the clarification, it's very helpful. However, I need some
more help with that.
I'm trying to implement some domain stats reporting for the bhyve driver
in libvirt and it looks like I choose a wrong approach initially.
It's described here:
https://www.redhat.com/archives/libvir-list/2014-April/msg00912.html
But the summary is: is there a way to figure out how much CPU time
bhyve and the guest spends on host CPUs N (N = 0, 1, ...)?
> > 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.
Looking forward to that.
> > 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 0x0000000000000000/3221225472
> highmem 0x0000000100000000/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.
>
Thanks,
Roman Bogorodskiy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-virtualization/attachments/20140424/7a43e882/attachment.sig>
More information about the freebsd-virtualization
mailing list