Skip to content
  • Igor Lubashev's avatar
    c22e150e
    perf tools: Add helpers to use capabilities if present · c22e150e
    Igor Lubashev authored
    
    
    Add utilities to help checking capabilities of the running procss.  Make
    perf link with libcap, if it is available. If no libcap-dev[el],
    fallback to the geteuid() == 0 test used before.
    
    Committer notes:
    
      $ perf test python
      18: 'import perf' in python                               : FAILED!
      $ perf test -v python
      Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
      18: 'import perf' in python                               :
      --- start ---
      test child forked, pid 23288
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      ImportError: /tmp/build/perf/python/perf.so: undefined symbol: cap_get_flag
      test child finished with -1
      ---- end ----
      'import perf' in python: FAILED!
      $
    
    This happens because differently from the perf binary generated with
    this patch applied:
    
      $ ldd /tmp/build/perf/perf | grep libcap
      	libcap.so.2 => /lib64/libcap.so.2 (0x00007f724a4ef000)
      $
    
    The python binding isn't linking with libcap:
    
      $ ldd /tmp/build/perf/python/perf.so | grep libcap
      $
    
    So add 'cap' to the 'extra_libraries' variable in
    tools/perf/util/setup.py, and rebuild:
    
      $ perf test python
      18: 'import perf' in python                               : Ok
      $
    
    If we explicitely disable libcap it also continues to work:
    
      $ make NO_LIBCAP=1 -C tools/perf O=/tmp/build/perf install-bin
        $ ldd /tmp/build/perf/perf | grep libcap
      $ ldd /tmp/build/perf/python/perf.so | grep libcap
      $ perf test python
      18: 'import perf' in python                               : Ok
      $
    
    Signed-off-by: default avatarIgor Lubashev <ilubashe@akamai.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
    Cc: James Morris <jmorris@namei.org>
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
    Cc: linux-arm-kernel@lists.infradead.org
    [ split from a larger patch ]
    Link: http://lkml.kernel.org/r/8a1e76cf5c7c9796d0d4d240fbaa85305298aafa.1565188228.git.ilubashe@akamai.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    c22e150e
    perf tools: Add helpers to use capabilities if present
    Igor Lubashev authored
    
    
    Add utilities to help checking capabilities of the running procss.  Make
    perf link with libcap, if it is available. If no libcap-dev[el],
    fallback to the geteuid() == 0 test used before.
    
    Committer notes:
    
      $ perf test python
      18: 'import perf' in python                               : FAILED!
      $ perf test -v python
      Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
      18: 'import perf' in python                               :
      --- start ---
      test child forked, pid 23288
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      ImportError: /tmp/build/perf/python/perf.so: undefined symbol: cap_get_flag
      test child finished with -1
      ---- end ----
      'import perf' in python: FAILED!
      $
    
    This happens because differently from the perf binary generated with
    this patch applied:
    
      $ ldd /tmp/build/perf/perf | grep libcap
      	libcap.so.2 => /lib64/libcap.so.2 (0x00007f724a4ef000)
      $
    
    The python binding isn't linking with libcap:
    
      $ ldd /tmp/build/perf/python/perf.so | grep libcap
      $
    
    So add 'cap' to the 'extra_libraries' variable in
    tools/perf/util/setup.py, and rebuild:
    
      $ perf test python
      18: 'import perf' in python                               : Ok
      $
    
    If we explicitely disable libcap it also continues to work:
    
      $ make NO_LIBCAP=1 -C tools/perf O=/tmp/build/perf install-bin
        $ ldd /tmp/build/perf/perf | grep libcap
      $ ldd /tmp/build/perf/python/perf.so | grep libcap
      $ perf test python
      18: 'import perf' in python                               : Ok
      $
    
    Signed-off-by: default avatarIgor Lubashev <ilubashe@akamai.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
    Cc: James Morris <jmorris@namei.org>
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
    Cc: linux-arm-kernel@lists.infradead.org
    [ split from a larger patch ]
    Link: http://lkml.kernel.org/r/8a1e76cf5c7c9796d0d4d240fbaa85305298aafa.1565188228.git.ilubashe@akamai.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Loading