Perf
perf(perf_events 또는 perf tools라고도 불리며, 원래는 Performance Counters for Linux, PCL로 불렸다)는 2009년 리눅스 커널 버전 2.6.31부터 사용할 수 있는 리눅스의 성능 분석 도구이다. `perf`라는 이름의 사용자 공간 제어 유틸리티는 명령줄에서 접근하며 여러 하위 명령을 제공한다. 이는 전체 시스템(커널 및 사용자 공간)에 대한 통계적 프로파일링이 가능하다. 이는 하드웨어 성능 카운터, 트레이스포인트, 소프트웨어 성능 카운터(예: hrtimer) 및 동적 프로브(예: kprobe 또는 uprobe)를 지원한다. 2012년, 두 IBM 엔지니어는 perf를 (OProfile과 함께) 리눅스에서 가장 일반적으로 사용되는 두 가지 성능 카운터 프로파일링 도구 중 하나로 인정했다.
| 저장소 | https://github.com/torvalds/linux/tree/master/tools/perf |
|---|---|
| 프로그래밍 언어 | C |
| 운영 체제 | 리눅스 커널 |
| 종류 | 성능 모니터 및 테스트 |
| 라이선스 | GNU GPL |
| 웹사이트 | perf.wiki.kernel.org/index.php/Main_Page |
perf(perf_events[1] 또는 perf tools라고도 불리며, 원래는 Performance Counters for Linux, PCL로 불렸다)[2]는 2009년 리눅스 커널 버전 2.6.31부터 사용할 수 있는 리눅스의 성능 분석 도구이다.[3] `perf`라는 이름의 사용자 공간 제어 유틸리티는 명령줄에서 접근하며 여러 하위 명령을 제공한다. 이는 전체 시스템(커널 및 사용자 공간)에 대한 통계적 프로파일링이 가능하다.
이는 하드웨어 성능 카운터, 트레이스포인트, 소프트웨어 성능 카운터(예: hrtimer) 및 동적 프로브(예: kprobe 또는 uprobe)를 지원한다.[4] 2012년, 두 IBM 엔지니어는 perf를 (OProfile과 함께) 리눅스에서 가장 일반적으로 사용되는 두 가지 성능 카운터 프로파일링 도구 중 하나로 인정했다.[5]
구현
[편집]perf 유틸리티와 커널 간의 인터페이스는 단 하나의 시스템 호출로 구성되며 파일 서술자와 매핑된 메모리 영역을 통해 이루어진다.[6] LTTng 또는 이전 버전의 oprofile과 달리, 대부분의 기능이 커널에 통합되어 있으므로 서비스 데몬은 필요하지 않다. perf 유틸리티는 버퍼가 가득 차면 매핑된 버퍼에서 원시 데이터를 디스크로 덤프한다. LBNL의 R. 비틸로에 따르면, perf가 수행하는 프로파일링은 매우 낮은 오버헤드를 수반한다.[6]
2010년 기준[update], 하드웨어 카운터를 지원하는 아키텍처에는 x86, 파워PC64, 울트라스파크 (III 및 IV), ARM (v5, v6, v7, Cortex-A8 및 -A9), Alpha EV56 및 슈퍼H가 포함된다.[4] 펜티엄 4 이후 인텔 CPU에서 사용 가능한 분기 추적 구현인 Last Branch Records[7] 사용은 패치로 제공된다.[6] 2014년 3월 31일 출시된 리눅스 커널 버전 3.14부터 perf는 전력 소비 측정용으로 특정 인텔 CPU 기능으로 제공되는 RAPL(Running Average Power Limit)도 지원한다.[8][9][10]
Perf는 2010년 출시된 레드햇 엔터프라이즈 리눅스 버전 6부터[11] 및 2011년 출시된 데비안 6.0 (Squeeze)부터 linux-tools-common 패키지의 데비안을 포함한 많은 인기 있는 리눅스 배포판에서 기본적으로 지원된다.[12]
하위 명령
[편집]perf는 여러 하위 명령과 함께 사용된다.
- `stat`: 단일 프로그램 또는 시스템의 총 이벤트 수를 일정 시간 동안 측정한다.
- `top`: 가장 활성화된 함수들의 top과 유사한 동적 보기를 제공한다.
- `record`: 단일 프로그램의 샘플링 데이터를 측정하고 저장한다.[13]
- `report`: perf record에 의해 생성된 파일을 분석한다. 플랫 또는 그래프 프로파일을 생성할 수 있다.[13]
- `annotate`: 소스 또는 어셈블리를 주석 처리한다.
- `sched`: 스케줄러 동작 및 지연 시간 추적/측정[14]
- `list`: 사용 가능한 이벤트 나열
비판
[편집]perf의 문서는 (2014년 현재) 그다지 상세하지 않다. 예를 들어, 대부분의 이벤트를 문서화하지 않거나 별칭(종종 이벤트의 이름과 코드를 얻기 위해 외부 도구가 사용된다[15])을 설명하지 않는다.[16] 또한 perf 도구는 실제 벽시계 시간을 기반으로 프로파일링할 수 없는데,[16] 이는 off-CPU 프로파일링 추가로 해결되었다.
보안
[편집]리눅스 커널 2.6.37부터 3.8.8까지, 그리고 RHEL6 커널 2.6.32의 perf 서브시스템에는 로컬 사용자가 root 권한을 얻는 데 악용된 보안 취약점(CVE-2013-2094)이 포함되어 있었다.[17][18] 이 문제는 event_id 검증 코드 경로에서 잘못된 유형(64비트 대신 32비트 정수)이 사용되었기 때문이었다.[19]
같이 보기
[편집]각주
[편집]- ↑ Vince Weaver, The Unofficial Linux Perf Events Web-Page
- ↑ Linux perf event Features and Overhead // 2013 FastPath Workshop, Vince Weaver
- ↑ Jake Edge, Perfcounters added to the mainline, LWN July 1, 2009, "perfcounters being included into the mainline during the recently completed 2.6.31 merge window"
- ↑ 가 나 Arnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, September, 2010
- ↑ A. Zanella, R. Arnold. Evaluate performance for Linux on POWER. Analyze performance using Linux tools, 12 Jun 2012 // IBM DeveloperWorks Technical library
- ↑ 가 나 다 Roberto A. Vitillo (LBNL). PERFORMANCE TOOLS DEVELOPMENTS, 16 June 2011, presentation from "Future computing in particle physics" conference
- ↑ 《Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B: System Programming Guide, Part 2》. Intel. June 2009. 19-2 vol. 3쪽.
- ↑ Jake Edge (2014년 4월 9일). “Lots of new perf features”. LWN.net. 2014년 4월 22일에 확인함.
- ↑ Jacob Pan (2013년 4월 2일). “RAPL (Running Average Power Limit) driver”. LWN.net. 2014년 4월 22일에 확인함.
- ↑ “kernel/git/torvalds/linux.git - Linux kernel source tree”. Git.kernel.org. 2014년 1월 20일. 2014년 3월 31일에 확인함.
- ↑ 6.4. Performance Counters for Linux (PCL) Tools and perf // RHEL Developer Guide
- ↑ “Debian - Details of package linux-tools-2.6.32 in squeeze”. Packages.debian.org. 2014년 3월 31일에 확인함.
- ↑ 가 나 Urs Fässler perf file format 보관됨 2012-12-14 - 웨이백 머신, CERN openlab, 2011
- ↑ 잉고 몰나르, 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior, 17 Sep 2009
- ↑ How to monitor the full range of CPU performance events // Bojan Nikolic, 2012
- ↑ 가 나 로버트 하스 (PostgreSQL), perf: the good, the bad, the ugly // 6 June 2012
- ↑ Michael Larabel (2013년 5월 15일). “New Linux Kernel Vulnerability Exploited”. Phoronix.
- ↑ corbet (2013년 5월 15일). “Local root vulnerability in the kernel”. LWN.
- ↑ Joe Damato (2013년 5월 20일). “A closer look at a recent privilege escalation bug in Linux (CVE-2013-2094)”.
외부 링크
[편집]- Kernel.org의 perf 위키
- 아르날도 카르발료 데 멜로, The New Linux ’perf’ tools, 2010년 9월 리눅스 콩그레스 발표
- 하드웨어 PMU 지원 차트 – perf_event 열 확인
- 브렌든 그레그의 perf 예제