From: Ian Rogers <irogers@google.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
James Clark <james.clark@linaro.org>,
Collin Funk <collin.funk1@gmail.com>,
Dmitry Vyukov <dvyukov@google.com>,
Andi Kleen <ak@linux.intel.com>,
Thomas Falcon <thomas.falcon@intel.com>,
Leo Yan <leo.yan@arm.com>,
Yicong Yang <yangyicong@hisilicon.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Masami Hiramatsu (Google)" <mhiramat@kernel.org>,
Stephen Brennan <stephen.s.brennan@oracle.com>,
Haibo Xu <haibo1.xu@intel.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v1 17/17] perf test kvm: Add some basic perf kvm test coverage
Date: Fri, 28 Nov 2025 01:06:22 -0800 [thread overview]
Message-ID: <CAP-5=fWrbHu75NZcYn7NETDb057uZA6NGpOFADMWNgHRyxfCsA@mail.gmail.com> (raw)
In-Reply-To: <aSi6uGZdIqxLuyhz@google.com>
On Thu, Nov 27, 2025 at 12:55 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> On Thu, Nov 27, 2025 at 03:53:13AM -0800, Ian Rogers wrote:
> > On Tue, Nov 25, 2025 at 11:21 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > >
> > > On Sat, Nov 22, 2025 at 12:19:29AM -0800, Ian Rogers wrote:
> > > > Setup qemu with KVM then run kvm stat and some host
> > > > recording/reporting/build-id tests.
> > > >
> > > > Signed-off-by: Ian Rogers <irogers@google.com>
> > > > ---
> > > > tools/perf/tests/shell/kvm.sh | 154 ++++++++++++++++++++++++++++++++++
> > > > 1 file changed, 154 insertions(+)
> > > > create mode 100755 tools/perf/tests/shell/kvm.sh
> > > >
> > > > diff --git a/tools/perf/tests/shell/kvm.sh b/tools/perf/tests/shell/kvm.sh
> > > > new file mode 100755
> > > > index 000000000000..2fafde1a29cc
> > > > --- /dev/null
> > > > +++ b/tools/perf/tests/shell/kvm.sh
> > > > @@ -0,0 +1,154 @@
> > > > +#!/bin/bash
> > > > +# perf kvm tests
> > > > +# SPDX-License-Identifier: GPL-2.0
> > > > +
> > > > +set -e
> > > > +
> > > > +err=0
> > > > +perfdata=$(mktemp /tmp/__perf_kvm_test.perf.data.XXXXX)
> > > > +qemu_pid_file=$(mktemp /tmp/__perf_kvm_test.qemu.pid.XXXXX)
> > > > +
> > > > +cleanup() {
> > > > + rm -f "${perfdata}"
> > > > + if [ -f "${qemu_pid_file}" ]; then
> > > > + if [ -s "${qemu_pid_file}" ]; then
> > > > + qemu_pid=$(cat "${qemu_pid_file}")
> > > > + if [ -n "${qemu_pid}" ]; then
> > > > + kill "${qemu_pid}" 2>/dev/null || true
> > > > + fi
> > > > + fi
> > > > + rm -f "${qemu_pid_file}"
> > > > + fi
> > > > + trap - EXIT TERM INT
> > > > +}
> > > > +
> > > > +trap_cleanup() {
> > > > + echo "Unexpected signal in ${FUNCNAME[1]}"
> > > > + cleanup
> > > > + exit 1
> > > > +}
> > > > +trap trap_cleanup EXIT TERM INT
> > > > +
> > > > +skip() {
> > > > + echo "Skip: $1"
> > > > + cleanup
> > > > + exit 2
> > > > +}
> > > > +
> > > > +test_kvm_stat() {
> > > > + echo "Testing perf kvm stat"
> > > > +
> > > > + echo "Recording kvm events for pid ${qemu_pid}..."
> > > > + if ! perf kvm stat record -p "${qemu_pid}" -o "${perfdata}" sleep 1; then
> > > > + echo "Failed to record kvm events"
> > > > + err=1
> > > > + return
> > > > + fi
> > > > +
> > > > + echo "Reporting kvm events..."
> > > > + if ! perf kvm -i "${perfdata}" stat report 2>&1 | grep -q "VM-EXIT"; then
> > > > + echo "Failed to find VM-EXIT in report"
> > > > + perf kvm -i "${perfdata}" stat report 2>&1
> > > > + err=1
> > > > + return
> > > > + fi
> > > > +
> > > > + echo "perf kvm stat test [Success]"
> > > > +}
> > > > +
> > > > +test_kvm_record_report() {
> > > > + echo "Testing perf kvm record/report"
> > > > +
> > > > + echo "Recording kvm profile for pid ${qemu_pid}..."
> > > > + # Use --host to avoid needing guest symbols/mounts for this simple test
> > > > + # We just want to verify the command runs and produces data
> > > > + # We run in background and kill it because 'perf kvm record' appends options
> > > > + # after the command, which breaks 'sleep' (e.g. it gets '-e cycles').
> > > > + perf kvm --host record -p "${qemu_pid}" -o "${perfdata}" &
> > > > + rec_pid=$!
> > > > + sleep 1
> > > > + kill -INT "${rec_pid}"
> > > > + wait "${rec_pid}" || true
> > > > +
> > > > + echo "Reporting kvm profile..."
> > > > + # Check for some standard output from report
> > > > + if ! perf kvm -i "${perfdata}" report --stdio 2>&1 | grep -q "Event count"; then
> > > > + echo "Failed to report kvm profile"
> > > > + perf kvm -i "${perfdata}" report --stdio 2>&1
> > > > + err=1
> > > > + return
> > > > + fi
> > > > +
> > > > + echo "perf kvm record/report test [Success]"
> > > > +}
> > > > +
> > > > +test_kvm_buildid_list() {
> > > > + echo "Testing perf kvm buildid-list"
> > > > +
> > > > + # We reuse the perf.data from the previous record test
> > > > + if ! perf kvm --host -i "${perfdata}" buildid-list 2>&1 | grep -q "."; then
> > > > + echo "Failed to list buildids"
> > > > + perf kvm --host -i "${perfdata}" buildid-list 2>&1
> > > > + err=1
> > > > + return
> > > > + fi
> > > > +
> > > > + echo "perf kvm buildid-list test [Success]"
> > > > +}
> > > > +
> > > > +setup_qemu() {
> > > > + # Find qemu
> > > > + if [ "$(uname -m)" = "x86_64" ]; then
> > > > + qemu="qemu-system-x86_64"
> > > > + elif [ "$(uname -m)" = "aarch64" ]; then
> > > > + qemu="qemu-system-aarch64"
> > > > + elif [ "$(uname -m)" = "s390x" ]; then
> > > > + qemu="qemu-system-s390x"
> > > > + elif [ "$(uname -m)" = "ppc64le" ]; then
> > > > + qemu="qemu-system-ppc64"
> > > > + else
> > > > + qemu="qemu-system-$(uname -m)"
> > > > + fi
> > > > +
> > > > + if ! which -s "$qemu"; then
> > > > + skip "$qemu not found"
> > > > + fi
> > > > +
> > > > + if [ ! -r /dev/kvm ] || [ ! -w /dev/kvm ]; then
> > > > + skip "/dev/kvm not accessible"
> > > > + fi
> > > > +
> > > > + if ! perf kvm stat record -a sleep 0.01 >/dev/null 2>&1; then
> > > > + skip "No permission to record kvm events"
> > > > + fi
> > > > +
> > > > + echo "Starting $qemu..."
> > > > + # Start qemu in background, detached, with pidfile
> > > > + # We use -display none -daemonize and a monitor to keep it alive/controllable if needed
> > > > + # We don't need a real kernel, just KVM active.
> > > > + if ! $qemu -enable-kvm -display none -daemonize -pidfile "${qemu_pid_file}" -monitor none; then
> > >
> > > What is running in the guest?
> >
> > Nothing. As no kernel or storage image were provided the guest should
> > be waiting at the bios similar to if you booted a PC with no storage
> > in it. I just wanted something quick and dirty to give the basic perf
> > kvm command a simple work out for the sake of testing coverage.
>
> Ok, it'd be fine as long as perf can get some samples in the guest.
I hope we always get a sample in the guest, but I don't think it is a
given as qemu is running in the background, etc. Even without guest
samples the code is getting coverage in the perf tool we don't get by
other means, for example, finding the broken BUG_ON.
Thanks,
Ian
> Thanks,
> Namhyung
>
next prev parent reply other threads:[~2025-11-28 9:06 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-22 8:19 [PATCH v1 00/17] perf: Small fixes and new tests Ian Rogers
2025-11-22 8:19 ` [PATCH v1 01/17] perf kvm: Fix debug assertion Ian Rogers
2025-11-26 6:33 ` Namhyung Kim
2025-11-22 8:19 ` [PATCH v1 02/17] perf timechart: Add record support for output perf.data path Ian Rogers
2025-11-26 6:38 ` Namhyung Kim
2025-11-22 8:19 ` [PATCH v1 03/17] perf symbol-elf: Add missing puts on error path Ian Rogers
2025-12-01 18:04 ` Arnaldo Carvalho de Melo
2025-11-22 8:19 ` [PATCH v1 04/17] perf symbol: Add missed dso__put Ian Rogers
2025-11-22 8:19 ` [PATCH v1 05/17] perf probe-event: Ensure probe event nsinfo is always cleared Ian Rogers
2025-11-26 6:58 ` Namhyung Kim
2025-11-22 8:19 ` [PATCH v1 06/17] perf hist: In init, ensure mem_info is put on error paths Ian Rogers
2025-12-01 17:05 ` Arnaldo Carvalho de Melo
2025-12-01 17:14 ` Arnaldo Carvalho de Melo
2025-12-01 17:52 ` Ian Rogers
2025-11-22 8:19 ` [PATCH v1 07/17] perf mem-events: Don't leak online CPU map Ian Rogers
2025-12-01 17:01 ` Arnaldo Carvalho de Melo
2025-11-22 8:19 ` [PATCH v1 08/17] perf jitdump: Fix missed dso__put Ian Rogers
2025-12-01 17:00 ` Arnaldo Carvalho de Melo
2025-11-22 8:19 ` [PATCH v1 09/17] perf c2c: Clean up some defensive gets and make asan clean Ian Rogers
2025-12-01 17:45 ` Arnaldo Carvalho de Melo
2025-11-22 8:19 ` [PATCH v1 10/17] perf tests c2c: Add a basic c2c Ian Rogers
2025-11-22 8:19 ` [PATCH v1 11/17] perf tests buildid: Add purge and remove testing Ian Rogers
2025-11-22 8:19 ` [PATCH v1 12/17] perf tests top: Add basic perf top coverage test Ian Rogers
2025-11-22 8:19 ` [PATCH v1 13/17] perf tests timechart: Add a perf timechart test Ian Rogers
2025-11-22 8:19 ` [PATCH v1 14/17] perf tests kallsyms: Add basic kallsyms test Ian Rogers
2025-11-22 8:19 ` [PATCH v1 15/17] perf tests script dlfilter: Add a dlfilter test Ian Rogers
2025-11-22 8:19 ` [PATCH v1 16/17] perf tests evlist: Add basic evlist test Ian Rogers
2025-11-26 7:19 ` Namhyung Kim
2025-11-22 8:19 ` [PATCH v1 17/17] perf test kvm: Add some basic perf kvm test coverage Ian Rogers
2025-11-26 7:21 ` Namhyung Kim
2025-11-27 11:53 ` Ian Rogers
2025-11-27 20:55 ` Namhyung Kim
2025-11-28 9:06 ` Ian Rogers [this message]
2025-12-03 19:03 ` Namhyung Kim
2025-12-04 19:10 ` [PATCH v1 00/17] perf: Small fixes and new tests Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAP-5=fWrbHu75NZcYn7NETDb057uZA6NGpOFADMWNgHRyxfCsA@mail.gmail.com' \
--to=irogers@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=collin.funk1@gmail.com \
--cc=dvyukov@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=haibo1.xu@intel.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=leo.yan@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=stephen.s.brennan@oracle.com \
--cc=thomas.falcon@intel.com \
--cc=yangyicong@hisilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).