From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Sedat Dilek <sedat.dilek@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
linux-kernel@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>
Subject: Re: [perf] Explicitly use python[3]-[config]
Date: Thu, 30 Jul 2020 08:20:22 -0300 [thread overview]
Message-ID: <20200730112022.GE424218@kernel.org> (raw)
In-Reply-To: <CA+icZUXiz52bk+8bbLTuYCDLqoF9zLiV6NEjzPRgodu3FzCFLg@mail.gmail.com>
Em Thu, Jul 30, 2020 at 12:06:55PM +0200, Sedat Dilek escreveu:
> Hi,
>
> I wanted to have some detailed numbers for building a Linux-kernel
> with GNU-eco-system means GNU/gcc-10 and GNU/binutils-2,35 VS.
> LLVM/Clang with its utils version 11.0.0-rc1.
>
> Arnd recommended me to use "perf stat make ...".
from tools/perf/Makefile.perf
# Define NO_LIBPYTHON to disable python script extension.
#
# Define PYTHON to point to the python binary if the default
# `python' is not correct; for example: PYTHON=python2
#
# Define PYTHON_CONFIG to point to the python-config binary if
# the default `$(PYTHON)-config' is not correct.
Try:
$ make -C tools/perf PYTHON=python3 install-bin
make: Entering directory '/home/acme/git/perf/tools/perf'
BUILD: Doing 'make -j8' parallel build
Auto-detecting system features:
... dwarf: [ on ]
... dwarf_getlocations: [ on ]
... glibc: [ on ]
... gtk2: [ on ]
... libbfd: [ on ]
... libcap: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libcrypto: [ on ]
... libunwind: [ on ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... get_cpuid: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
... disassembler-four-args: [ on ]
CC builtin-bench.o
CC jvmti/libjvmti.o
CC builtin-annotate.o
<SNIP>
LD util/perf-in.o
LD perf-in.o
LINK perf
INSTALL binaries
INSTALL tests
INSTALL perf-read-vdso32
INSTALL libperf-jvmti.so
INSTALL libexec
INSTALL bpf-headers
INSTALL bpf-examples
INSTALL perf-archive
INSTALL perf-with-kcore
INSTALL strace/groups
INSTALL perl-scripts
INSTALL python-scripts
INSTALL perf_completion-script
INSTALL perf-tip
make: Leaving directory '/home/acme/git/perf/tools/perf'
$
$ perf -vv
perf version 5.8.rc4.g0a569391c06e
dwarf: [ on ] # HAVE_DWARF_SUPPORT
dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
glibc: [ on ] # HAVE_GLIBC_SUPPORT
gtk2: [ on ] # HAVE_GTK2_SUPPORT
syscall_table: [ on ] # HAVE_SYSCALL_TABLE_SUPPORT
libbfd: [ on ] # HAVE_LIBBFD_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
libperl: [ on ] # HAVE_LIBPERL_SUPPORT
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
lzma: [ on ] # HAVE_LZMA_SUPPORT
get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
aio: [ on ] # HAVE_AIO_SUPPORT
zstd: [ on ] # HAVE_ZSTD_SUPPORT
$
$ ldd ~/bin/perf | grep python
libpython3.8.so.1.0 => /lib64/libpython3.8.so.1.0 (0x00007f37f65ba000)
$
> First, I tried to build it out of tools/perf from linux.git:
>
> MAKE_OPTS="HOSTCC=clang-11 HOSTCXX=clang++-11 HOSTLD=ld.lld-11
> HOSTAR=llvm-ar-11 CC=clang-11 LD=ld.lld-11 AR=llvm-ar-11 NM=llvm-nm-11
> OBJCOPY=llvm-objcopy-11 OBJDUMP=llvm-objdump-11 OBJSIZE=llvm-size-11
> READELF=llvm-readelf-11 STRIP=llvm-strip-11 LLVM_IAS=1"
>
> LC_ALL=C make V=1 $MAKE_OPTS -C tools/ perf 2>&1 | tee ../build-perf.txt
>
> That showed me - it is building against libpython2.
>
> As python3 is now default for Debian/unstable (and AFAICS
> Debian/testing) I wanted to build explicitly against libpython3 at its
> python3-config.
>
> This needs some hacks like (furthermore I do not want CID in my version-string):
Shouldn't be needed, see above, and yes, we need to make python3 be the
default.
my debian:experimental test build container has:
perfbuilder@8b7dacb5bb86:/$ cat /etc/debian_version
bullseye/sid
perfbuilder@8b7dacb5bb86:/$ clang -v
clang version 9.0.1-13
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .;@m64
Selected multilib: .;@m64
perfbuilder@8b7dacb5bb86:/$
I'll see why it is not yet at clang 11...
Last test build was yesterday:
[root@quaco ~]# grep "CC=clang" dm.log/debian\:experimental
+ make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= -C /git/linux/tools/perf O=/tmp/build/perf CC=clang
+ make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= NO_LIBELF=1 -C /git/linux/tools/perf O=/tmp/build/perf CC=clang
+ make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= NO_LIBBPF=1 -C /git/linux/tools/perf O=/tmp/build/perf CC=clang
[root@quaco ~]#
Those build without problems, after a fix for building libtraceevent
with binutils 2.35, that you'll probably need, its at:
https://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git/commit/?h=tmp.perf/core&id=0a569391c06ee73a132eb395b23b2fe823138835
Please let me know if you need further help.
- Arnaldo
> $ cat ~/src/linux-kernel/perf.diff
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 513633809c81..b4da50754b19 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -225,12 +225,13 @@ endif
> # python[2][-config] in weird combinations but always preferring
> # python2 and python2-config as per pep-0394. If we catch a
> # python[-config] in version 3, the version check will kill it.
> -PYTHON2 := $(if $(call get-executable,python2),python2,python)
> -override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON2))
> -PYTHON2_CONFIG := \
> +# XXX: Explicitly use python3[-config]. -dileks
> +PYTHON3 := $(if $(call get-executable,python3),python3,python)
> +override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON3))
> +PYTHON3_CONFIG := \
> $(if $(call get-executable,$(PYTHON)-config),$(PYTHON)-config,python-config)
> override PYTHON_CONFIG := \
> - $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON2_CONFIG))
> + $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON3_CONFIG))
>
> grep-libs = $(filter -l%,$(1))
> strip-libs = $(filter-out -l%,$(1))
> diff --git a/tools/perf/util/PERF-VERSION-GEN b/tools/perf/util/PERF-VERSION-GEN
> index 59241ff342be..eed9be9a13de 100755
> --- a/tools/perf/util/PERF-VERSION-GEN
> +++ b/tools/perf/util/PERF-VERSION-GEN
> @@ -28,6 +28,8 @@ if test -z "$TAG"
> then
> TAG=$(MAKEFLAGS= make -sC ../.. kernelversion)
> fi
> +# XXX: Do not use Git Commit-ID (CID) in version string. -dileks
> +CID=
> VN="$TAG$CID"
> if test -n "$CID"
> then
>
> In Debian/unstable libpython-dev:amd64 is version 2.7.17-2 and thus
> ships appropriate python[2]-config.
>
> What are your recommendations to build explicitly against python3 and
> its python3-config (here: Debian ships python3 version 3.8.5)?
>
> I can send you my build-perf.txt if needed (approx. 830kiB).
>
> Thanks.
>
> Regards,
> - Sedat -
>
> [1] https://github.com/ClangBuiltLinux/linux/issues/1086#issuecomment-665540053
>
> P.S.: Uninstall all python2 dev packages and replace them via python3
> dev packages.
>
> # diff -uprN packages_0518.txt packages_0519.txt | egrep '^[+|-]ii'
> -ii libpython-dev:amd64 2.7.17-2
> -ii libpython2-dev:amd64 2.7.17-2
> -ii libpython2.7-dev:amd64 2.7.18-1
> +ii libpython3-dev:amd64 3.8.2-3
> +ii libpython3.8-dev:amd64 3.8.5-1
> +ii libunwind-dev:amd64 1.2.1-11
> +ii libzstd-dev:amd64 1.4.5+dfsg-3
> +ii lz4 1.9.2-2
> -ii python-dev 2.7.17-2
> -ii python2-dev 2.7.17-2
> -ii python2.7-dev 2.7.18-1
> +ii python3-dev 3.8.2-3
> +ii python3.8-dev 3.8.5-1
> +ii systemtap-sdt-dev 4.3-1
>
> - EOT -
--
- Arnaldo
next prev parent reply other threads:[~2020-07-30 11:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-30 10:06 [perf] Explicitly use python[3]-[config] Sedat Dilek
2020-07-30 11:20 ` Arnaldo Carvalho de Melo [this message]
2020-07-30 12:04 ` Sedat Dilek
2020-07-31 10:42 ` Sedat Dilek
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=20200730112022.GE424218@kernel.org \
--to=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=arnd@arndb.de \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=sedat.dilek@gmail.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 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.