17 Oct, 2018

1 commit

  • So the extra user build flags are propagated to libtraceevent.

    Signed-off-by: Jiri Olsa
    Cc: "Herton R. Krzesinski"
    Cc: Steven Rostedt (VMware)
    Cc: Tzvetomir Stoyanov (VMware)
    Cc: Yordan Karadzhov (VMware)
    Link: http://lkml.kernel.org/r/20181016150614.21260-3-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

31 Aug, 2018

1 commit

  • We were emitting 4 lines, two of them misleading:

    make: Entering directory '/home/acme/git/perf/tools/perf'

    INSTALL lib
    INSTALL include/bpf
    INSTALL lib
    INSTALL examples/bpf

    make: Leaving directory '/home/acme/git/perf/tools/perf'

    Make it more compact by showing just two lines:

    make: Entering directory '/home/acme/git/perf/tools/perf'
    INSTALL bpf-headers
    INSTALL bpf-examples
    make: Leaving directory '/home/acme/git/perf/tools/perf'

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-0nvkyciqdkrgy829lony5925@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

31 Jul, 2018

1 commit


19 May, 2018

1 commit

  • Before:

    INSTALL lib
    install include/bpf/*.h '/home/acme/lib/include/perf/bpf'
    INSTALL lib
    install examples/bpf/*.c '/home/acme/lib/examples/perf/bpf'

    After:

    INSTALL lib
    INSTALL include/bpf
    INSTALL lib
    INSTALL examples/bpf

    Reported-by: Ingo Molnar
    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Fixes: dd8e4ead6e98 ("perf bpf: Add bpf.h to be used in eBPF proggies")
    Fixes: 8f12a2ff00e5 ("perf bpf: Add 'examples' directories")
    Link: https://lkml.kernel.org/n/tip-icljqe87e8pak8mu6mkki9d4@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

16 May, 2018

3 commits

  • So, the first helper is the one shortening a variable/function section
    attribute, from, for instance:

    char _license[] __attribute__((section("license"), used)) = "GPL";

    to:

    char _license[] SEC("license") = "GPL";

    Convert empty.c to that and it becomes:

    # cat ~acme/lib/examples/perf/bpf/empty.c
    #include

    char _license[] SEC("license") = "GPL";
    int _version SEC("version") = LINUX_VERSION_CODE;
    #

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-zmeg52dlvy51rdlhyumfl5yf@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • The first one is the bare minimum that bpf infrastructure accepts before
    it expects actual events to be set up:

    $ cat tools/perf/examples/bpf/empty.c
    char _license[] __attribute__((section("license"), used)) = "GPL";
    int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
    $

    If you remove that "version" line, then it will be refused with:

    # perf trace -e tools/perf/examples/bpf/empty.c
    event syntax error: 'tools/perf/examples/bpf/empty.c'
    \___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost

    (add -v to see detail)
    Run 'perf list' for a list of valid events

    Usage: perf trace [] []
    or: perf trace [] -- []
    or: perf trace record [] []
    or: perf trace record [] -- []

    -e, --event event/syscall selector. use 'perf list' to list available events
    #

    The next ones will, step by step, show simple filters, then the needs
    for headers will be made clear, it will be put in place and tested with
    new examples, rinse, repeat.

    Back to using this first one to test the perf+bpf infrastructure:

    If we run it will fail, as no functions are present connecting with,
    say, a tracepoint or a function using the kprobes or uprobes
    infrastructure:

    # perf trace -e tools/perf/examples/bpf/empty.c
    WARNING: event parser found nothing
    invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
    Run 'perf list' for a list of valid events

    Usage: perf trace [] []
    or: perf trace [] -- []
    or: perf trace record [] []
    or: perf trace record [] -- []

    -e, --event event/syscall selector. use 'perf list' to list available events
    #

    But, if we set things up to dump the generated object file to a file,
    and do this after having run 'make install', still on the developer's
    $HOME directory:

    # cat ~/.perfconfig
    [llvm]

    dump-obj = true
    #
    # perf trace -e ~acme/lib/examples/perf/bpf/empty.c
    LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
    WARNING: event parser found nothing
    invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'

    #

    We can look at the dumped object file:

    # ls -la ~acme/lib/examples/perf/bpf/empty.o
    -rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
    # file ~acme/lib/examples/perf/bpf/empty.o
    /home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
    # readelf -sw ~acme/lib/examples/perf/bpf/empty.o

    Symbol table '.symtab' contains 3 entries:
    Num: Value Size Type Bind Vis Ndx Name
    0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
    1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
    2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
    #
    # tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
    null
    #

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • We'll start putting headers for helpers to be used in eBPF proggies in
    there:

    # perf trace -v --no-syscalls -e empty.c |& grep "llvm compiling command : "
    llvm compiling command : /usr/lib64/ccache/clang -D__KERNEL__ -D__NR_CPUS__=4 -DLINUX_VERSION_CODE=0x41100 -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/7/include -I/home/acme/git/linux/arch/x86/include -I./arch/x86/include/generated -I/home/acme/git/linux/include -I./include -I/home/acme/git/linux/arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I/home/acme/git/linux/include/uapi -I./include/generated/uapi -include /home/acme/git/linux/include/linux/kconfig.h -I/home/acme/lib/include/perf/bpf -Wno-unused-value -Wno-pointer-sign -working-directory /lib/modules/4.17.0-rc3-00034-gf4ef6a438cee/build -c /home/acme/bpf/empty.c -target bpf -O2 -o -
    #

    Notice the "-I/home/acme/lib/include/perf/bpf"

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-6xq94xro8xlb5s9urznh3f9k@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

09 Apr, 2018

1 commit

  • For libclang, some distro packages provide static libraries (.a) while
    some provide shared libraries (.so). Currently, perf code can only be
    linked with static libraries. This makes perf build possible for both
    cases.

    Signed-off-by: Sandipan Das
    Cc: Jiri Olsa
    Cc: Naveen N. Rao
    Fixes: d58ac0bf8d1e ("perf build: Add clang and llvm compile and linking support")
    Link: http://lkml.kernel.org/r/20180404180419.19056-1-sandipan@linux.vnet.ibm.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Sandipan Das
     

08 Mar, 2018

1 commit

  • We have some .cpp files, make ctags/cscope aware of them.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: David Ahern
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180307155020.32613-17-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

06 Mar, 2018

1 commit


22 Feb, 2018

1 commit

  • Currently a number of Makefiles break when used with toolchains that
    pass extra flags in CC and other cross-compile related variables (such
    as --sysroot).

    Thus we get this error when we use a toolchain that puts --sysroot in
    the CC var:

    ~/src/linux/tools$ make iio
    [snip]
    iio_event_monitor.c:18:10: fatal error: unistd.h: No such file or directory
    #include
    ^~~~~~~~~~

    This occurs because we clobber several env vars related to
    cross-compiling with lines like this:

    CC = $(CROSS_COMPILE)gcc

    Although this will point to a valid cross-compiler, we lose any extra
    flags that might exist in the CC variable, which can break toolchains
    that rely on them (for example, those that use --sysroot).

    This easily shows up using a Yocto SDK:

    $ . [snip]/sdk/environment-setup-cortexa8hf-neon-poky-linux-gnueabi

    $ echo $CC
    arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard
    -mcpu=cortex-a8
    --sysroot=[snip]/sdk/sysroots/cortexa8hf-neon-poky-linux-gnueabi

    $ echo $CROSS_COMPILE
    arm-poky-linux-gnueabi-

    $ echo ${CROSS_COMPILE}gcc
    krm-poky-linux-gnueabi-gcc

    Although arm-poky-linux-gnueabi-gcc is a cross-compiler, we've lost the
    --sysroot and other flags that enable us to find the right libraries to
    link against, so we can't find unistd.h and other libraries and headers.
    Normally with the --sysroot flag we would find unistd.h in the sdk
    directory in the sysroot:

    $ find [snip]/sdk/sysroots -path '*/usr/include/unistd.h'
    [snip]/sdk/sysroots/cortexa8hf-neon-poky-linux-gnueabi/usr/include/unistd.h

    The perf Makefile adds CC = $(CROSS_COMPILE)gcc if and only if CC is not
    already set, and it compiles correctly with the above toolchain.

    So, generalize the logic that perf uses in the common Makefile and
    remove the manual CC = $(CROSS_COMPILE)gcc lines from each Makefile.

    Note that this patch does not fix cross-compile for all the tools (some
    have other bugs), but it does fix it for all except usb and acpi, which
    still have other unrelated issues.

    I tested both with and without the patch on native and cross-build and
    there appear to be no regressions.

    Link: http://lkml.kernel.org/r/20180107214028.23771-1-martin@martingkelly.com
    Signed-off-by: Martin Kelly
    Acked-by: Mark Brown
    Cc: Tejun Heo
    Cc: Li Zefan
    Cc: Johannes Weiner
    Cc: Linus Walleij
    Cc: "K. Y. Srinivasan"
    Cc: Haiyang Zhang
    Cc: Stephen Hemminger
    Cc: Jonathan Cameron
    Cc: Pali Rohar
    Cc: Richard Purdie
    Cc: Jacek Anaszewski
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: Robert Moore
    Cc: Lv Zheng
    Cc: "Rafael J. Wysocki"
    Cc: Greg Kroah-Hartman
    Cc: Valentina Manea
    Cc: Shuah Khan
    Cc: Mario Limonciello
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Martin Kelly
     

