Commit 47d3545f authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo
Browse files

perf help: Move common_cmds into builtin-help



There's a lot of infrastructure for generating a relatively simple
array used by one function.

Move the array into the function and remove the supporting build logic.

At the same time opportunistically const-ify the array.

Signed-off-by: default avatarIan Rogers <irogers@google.com>
Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Charlie Jenkins <charlie@rivosinc.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent d0a3df88
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -808,11 +808,6 @@ $(GTK_IN): FORCE prepare
$(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS)
	$(QUIET_LINK)$(CC) -o $@ -shared $(LDFLAGS) $(filter %.o,$^) $(GTK_LIBS)

$(OUTPUT)common-cmds.h: util/generate-cmdlist.sh command-list.txt

$(OUTPUT)common-cmds.h: $(wildcard Documentation/perf-*.txt)
	$(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@

$(SCRIPTS) : % : %.sh
	$(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@'

@@ -850,7 +845,7 @@ endif
__build-dir = $(subst $(OUTPUT),,$(dir $@))
build-dir   = $(or $(__build-dir),.)

prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders \
prepare: $(OUTPUT)PERF-VERSION-FILE archheaders \
	arm64-sysreg-defs \
	$(syscall_array) \
	$(fs_at_flags_array) \
@@ -1054,7 +1049,7 @@ cscope:
# However, the environment gets quite big, and some programs have problems
# with that.

check: $(OUTPUT)common-cmds.h
check: prepare
	if sparse; \
	then \
		for i in *.c */*.c; \
@@ -1297,7 +1292,7 @@ clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBSYMBOL)-clean $(
	$(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 \
		perf-read-vdsox32 $(OUTPUT)$(LIBJVMTI).so
	$(call QUIET_CLEAN, core-gen)   $(RM)  *.spec *.pyc *.pyo */*.pyc */*.pyo \
		$(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE \
		TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE \
		$(OUTPUT)FEATURE-DUMP $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex* \
		$(OUTPUT)util/intel-pt-decoder/inat-tables.c \
		$(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \
+46 −5
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@
#include "util/strbuf.h"
#include "builtin.h"
#include <subcmd/exec-cmd.h>
#include "common-cmds.h"
#include <subcmd/parse-options.h>
#include <subcmd/run-command.h>
#include <subcmd/help.h>
@@ -301,16 +300,58 @@ static struct cmdnames main_cmds, other_cmds;

void list_common_cmds_help(void)
{
	unsigned int i, longest = 0;
	const struct cmdname_help {
		const char *name;
		const char *help;
	} common_cmds[] = {
		{"annotate", "Read perf.data (created by perf record) and display annotated code"},
		{"archive",
		 "Create archive with object files with build-ids found in perf.data file"},
		{"bench", "General framework for benchmark suites"},
		{"buildid-cache", "Manage build-id cache."},
		{"buildid-list", "List the buildids in a perf.data file"},
		{"c2c", "Shared Data C2C/HITM Analyzer."},
		{"config", "Get and set variables in a configuration file."},
		{"daemon", "Run record sessions on background"},
		{"data", "Data file related processing"},
		{"diff", "Read perf.data files and display the differential profile"},
		{"evlist", "List the event names in a perf.data file"},
		{"ftrace", "simple wrapper for kernel's ftrace functionality"},
		{"inject", "Filter to augment the events stream with additional information"},
		{"iostat", "Show I/O performance metrics"},
		{"kallsyms", "Searches running kernel for symbols"},
		{"kvm", "Tool to trace/measure kvm guest os"},
		{"list", "List all symbolic event types"},
		{"mem", "Profile memory accesses"},
		{"record", "Run a command and record its profile into perf.data"},
		{"report", "Read perf.data (created by perf record) and display the profile"},
		{"script", "Read perf.data (created by perf record) and display trace output"},
		{"stat", "Run a command and gather performance counter statistics"},
		{"test", "Runs sanity tests."},
		{"top", "System profiling tool."},
		{"version", "display the version of perf binary"},
	#ifdef HAVE_LIBELF_SUPPORT
		{"probe", "Define new dynamic tracepoints"},
	#endif /* HAVE_LIBELF_SUPPORT */
	#ifdef HAVE_LIBTRACEEVENT
		{"trace", "strace inspired tool"},
		{"kmem", "Tool to trace/measure kernel memory properties"},
		{"kwork", "Tool to trace/measure kernel work properties (latencies)"},
		{"lock", "Analyze lock events"},
		{"sched", "Tool to trace/measure scheduler properties (latencies)"},
		{"timechart", "Tool to visualize total system behavior during a workload"},
	#endif /* HAVE_LIBTRACEEVENT */
	};
	size_t longest = 0;

	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
	for (size_t i = 0; i < ARRAY_SIZE(common_cmds); i++) {
		if (longest < strlen(common_cmds[i].name))
			longest = strlen(common_cmds[i].name);
	}

	puts(" The most commonly used perf commands are:");
	for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
		printf("   %-*s   ", longest, common_cmds[i].name);
	for (size_t i = 0; i < ARRAY_SIZE(common_cmds); i++) {
		printf("   %-*s   ", (int)longest, common_cmds[i].name);
		puts(common_cmds[i].help);
	}
}

