Egloos | Log-in
F/OSS study
F/OSS study
[Linux] perf - 리눅스 성능 측정 도구
Linux: 3.3-rc4
Ubuntu: 10.10


perf는 리눅스 커널에 포함된 "user-level" 도구로써, 시스템 성능 측정을 위한 다양한 기법들을 제공한다.
기본적으로는 CPU와 함께 제공되는 PMU (Performance Monitoring Unit)의 도움을 받아 동작하지만
CPU가 이를 지원하지 않더라도 커널에서 제공하는 여러 event/tracing 기법을 이용하여
(제한적이긴 하지만) 소프트웨어 적으로도 충분히 유용한 정보들을 처리할 수 있다.
현재 x86, arm, power-pc 와 같은 주요 아키텍처에서는 모두 PMU를 지원하고 있다.
(물론 이는 각 모델에 따라 차이가 있으며 자세한 정보는 해당 매뉴얼을 참조해야 할 것이다.)

perf는 커널과 별도로 컴파일되는 (사용자 레벨의) 실행 파일이며
커널 소스의 tools/perf 디렉터리 아래에 존재한다.
이러한 사용자 레벨의 프로그램이 커널 소스에 포함되게 된 이유는
perf가 커널의 ABI (API가 아닌 "Binary"의 B이다!)와 밀접한 연관을 맺고 있기 때문에
커널의 내/외부 인터페이스가 변경될 때마다 perf도 연동하여 이를 반영할 수 있도록 관리하기 위함이다.
따라서 가능하면 현재 사용 중인 커널과 동일한 버전의 perf를 사용하는 것이 좋다.

perf를 빌드하기 위해서는 해당 디렉터리로 이동한 뒤 단순히 make를 실행하면 된다.
(perf는 autotools를 이용하지 않으므로 autogen 이나 configure 같은 명령을 수행할 필요는 없다.)
다만 perf를 빌드하기 전에 perf가 의존하는 라이브러리가 먼저 설치되어 있어야 한다.
가장 기본적인 것인 elfutils로 ELF 실행 파일의 정보를 파싱하기 위해 반드시 필요하며
0.138 이후의 버전이면 문제가 없을 것이다. 우분투의 경우 libelf-dev 패키지를 설치하면 된다.

그 외에 추가적으로 DWARF 디버깅 정보 분석을 위한 libdw-dev 패키지와
터미널 UI (TUI)를 위한 libnewt-dev를 설치하면 보다 강력한 기능을 사용할 수 있을 것이다.
이러한 패키지가 설치되지 않은 경우 빌드 시 이에 대한 경고 메시지가 표시되는데
굳이 신경쓰인다거나 혹은 해당 라이브러리가 설치되어 있더라도 어떤 이유로든 기능을 끄고 싶다면
make 시 NO_DWARF=1 및 NO_NEWT=1 인자를 지정하면 된다.
(이 외에도 조정할 수 있는 옵션이 많이 있으므로 필요한 경우 Makefile을 직접 살펴보기 바란다.)

아직 시도해보지는 않았지만 커널과 마찬가지로 ARCH 및 CROSS_COMPILE 인자를 통해
크로스 빌드하는 것이 가능하다. (나중에 기회가 되면 arm 빌드를 시도해볼 생각이다)

빌드를 마치면 현재 디렉터리에 perf라는 실행 파일이 생성되어 있음을 볼 수 있다.
물론 make install 명령을 통해 이를 원하는 위치에 설치할 수도 있다.
(기본적으로는 ~/bin 디렉터리에 설치될 것이고 아마도 해당 디렉터리가 PATH에 포함되어 있을 것이다.
만약 그렇지 않거나 별도의 디렉터리에 설치하기를 원하는 경우
make 시 prefix 혹은 DESTDIR 옵션을 주어 설치 위치를 변경할 수 있다.)

perf는 전체적인 소스의 구조나 실제 코드 자체도 git에서 빌려온 부분이 있으므로
git을 사용해 본 경험이 있다면 상대적으로 쉽게 느껴질 수 있을 것이다.

perf는 여러 하위 명령(sub-command)들을 제공하는데 이에 대한 목록이나
기본적인 사용법을 익히기 위해 perf help 명령을 이용할 수 있다.
아무런 인자없이 perf help 명령을 수행하면 이용가능한 하위 명령들의 목록을 보여준다.

$ perf help

 usage: perf [--version] [--help] COMMAND [ARGS]

 The most commonly used perf commands are:
   annotate        Read perf.data (created by perf record) and display annotated code
   archive         Create archive with object files with build-ids found in perf.data file
   bench           General framework for benchmark suites
   buildid-cache   Manage build-id cache.
   buildid-list    List the buildids in a perf.data file
   diff            Read two perf.data files and display the differential profile
   evlist          List the event names in a perf.data file
   inject          Filter to augment the events stream with additional information
   kmem            Tool to trace/measure kernel memory(slab) properties
   kvm             Tool to trace/measure kvm guest os
   list            List all symbolic event types
   lock            Analyze lock events
   probe           Define new dynamic tracepoints
   record          Run a command and record its profile into perf.data
   report          Read perf.data (created by perf record) and display the profile
   sched           Tool to trace/measure scheduler properties (latencies)
   script          Read perf.data (created by perf record) and display trace output
   stat            Run a command and gather performance counter statistics
   test            Runs sanity tests.
   timechart       Tool to visualize total system behavior during a workload
   top             System profiling tool.

 See 'perf help COMMAND' for more information on a specific command.

