kvm_stat(1)
===========

NAME
----
kvm_stat - Report KVM kernel module event counters

SYNOPSIS
--------
[verse]
'kvm_stat' [OPTION]...

DESCRIPTION
-----------
kvm_stat prints counts of KVM kernel module trace events.  These events signify
state transitions such as guest mode entry and exit.

This tool is useful for observing guest behavior from the host perspective.
Often conclusions about performance or buggy behavior can be drawn from the
output.
While running in regular mode, use any of the keys listed in section
'Interactive Commands' below.
Use batch and logging modes for scripting purposes.

The set of KVM kernel module trace events may be specific to the kernel version
or architecture.  It is best to check the KVM kernel module source code for the
meaning of events.

INTERACTIVE COMMANDS
--------------------
[horizontal]
*c*::	clear filter

*f*::	filter by regular expression

*g*::	filter by guest name

*p*::	filter by PID

*q*::	quit

*r*::	reset stats

*x*::	toggle reporting of stats for child trace events

Press any other key to refresh statistics immediately.

OPTIONS
-------
-1::
--once::
--batch::
	run in batch mode for one second

-l::
--log::
	run in logging mode (like vmstat)

-t::
--tracepoints::
	retrieve statistics from tracepoints

-d::
--debugfs::
	retrieve statistics from debugfs

-p<pid>::
--pid=<pid>::
	limit statistics to one virtual machine (pid)

-g<guest>::
--guest=<guest_name>::
	limit statistics to one virtual machine (guest name)

-f<fields>::
--fields=<fields>::
	fields to display (regex)

-h::
--help::
	show help message

SEE ALSO
--------
'perf'(1), 'trace-cmd'(1)

AUTHOR
------
Stefan Hajnoczi <stefanha@redhat.com>