tools/perf/command-list.txt

deleted100644 → 0
+0 −36
Original line number Diff line number Diff line
#
# List of known perf commands.
# command name			category [deprecated] [common]
#
perf-annotate			mainporcelain common
perf-archive			mainporcelain common
perf-bench			mainporcelain common
perf-buildid-cache		mainporcelain common
perf-buildid-list		mainporcelain common
perf-data			mainporcelain common
perf-diff			mainporcelain common
perf-c2c			mainporcelain common
perf-config			mainporcelain common
perf-evlist			mainporcelain common
perf-ftrace			mainporcelain common
perf-inject			mainporcelain common
perf-iostat			mainporcelain common
perf-kallsyms			mainporcelain common
perf-kmem			mainporcelain traceevent
perf-kvm			mainporcelain common
perf-kwork			mainporcelain traceevent
perf-list			mainporcelain common
perf-lock			mainporcelain traceevent
perf-mem			mainporcelain common
perf-probe			mainporcelain full
perf-record			mainporcelain common
perf-report			mainporcelain common
perf-sched			mainporcelain traceevent
perf-script			mainporcelain common
perf-stat			mainporcelain common
perf-test			mainporcelain common
perf-timechart			mainporcelain traceevent
perf-top			mainporcelain common
perf-trace			mainporcelain audit
perf-version			mainporcelain common
perf-daemon			mainporcelain common
+0 −14
Original line number Diff line number Diff line
@@ -419,20 +419,6 @@ $(OUTPUT)util/list_sort.o: ../lib/list_sort.c FORCE
	$(call rule_mkdir)
	$(call if_changed_dep,cc_o_c)

ifdef SHELLCHECK
  SHELL_TESTS := generate-cmdlist.sh
  SHELL_TEST_LOGS := $(SHELL_TESTS:%=%.shellcheck_log)
else
  SHELL_TESTS :=
  SHELL_TEST_LOGS :=
endif

$(OUTPUT)%.shellcheck_log: %
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,test)$(SHELLCHECK) "$<" > $@ || (cat $@ && rm $@ && false)

perf-util-y += $(SHELL_TEST_LOGS)

PY_TESTS := setup.py
ifdef MYPY
  MYPY_TEST_LOGS := $(PY_TESTS:%=%.mypy_log)
+0 −70
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0

echo "/* Automatically generated by $0 */
struct cmdname_help
{
    char name[16];
    char help[80];
};

static struct cmdname_help common_cmds[] = {"

sed -n -e 's/^perf-\([^ 	]*\)[ 	].* common.*/\1/p' command-list.txt |
sort |
while read cmd
do
     sed -n '
     /^NAME/,/perf-'"$cmd"'/H
     ${
            x
            s/.*perf-'"$cmd"' - \(.*\)/  {"'"$cmd"'", "\1"},/
	    p
     }' "Documentation/perf-$cmd.txt"
done

echo "#ifdef HAVE_LIBELF_SUPPORT"
sed -n -e 's/^perf-\([^ 	]*\)[ 	].* full.*/\1/p' command-list.txt |
sort |
while read cmd
do
     sed -n '
     /^NAME/,/perf-'"$cmd"'/H
     ${
            x
            s/.*perf-'"$cmd"' - \(.*\)/  {"'"$cmd"'", "\1"},/
	    p
     }' "Documentation/perf-$cmd.txt"
done
echo "#endif /* HAVE_LIBELF_SUPPORT */"

echo "#if defined(HAVE_LIBTRACEEVENT)"
sed -n -e 's/^perf-\([^ 	]*\)[ 	].* audit*/\1/p' command-list.txt |
sort |
while read cmd
do
     sed -n '
     /^NAME/,/perf-'"$cmd"'/H
     ${
            x
            s/.*perf-'"$cmd"' - \(.*\)/  {"'"$cmd"'", "\1"},/
	    p
     }' "Documentation/perf-$cmd.txt"
done
echo "#endif /* HAVE_LIBTRACEEVENT */"

echo "#ifdef HAVE_LIBTRACEEVENT"
sed -n -e 's/^perf-\([^ 	]*\)[ 	].* traceevent.*/\1/p' command-list.txt |
sort |
while read cmd
do
     sed -n '
     /^NAME/,/perf-'"$cmd"'/H
     ${
            x
            s/.*perf-'"$cmd"' - \(.*\)/  {"'"$cmd"'", "\1"},/
            p
     }' "Documentation/perf-$cmd.txt"
done
echo "#endif /* HAVE_LIBTRACEEVENT */"
echo "};"