19 Feb, 2018

1 commit

  • Added Python 3 support while keeping Python 2.7 compatibility.

    Committer notes:

    This doesn't make it to auto detect python 3, one has to explicitely ask
    it to build with python 3 devel files, here are the instructions
    provided by Jaroslav:

    ---
    $ cp -a tools/perf tools/python3-perf
    $ make V=1 prefix=/usr -C tools/perf PYTHON=/usr/bin/python2 all
    $ make V=1 prefix=/usr -C tools/python3-perf PYTHON=/usr/bin/python3 all
    $ make V=1 prefix=/usr -C tools/python3-perf PYTHON=/usr/bin/python3 DESTDIR=%{buildroot} install-python_ext
    $ make V=1 prefix=/usr -C tools/perf PYTHON=/usr/bin/python2 DESTDIR=%{buildroot} install-python_ext
    ---

    We need to make this automatic, just like the existing tests for checking if
    the python2 devel files are in place, allowing the build with python3 if
    available, fallbacking to python2 and then just disabling it if none are
    available.

    So, using the PYTHON variable to build it using O= we get:

    Before this patch:

    $ rpm -q python3 python3-devel
    python3-3.6.4-7.fc27.x86_64
    python3-devel-3.6.4-7.fc27.x86_64
    $ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make O=/tmp/build/perf PYTHON=/usr/bin/python3 -C tools/perf install-bin
    make: Entering directory '/home/acme/git/linux/tools/perf'

    Makefile.config:670: Python 3 is not yet supported; please set
    Makefile.config:671: PYTHON and/or PYTHON_CONFIG appropriately.
    Makefile.config:672: If you also have Python 2 installed, then
    Makefile.config:673: try something like:
    Makefile.config:674:
    Makefile.config:675: make PYTHON=python2
    Makefile.config:676:
    Makefile.config:677: Otherwise, disable Python support entirely:
    Makefile.config:678:
    Makefile.config:679: make NO_LIBPYTHON=1
    Makefile.config:680:
    Makefile.config:681: *** . Stop.
    make[1]: *** [Makefile.perf:212: sub-make] Error 2
    make: *** [Makefile:110: install-bin] Error 2
    make: Leaving directory '/home/acme/git/linux/tools/perf'
    $

    After:

    $ make O=/tmp/build/perf PYTHON=python3 -C tools/perf install-bin
    $ ldd ~/bin/perf | grep python
    libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007f58a31e8000)
    $ rpm -qf /lib64/libpython3.6m.so.1.0
    python3-libs-3.6.4-7.fc27.x86_64
    $

    Now verify that when using the binding the right ELF file is loaded,
    using perf trace:

    $ perf trace -e open* perf test python
    0.051 ( 0.016 ms): perf/3927 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC ) = 3

    18: 'import perf' in python :
    8.849 ( 0.013 ms): sh/3929 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC ) = 3

    25.572 ( 0.008 ms): python3/3931 openat(dfd: CWD, filename: /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so, flags: CLOEXEC) = 3

    Ok

    $

    And using tools/perf/python/twatch.py, to show PERF_RECORD_ metaevents:

    $ python3 tools/perf/python/twatch.py
    cpu: 3, pid: 16060, tid: 16060 { type: fork, pid: 5207, ppid: 16060, tid: 5207, ptid: 16060, time: 10798513015459}
    cpu: 3, pid: 16060, tid: 16060 { type: fork, pid: 5208, ppid: 16060, tid: 5208, ptid: 16060, time: 10798513562503}
    cpu: 0, pid: 5208, tid: 5208 { type: comm, pid: 5208, tid: 5208, comm: grep }
    cpu: 2, pid: 5207, tid: 5207 { type: comm, pid: 5207, tid: 5207, comm: ps }
    cpu: 2, pid: 5207, tid: 5207 { type: exit, pid: 5207, ppid: 5207, tid: 5207, ptid: 5207, time: 10798551337484}
    cpu: 3, pid: 5208, tid: 5208 { type: exit, pid: 5208, ppid: 5208, tid: 5208, ptid: 5208, time: 10798551292153}
    cpu: 3, pid: 601, tid: 601 { type: fork, pid: 5209, ppid: 601, tid: 5209, ptid: 601, time: 10801779977324}
    ^CTraceback (most recent call last):
    File "tools/perf/python/twatch.py", line 68, in
    main()
    File "tools/perf/python/twatch.py", line 40, in main
    evlist.poll(timeout = -1)
    KeyboardInterrupt
    $

    # ps ax|grep twatch
    5197 pts/8 S+ 0:00 python3 tools/perf/python/twatch.py
    # ls -la /proc/5197/smaps
    -r--r--r--. 1 acme acme 0 Feb 19 13:14 /proc/5197/smaps
    # grep python /proc/5197/smaps
    558111307000-558111309000 r-xp 00000000 fd:00 3151710 /usr/bin/python3.6
    558111508000-558111509000 r--p 00001000 fd:00 3151710 /usr/bin/python3.6
    558111509000-55811150a000 rw-p 00002000 fd:00 3151710 /usr/bin/python3.6
    7ffad6fc1000-7ffad7008000 r-xp 00000000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
    7ffad7008000-7ffad7207000 ---p 00047000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
    7ffad7207000-7ffad7208000 r--p 00046000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
    7ffad7208000-7ffad7215000 rw-p 00047000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
    7ffadea77000-7ffaded3d000 r-xp 00000000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
    7ffaded3d000-7ffadef3c000 ---p 002c6000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
    7ffadef3c000-7ffadef42000 r--p 002c5000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
    7ffadef42000-7ffadefa5000 rw-p 002cb000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
    #

    And with this patch, but building normally, without specifying the
    PYTHON=python3 part, which will make it use python2 if its devel files are
    available, like in this test:

    $ make O=/tmp/build/perf -C tools/perf install-bin
    $ ldd ~/bin/perf | grep python
    libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f6a44410000)
    $ ldd /tmp/build/perf/python_ext_build/lib/perf.so | grep python
    libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007fed28a2c000)
    $

    [acme@jouet perf]$ tools/perf/python/twatch.py
    cpu: 0, pid: 2817, tid: 2817 { type: fork, pid: 2817, ppid: 2817, tid: 8910, ptid: 2817, time: 11126454335306}
    cpu: 0, pid: 2817, tid: 2817 { type: comm, pid: 2817, tid: 8910, comm: worker }
    $ ps ax | grep twatch.py
    8909 pts/8 S+ 0:00 /usr/bin/python tools/perf/python/twatch.py
    $ grep python /proc/8909/smaps
    5579de658000-5579de659000 r-xp 00000000 fd:00 3156044 /usr/bin/python2.7
    5579de858000-5579de859000 r--p 00000000 fd:00 3156044 /usr/bin/python2.7
    5579de859000-5579de85a000 rw-p 00001000 fd:00 3156044 /usr/bin/python2.7
    7f0de01f7000-7f0de023e000 r-xp 00000000 00:2d 230695 /tmp/build/perf/python/perf.so
    7f0de023e000-7f0de043d000 ---p 00047000 00:2d 230695 /tmp/build/perf/python/perf.so
    7f0de043d000-7f0de043e000 r--p 00046000 00:2d 230695 /tmp/build/perf/python/perf.so
    7f0de043e000-7f0de044b000 rw-p 00047000 00:2d 230695 /tmp/build/perf/python/perf.so
    7f0de6f0f000-7f0de6f13000 r-xp 00000000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
    7f0de6f13000-7f0de7113000 ---p 00004000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
    7f0de7113000-7f0de7114000 r--p 00004000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
    7f0de7114000-7f0de7115000 rw-p 00005000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
    7f0de7e73000-7f0de8052000 r-xp 00000000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
    7f0de8052000-7f0de8251000 ---p 001df000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
    7f0de8251000-7f0de8255000 r--p 001de000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
    7f0de8255000-7f0de8291000 rw-p 001e2000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
    $

    Signed-off-by: Jaroslav Škarvada
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    LPU-Reference: 20180119205641.24242-1-jskarvad@redhat.com
    Link: https://lkml.kernel.org/n/tip-8d7dt9kqp83vsz25hagug8fu@git.kernel.org
    [ Removed explicit check for python version, allowing it to really build with python3 ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Jaroslav Škarvada
     

25 Jan, 2018

1 commit

  • The Open CoreSight Decoding Library (openCSD) is a free and open library
    to decode traces collected by the CoreSight hardware infrastructure.

    This patch adds the required mechanic to recognise the presence of the
    openCSD library on a system and set up miscellaneous flags to be used in
    the compilation of the trace decoding feature.

    Signed-off-by: Mathieu Poirier
    Cc: Adrian Hunter
    Cc: Alexander Shishkin
    Cc: Jiri Olsa
    Cc: Kim Phillips
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Mike Leach
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: Suzuki Poulouse
    Link: http://lkml.kernel.org/r/1516211539-5166-2-git-send-email-mathieu.poirier@linaro.org
    Link: http://lkml.kernel.org/r/1516635644-24819-1-git-send-email-mathieu.poirier@linaro.org
    [ Merged missing test-libopencsd.c file, provided later by Mathieu ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Mathieu Poirier
     

23 Jan, 2018

1 commit

  • Introduce a script that generates a mapping of errno numbers to their
    names for each architecture that is supported by perf (i.e. has a
    subdirectory in tools/perf/arch/).

    The errno mapping is generated as part of the trace beautifiers and can
    be used by including the trace/beauty/arch_errno_names.c file. Then,
    use arch_syscalls__strerrno() to look up an errno value to obtain the
    errno name (e.g. ENOENT) for a particular architecture.

    Signed-off-by: Hendrik Brueckner
    Reviewed-by: Thomas Richter
    Suggested-by: Arnaldo Carvalho de Melo
    Cc: Jiri Olsa
    Cc: Michael Petlan
    Cc: linux-s390@vger.kernel.org
    LPU-Reference: 1516352177-11106-4-git-send-email-brueckner@linux.vnet.ibm.com
    Link: https://lkml.kernel.org/n/tip-8zlsjnuoep2ww39aq5z41fno@git.kernel.org
    [ Make x86 be the first arch, most common, add newline to last line, fixing build on centos:5 ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Hendrik Brueckner
     

08 Jan, 2018

1 commit

  • There's no reason anymore to treat babel trace in a special way, because
    a) we no longer display its state b) the needed babeltrace library is
    now out and well adopted among distros.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Andi Kleen
    Cc: David Ahern
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180107160356.28203-2-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

01 Nov, 2017

1 commit

  • For some unknown reason there is no entry in tracefs's syscalls for
    kcmp, i.e. no tracefs/events/syscalls/sys_{enter,exit}_kcmp, so we need
    to provide a data dictionary for the fields.

    To beautify the 'type' argument we automatically generate a strarray
    from tools/include/uapi/kcmp.h, the idx1 and idx2 args, nowadays used
    only if type == KCMP_FILE, are masked for all the other types and a
    lookup is made for the thread and fd to show the path, if possible,
    getting it from the probe:vfs_getname if in place or from procfs, races
    allowing.

    A system wide strace like tracing session, with callchains shows just
    one user so far in this fedora 25 machine:

    # perf trace --max-stack 5 -e kcmp

    1502914.400 ( 0.001 ms): systemd/1 kcmp(pid1: 1 (systemd), pid2: 1 (systemd), type: FILE, idx1: 271, idx2: 25) = -1 ENOSYS Function not implemented
    syscall (/usr/lib64/libc-2.25.so)
    same_fd (/usr/lib/systemd/libsystemd-shared-233.so)
    service_add_fd_store (/usr/lib/systemd/systemd)
    service_notify_message.lto_priv.127 (/usr/lib/systemd/systemd)
    1502914.407 ( 0.001 ms): systemd/1 kcmp(pid1: 1 (systemd), pid2: 1 (systemd), type: FILE, idx1: 270, idx2: 25) = -1 ENOSYS Function not implemented
    syscall (/usr/lib64/libc-2.25.so)
    same_fd (/usr/lib/systemd/libsystemd-shared-233.so)
    service_add_fd_store (/usr/lib/systemd/systemd)
    service_notify_message.lto_priv.127 (/usr/lib/systemd/systemd)

    The backtraces seem to agree this is really kcmp(), but this system
    doesn't have the sys_kcmp(), bummer:

    # uname -a
    Linux jouet 4.14.0-rc3+ #1 SMP Fri Oct 13 12:21:12 -03 2017 x86_64 x86_64 x86_64 GNU/Linux
    # grep kcmp /proc/kallsyms
    ffffffffb60b8890 W sys_kcmp
    $ grep CONFIG_CHECKPOINT_RESTORE ../build/v4.14.0-rc3+/.config
    # CONFIG_CHECKPOINT_RESTORE is not set
    $

    So systemd uses it, good fedora kernel config has it:

    $ grep CONFIG_CHECKPOINT_RESTORE /boot/config-4.13.4-200.fc26.x86_64
    CONFIG_CHECKPOINT_RESTORE=y
    [acme@jouet linux]$

    /me goes to rebuild a kernel...

    Cc: Adrian Hunter
    Cc: Andrey Vagin
    Cc: Cyrill Gorcunov
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-gz5fca968viw8m7hryjqvrln@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

27 Oct, 2017

1 commit

  • This is one more case where the way that syscall parameter values are
    defined in kernel headers are easy to parse using a shell script that
    will then generate the string table that gets used by the prctl 'option'
    argument beautifier.

    This way as soon as the header syncronization mechanism in perf's build
    system detects a change in a copy of a kernel ABI header and that file
    is syncronized, we get 'perf trace' updated automagically.

    Further work needed for the PR_SET_ values, as well for using eBPF to
    copy the non-integer arguments to/from the kernel.

    E.g.: System wide prctl tracing:

    # perf trace -e prctl
    1668.028 ( 0.025 ms): TaskSchedulerR/10649 prctl(option: SET_NAME, arg2: 0x2b61d5db15d0) = 0
    3365.663 ( 0.018 ms): chrome/10650 prctl(option: SET_SECCOMP, arg2: 2, arg4: 8 ) = -1 EFAULT Bad address
    3366.585 ( 0.010 ms): chrome/10650 prctl(option: SET_NO_NEW_PRIVS, arg2: 1 ) = 0
    3367.173 ( 0.009 ms): TaskSchedulerR/10652 prctl(option: SET_NAME, arg2: 0x2b61d2aaa300) = 0
    3367.222 ( 0.003 ms): TaskSchedulerR/10653 prctl(option: SET_NAME, arg2: 0x2b61d2aaa1e0) = 0
    3367.244 ( 0.002 ms): TaskSchedulerR/10654 prctl(option: SET_NAME, arg2: 0x2b61d2aaa0c0) = 0
    3367.265 ( 0.002 ms): TaskSchedulerR/10655 prctl(option: SET_NAME, arg2: 0x2b61d2ac7f90) = 0
    3367.281 ( 0.002 ms): Chrome_ChildIO/10656 prctl(option: SET_NAME, arg2: 0x7efbe406bb11) = 0
    3367.220 ( 0.004 ms): TaskSchedulerS/10651 prctl(option: SET_NAME, arg2: 0x2b61d2ac1be0) = 0
    3370.906 ( 0.010 ms): GpuMemoryThrea/10657 prctl(option: SET_NAME, arg2: 0x7efbe386ab11) = 0
    3370.983 ( 0.003 ms): File/10658 prctl(option: SET_NAME, arg2: 0x7efbe3069b11 ) = 0
    3384.272 ( 0.020 ms): Compositor/10659 prctl(option: SET_NAME, arg2: 0x7efbe2868b11 ) = 0
    3612.091 ( 0.012 ms): DOM Worker/11489 prctl(option: SET_NAME, arg2: 0x7f49ab97ebf2 ) = 0

    4512.437 ( 0.004 ms): (sa1)/11490 prctl(option: SET_NAME, arg2: 0x7ffca15af844 ) = 0
    4512.468 ( 0.002 ms): (sa1)/11490 prctl(option: SET_MM, arg2: ARG_START, arg3: 0x7f5cb7c81000) = 0
    4512.472 ( 0.001 ms): (sa1)/11490 prctl(option: SET_MM, arg2: ARG_END, arg3: 0x7f5cb7c81006) = 0
    4514.667 ( 0.002 ms): (sa1)/11490 prctl(option: GET_SECUREBITS ) = 0

    Cc: Adrian Hunter
    Cc: Andy Lutomirski
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-q0s2uw579o5ei6xlh2zjirgz@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

22 Sep, 2017

1 commit

  • This is one more case where the way that syscall parameter values are
    defined in kernel headers are easy to parse using a shell script that
    will then generate the string table that gets used by the madvise
    'behaviour' argument beautifier.

    This way as soon as the header syncronization mechanism in perf's build
    system detects a change in a copy of a kernel ABI header and that file
    is syncronized, we get 'perf trace' updated automagically.

    So, when we syncronize this:

    Warning: Kernel ABI header at 'tools/include/uapi/asm-generic/mman-common.h' differs from latest version at 'include/uapi/asm-generic/mman-common.h'

    We'll get these:

    #define MADV_WIPEONFORK 18 /* Zero memory on fork, child only */
    #define MADV_KEEPONFORK 19 /* Undo MADV_WIPEONFORK */

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Rik van Riel
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-dolb0ghds4ui7wc1npgkchvc@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

13 Sep, 2017

1 commit

  • To be able to cleanup only python related binaries.

    Signed-off-by: Jiri Olsa
    Cc: David Ahern
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20170908084621.31595-3-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

29 Aug, 2017

3 commits

  • Reuse 'mprotect' beautifiers for 'pkey_mprotect'.

    System wide tracing pkey_alloc, pkey_free and pkey_mprotect calls, with
    backtraces:

    # perf trace -e pkey_alloc,pkey_mprotect,pkey_free --max-stack=5
    0.000 ( 0.011 ms): pkey/7818 pkey_alloc(init_val: DISABLE_ACCESS|DISABLE_WRITE) = -1 EINVAL Invalid argument
    syscall (/usr/lib64/libc-2.25.so)
    pkey_alloc (/home/acme/c/pkey)
    0.022 ( 0.003 ms): pkey/7818 pkey_mprotect(start: 0x7f28c3890000, len: 4096, prot: READ|WRITE, pkey: -1) = 0
    syscall (/usr/lib64/libc-2.25.so)
    pkey_mprotect (/home/acme/c/pkey)
    0.030 ( 0.002 ms): pkey/7818 pkey_free(pkey: -1 ) = -1 EINVAL Invalid argument
    syscall (/usr/lib64/libc-2.25.so)
    pkey_free (/home/acme/c/pkey)

    The tools/include/uapi/asm-generic/mman-common.h file is used to find
    the access rights defines for the pkey_alloc syscall second argument.

    Since we have the detector of changes for the tools/include header files
    versus its kernel origin (include/uapi/asm-generic/mman-common.h), we'll
    get whatever new flag appears for that argument automatically.

    This method should be used in other cases where it is easy to generate
    those flags tables because the header has properly namespaced defines
    like PKEY_DISABLE_ACCESS and PKEY_DISABLE_WRITE.

    Cc: Adrian Hunter
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-3xq5312qlks7wtfzv2sk3nct@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • When building with an external FEATURES_DUMP, bpf complains
    that features dump file is not found. Fix it by passing full file path.

    Signed-off-by: David Carrillo-Cisneros
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Paul Turner
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/20170827075442.108534-7-davidcc@google.com
    Signed-off-by: Arnaldo Carvalho de Melo

    David Carrillo-Cisneros
     
  • Allow user to define flex and bison binary names by passing FLEX and
    BISON variables.

    Signed-off-by: David Carrillo-Cisneros
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Paul Turner
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/20170827075442.108534-3-davidcc@google.com
    Signed-off-by: Arnaldo Carvalho de Melo

    David Carrillo-Cisneros
     

28 Aug, 2017

1 commit

  • We can't pass --dynamic-list list into static build anymore, because
    compilers starts to scream about that. Fedora 26 started to fail build
    with following error:

    $ make LDFLAGS=-static
    ...
    /usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/x86_64-redhat-linux/7/../../../../lib64/libc.a(strcmp.o
    +)' can not be used when making an executable; recompile with -fPIE and relink with -pie

    There's no sense for --dynamic-list in static build, because there's no
    .dynsym table in static binary. Consequently the traceevent plugins have
    never worked with static build, but it was quietly passed by.

    To fix this in future I think we should add support to compile plugins
    within the perf binary directly for static build.

    Reported-and-Tested-by: Arnaldo Carvalho de Melo
    Signed-off-by: Jiri Olsa
    Link: http://lkml.kernel.org/n/tip-jeg6a7ff9j9hlqn8k4gllzvv@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

12 Aug, 2017

2 commits

  • Multiple tests will be able to reuse these functions, to test things
    like perf report, 'trace', etc, using this probe.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Thomas Richter
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-48xagvozhouhyi8fjota6o2d@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Now that we have shell tests, install them.

    Developers don't need this pass, as 'perf test' will look first at the
    in tree scripts at tools/perf/tests/shell/.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Thomas Richter
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-j21u4v0jsehi0lpwqwjb4j45@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

02 Aug, 2017

5 commits

  • Also trying a new approach, using the copy of uapi/linux/perf_event.h we
    auto generate the string tables, then include it in the ioctl cmd
    beautifier.

    This way either the perf developers will add the new commands to the
    tools/ copy, like is happening with other areas of tools/include/ (bpf.h
    comes to mind), or we'll be notified when building perf that our copy
    drifted.

    E.g., looking at some of the perf ioctls issued by the 'perf test' test cases:

    # (perf trace -e perf_event_open,ioctl perf test) 2>&1 | egrep "(cmd: PERF_|perf_event_open)"
    4: Read samples using the mmap interface :
    348.811 ( 0.062 ms): perf/23351 perf_event_open(attr_uptr: 0x414a5e8, pid: 23351 (perf), group_fd: -1, flags: FD_CLOEXEC) = 3
    348.878 ( 0.039 ms): perf/23351 perf_event_open(attr_uptr: 0x414a5e8, pid: 23351 (perf), cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 4
    348.919 ( 0.036 ms): perf/23351 perf_event_open(attr_uptr: 0x414a5e8, pid: 23351 (perf), cpu: 2, group_fd: -1, flags: FD_CLOEXEC) = 5
    348.958 ( 0.036 ms): perf/23351 perf_event_open(attr_uptr: 0x414a5e8, pid: 23351 (perf), cpu: 3, group_fd: -1, flags: FD_CLOEXEC) = 6
    349.070 ( 0.046 ms): perf/23351 perf_event_open(attr_uptr: 0x414aa38, pid: 23351 (perf), group_fd: -1, flags: FD_CLOEXEC) = 7
    349.120 ( 0.037 ms): perf/23351 perf_event_open(attr_uptr: 0x414aa38, pid: 23351 (perf), cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 8
    349.161 ( 0.036 ms): perf/23351 perf_event_open(attr_uptr: 0x414aa38, pid: 23351 (perf), cpu: 2, group_fd: -1, flags: FD_CLOEXEC) = 9
    349.201 ( 0.035 ms): perf/23351 perf_event_open(attr_uptr: 0x414aa38, pid: 23351 (perf), cpu: 3, group_fd: -1, flags: FD_CLOEXEC) = 10
    349.306 ( 0.041 ms): perf/23351 perf_event_open(attr_uptr: 0x414b2d8, pid: 23351 (perf), group_fd: -1, flags: FD_CLOEXEC) = 11
    349.611 ( 0.005 ms): perf/23351 ioctl(fd: 3, cmd: PERF_ID, arg: 0x7fff025999b8) = 0
    349.619 ( 0.002 ms): perf/23351 ioctl(fd: 7, cmd: PERF_SET_OUTPUT, arg: 0x3 ) = 0
    349.623 ( 0.002 ms): perf/23351 ioctl(fd: 7, cmd: PERF_ID, arg: 0x7fff025999b8) = 0
    349.627 ( 0.002 ms): perf/23351 ioctl(fd: 11, cmd: PERF_SET_OUTPUT, arg: 0x3 ) = 0
    349.630 ( 0.001 ms): perf/23351 ioctl(fd: 11, cmd: PERF_ID, arg: 0x7fff025999b8) = 0

    7: PERF_RECORD_* events & perf_sample fields :
    647.150 ( 0.014 ms): perf/23354 perf_event_open(attr_uptr: 0x7fff02599920, pid: -1, cpu: 2, group_fd: -1, flags: FD_CLOEXEC) = 3
    647.197 ( 0.076 ms): perf/23354 perf_event_open(attr_uptr: 0x414b478, pid: -1, group_fd: -1, flags: FD_CLOEXEC) = 3
    647.289 ( 0.040 ms): perf/23354 perf_event_open(attr_uptr: 0x414b478, pid: -1, group_fd: -1, flags: FD_CLOEXEC) = 3
    647.368 ( 0.011 ms): perf/23354 perf_event_open(attr_uptr: 0x414a5e8, pid: 23355 (perf), group_fd: -1, flags: FD_CLOEXEC) = 3
    647.381 ( 0.005 ms): perf/23354 perf_event_open(attr_uptr: 0x414a5e8, pid: 23355 (perf), cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 4
    647.387 ( 0.005 ms): perf/23354 perf_event_open(attr_uptr: 0x414a5e8, pid: 23355 (perf), cpu: 2, group_fd: -1, flags: FD_CLOEXEC) = 5
    647.393 ( 0.004 ms): perf/23354 perf_event_open(attr_uptr: 0x414a5e8, pid: 23355 (perf), cpu: 3, group_fd: -1, flags: FD_CLOEXEC) = 7
    648.026 ( 0.011 ms): perf/23354 ioctl(fd: 3, cmd: PERF_ENABLE) = 0
    648.038 ( 0.002 ms): perf/23354 ioctl(fd: 4, cmd: PERF_ENABLE) = 0
    648.042 ( 0.002 ms): perf/23354 ioctl(fd: 5, cmd: PERF_ENABLE) = 0
    648.045 ( 0.002 ms): perf/23354 ioctl(fd: 7, cmd: PERF_ENABLE) = 0

    18: Breakpoint overflow signal handler :
    2772.721 ( 0.017 ms): perf/23375 perf_event_open(attr_uptr: 0x7fff02599d20, pid: -1, cpu: 3, group_fd: -1, flags: FD_CLOEXEC) = 3
    2772.748 ( 0.009 ms): perf/23375 perf_event_open(attr_uptr: 0x7fff02599e60, cpu: -1, group_fd: -1, flags: FD_CLOEXEC) = 3
    2772.768 ( 0.002 ms): perf/23375 ioctl(fd: 3, cmd: PERF_RESET) = 0
    2772.776 ( 0.008 ms): perf/23375 perf_event_open(attr_uptr: 0x7fff02599e60, cpu: -1, group_fd: -1, flags: FD_CLOEXEC) = 4
    2772.788 ( 0.002 ms): perf/23375 ioctl(fd: 4, cmd: PERF_RESET) = 0
    2772.791 ( 0.006 ms): perf/23375 perf_event_open(attr_uptr: 0x7fff02599e60, cpu: -1, group_fd: -1, flags: FD_CLOEXEC) = 5
    2772.800 ( 0.001 ms): perf/23375 ioctl(fd: 5, cmd: PERF_RESET) = 0
    2772.803 ( 0.005 ms): perf/23375 ioctl(fd: 3, cmd: PERF_ENABLE) = 0
    2772.810 ( 0.004 ms): perf/23375 ioctl(fd: 4, cmd: PERF_ENABLE) = 0
    2772.815 ( 0.004 ms): perf/23375 ioctl(fd: 5, cmd: PERF_ENABLE) = 0

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-ahotwscqt080ae0ulu3zznh2@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Also trying a new approach, using a copy of uapi/linux/vhost.h we auto
    generate the string tables, then include it in the ioctl cmd beautifier.

    This way either the KVM developers will add the new commands to the
    tools/ copy, like is happening with other areas of tools/include/ (bpf.h
    comes to mind), or we'll be notified when building perf that our copy
    drifted.

    E.g., doing syswide tracing grepping for the newly beautified VHOST
    ioctls:

    # perf trace -e ioctl 2>&1 | grep VHOST
    3873.064 ( 0.099 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_NET_SET_BACKEND, arg: 0x7fff053dffe0) = 0
    3873.168 ( 0.019 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_NET_SET_BACKEND, arg: 0x7fff053dffe0) = 0
    3873.226 ( 0.006 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_GET_VRING_BASE, arg: 0x7fff053dff60) = 0
    3873.244 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_GET_VRING_BASE, arg: 0x7fff053dff60) = 0
    3873.817 ( 0.014 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_CALL, arg: 0x7fff053dff20) = 0
    3873.838 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_CALL, arg: 0x7fff053dff20) = 0
    4701.372 ( 0.006 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_CALL, arg: 0x7fff053dfe20) = 0
    4701.417 ( 0.007 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_CALL, arg: 0x7fff053dfe20) = 0
    4701.563 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_FEATURES, arg: 0x7fff053dfe88) = 0
    4701.571 ( 0.028 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_MEM_TABLE, arg: 0x563c7c906870) = 0
    4701.604 ( 0.003 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_NUM, arg: 0x7fff053dff00) = 0
    4701.609 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_BASE, arg: 0x7fff053dff00) = 0
    4701.615 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_ADDR, arg: 0x7fff053dfe70) = 0
    4701.619 ( 0.008 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_KICK, arg: 0x7fff053dfef0) = 0
    4701.634 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_NUM, arg: 0x7fff053dff00) = 0
    4701.640 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_BASE, arg: 0x7fff053dff00) = 0
    4701.644 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_ADDR, arg: 0x7fff053dfe70) = 0
    4701.648 ( 0.009 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_SET_VRING_KICK, arg: 0x7fff053dfef0) = 0
    4701.665 ( 0.005 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_NET_SET_BACKEND, arg: 0x7fff053dff80) = 0
    4701.672 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: VHOST_NET_SET_BACKEND, arg: 0x7fff053dff80) = 0
    ^C

    '-e ioctl' uses tracepoint filters, in time this will be replaces by
    eBPF filters hooked at the syscall tracepoints and that "grep VHOST"
    will also be done with eBPF, right at the kernel, to reduce overhead.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jason Wang
    Cc: Jiri Olsa
    Cc: "Michael S. Tsirkin"
    Cc: Namhyung Kim
    Cc: Paolo Bonzini
    Cc: Radim Krčmář
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-2gthnhpliunvakywjterrzz3@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Also trying a new approach, using a copy of uapi/linux/kvm.h we auto
    generate the string tables, then include it in the ioctl cmd beautifier.

    This way either the KVM developers will add the new commands to the
    tools/ copy, like is happening with other areas of tools/include/ (bpf.h
    comes to mind), or we'll be notified when building perf that our copy
    drifted.

    E.g., a tracing a process and its threads, but would work for system wide as
    well, just drop that '-p 21238', to see ioctls for DRM, tty, sound, etc:

    # perf trace -e ioctl -p 21238 2>&1 | grep -v KVM_RUN
    7801.536 ( 0.003 ms): CPU 0/KVM/21276 ioctl(fd: 13, cmd: KVM_IRQ_LINE_STATUS, arg: 0x7f484c6c73c0) = 0

    7801.715 ( 0.001 ms): CPU 0/KVM/21276 ioctl(fd: 13, cmd: KVM_IRQ_LINE_STATUS, arg: 0x7f484c6c73e0) = 0
    11001.051 ( 0.008 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x563c83379d70) = 1
    11001.225 ( 0.005 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x563c83379d70) = 1
    10750.377 (249.963 ms): CPU 0/KVM/21276 ... [continued]: ioctl()) = 0
    11011.780 ( 0.015 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x563c83379d90) = 1
    11011.929 ( 0.005 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x7fff053e1000) = 1
    11012.090 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x563c83379d70) = 1
    11023.127 ( 0.020 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x563c83379d90) = 1
    11000.483 (249.807 ms): CPU 0/KVM/21276 ... [continued]: ioctl()) = 0
    25620.877 ( 0.042 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IRQ_LINE_STATUS, arg: 0x7fff053e1080) = 0

    25621.025 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IRQ_LINE_STATUS, arg: 0x7fff053e10a0) = 0
    25500.803 (120.186 ms): CPU 0/KVM/21276 ... [continued]: ioctl()) = 0
    25621.078 ( 0.005 ms): CPU 0/KVM/21276 ioctl(fd: 13, cmd: KVM_IRQ_LINE_STATUS, arg: 0x7f484c6c73c0) = 0

    25621.346 ( 0.001 ms): CPU 0/KVM/21276 ioctl(fd: 13, cmd: KVM_IRQ_LINE_STATUS, arg: 0x7f484c6c73e0) = 0
    40456.997 ( 0.100 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x30, 0x8), arg: 0x7fff053dffe0) = 0
    40457.100 ( 0.019 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x30, 0x8), arg: 0x7fff053dffe0) = 0
    40457.133 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (READ|WRITE, 0xaf, 0x12, 0x8), arg: 0x7fff053dff60) = 0
    40457.139 ( 0.001 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (READ|WRITE, 0xaf, 0x12, 0x8), arg: 0x7fff053dff60) = 0
    40458.503 ( 0.027 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfc80) = 0
    40458.601 ( 0.030 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfc80) = 0
    40458.649 ( 0.003 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x21, 0x8), arg: 0x7fff053dff20) = 0
    40458.654 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x21, 0x8), arg: 0x7fff053dff20) = 0
    40458.657 ( 0.018 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IRQFD, arg: 0x7fff053dff00 ) = 0
    40459.077 ( 0.017 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IRQFD, arg: 0x7fff053dff00 ) = 0
    40459.123 ( 0.017 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfd20) = 0

    40463.477 ( 0.013 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfd20) = 0
    40464.874 ( 0.010 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_GET_VCPU_EVENTS, arg: 0x7fff053e0000) = 0
    40464.892 ( 0.048 ms): qemu-system-x8/21238 ioctl(fd: 12, cmd: KVM_CHECK_EXTENSION, arg: 0x4c ) = 1
    40464.991 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_GET_CLOCK, arg: 0x7fff053e0040) = 0
    40464.962 ( 0.013 ms): CPU 0/KVM/21276 ioctl(fd: 20, cmd: KVM_GET_MSRS, arg: 0x7f484c6c7670) = 1
    44540.437 ( 0.103 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SET_GSI_ROUTING, arg: 0x563c7c93c000) = 0
    44540.544 ( 0.008 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IRQFD, arg: 0x7fff053dfea0 ) = 0
    44540.555 ( 0.029 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SET_GSI_ROUTING, arg: 0x563c7c93c000) = 0
    44540.586 ( 0.003 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IRQFD, arg: 0x7fff053dfea0 ) = 0
    44540.592 ( 0.027 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SET_GSI_ROUTING, arg: 0x563c7c93c000) = 0
    44540.625 ( 0.005 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x21, 0x8), arg: 0x7fff053dfe20) = 0
    44540.639 ( 0.018 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SET_GSI_ROUTING, arg: 0x563c7c93c000) = 0
    44540.658 ( 0.003 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x21, 0x8), arg: 0x7fff053dfe20) = 0
    44540.686 ( 0.015 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfbe0) = 0
    44540.727 ( 0.014 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfbe0) = 0
    44540.748 ( 0.005 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0, 0x8), arg: 0x7fff053dfe88) = 0
    44540.754 ( 0.026 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x3, 0x8), arg: 0x563c7c906870) = 0
    44540.783 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x10, 0x8), arg: 0x7fff053dff00) = 0
    44540.787 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x12, 0x8), arg: 0x7fff053dff00) = 0
    44540.793 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x11, 0x28), arg: 0x7fff053dfe70) = 0
    44540.796 ( 0.010 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x20, 0x8), arg: 0x7fff053dfef0) = 0
    44540.811 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x10, 0x8), arg: 0x7fff053dff00) = 0
    44540.814 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x12, 0x8), arg: 0x7fff053dff00) = 0
    44540.819 ( 0.002 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x11, 0x28), arg: 0x7fff053dfe70) = 0
    44540.822 ( 0.005 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x20, 0x8), arg: 0x7fff053dfef0) = 0
    44540.837 ( 0.006 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x30, 0x8), arg: 0x7fff053dff80) = 0
    44540.862 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 27, cmd: (WRITE, 0xaf, 0x30, 0x8), arg: 0x7fff053dff80) = 0
    44540.887 ( 0.014 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfd00) = 0

    44542.756 ( 0.020 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_IOEVENTFD, arg: 0x7fff053dfd00) = 0
    44542.809 ( 0.007 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SET_VCPU_EVENTS, arg: 0x7fff053dffb0) = 0
    44542.819 ( 0.003 ms): qemu-system-x8/21238 ioctl(fd: 12, cmd: KVM_CHECK_EXTENSION, arg: 0x4c ) = 1
    44543.016 ( 0.004 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SET_CLOCK, arg: 0x7fff053dfff0) = 0
    44543.022 ( 0.008 ms): qemu-system-x8/21238 ioctl(fd: 20, cmd: KVM_KVMCLOCK_CTRL ) = 0
    46952.502 ( 0.010 ms): qemu-system-x8/21238 ioctl(fd: 13, cmd: KVM_SIGNAL_MSI, arg: 0x563c83379d70) = 1
    46829.292 (249.860 ms): CPU 0/KVM/21276 ... [continued]: ioctl()) = 0
    ^C
    [root@jouet linux]#

    Since there are clashes in _IOC_NR() for some cases, notably ioctls with
    PPC_ and ARM_ in its name and some that depend on some internal state to
    be valid, but use the same number as others, those were removed in the
    shell script that builds the table, tools/perf/trace/beauty/kvm_ioctl.sh.

    Since so far we're supporting only x86 in the 'cmd' ioctl arg beautifier
    in perf trace, we can leave fully supporting these ioctls for later.

    There are some more to handle here, notably the one for /dev/vhost-net, will
    come later.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Paolo Bonzini
    Cc: Radim Krčmář
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-zxhebe579n338d7qrnjoctes@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • This time we try a new approach, using a copy of uapi/sound/asound.h we
    auto generate the string tables, then include it in the ioctl cmd
    beautifier.

    This way either the sound developers will add the new commands to the
    tools/ copy, like is happening with other areas of tools/include/ (bpf.h
    comes to mind), or we'll be notified when building perf that our copy
    drifted.

    E.g.:

    # perf trace -p 22084 -e ioctl 2>&1 | head -5
    0.000 ( 0.068 ms): alsa-sink-ALC3/22084 ioctl(fd: 49, cmd: SNDRV_PCM_HWSYNC, arg: 0x557f8d7fa0f0) = 0
    0.344 ( 0.041 ms): alsa-sink-ALC3/22084 ioctl(fd: 46, cmd: SNDRV_CTL_ELEM_READ, arg: 0x7fe764018ee0) = 0
    0.403 ( 0.011 ms): alsa-sink-ALC3/22084 ioctl(fd: 49, cmd: SNDRV_PCM_HWSYNC, arg: 0x557f8d7fa0f0) = 0
    0.427 ( 0.009 ms): alsa-sink-ALC3/22084 ioctl(fd: 49, cmd: SNDRV_PCM_STATUS_EXT, arg: 0x7fe76c2e0b30) = 0
    2.461 ( 0.042 ms): alsa-sink-ALC3/22084 ioctl(fd: 49, cmd: SNDRV_PCM_HWSYNC, arg: 0x557f8d7fa0f0) = 0
    #

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-8zuyf3e3u6jjcb2xzerw0kdi@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • This time we try a new approach, using uapi/drm/ copies of drm.h and
    i915_drm.h we auto generate the string tables, then include it in the
    ioctl cmd beautifier.

    This way either the DRM developers will add the new commands to the
    tools/ copy, like is happening with other areas of tools/include/ (bpf.h
    comes to mind), or we'll be notified when building perf that our copy
    drifted.

    Either way the time from a new command being added to when 'perf trace'
    gets to know it is greatly shortened, for instance:

    # strace -p 22401 -e ioctl
    ioctl(8, DRM_IOCTL_I915_GEM_BUSY, 0x7ffc934f7600) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_SET_DOMAIN, 0x7ffc934f7550) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_SW_FINISH, 0x7ffc934f76e0) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_SW_FINISH, 0x7ffc934f7780) = 0
    ioctl(8, _IOC(_IOC_READ|_IOC_WRITE, 0x64, 0x69, 0x40), 0x7ffc934f7700) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_SET_DOMAIN, 0x7ffc934f7780) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_MADVISE, 0x7ffc934f76f0) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_BUSY, 0x7ffc934f76c0) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_MADVISE, 0x7ffc934f76b0) = 0
    ioctl(8, DRM_IOCTL_I915_GEM_SET_DOMAIN, 0x7ffc934f76d0) = 0
    ioctl(8, DRM_IOCTL_MODE_ADDFB, 0x7ffc934f7880) = 0
    ioctl(8, DRM_IOCTL_MODE_PAGE_FLIP, 0x7ffc934f77d0) = 0
    ^Cstrace: Process 22401 detached

    versus:

    # perf trace -p 22401 -e ioctl
    1010.856 (0.006 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_BUSY, arg: 0x7ffc934f7600) = 0
    1010.865 (0.003 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_SET_DOMAIN, arg: 0x7ffc934f7550) = 0
    1010.872 (0.002 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_SW_FINISH, arg: 0x7ffc934f76e0) = 0
    1010.939 (0.015 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_SW_FINISH, arg: 0x7ffc934f7780) = 0
    1010.959 (0.085 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_EXECBUFFER2, arg: 0x7ffc934f7700) = 0
    1011.048 (0.003 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_SET_DOMAIN, arg: 0x7ffc934f7780) = 0
    1011.056 (0.002 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_MADVISE, arg: 0x7ffc934f76f0) = 0
    1011.060 (0.002 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_BUSY, arg: 0x7ffc934f76c0) = 0
    1011.064 (0.003 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_MADVISE, arg: 0x7ffc934f76b0) = 0
    1011.068 (0.002 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_I915_GEM_SET_DOMAIN, arg: 0x7ffc934f76d0) = 0
    1011.074 (0.009 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_MODE_ADDFB, arg: 0x7ffc934f7880 ) = 0
    1011.096 (0.072 ms): gnome-shell/22401 ioctl(fd: 8, cmd: DRM_MODE_PAGE_FLIP, arg: 0x7ffc934f77d0) = 0
    ^C[root@jouet linux]#

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: http://lkml.kernel.org/n/tip-mly2d7v9kf28rso81dijbixq@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

