2016-05-24 16:41:15 +08:00
|
|
|
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.
|
2017-03-10 20:40:07 +08:00
|
|
|
While running in regular mode, use any of the keys listed in section
|
|
|
|
'Interactive Commands' below.
|
|
|
|
Use batch and logging modes for scripting purposes.
|
2016-05-24 16:41:15 +08:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2017-03-10 20:40:07 +08:00
|
|
|
INTERACTIVE COMMANDS
|
|
|
|
--------------------
|
|
|
|
[horizontal]
|
2017-06-26 03:34:16 +08:00
|
|
|
*b*:: toggle events by guests (debugfs only, honors filters)
|
|
|
|
|
2017-03-10 20:40:14 +08:00
|
|
|
*c*:: clear filter
|
|
|
|
|
2017-03-10 20:40:07 +08:00
|
|
|
*f*:: filter by regular expression
|
2019-04-21 21:26:24 +08:00
|
|
|
:: *Note*: Child events pull in their parents, and parents' stats summarize
|
|
|
|
all child events, not just the filtered ones
|
2017-03-10 20:40:07 +08:00
|
|
|
|
2018-02-22 19:16:27 +08:00
|
|
|
*g*:: filter by guest name/PID
|
2017-03-10 20:40:13 +08:00
|
|
|
|
2017-06-08 03:08:38 +08:00
|
|
|
*h*:: display interactive commands reference
|
|
|
|
|
2017-06-08 03:08:41 +08:00
|
|
|
*o*:: toggle sorting order (Total vs CurAvg/s)
|
|
|
|
|
2018-02-22 19:16:27 +08:00
|
|
|
*p*:: filter by guest name/PID
|
2017-03-10 20:40:07 +08:00
|
|
|
|
|
|
|
*q*:: quit
|
|
|
|
|
2017-03-10 20:40:15 +08:00
|
|
|
*r*:: reset stats
|
|
|
|
|
2020-03-06 19:42:44 +08:00
|
|
|
*s*:: set delay between refreshs
|
2017-06-08 03:08:39 +08:00
|
|
|
|
2017-03-10 20:40:07 +08:00
|
|
|
*x*:: toggle reporting of stats for child trace events
|
2017-12-11 19:25:23 +08:00
|
|
|
:: *Note*: The stats for the parents summarize the respective child trace
|
|
|
|
events
|
2017-03-10 20:40:07 +08:00
|
|
|
|
|
|
|
Press any other key to refresh statistics immediately.
|
|
|
|
|
2016-05-24 16:41:15 +08:00
|
|
|
OPTIONS
|
|
|
|
-------
|
|
|
|
-1::
|
|
|
|
--once::
|
|
|
|
--batch::
|
|
|
|
run in batch mode for one second
|
|
|
|
|
2020-03-06 19:42:47 +08:00
|
|
|
-c::
|
tools/kvm_stat: Add command line switch '-L' to log to file
To integrate with logrotate, we have a signal handler that will re-open
the logfile.
Assuming we have a systemd unit file with
ExecStart=kvm_stat -dtc -s 10 -L /var/log/kvm_stat.csv
ExecReload=/bin/kill -HUP $MAINPID
and a logrotate config featuring
postrotate
/bin/systemctl reload kvm_stat.service
endscript
Then the overall flow will look like this:
(1) systemd starts kvm_stat, logging to A.
(2) At some point, logrotate runs, moving A to B.
kvm_stat continues to write to B at this point.
(3) After rotating, logrotate restarts the kvm_stat unit via systemctl.
(4) The kvm_stat unit sends a SIGHUP to kvm_stat, finally making it
switch over to writing to A again.
Note that in order to keep the structure of the cvs output in tact, we
make sure to, in contrast to the standard log format, only write the
header once at the beginning of a file. This implies that the header is
suppressed when appending to an existing file. Unlike with the standard
format, where we append to an existing file by starting out with a
header.
Signed-off-by: Stefan Raspl <raspl@de.ibm.com>
Message-Id: <20200402085705.61155-3-raspl@linux.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-04-02 16:57:04 +08:00
|
|
|
--csv::
|
|
|
|
log in csv format. Requires option -l/--log or -L/--log-to-file.
|
|
|
|
When used with option -L/--log-to-file, the header is only ever
|
|
|
|
written to start of file to preserve the format.
|
2020-03-06 19:42:47 +08:00
|
|
|
|
2016-05-24 16:41:15 +08:00
|
|
|
-d::
|
|
|
|
--debugfs::
|
|
|
|
retrieve statistics from debugfs
|
|
|
|
|
2020-03-06 19:42:44 +08:00
|
|
|
-f<fields>::
|
|
|
|
--fields=<fields>::
|
|
|
|
fields to display (regex), "-f help" for a list of available events
|
|
|
|
|
|
|
|
-g<guest>::
|
|
|
|
--guest=<guest_name>::
|
|
|
|
limit statistics to one virtual machine (guest name)
|
|
|
|
|
|
|
|
-h::
|
|
|
|
--help::
|
|
|
|
show help message
|
|
|
|
|
2017-06-26 03:34:15 +08:00
|
|
|
-i::
|
|
|
|
--debugfs-include-past::
|
|
|
|
include all available data on past events for debugfs
|
|
|
|
|
2020-03-06 19:42:44 +08:00
|
|
|
-l::
|
|
|
|
--log::
|
|
|
|
run in logging mode (like vmstat)
|
|
|
|
|
tools/kvm_stat: Add command line switch '-L' to log to file
To integrate with logrotate, we have a signal handler that will re-open
the logfile.
Assuming we have a systemd unit file with
ExecStart=kvm_stat -dtc -s 10 -L /var/log/kvm_stat.csv
ExecReload=/bin/kill -HUP $MAINPID
and a logrotate config featuring
postrotate
/bin/systemctl reload kvm_stat.service
endscript
Then the overall flow will look like this:
(1) systemd starts kvm_stat, logging to A.
(2) At some point, logrotate runs, moving A to B.
kvm_stat continues to write to B at this point.
(3) After rotating, logrotate restarts the kvm_stat unit via systemctl.
(4) The kvm_stat unit sends a SIGHUP to kvm_stat, finally making it
switch over to writing to A again.
Note that in order to keep the structure of the cvs output in tact, we
make sure to, in contrast to the standard log format, only write the
header once at the beginning of a file. This implies that the header is
suppressed when appending to an existing file. Unlike with the standard
format, where we append to an existing file by starting out with a
header.
Signed-off-by: Stefan Raspl <raspl@de.ibm.com>
Message-Id: <20200402085705.61155-3-raspl@linux.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2020-04-02 16:57:04 +08:00
|
|
|
|
|
|
|
-L<file>::
|
|
|
|
--log-to-file=<file>::
|
|
|
|
like -l/--log, but logging to a file. Appends to existing files.
|
|
|
|
|
2016-05-18 19:26:24 +08:00
|
|
|
-p<pid>::
|
|
|
|
--pid=<pid>::
|
|
|
|
limit statistics to one virtual machine (pid)
|
|
|
|
|
2020-03-06 19:42:46 +08:00
|
|
|
-s::
|
|
|
|
--set-delay::
|
|
|
|
set delay between refreshs (value range: 0.1-25.5 secs)
|
|
|
|
|
2020-03-06 19:42:44 +08:00
|
|
|
-t::
|
|
|
|
--tracepoints::
|
|
|
|
retrieve statistics from tracepoints
|
2016-05-24 16:41:15 +08:00
|
|
|
|
2020-04-02 16:57:03 +08:00
|
|
|
*z*::
|
|
|
|
--skip-zero-records::
|
|
|
|
omit records with all zeros in logging mode
|
|
|
|
|
2016-05-24 16:41:15 +08:00
|
|
|
SEE ALSO
|
|
|
|
--------
|
|
|
|
'perf'(1), 'trace-cmd'(1)
|
|
|
|
|
|
|
|
AUTHOR
|
|
|
|
------
|
|
|
|
Stefan Hajnoczi <stefanha@redhat.com>
|