From: Aditya Gupta <adityag@linux.ibm.com>
To: acme@kernel.org, jolsa@kernel.org, irogers@google.com,
namhyung@kernel.org
Cc: linux-perf-users@vger.kernel.org, maddy@linux.ibm.com,
atrajeev@linux.vnet.ibm.com, kjain@linux.ibm.com,
disgoel@linux.vnet.ibm.com
Subject: [PATCH v15 0/7] Introduce perf check subcommand
Date: Thu, 5 Sep 2024 00:31:25 +0530 [thread overview]
Message-ID: <20240904190132.415212-1-adityag@linux.ibm.com> (raw)
The Problem
===========
Currently the presence of a feature is checked with a combination of
perf version --build-options and greps, such as:
perf version --build-options | grep " on .* HAVE_FEATURE"
This relies on the output of perf version, and is a common pattern in tests.
Proposed solution
=================
As suggested by contributors in:
https://lore.kernel.org/linux-perf-users/ZMPWk5K63tadmDlU@kernel.org/
Introduce a subcommand "perf check feature", with which
scripts can test for presence of a feature or multiple features, such as:
perf check feature HAVE_LIBTRACEEVENT (feature macro)
or
perf check feature libtraceevent (feature name)
or
perf check feature LibTraceEvent (case-insensitive)
or
perf check feature libtraceevent,bpf (multiple features)
The usage of "perf version --build-options | grep" has been replaced in two
tests, with "perf check feature" command
Also, to not duplicate the same feature list at multiple places, a new global
'supported_features' array has been introduced in builtin.h, so both commands
'perf check feature' and 'perf version --build-options' use the same array
'supported_features' feature is an array of 'struct feature_support', which
also has the name of the feature, macro used to test it's presence, and a
is_builtin member, which will be 0 if feature not built-in, and 1 if built-in
Architectures Tested
====================
* x86_64
* ppc64le
Commands ran for testing (Fedora & RHEL):
sudo dnf install -y libtraceevent-devel
make clean
make -j$(nproc)
./perf check feature libtraceevent,bpf; echo Return Code: $?
./perf check feature libtraceevent; echo Return Code: $?
sudo ./perf test -v "task-analyzer"
sudo ./perf test -v "probe libc's inet_pton & backtrace it with ping"
sudo ./perf test -v "Use vfs_getname probe to get syscall args filenames"
sudo dnf remove -y libtraceevent-devel
make clean
make NO_LIBTRACEEVENT=1 -j$(nproc)
./perf check feature libtraceevent,bpf; echo Return Code: $?
./perf check feature libtraceevent; echo Return Code: $?
sudo ./perf test -v "task-analyzer"
sudo ./perf test -v "probe libc's inet_pton & backtrace it with ping"
sudo ./perf test -v "Use vfs_getname probe to get syscall args filenames"
Expected output of above commands (only the './perf check feature' command
outputs):
...
libtraceevent: [ on ] # HAVE_LIBTRACEEVENT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
Return Code: 0
libtraceevent: [ on ] # HAVE_LIBTRACEEVENT
Return Code: 0
...
libtraceevent: [ OFF ] # HAVE_LIBTRACEEVENT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
Return Code: 1
libtraceevent: [ OFF ] # HAVE_LIBTRACEEVENT
Return Code: 1
Git tree
========
Git tree with this patch series applied for testing:
https://github.com/adi-g15-ibm/linux/tree/perf-check-feature-v15
Changelog
=========
v15:
+ rebase on commit 98ad0b7 ("perf check: Introduce 'check' subcommand")
+ patch #1 and patch #2 are exactly same, as applied in perf-tools-next/tmp.perf-tools-next
v14:
+ rebase on commit 39c24341 ("perf sched timehist: Fixed timestamp ...")
v13:
+ patch #1: add fix for parse_options_subcommand not setting usage string
+ patch #2: if unknown feature name passed, print "please use 'perf version
--build-options' to see which ones are available"
+ patch #6: fix inconsistency in feature names (dwarf-unwind-support & get_cpuid)
+ patch #7: add more features to feature_list
v12
+ patch #1: fix comment to mention argv[0] instead of argv[1]
+ patch #2: fix alignment
v11
+ patch #1: fix build error due to const *const instead of const*
v10
+ patch #1: use 'strdup' instead of 'malloc+memcpy'
+ patch #1: replace '-q' with '--quiet' in doc
+ patch #1: add usage for perf check
V9
+ make 'feature' a subcommand instead of an option
+ make feature name/macro check case-insensitive
+ rename 'FEATURE_SUPPORT' as 'FEATURE_STATUS'
+ rebase on upstream perf-tools-next
V8
+ handle return value of 'malloc' in patch #1
+ fix error due to strncpy depending on source string's length
V7
+ modified patch #1 to fix compile issue, and add feature to allow
multiple comma-separated features
V6
+ rebased to perf-tools-next/perf-tools-next
+ modified patch #1 to include FEATURE_SUPPORT("bpf_skeletons", HAVE_BPF_SKEL)
V5
+ invert return value of 'has_support', but return value of perf check --feature
according to shell convention
V4
+ invert return value of perf check --feature
V3
+ simplified has_support code in builtin-check.c (patch #1)
+ modified patch #3 and patch #4 according to change in return value in patch #1
V2
+ improved the patch series with suggestions from Namhyung
+ fix incorrect return value, added -q option, and moved array definition to
perf-check.c
V1
+ changed subcommand name to 'perf check --feature'
+ added documentation for perf check
+ support both macro (eg. HAVE_LIBTRACEEVENT), and name (eg. libtraceevent) as
input to 'perf check --feature'
+ change subject and descriptions of all patch mentioning perf check instead of
perf build
V0: Previous patch series: https://lore.kernel.org/linux-perf-users/20230825061125.24312-1-adityag@linux.ibm.com/
Aditya Gupta (6):
tools/lib/subcmd: Don't free the usage string
perf check: Introduce 'check' subcommand
perf version: Update --build-options to use 'supported_features' array
tools/perf/tests: Update test_task_analyzer.sh to use perf check
feature
perf: Fix inconsistencies in feature names
perf: Add more features to supported_features list
Athira Rajeev (1):
tools/perf/tests: Update probe_vfs_getname.sh script to use perf check
feature
tools/lib/subcmd/parse-options.c | 8 +-
tools/perf/Build | 1 +
tools/perf/Documentation/perf-check.txt | 106 +++++++++
tools/perf/builtin-check.c | 205 ++++++++++++++++++
tools/perf/builtin-kmem.c | 2 +
tools/perf/builtin-kvm.c | 3 +
tools/perf/builtin-kwork.c | 3 +
tools/perf/builtin-lock.c | 3 +
tools/perf/builtin-mem.c | 3 +
tools/perf/builtin-sched.c | 3 +
tools/perf/builtin-version.c | 43 +---
tools/perf/builtin.h | 17 ++
tools/perf/perf.c | 1 +
.../perf/tests/shell/lib/probe_vfs_getname.sh | 4 +-
.../shell/record+probe_libc_inet_pton.sh | 5 +-
.../shell/record+script_probe_vfs_getname.sh | 5 +-
tools/perf/tests/shell/test_task_analyzer.sh | 4 +-
17 files changed, 370 insertions(+), 46 deletions(-)
create mode 100644 tools/perf/Documentation/perf-check.txt
create mode 100644 tools/perf/builtin-check.c
--
2.45.2
next reply other threads:[~2024-09-04 19:01 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-04 19:01 Aditya Gupta [this message]
2024-09-04 19:01 ` [PATCH v15 1/7] libsubcmd: Don't free the usage string Aditya Gupta
2024-09-04 19:01 ` [PATCH v15 2/7] perf check: Introduce 'check' subcommand Aditya Gupta
2024-09-04 19:01 ` [PATCH v15 3/7] perf version: Update --build-options to use 'supported_features' array Aditya Gupta
2024-09-04 19:01 ` [PATCH v15 4/7] tools/perf/tests: Update test_task_analyzer.sh to use perf check feature Aditya Gupta
2024-09-04 19:01 ` [PATCH v15 5/7] tools/perf/tests: Update probe_vfs_getname.sh script " Aditya Gupta
2024-09-04 19:01 ` [PATCH v15 6/7] perf: Fix inconsistencies in feature names Aditya Gupta
2024-09-04 19:01 ` [PATCH v15 7/7] perf: Add more features to supported_features list Aditya Gupta
2024-09-04 20:02 ` Arnaldo Carvalho de Melo
2024-09-05 14:33 ` Aditya Gupta
2024-09-05 14:58 ` Arnaldo Carvalho de Melo
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=20240904190132.415212-1-adityag@linux.ibm.com \
--to=adityag@linux.ibm.com \
--cc=acme@kernel.org \
--cc=atrajeev@linux.vnet.ibm.com \
--cc=disgoel@linux.vnet.ibm.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=kjain@linux.ibm.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=maddy@linux.ibm.com \
--cc=namhyung@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.