25 Jul, 2017

2 commits

  • When libelf is disabled in the configuration, we get the following
    linker error:

    LINK libperf-jvmti.so
    ld: cannot find -lelf
    Makefile.perf:515: recipe for target 'libperf-jvmti.so' failed

    Jiri pointed out that both librt and libelf are not really required. So
    this patch fixes the linker error by getting rid of unwanted libraries
    in the linker stage.

    Signed-off-by: Sudeep Holla
    Acked-by: David Carrillo-Cisneros
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Elena Reshetova
    Cc: Kees Kook
    Cc: Paul Turner
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Sudeep Holla
    Cc: Wang Nan
    Fixes: 209045adc2bb ("perf tools: add JVMTI agent library")
    Link: http://lkml.kernel.org/r/20170719011839.99399-5-davidcc@google.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Sudeep Holla
     
  • The goal is to allow users to override linking of libraries that
    were automatically added to PERFLIBS.

    EXCLUDE_EXTLIBS contains linker flags to be removed from LIBS
    while EXTRA_PERFLIBS contains linker flags to be added.

    My use case is to force certain library to be build statically,
    e.g. for libelf:

    EXCLUDE_EXTLIBS=-lelf EXTRA_PERFLIBS=path/libelf.a

    Signed-off-by: David Carrillo-Cisneros
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Elena Reshetova
    Cc: Kees Kook
    Cc: Paul Turner
    Cc: Stephane Eranian
    Cc: Sudeep Holla
    Cc: Wang Nan
    Link: http://lkml.kernel.org/r/20170719011839.99399-3-davidcc@google.com
    Signed-off-by: Arnaldo Carvalho de Melo

    David Carrillo-Cisneros
     