perf 빌드 시 make install-man DESTDIR=/usr/local 과 같이 실행하여
(최신 버전의) perf 하위 명령어들의 man 페이지를 설치할 수 있고
(git와 마찬가지로) 이 후 perf help <명령어> 와 같이 해당 명령에 대한 자세한 설명을 볼 수 있다.
또한 모든 명령이 -h 옵션을 제공하여 사용법을 보여주므로 간단히 참고할 수 있다.

예를 들어 다음과 같은 명령을 차례로 실행해보자.

$ perf help help
$ perf help --help
$ perf help -h

이는 help 명령 자체에 대한 도움말 및 사용법을 보여주게 되며,
대신 실제 사용할 명령의 이름으로 바꾸어 사용할 수 있다. test 명령을 예로 들면 다음과 같다.

$ perf help test
$ perf test --help
$ perf test -h

perf test 명령은 perf의 unit test(?)를 실행하기 위한 명령이며
-v 옵션을 통해 실행 결과를 좀 더 자세히 볼 수 있다.
또한 인자로 "list"를 넘기면 가능한 모든 테스트의 목록을 출력한다.

$ perf test list
 1: vmlinux symtab matches kallsyms
 2: detect open syscall event
 3: detect open syscall event on all cpus
 4: read samples using the mmap interface
 5: parse events tests
 6: Validate PERF_RECORD_* events & perf_sample fields

현재 총 6가지의 테스트 항목이 있으며 아무런 인자 없이 test 명령을 수행할 경우 모든 테스트를 다 수행한다.
만약 특정 테스트 만을 수행하고 싶다면 해당 테스트의 번호를 인자로 넘겨주거나
테스트 이름 중 일부를 인자로 지정하면 된다.

$ perf test 3 4 5
 3: detect open syscall event on all cpus: Ok
 4: read samples using the mmap interface: Ok
 5: parse events tests: Ok
$
$ perf test -v syscall
 2: detect open syscall event:
--- start ---
---- end ----
detect open syscall event: Ok
 3: detect open syscall event on all cpus:
--- start ---
---- end ----
detect open syscall event on all cpus: Ok

이 외에도 다양한 종류의 명령이 존재하지만 man 페이지에는 아주 간단하게 해당 명령에서 제공하는
각각의 옵션에 대한 설명 만이 있을 뿐이므로 실제 사용법을 익히기에는 어려움이 있다.
http://perf.wiki.kernel.org 에 존재하는 튜토리얼이 주요 명령에 대해 상세히 설명하고는 있지만
약간 오래된 버전이라 최신의 변경 사항들에 대해서는 언급이 없으므로
앞으로의 글에서 하나씩 좀 더 자세히 살펴보기로 할 것이다.

by namhyung | 2012/02/26 21:25 | Kernel | 트랙백 | 핑백(1) | 덧글(5)
트랙백 주소 : http://studyfoss.egloos.com/tb/5634580
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at Perf Installatio.. at 2015/05/15 15:40

... [2] Kernel.org, https://www.kernel.org/ [3] perf &#8211; 리눅스 성능 측정 도구, F/OSS study, http://studyfoss.egloos.com/5634580 About these ads Share this:TwitterFacebookGooglePrintEmailLike this:Like Loading ... more

Commented by 이영식 at 2012/02/26 22:53
오옷! 방금 올라왔네요..
항상 잘 보고 있습니다.
Commented by namhyung at 2012/03/01 16:59
답글 남겨주셔서 감사합니다.. ^^
Commented by 짱재 at 2014/08/31 11:26
안녕하세요 게시글 잘 보고있습니다ㅎㅎ
제가 arm계열 pxa270보드에서 perf를 사용하려 arm용으로 빌드하려는데요
ARCH arm CROSSC_COMPILE arm-linux- 를 했습니다 빌드중 에러가 나오는데 혹시 더 추가하거나 확인해아될 점이 있나요?
커널은 최신버전이구요 툴체인은 제품 cd에 있는걸 사용하고있습니다 그런데 그 툴체인이 엄청 예전꺼라.. 혹시 arm용으로 빌드성공하셨다면 도움주셨음 좋겠습니다ㅠ
Commented by strtok at 2014/12/16 09:21
잘 보고 갑니다.
Commented by 박진범 at 2016/08/03 08:48
항상 좋은 글 감사드립니다. 잘 보고 갑니다!!

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶

카테고리
General
Application
System
Kernel
Book
Tips
태그
awk perf patch vcs linux kernel memory CARM scm SMP synchronization build sed binutils elf compiler emacs x86 gcc block-layer bash glibc blktrace script algorithm documentation CAaQA3 computer-architecture git C
전체보기
이글루 파인더

최근 등록된 덧글
informsi yang bagus dan b..
by agen qnc at 06/22
informasi yang bagus dan b..
by agen qnc at 06/22
informasi yang bagus dan b..
by agen qnc at 06/22
최근 등록된 트랙백
Tod's Ferrari Homme
by Tods Pas Cher,Kodak did ..
Mocassin Femme
by Mocassins Homme, I got so..
natural garcinia cambogia
by
rss

skin by jiinny


X