Linux 커널에서 perf 이벤트가 활성화되어 있는지 확인하는 방법과 루트가 아닌 사용자로 perf 사용자 모드를 설치하는 방법은 무엇입니까?

Linux 커널에서 perf 이벤트가 활성화되어 있는지 확인하는 방법과 루트가 아닌 사용자로 perf 사용자 모드를 설치하는 방법은 무엇입니까?

내가 조사한 바에 따르면, 내가 작업 중인 컴퓨터에서는 "perf" 하위 시스템의 커널 측이 활성화되어 있는 것 같습니다.

커널 구성을 확인하면 다음이 표시됩니다.

$ zgrep "_PERF[_= ]" /proc/config.gz 
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS=y
# CONFIG_PERF_COUNTERS is not set
CONFIG_HAVE_PERF_EVENTS_NMI=y

나는 또한 설명된 검사를 수행했습니다.perf_events FAQ:

$ cat /proc/sys/kernel/perf_event_paranoid
1

하지만perf도구설치되지 않음:

$ perf
-bash: perf: command not found
$ /sbin/perf
-bash: /sbin/perf: No such file or directory
$ /usr/sbin/perf
-bash: /usr/sbin/perf: No such file or directory

일반 사용자("2.6.36-gentoo-r4" 커널의 경우)로서 자신의 홈 디렉토리에 perf userland를 설치할 수 있습니까?

아니면 해당 컴퓨터의 관리자에게 설치를 요청해야 합니까? 더욱 불행하게도 dev-util/perfGentoo의 패키지는 amd64에서 차단(차단)됩니다.

$ emerge --search perf
[...]
*  dev-util/perf [ Masked ]
      Latest version available: 2.6.35_rc4
      Latest version installed: [ Not Installed ]
      Size of files: 73,503 kB
      Homepage:      http://perf.wiki.kernel.org/
      Description:   Userland tools for Linux Performance Counters
      License:       GPL-2

답변1

perf루트가 아닌 사용자로 사용자 영역 도구를 설치하는 방법

  1. kernel-2.6.36-gentoo-r4의 소스 코드 가져오기/찾기(젠투 리눅스에서). 첫 번째 수표는 다음에서 나왔습니다.이 답변

    실제로,첫 번째/usr/src/linux커널 소스가 아직 설치되어 있는지 확인해야 합니다 . 쓰기 가능한 디렉토리에 복사할 수 있습니다. )

    그것으로 충분하지만 전체 커널 소스를 복사하는 대신 서로 연결했습니다.

    $ mkdir -p build
    $ cd build
    $ ln -s /usr/src/linux-2.6.36-gentoo-r4
    
  2. 디렉토리에 쓸 perf수 없으므로 빌드할 디렉토리를 만듭니다 .~/build/linux-2.6.36-gentoo-r4

    $ mkdir -p perf
    

    사실 원래 그런 건 아니었는데... make처음에 나오는 오류 메시지는 전혀 도움이 안 됐어요.

  3. tools/perf커널 소스 디렉터리를 입력하세요

    $ cd linux-2.6.36-gentoo-r4/tools/perf
    
  4. 세우다 perf,O=<destdir>makefile에 옵션을 전달하는 것을 잊지 마세요디렉토리에 쓰기가 불가능하기 때문입니다(심볼릭 링크 대신 커널 소스를 복사했다면 그런 문제는 없을 것입니다).

    $ make O=~/build/perf -k 
    Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev
        * new build flags or prefix
        CC ~/build/perf/perf.o
        CC ~/build/perf/builtin-annotate.o
        [...]
        CC ~/build/perf/util/scripting-engines/trace-event-python.o
        CC ~/build/perf/scripts/python/Perf-Trace-Util/Context.o
        AR ~/build/perf/libperf.a
        LINK ~/build/perf/perf
    ~/build/perf/libperf.a(trace-event-perl.o): In function `define_flag_value':
    ~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-perl.c:127: undefined reference to `PL_stack_sp'
    ~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-perl.c:131: undefined reference to `Perl_push_scope'
    [...]
    ~/build/perf/libperf.a(trace-event-python.o): In function `handler_call_die':
    ~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-python.c:53: undefined reference to `PyErr_Print'
    [...]
    collect2: ld returned 1 exit status
    make: *** [/home/narebski/build/perf/perf] Error 1
        GEN perf-archive
    make: Target `all' not remade because of errors.
    
  5. Google에서 "'Perl_push_scope'에 대한 정의되지 않은 참조"를 검색했습니다. 찾다Slackware 13.1에 perf 설치에 실패했습니다.unix.stackexchange.com에서. 다음 제안을 따르십시오.스스로에게 답해보세요, 또는 더 자세히 말하면진단:

    $ make O=~/build/perf -k NO_LIBPERL=1 NO_LIBPYTHON=1
    Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev
        * new build flags or prefix
        CC ~/build/perf/perf.o
        CC ~/build/perf/builtin-annotate.o
        [...]
        CC ~/build/perf/util/probe-finder.o
        AR ~/build/perf/libperf.a
        LINK ~/build/perf/perf
        GEN perf-archive
    

    있으니 참고해주세요해결책해결책보다는 (내가 가지고 있는 libperl.so).

  6. 기본 설치 대상의 Makefile을 확인하십시오. 해당 $(HOME).installation perf은 자체 홈 디렉토리에 있습니다.

    $ make O=~/build/perf -k NO_LIBPERL=1 NO_LIBPYTHON=1 install
    Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev
        GEN perf-archive
    install -d -m 755 '~/bin'
    install ~/build/perf/perf '~/bin'
    [...]
    install scripts/python/bin/* -t '~/libexec/perf-core/scripts/python/bin'
    
  7. ~/binPATH에 있는지 확인

  8. 작동 하는지 확인하세요 perf(쓰기 가능한 디렉터리에 cd하는 것을 잊지 마세요):

    $ cd
    $ perf record -f -- sleep 10
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.001 MB perf.data (~61 samples) ]
    

출력이 약간 편집되어 내 홈 디렉토리가 ~.

관련 정보