15 Jun, 2017

1 commit

  • With commit: 0a943cb10ce78 (tools build: Add HOSTARCH Makefile variable)
    when building for ARCH=x86_64, ARCH=x86_64 is passed to perf instead of
    ARCH=x86, so the perf build process searchs header files from
    tools/arch/x86_64/include, which doesn't exist.

    The following build failure is seen:

    In file included from util/event.c:2:0:
    tools/include/uapi/linux/mman.h:4:27: fatal error: uapi/asm/mman.h: No such file or directory
    compilation terminated.

    Fix this issue by using SRCARCH instead of ARCH in perf, just like the
    main kernel Makefile and tools/objtool's.

    Signed-off-by: Jiada Wang
    Tested-by: Arnaldo Carvalho de Melo
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Andi Kleen
    Cc: Eugeniu Rosca
    Cc: Jan Stancek
    Cc: Masami Hiramatsu
    Cc: Peter Zijlstra
    Cc: Ravi Bangoria
    Cc: Rui Teng
    Cc: Sukadev Bhattiprolu
    Cc: Wang Nan
    Fixes: 0a943cb10ce7 ("tools build: Add HOSTARCH Makefile variable")
    Link: http://lkml.kernel.org/r/1491793357-14977-2-git-send-email-jiada_wang@mentor.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiada Wang
     

