Skip to contentSkip to conversation

Support perf -vv

PATCH Superseded Jin Yao 3 participants 12 messages Mar 28, 2018 – Mar 29, 2018 perf events

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore

Jin Yao

author
#0 lore raw

v2 cover Support perf -vv

We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.

The perf can build, but it is missing important functionality. And users may complain that perf has issue or bug.

This patch-set support 'perf -vv' and 'perf -version --build-options' which will print the compiled-in status of libraries.

Once users think perf missing some functionality, it should be very easy for them to check the libraries status.

For example:

    $ ./perf -vv or ./perf -version --build-options
    perf version 4.13.rc5.gcb1183
                     dwarf: [ on  ]
        dwarf_getlocations: [ on  ]
                     glibc: [ on  ]
                      gtk2: [ on  ]
                  libaudit: [ OFF ]
                    libbfd: [ on  ]
                    libelf: [ on  ]
                   libnuma: [ on  ]
    numa_num_possible_cpus: [ on  ]
                   libperl: [ on  ]
                 libpython: [ on  ]
                  libslang: [ on  ]
                 libcrypto: [ on  ]
                 libunwind: [ on  ]
        libdw-dwarf-unwind: [ on  ]
                      zlib: [ on  ]
                      lzma: [ on  ]
                 get_cpuid: [ on  ]
                       bpf: [ on  ]
    [ on  ]: library is compiled-in
    [ OFF ]: library is disabled in make configuration
             OR library is not installed in build environment

Jin Yao (3):
perf config: Add some new -DHAVE_XXX to CFLAGS perf version: Print the compiled-in status of libraries
perf: Support perf -vv

Jiri Olsa (1):
tools include: Add config.h header file

 tools/include/tools/config.h | 34 ++++++++++++++++++++++
 tools/perf/Makefile.config   | 16 +++++++++++
 tools/perf/builtin-version.c | 68 ++++++++++++++++++++++++++++++++++++++++++++
 tools/perf/perf.c            | 22 +++++++++++---
 tools/perf/perf.h            |  1 +
 5 files changed, 137 insertions(+), 4 deletions(-)
 create mode 100644 tools/include/tools/config.h
Signature · 1 line
2.7.4
author
#1 lore raw

PATCH v2 1/4 tools include: Add config.h header file

From: Jiri Olsa <[email protected]>

Adding IS_BUILTIN macro and its dependencies into
tools world.

It's taken from kernel's include/linux/kconfig.h, which can't be taken completely due to its kconfig dependencies.

---
 tools/include/tools/config.h | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 tools/include/tools/config.h
tools/include/tools/config.h new file +34 -0
new file mode 100644
index 0000000..08ade7d
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _TOOLS_CONFIG_H
+#define _TOOLS_CONFIG_H
+
+/* Subset of include/linux/kconfig.h */
+
+#define __ARG_PLACEHOLDER_1 0,
+#define __take_second_arg(__ignored, val, ...) val
+
+/*
+ * Helper macros to use CONFIG_ options in C/CPP expressions. Note that
+ * these only work with boolean and tristate options.
+ */
+
+/*
+ * Getting something that works in C and CPP for an arg that may or may
+ * not be defined is tricky.  Here, if we have "#define CONFIG_BOOGER 1"
+ * we match on the placeholder define, insert the "0," for arg1 and generate
+ * the triplet (0, 1, 0).  Then the last step cherry picks the 2nd arg (a one).
+ * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when
+ * the last step cherry picks the 2nd arg, we get a zero.
+ */
+#define __is_defined(x)			___is_defined(x)
+#define ___is_defined(val)		____is_defined(__ARG_PLACEHOLDER_##val)
+#define ____is_defined(arg1_or_junk)	__take_second_arg(arg1_or_junk 1, 0)
+
+/*
+ * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
+ * otherwise. For boolean options, this is equivalent to
+ * IS_ENABLED(CONFIG_FOO).
+ */
+#define IS_BUILTIN(option) __is_defined(option)
+
+#endif /* _TOOLS_CONFIG_H */
Signature · 1 line
2.7.4
author
#2 lore raw

PATCH v2 3/4 perf version: Print the compiled-in status of libraries

In reply to Jin Yao

This patch checks the values passed by CFLAGS (-DHAVE_XXX) and then print the status of libraries.

For example, if HAVE_DWARF_SUPPORT is defined, that means the library "dwarf" is compiled-in. The patch will print the status "on" for this library otherwise print the status "OFF".

v2:
---
1. Use IS_BUILTIN macro to replace #ifdef/#endif block.

2. Print color for on/OFF.

---
 tools/perf/builtin-version.c | 68 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)
tools/perf/builtin-version.c +68 -0
index 37019c5..6e2e486 100644
@@ -1,11 +1,79 @@
 // SPDX-License-Identifier: GPL-2.0
 #include "builtin.h"
 #include "perf.h"
+#include "color.h"
 #include <linux/compiler.h>
+#include <tools/config.h>
 #include <stdio.h>
+#include <string.h>
+
+int version_verbose;
+
+static void on_off_print(const char *status)
+{
+	printf("[ ");
+
+	if (!strcmp(status, "OFF"))
+		color_fprintf(stdout, PERF_COLOR_RED, "%-3s", status);
+	else
+		color_fprintf(stdout, PERF_COLOR_GREEN, "%-3s", status);
+
+	printf(" ]");
+}
+
+static void status_print(const char *name, const char *status)
+{
+	printf("%22s: ", name);
+	on_off_print(status);
+	printf("\n");
+}
+
+#define STATUS(__d, __m)			\
+do {						\
+	if (IS_BUILTIN(__d))			\
+		status_print(#__m, "on");	\
+	else					\
+		status_print(#__m, "OFF");	\
+} while (0)
+
+static void library_status(void)
+{
+	STATUS(HAVE_DWARF_SUPPORT, dwarf);
+	STATUS(HAVE_DWARF_GETLOCATIONS, dwarf_getlocations);
+	STATUS(HAVE_GLIBC_SUPPORT, glibc);
+	STATUS(HAVE_GTK2_SUPPORT, gtk2);
+	STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
+	STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
+	STATUS(HAVE_LIBELF_SUPPORT, libelf);
+	STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
+	STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
+	STATUS(HAVE_LIBPERL_SUPPORT, libperl);
+	STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
+	STATUS(HAVE_SLANG_SUPPORT, libslang);
+	STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
+	STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
+	STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
+	STATUS(HAVE_ZLIB_SUPPORT, zlib);
+	STATUS(HAVE_LZMA_SUPPORT, lzma);
+	STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
+	STATUS(HAVE_LIBBPF_SUPPORT, bpf);
+
+	on_off_print("on");
+	printf(": library is compiled-in\n");
+
+	on_off_print("OFF");
+	printf(": library is disabled in make configuration\n");
+	printf("         OR library is not installed in build environment\n");
+}
 
 int cmd_version(int argc __maybe_unused, const char **argv __maybe_unused)
 {
 	printf("perf version %s\n", perf_version_string);
+
+	if ((argc > 1 && !strcmp(argv[1], "--build-options")) ||
+	    (version_verbose == 1)) {
+		library_status();
+	}
+
 	return 0;
 }
Signature · 1 line
2.7.4
#3 lore raw

Re: [PATCH v2 3/4] perf version: Print the compiled-in status of libraries

On Wed, Mar 28, 2018 at 10:57:07PM +0800, Jin Yao wrote:

SNIP

Quoted 19 lines
tools/perf/builtin-version.c +19 -0
+
+static void library_status(void)
+{
+	STATUS(HAVE_DWARF_SUPPORT, dwarf);
+	STATUS(HAVE_DWARF_GETLOCATIONS, dwarf_getlocations);
+	STATUS(HAVE_GLIBC_SUPPORT, glibc);
+	STATUS(HAVE_GTK2_SUPPORT, gtk2);
+	STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
+	STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
+	STATUS(HAVE_LIBELF_SUPPORT, libelf);
+	STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
+	STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
+	STATUS(HAVE_LIBPERL_SUPPORT, libperl);
+	STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
+	STATUS(HAVE_SLANG_SUPPORT, libslang);
+	STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
+	STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
+	STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
+	STATUS(HAVE_ZLIB_SUPPORT, zlib);

tools/perf/builtin-version.c line 66

Quoted 10 lines
tools/perf/builtin-version.c +10 -0
+	STATUS(HAVE_LZMA_SUPPORT, lzma);
+	STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
+	STATUS(HAVE_LIBBPF_SUPPORT, bpf);
+
+	on_off_print("on");
+	printf(": library is compiled-in\n");
+
+	on_off_print("OFF");
+	printf(": library is disabled in make configuration\n");
+	printf("         OR library is not installed in build environment\n");

[jolsa@krava perf]$ ./perf -vv
perf version 4.16.rc6.gcc183d

                 dwarf: [ on  ]
    dwarf_getlocations: [ on  ]
                 glibc: [ on  ]
                  gtk2: [ on  ]
              libaudit: [ OFF ]
                libbfd: [ on  ]
                libelf: [ on  ]
               libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
               libperl: [ on  ]
             libpython: [ on  ]
              libslang: [ on  ]
             libcrypto: [ on  ]
             libunwind: [ on  ]
    libdw-dwarf-unwind: [ on  ]
                  zlib: [ on  ]
                  lzma: [ on  ]
             get_cpuid: [ on  ]
                   bpf: [ on  ]

[ on ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
OR library is not installed in build environment

did anyone asked for this ^^^ help messages? I don't think they are necessary

jirka

author
#4 lore raw

Re: [PATCH v2 3/4] perf version: Print the compiled-in status of libraries

Quoted 55 lines · Jiri Olsa

On Wed, Mar 28, 2018 at 10:57:07PM +0800, Jin Yao wrote:

SNIP

Quoted 19 lines
tools/perf/builtin-version.c +19 -0
+
+static void library_status(void)
+{
+	STATUS(HAVE_DWARF_SUPPORT, dwarf);
+	STATUS(HAVE_DWARF_GETLOCATIONS, dwarf_getlocations);
+	STATUS(HAVE_GLIBC_SUPPORT, glibc);
+	STATUS(HAVE_GTK2_SUPPORT, gtk2);
+	STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
+	STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
+	STATUS(HAVE_LIBELF_SUPPORT, libelf);
+	STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
+	STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
+	STATUS(HAVE_LIBPERL_SUPPORT, libperl);
+	STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
+	STATUS(HAVE_SLANG_SUPPORT, libslang);
+	STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
+	STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
+	STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
+	STATUS(HAVE_ZLIB_SUPPORT, zlib);

tools/perf/builtin-version.c line 66

Quoted 10 lines
tools/perf/builtin-version.c +10 -0
+	STATUS(HAVE_LZMA_SUPPORT, lzma);
+	STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
+	STATUS(HAVE_LIBBPF_SUPPORT, bpf);
+
+	on_off_print("on");
+	printf(": library is compiled-in\n");
+
+	on_off_print("OFF");
+	printf(": library is disabled in make configuration\n");
+	printf("         OR library is not installed in build environment\n");

[jolsa@krava perf]$ ./perf -vv
perf version 4.16.rc6.gcc183d

                  dwarf: [ on  ]
     dwarf_getlocations: [ on  ]
                  glibc: [ on  ]
                   gtk2: [ on  ]

libaudit: [ OFF ]
libbfd: [ on ]
libelf: [ on ]
libnuma: [ on ]
numa_num_possible_cpus: [ on ]

                libperl: [ on  ]
              libpython: [ on  ]
               libslang: [ on  ]
              libcrypto: [ on  ]
              libunwind: [ on  ]
     libdw-dwarf-unwind: [ on  ]
                   zlib: [ on  ]
                   lzma: [ on  ]
              get_cpuid: [ on  ]
                    bpf: [ on  ]
Quoted 8 lines

[ on ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
OR library is not installed in build environment

did anyone asked for this ^^^ help messages? I don't think they are necessary

jirka

No one ask for this. Since it's not very necessary, I will remove this message.

Thanks
Jin Yao

author
#5 lore raw

PATCH v2 4/4 perf: Support perf -vv

In reply to Jin Yao

We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.

The perf can build, but it is missing important functionality.

This patch provides a new option '-vv' which will print the compiled-in status of libraries.

The 'perf -vv' is equal to 'perf -version --build-options'.

For example:

$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183
                 dwarf: [ on  ]
    dwarf_getlocations: [ on  ]
                 glibc: [ on  ]
                  gtk2: [ on  ]
              libaudit: [ OFF ]
                libbfd: [ on  ]
                libelf: [ on  ]
               libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
               libperl: [ on  ]
             libpython: [ on  ]
              libslang: [ on  ]
             libcrypto: [ on  ]
             libunwind: [ on  ]
    libdw-dwarf-unwind: [ on  ]
                  zlib: [ on  ]
                  lzma: [ on  ]
             get_cpuid: [ on  ]
                   bpf: [ on  ]
[ on  ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
         OR library is not installed in build environment

v2:
---
Use a global variable version_verbose to count the number of 'v'.

---
 tools/perf/perf.c | 22 ++++++++++++++++++----
 tools/perf/perf.h |  1 +
 2 files changed, 19 insertions(+), 4 deletions(-)
tools/perf/perf.c +18 -4
index 1b3fc8e..355219e 100644
@@ -32,7 +32,7 @@
 #include <linux/kernel.h>
 
 const char perf_usage_string[] =
-	"perf [--version] [--help] [OPTIONS] COMMAND [ARGS]";
+	"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";
 
 const char perf_more_info_string[] =
 	"See 'perf help COMMAND' for more information on a specific command.";
@@ -163,6 +163,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
 {
 	int handled = 0;
 
+	version_verbose = 0;
+
 	while (*argc > 0) {
 		const char *cmd = (*argv)[0];
 		if (cmd[0] != '-')
@@ -185,9 +187,21 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
 			break;
 		}
 
-		if (!strcmp(cmd, "-v")) {
-			(*argv)[0] = "--version";
-			break;
+		if (strstarts(cmd, "-v")) {
+			int i;
+
+			for (i = 2; cmd[i]; i++) {
+				if (cmd[i] == 'v')
+					version_verbose++;
+			}
+
+			/*
+			 * Only support -v and -vv now
+			 */
+			if (version_verbose < 2) {
+				(*argv)[0] = "--version";
+				break;
+			}
 		}
 
 		/*
tools/perf/perf.h +1 -0
index 8fec1ab..a1a9795 100644
@@ -84,6 +84,7 @@ struct record_opts {
 struct option;
 extern const char * const *record_usage;
 extern struct option *record_options;
+extern int version_verbose;
 
 int record__parse_freq(const struct option *opt, const char *str, int unset);
 #endif
Signature · 1 line
2.7.4
#6 lore raw

Re: [PATCH v2 4/4] perf: Support perf -vv

Quoted 53 lines · Jin Yao

We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.

The perf can build, but it is missing important functionality.

This patch provides a new option '-vv' which will print the compiled-in status of libraries.

The 'perf -vv' is equal to 'perf -version --build-options'.

For example:

$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183
                 dwarf: [ on  ]
    dwarf_getlocations: [ on  ]
                 glibc: [ on  ]
                  gtk2: [ on  ]
              libaudit: [ OFF ]
                libbfd: [ on  ]
                libelf: [ on  ]
               libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
               libperl: [ on  ]
             libpython: [ on  ]
              libslang: [ on  ]
             libcrypto: [ on  ]
             libunwind: [ on  ]
    libdw-dwarf-unwind: [ on  ]
                  zlib: [ on  ]
                  lzma: [ on  ]
             get_cpuid: [ on  ]
                   bpf: [ on  ]
[ on  ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
         OR library is not installed in build environment

v2:
---
Use a global variable version_verbose to count the number of 'v'.

---
 tools/perf/perf.c | 22 ++++++++++++++++++----
 tools/perf/perf.h |  1 +
 2 files changed, 19 insertions(+), 4 deletions(-)
tools/perf/perf.c +0 -0
index 1b3fc8e..355219e 100644

tools/perf/perf.c line 35

Quoted 5 lines
tools/perf/perf.c +1 -1
@@ -32,7 +32,7 @@
 #include <linux/kernel.h>
 
 const char perf_usage_string[] =
-	"perf [--version] [--help] [OPTIONS] COMMAND [ARGS]";
+	"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

--build-options is 'perf version' option no?

jirka

author
#7 lore raw

Re: [PATCH v2 4/4] perf: Support perf -vv

Quoted 56 lines · Jiri Olsa
Quoted 55 lines · Jin Yao

We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.

The perf can build, but it is missing important functionality.

This patch provides a new option '-vv' which will print the compiled-in status of libraries.

The 'perf -vv' is equal to 'perf -version --build-options'.

For example:

$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183
                  dwarf: [ on  ]
     dwarf_getlocations: [ on  ]
                  glibc: [ on  ]
                   gtk2: [ on  ]
               libaudit: [ OFF ]
                 libbfd: [ on  ]
                 libelf: [ on  ]
                libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
                libperl: [ on  ]
              libpython: [ on  ]
               libslang: [ on  ]
              libcrypto: [ on  ]
              libunwind: [ on  ]
     libdw-dwarf-unwind: [ on  ]
                   zlib: [ on  ]
                   lzma: [ on  ]
              get_cpuid: [ on  ]
                    bpf: [ on  ]
[ on  ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
          OR library is not installed in build environment

v2:
---
Use a global variable version_verbose to count the number of 'v'.

---
  tools/perf/perf.c | 22 ++++++++++++++++++----
  tools/perf/perf.h |  1 +
  2 files changed, 19 insertions(+), 4 deletions(-)
tools/perf/perf.c +0 -0
index 1b3fc8e..355219e 100644
@@ -32,7 +32,7 @@
  #include <linux/kernel.h>
 
Quoted 8 lines

tools/perf/perf.c line 35

Quoted 3 lines
tools/perf/perf.c +1 -1
  const char perf_usage_string[] =
-	"perf [--version] [--help] [OPTIONS] COMMAND [ARGS]";
+	"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

--build-options is 'perf version' option no?

jirka

Yes. Command-line something like:

perf --version --build-options or perf -v --build-options.

Is this usage string not correct? If so, I'd like to fix that.

"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

Thanks
Jin Yao

#8 lore raw

Re: [PATCH v2 4/4] perf: Support perf -vv

Quoted 67 lines · Yao
Quoted 61 lines · Jiri Olsa
Quoted 53 lines · Jin Yao

We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.

The perf can build, but it is missing important functionality.

This patch provides a new option '-vv' which will print the compiled-in status of libraries.

The 'perf -vv' is equal to 'perf -version --build-options'.

For example:

$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183
                  dwarf: [ on  ]
     dwarf_getlocations: [ on  ]
                  glibc: [ on  ]
                   gtk2: [ on  ]
               libaudit: [ OFF ]
                 libbfd: [ on  ]
                 libelf: [ on  ]
                libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
                libperl: [ on  ]
              libpython: [ on  ]
               libslang: [ on  ]
              libcrypto: [ on  ]
              libunwind: [ on  ]
     libdw-dwarf-unwind: [ on  ]
                   zlib: [ on  ]
                   lzma: [ on  ]
              get_cpuid: [ on  ]
                    bpf: [ on  ]
[ on  ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
          OR library is not installed in build environment

v2:
---
Use a global variable version_verbose to count the number of 'v'.

---
  tools/perf/perf.c | 22 ++++++++++++++++++----
  tools/perf/perf.h |  1 +
  2 files changed, 19 insertions(+), 4 deletions(-)
tools/perf/perf.c +0 -0
index 1b3fc8e..355219e 100644

tools/perf/perf.c line 34

Quoted 4 lines
tools/perf/perf.c +1 -1
@@ -32,7 +32,7 @@
  #include <linux/kernel.h>
  const char perf_usage_string[] =
-	"perf [--version] [--help] [OPTIONS] COMMAND [ARGS]";
+	"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

--build-options is 'perf version' option no?

Quoted 2 lines

jirka

Quoted 7 lines

Yes. Command-line something like:

perf --version --build-options or perf -v --build-options.

Is this usage string not correct? If so, I'd like to fix that.

"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

ah I forgot that --version is in fact 'perf version' now I see --build-options depends on --version.. ok ;-)

could you please also create Documentation/perf-version.txt, now when it has option, we should document it

also please use the standard option parsing API we use in commands:

argc = parse_options(argc, argv, record_options, record_usage,
PARSE_OPT_STOP_AT_NON_OPTION);

so we get standard error when the option is mangled, unlinke now, when it's silent:

	[jolsa@krava perf]$ ./perf --version --buil
	perf version 4.16.rc6.gcc183d

thanks,
jirka

author
#9 lore raw

Re: [PATCH v2 4/4] perf: Support perf -vv

Quoted 74 lines · Jiri Olsa
Quoted 73 lines · Yao
Quoted 61 lines · Jiri Olsa
Quoted 53 lines · Jin Yao

We keep having bug reports that when users build perf on their own, but they don't install some needed libraries such as libelf, libbfd/libibery.

The perf can build, but it is missing important functionality.

This patch provides a new option '-vv' which will print the compiled-in status of libraries.

The 'perf -vv' is equal to 'perf -version --build-options'.

For example:

$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183
                   dwarf: [ on  ]
      dwarf_getlocations: [ on  ]
                   glibc: [ on  ]
                    gtk2: [ on  ]
                libaudit: [ OFF ]
                  libbfd: [ on  ]
                  libelf: [ on  ]
                 libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
                 libperl: [ on  ]
               libpython: [ on  ]
                libslang: [ on  ]
               libcrypto: [ on  ]
               libunwind: [ on  ]
      libdw-dwarf-unwind: [ on  ]
                    zlib: [ on  ]
                    lzma: [ on  ]
               get_cpuid: [ on  ]
                     bpf: [ on  ]
[ on  ]: library is compiled-in
[ OFF ]: library is disabled in make configuration
           OR library is not installed in build environment

v2:
---
Use a global variable version_verbose to count the number of 'v'.

---
   tools/perf/perf.c | 22 ++++++++++++++++++----
   tools/perf/perf.h |  1 +
   2 files changed, 19 insertions(+), 4 deletions(-)
tools/perf/perf.c +0 -0
index 1b3fc8e..355219e 100644

tools/perf/perf.c line 34

Quoted 4 lines
tools/perf/perf.c +1 -1
@@ -32,7 +32,7 @@
   #include <linux/kernel.h>
   const char perf_usage_string[] =
-	"perf [--version] [--help] [OPTIONS] COMMAND [ARGS]";
+	"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

--build-options is 'perf version' option no?

Quoted 2 lines

jirka

Yes. Command-line something like:

perf --version --build-options or perf -v --build-options.

Is this usage string not correct? If so, I'd like to fix that.

Quoted 8 lines
Quoted 1 line

"perf [--version [--build-options]] [--help] [OPTIONS] COMMAND [ARGS]";

ah I forgot that --version is in fact 'perf version' now I see --build-options depends on --version.. ok ;-)

could you please also create Documentation/perf-version.txt, now when it has option, we should document it

That's fine. I will create the perf-version.txt.

Quoted 5 lines

also please use the standard option parsing API we use in commands:

argc = parse_options(argc, argv, record_options, record_usage,
PARSE_OPT_STOP_AT_NON_OPTION);

Quoted 9 lines

so we get standard error when the option is mangled, unlinke now, when it's silent:

	[jolsa@krava perf]$ ./perf --version --buil
	perf version 4.16.rc6.gcc183d

thanks,
jirka

Oh, yes. Let me check and update the code. Thanks so much for reminding this.

Thanks
Jin Yao

#10 lore raw

Re: [PATCH v2 4/4] perf: Support perf -vv

In reply to Jin Yao
Quoted 2 lines · Jin Yao
$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183

My suggestion was to add the 'version' subcommand like Git has, not a "-version" option:

  $ git version
  git version 2.14.1

Thanks,

Ingo

author
#11 lore raw

Re: [PATCH v2 4/4] perf: Support perf -vv

Quoted 9 lines · Ingo Molnar
Quoted 2 lines · Jin Yao
$ ./perf -vv or ./perf -version --build-options
perf version 4.13.rc5.gcb1183

My suggestion was to add the 'version' subcommand like Git has, not a "-version" option:

Quoted 7 lines
   $ git version
   git version 2.14.1

Thanks,

Ingo

Hi Ingo,

Sorry about that. Actually I find it's a bug in my patch. The 'perf -vxyz' is mapped to 'perf --version' mistakenly. So 'perf -version' will be mapped to 'perf --version' and 'perf -vabc' will be mapped too.

I will fix this bug.

Currently, 'perf -v', 'perf version' and 'perf --version' have the same behavior.

So I will let:
'perf -v --build-options',
'perf version --build-options',
'perf --version --build-options',
'perf -vv'
have same output.

For example,

$ ./perf version --build-options
perf version 4.13.rc5.gcb1183
                 dwarf: [ on  ]
    dwarf_getlocations: [ on  ]
                 glibc: [ on  ]
                  gtk2: [ on  ]
              libaudit: [ OFF ]
                libbfd: [ on  ]
                libelf: [ on  ]
               libnuma: [ on  ]
numa_num_possible_cpus: [ on  ]
               libperl: [ on  ]
             libpython: [ on  ]
              libslang: [ on  ]
             libcrypto: [ on  ]
             libunwind: [ on  ]
    libdw-dwarf-unwind: [ on  ]
                  zlib: [ on  ]
                  lzma: [ on  ]
             get_cpuid: [ on  ]
                   bpf: [ on  ]

Thanks
Jin Yao