mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 02:34:01 +08:00
bcf6edcd6f
Add 'perf kvm stat' support to analyze kvm vmexit/mmio/ioport smartly Usage: - kvm stat run a command and gather performance counter statistics, it is the alias of perf stat - trace kvm events: perf kvm stat record, or, if other tracepoints are interesting as well, we can append the events like this: perf kvm stat record -e timer:* -a If many guests are running, we can track the specified guest by using -p or --pid, -a is used to track events generated by all guests. - show the result: perf kvm stat report The output example is following: 13005 13059 total 2 guests are running on the host Then, track the guest whose pid is 13059: ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.253 MB perf.data.guest (~11065 samples) ] See the vmexit events: Analyze events for all VCPUs: VM-EXIT Samples Samples% Time% Avg time APIC_ACCESS 460 70.55% 0.01% 22.44us ( +- 1.75% ) HLT 93 14.26% 99.98% 832077.26us ( +- 10.42% ) EXTERNAL_INTERRUPT 64 9.82% 0.00% 35.35us ( +- 14.21% ) PENDING_INTERRUPT 24 3.68% 0.00% 9.29us ( +- 31.39% ) CR_ACCESS 7 1.07% 0.00% 8.12us ( +- 5.76% ) IO_INSTRUCTION 3 0.46% 0.00% 18.00us ( +- 11.79% ) EXCEPTION_NMI 1 0.15% 0.00% 5.83us ( +- -nan% ) Total Samples:652, Total events handled time:77396109.80us. See the mmio events: Analyze events for all VCPUs: MMIO Access Samples Samples% Time% Avg time 0xfee00380:W 387 84.31% 79.28% 8.29us ( +- 3.32% ) 0xfee00300:W 24 5.23% 9.96% 16.79us ( +- 1.97% ) 0xfee00300:R 24 5.23% 7.83% 13.20us ( +- 3.00% ) 0xfee00310:W 24 5.23% 2.93% 4.94us ( +- 3.84% ) Total Samples:459, Total events handled time:4044.59us. See the ioport event: Analyze events for all VCPUs: IO Port Access Samples Samples% Time% Avg time 0xc050:POUT 3 100.00% 100.00% 13.75us ( +- 10.83% ) Total Samples:3, Total events handled time:41.26us. And, --vcpu is used to track the specified vcpu and --key is used to sort the result: Analyze events for VCPU 0: VM-EXIT Samples Samples% Time% Avg time HLT 27 13.85% 99.97% 405790.24us ( +- 12.70% ) EXTERNAL_INTERRUPT 13 6.67% 0.00% 27.94us ( +- 22.26% ) APIC_ACCESS 146 74.87% 0.03% 21.69us ( +- 2.91% ) IO_INSTRUCTION 2 1.03% 0.00% 17.77us ( +- 20.56% ) CR_ACCESS 2 1.03% 0.00% 8.55us ( +- 6.47% ) PENDING_INTERRUPT 5 2.56% 0.00% 6.27us ( +- 3.94% ) Total Samples:195, Total events handled time:10959950.90us. Signed-off-by: Dong Hao <haodong@linux.vnet.ibm.com> Signed-off-by: Runzhen Wang <runzhen@linux.vnet.ibm.com> [ Dong Hao <haodong@linux.vnet.ibm.com> Runzhen Wang <runzhen@linux.vnet.ibm.com>: - rebase it on current acme's tree - fix the compiling-error on i386 ] Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> Acked-by: David Ahern <dsahern@gmail.com> Cc: Avi Kivity <avi@redhat.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: kvm@vger.kernel.org Cc: Runzhen Wang <runzhen@linux.vnet.ibm.com> Link: http://lkml.kernel.org/r/1347870675-31495-4-git-send-email-haodong@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
101 lines
3.5 KiB
Plaintext
101 lines
3.5 KiB
Plaintext
perf-kvm(1)
|
|
===========
|
|
|
|
NAME
|
|
----
|
|
perf-kvm - Tool to trace/measure kvm guest os
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'perf kvm' [--host] [--guest] [--guestmount=<path>
|
|
[--guestkallsyms=<path> --guestmodules=<path> | --guestvmlinux=<path>]]
|
|
{top|record|report|diff|buildid-list}
|
|
'perf kvm' [--host] [--guest] [--guestkallsyms=<path> --guestmodules=<path>
|
|
| --guestvmlinux=<path>] {top|record|report|diff|buildid-list|stat}
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
There are a couple of variants of perf kvm:
|
|
|
|
'perf kvm [options] top <command>' to generates and displays
|
|
a performance counter profile of guest os in realtime
|
|
of an arbitrary workload.
|
|
|
|
'perf kvm record <command>' to record the performance counter profile
|
|
of an arbitrary workload and save it into a perf data file. If both
|
|
--host and --guest are input, the perf data file name is perf.data.kvm.
|
|
If there is no --host but --guest, the file name is perf.data.guest.
|
|
If there is no --guest but --host, the file name is perf.data.host.
|
|
|
|
'perf kvm report' to display the performance counter profile information
|
|
recorded via perf kvm record.
|
|
|
|
'perf kvm diff' to displays the performance difference amongst two perf.data
|
|
files captured via perf record.
|
|
|
|
'perf kvm buildid-list' to display the buildids found in a perf data file,
|
|
so that other tools can be used to fetch packages with matching symbol tables
|
|
for use by perf report.
|
|
|
|
'perf kvm stat <command>' to run a command and gather performance counter
|
|
statistics.
|
|
Especially, perf 'kvm stat record/report' generates a statistical analysis
|
|
of KVM events. Currently, vmexit, mmio and ioport events are supported.
|
|
'perf kvm stat record <command>' records kvm events and the events between
|
|
start and end <command>.
|
|
And this command produces a file which contains tracing results of kvm
|
|
events.
|
|
|
|
'perf kvm stat report' reports statistical data which includes events
|
|
handled time, samples, and so on.
|
|
|
|
OPTIONS
|
|
-------
|
|
-i::
|
|
--input=::
|
|
Input file name.
|
|
-o::
|
|
--output::
|
|
Output file name.
|
|
--host=::
|
|
Collect host side performance profile.
|
|
--guest=::
|
|
Collect guest side performance profile.
|
|
--guestmount=<path>::
|
|
Guest os root file system mount directory. Users mounts guest os
|
|
root directories under <path> by a specific filesystem access method,
|
|
typically, sshfs. For example, start 2 guest os. The one's pid is 8888
|
|
and the other's is 9999.
|
|
#mkdir ~/guestmount; cd ~/guestmount
|
|
#sshfs -o allow_other,direct_io -p 5551 localhost:/ 8888/
|
|
#sshfs -o allow_other,direct_io -p 5552 localhost:/ 9999/
|
|
#perf kvm --host --guest --guestmount=~/guestmount top
|
|
--guestkallsyms=<path>::
|
|
Guest os /proc/kallsyms file copy. 'perf' kvm' reads it to get guest
|
|
kernel symbols. Users copy it out from guest os.
|
|
--guestmodules=<path>::
|
|
Guest os /proc/modules file copy. 'perf' kvm' reads it to get guest
|
|
kernel module information. Users copy it out from guest os.
|
|
--guestvmlinux=<path>::
|
|
Guest os kernel vmlinux.
|
|
|
|
STAT REPORT OPTIONS
|
|
-------------------
|
|
--vcpu=<value>::
|
|
analyze events which occures on this vcpu. (default: all vcpus)
|
|
|
|
--events=<value>::
|
|
events to be analyzed. Possible values: vmexit, mmio, ioport.
|
|
(default: vmexit)
|
|
-k::
|
|
--key=<value>::
|
|
Sorting key. Possible values: sample (default, sort by samples
|
|
number), time (sort by average time).
|
|
|
|
SEE ALSO
|
|
--------
|
|
linkperf:perf-top[1], linkperf:perf-record[1], linkperf:perf-report[1],
|
|
linkperf:perf-diff[1], linkperf:perf-buildid-list[1],
|
|
linkperf:perf-stat[1]
|