18 Feb, 2017

1 commit

  • Ingo reported following build failure:

    On Sat, Feb 11, 2017 at 12:12:34PM +0100, Ingo Molnar wrote:
    >
    > So I had this oldish 32-bit 15.10 Ubuntu installation around (fully updated), and
    > trying to build perf gave me:
    >
    > deimos:~/tip/tools/perf> make
    > BUILD: Doing 'make -j4' parallel build
    > make[3]: *** No rule to make target '/usr/include/x86_64-linux-gnu/sys/types.h', needed by 'fixdep.o'. Stop.
    > Makefile:42: recipe for target 'fixdep-in.o' failed
    > make[2]: *** [fixdep-in.o] Error 2
    > /home/mingo/tip/tools/build/Makefile.include:4: recipe for target 'fixdep' failed
    > make[1]: *** [fixdep] Error 2
    > Makefile:68: recipe for target 'all' failed
    > make: *** [all] Error 2
    >
    > Now this got a bit better after I did a 'make mrproper' in the kernel tree:
    >
    > deimos:~/tip/tools/perf> make
    > BUILD: Doing 'make -j4' parallel build
    > HOSTCC fixdep.o
    > /home/mingo/tip/tools/build/fixdep: 1: /home/mingo/tip/tools/build/fixdep: Syntax error: "(" unexpected
    > /home/mingo/tip/tools/build/Makefile.build:101: recipe for target 'fixdep.o' failed
    > make[3]: *** [fixdep.o] Error 2
    > Makefile:42: recipe for target 'fixdep-in.o' failed
    > make[2]: *** [fixdep-in.o] Error 2
    > /home/mingo/tip/tools/build/Makefile.include:4: recipe for target 'fixdep' failed
    > make[1]: *** [fixdep] Error 2
    > Makefile:68: recipe for target 'all' failed
    > make: *** [all] Error 2
    >
    > After some digging it turns out that my 'fixdep' binary was 64-bit:
    >
    > deimos:~/tip/tools/perf> file /home/mingo/tip/tools/build/fixdep
    > /home/mingo/tip/tools/build/fixdep: ELF 64-bit LSB executable, x86-64, version 1
    > (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux
    > 2.6.32, BuildID[sha1]=d527f736b57b5ba47210fbcb562a3b52867d21c1, not stripped
    >
    > But it did not get cleaned out by 'make clean'.
    >
    > Only after I did a 'make clean' in tools/ itself, did it get built properly.

    It shows we don't clean up properly the fixdep objects, so adding
    special rule for that.

    Signed-off-by: Jiri Olsa
    Reported-by: Ingo Molnar
    Cc: David Ahern
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1487340058-10496-2-git-send-email-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

12 Jan, 2017

1 commit

  • The install command for libperf-jvmti.so does not check if libdir exists
    before installing. This means that when the install command is run:

    install libperf-jvmti.so '/tmp/test_root/usr/lib64';

    libperf-jvmti.so will get installed to /usr/lib64 as a file and break
    further installation. Fix this by ensuring the directory gets created
    first.

    See https://bugzilla.redhat.com/show_bug.cgi?id=1410296

    Signed-off-by: Laura Abbott
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Peter Zijlstra
    Fixes: d4dfdf00d43e ("perf jvmti: Plug compilation into perf build")
    Link: http://lkml.kernel.org/r/1483741088-13543-1-git-send-email-labbott@redhat.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Laura Abbott
     

05 Jan, 2017

1 commit

  • …linux/kernel/git/acme/linux into perf/urgent

    Pull perf/urgent fixes and one improvement from Arnaldo Carvalho de Melo:

    Fixes:

    - Fix prev/next_prio formatting for deadline tasks in libtraceevent (Daniel Bristot de Oliveira)

    - Robustify reading of build-ids from /sys/kernel/note (Arnaldo Carvalho de Melo)

    - Fix building some sample/bpf in Alpine Linux 3.4 (Arnaldo Carvalho de Melo)

    - Fix 'make install-bin' to install libtraceevent plugins (Arnaldo Carvalho de Melo)

    - Fix 'perf record --switch-output' documentation and comment (Jiri Olsa)

    - Fix 'perf probe' for cross arch probing (Masami Hiramatsu)

    Improvement:

    - Show total scheduling time in 'perf sched timehist' (Namhyumg Kim)

    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

    Ingo Molnar
     

04 Jan, 2017

1 commit


24 Dec, 2016

1 commit

  • Pull perf fixes from Ingo Molnar:
    "On the kernel side there's two x86 PMU driver fixes and a uprobes fix,
    plus on the tooling side there's a number of fixes and some late
    updates"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (36 commits)
    perf sched timehist: Fix invalid period calculation
    perf sched timehist: Remove hardcoded 'comm_width' check at print_summary
    perf sched timehist: Enlarge default 'comm_width'
    perf sched timehist: Honour 'comm_width' when aligning the headers
    perf/x86: Fix overlap counter scheduling bug
    perf/x86/pebs: Fix handling of PEBS buffer overflows
    samples/bpf: Move open_raw_sock to separate header
    samples/bpf: Remove perf_event_open() declaration
    samples/bpf: Be consistent with bpf_load_program bpf_insn parameter
    tools lib bpf: Add bpf_prog_{attach,detach}
    samples/bpf: Switch over to libbpf
    perf diff: Do not overwrite valid build id
    perf annotate: Don't throw error for zero length symbols
    perf bench futex: Fix lock-pi help string
    perf trace: Check if MAP_32BIT is defined (again)
    samples/bpf: Make perf_event_read() static
    uprobes: Fix uprobes on MIPS, allow for a cache flush after ixol breakpoint creation
    samples/bpf: Make samples more libbpf-centric
    tools lib bpf: Add flags to bpf_create_map()
    tools lib bpf: use __u32 from linux/types.h
    ...

    Linus Torvalds
     

18 Dec, 2016

1 commit

  • Pull kbuild updates from Michal Marek:

    - prototypes for x86 asm-exported symbols (Adam Borowski) and a warning
    about missing CRCs (Nick Piggin)

    - asm-exports fix for LTO (Nicolas Pitre)

    - thin archives improvements (Nick Piggin)

    - linker script fix for CONFIG_LD_DEAD_CODE_DATA_ELIMINATION (Nick
    Piggin)

    - genksyms support for __builtin_va_list keyword

    - misc minor fixes

    * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    x86/kbuild: enable modversions for symbols exported from asm
    kbuild: fix scripts/adjust_autoksyms.sh* for the no modules case
    scripts/kallsyms: remove last remnants of --page-offset option
    make use of make variable CURDIR instead of calling pwd
    kbuild: cmd_export_list: tighten the sed script
    kbuild: minor improvement for thin archives build
    kbuild: modpost warn if export version crc is missing
    kbuild: keep data tables through dead code elimination
    kbuild: improve linker compatibility with lib-ksyms.o build
    genksyms: Regenerate parser
    kbuild/genksyms: handle va_list type
    kbuild: thin archives for multi-y targets
    kbuild: kallsyms allow 3-pass generation if symbols size has changed

    Linus Torvalds
     

16 Dec, 2016

1 commit

  • To make it nicer and easily maintainable.

    Also moving the check into fixdep sub make, so its output is not
    scattered around the build output.

    Removing extra $$ from mman*.h checks.

    Signed-off-by: Jiri Olsa
    Tested-by: Arnaldo Carvalho de Melo
    Cc: David Ahern
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1481030331-31944-5-git-send-email-jolsa@kernel.org
    [ Use /bin/sh, and 'function check() {' -> 'check () {' to make it work with busybox, in Alpine Linux, for instance ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa