
이 프로젝트는 성능 데이터를위한 독립형 GUI를 만들기위한 KDAB R & D 노력입니다. 첫 번째 목표로서, 우리는 Linux Perf 주변의 Kcachegrind와 같은 UI를 제공하고자합니다. 앞으로이 우산 아래에서 다양한 다른 성능 데이터 형식을 지원하려고합니다.
다음은 핫스팟의 가장 중요한 기능을 보여주는 스크린 샷입니다.
핫스팟의 주요 기능은 perf.data 파일의 그래픽 시각화입니다.


참고 : 인화 된 기능은 감염되지 않은 경계보다 어두운 테두리가 있습니다.





타임 라인을 사용하면 시간, 프로세스 또는 스레드별로 결과를 필터링 할 수 있습니다. 데이터 뷰는 그에 따라 업데이트됩니다.



또한 핫스팟에서 perf 시작하거나 새로 시작된 응용 프로그램을 프로파일 링하거나 이미 실행중인 프로세스 (ES)에 첨부 할 수 있습니다. 아래의 경고를 고려하십시오.


참고 : 핫스팟은 아직 모든 Linux 배포판에 포장되지 않았습니다. 그러한 경우 또는 최신 버전을 사용하려면 최근 Linux 배포판에서 작동하는 Appimage를 사용하십시오.
핫스팟은 aur (https://aur.archlinux.org/packages/hotspot)에서 사용할 수 있습니다.
핫스팟은 Debian (https://packages.debian.org/hotspot) 및 ubuntu (https://packages.ubuntu.com/hotspot)에서 제공됩니다.
핫스팟 ebuilds는 오버레이 (https://github.com/kdab/kdab-overlay)에서 구입할 수 있습니다.
핫스팟은 Fedora (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/)에서 제공됩니다.
최신 릴리스 또는 연속 빌드로 향할 수 있습니다. 두 경우 모두 다운로드 할 수있는 "자산"에서 Appimage를 찾을 수 있습니다. attar appimage 파일 (최신 릴리스의 경우)을 실행할 수있게 한 다음 실행하십시오.
최신 빌드를 사용하여 최신 버전을 얻으십시오. 작동하지 않으면 버그를보고하고 최신 안정 버전을 테스트하십시오.
참고 : 시스템 라이브러리 또는 기본 설정이 변경되지 않습니다. 핫스팟을 다시 제거하려면 다운로드 된 파일을 삭제하십시오. Appimage에 대해 자세히 알아보십시오.
AppImage를 디버깅하는 방법을 알아 보려면 해킹을 참조하십시오.
Source에서 핫스팟을 구축하면 최신의 가장 큰 것을 제공하지만 모든 종속성을 사용할 수 있는지 확인해야합니다. 대부분의 사용자는 Distro 패키지 관리자 또는 AppImage로 핫스팟을 설치해야 할 것입니다.
핫스팟에 기여하거나 AppImage 자세한 노트없이 최신 버전을 사용하려는 모든 사람을 위해 해킹시 발견됩니다.
우선, perf 와 함께 일부 데이터를 기록하십시오. 백 트레이스를 얻으려면 Dwarf Callgraph 모드를 활성화해야합니다.
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] 이제 동일한 기계에 핫스팟을 사용할 수있는 경우 시작하기 만하면됩니다. 현재 디렉토리에서 perf.data 파일을 자동으로 엽니 다 ( perf report 와 유사).
또는 콘솔의 데이터 파일로의 경로를 지정할 수 있습니다.
hotspot /path/to/perf.data 귀하의 요구에 따라 추가 명령 줄 옵션을 핫스팟에 전달할 수 있습니다. 이를 통해 "설정"에서 GUI에서 찾을 수있는 일회성 세트 구성 옵션이 가능하며 Linux Perf 데이터 파일을 더 작고 휴대용 Perfdata 형식으로 변환 할 수 있습니다 (자세한 내용은 가져 오기 / 내보내기 참조). 모든 명령 줄 옵션은 --help 로 표시됩니다.
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
핫스팟은 대기 시간 분석 또는 Off-CPU 프로파일 링을 수행하는 매우 강력한 방법을 지원합니다. 이 분석은 Linux 스케줄러의 커널 트레이셀 인을 기반으로합니다. 해당 데이터를 기록함으로써 CPU에서 스레드가 실행되지 않고 대신 CPU가 아닌 시간 델타를 찾을 수 있습니다. 이 기술을 사용하여 여러 가지 이유가있을 수 있습니다.
read() 또는 write() 통해 동기 I/O, 예를 들어mmap() 'ed 파일 데이터에 액세스 할 때nanosleep() 또는 yield() 에 대한 통화futex() 등을 통한 경합 잠금스케줄러의 커널 추적 지점을 활용하면 오버 헤드가 매우 관리 가능하며 프로세스가 실제로 전환 될 때만 가격을 지불합니다. 특히 우리는 Mutex Lock 작동을 사용자 공간에서 직접 처리 할 수있는 경우 가격을 지불하지 않습니다.
핫스팟으로 외부 CPU 분석을하려면 매우 구체적인 명령으로 데이터를 기록해야합니다.
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >또는 Hotspot의 통합 레코드 페이지에서 Off-CPU 확인란을 사용할 수 있습니다.
분석 중에 CPU 데이터에 대한 "사이클"비용보기를 대기 시간 분석을위한 "CPU 시간"비용보기로 전환 할 수 있습니다. 종종, 당신은 두 가지 사이를 바꾸고, 예를 들어, 추가 병렬화가 필요할 수있는 코드에서 장소를 찾기를 원할 것입니다 (Amdahl 's Law 참조).
"일정 : Sched_Switch"비용도 귀하에게 표시됩니다. 그러나 제 생각에는 스케줄러 스위치 수를 나타내므로 유용하지 않습니다. 사이의 시간의 길이는 종종 나에게 더 흥미 롭습니다. 이것이 "CPU 오프 타임"메트릭에서 당신에게 보여지는 것입니다.
임베디드 시스템에서 녹화하는 경우 핫스팟으로 개발 시스템의 데이터를 분석 할 것입니다. 그렇게하려면 Sysroot에 풀기에 필요한 디버그 정보가 포함되어 있는지 확인하십시오 (아래 참조). 그런 다음 임베디드 시스템에 데이터를 기록하십시오.
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real file임베디드 머신이 호스트와 다른 플랫폼을 사용하는 경우에는 괜찮습니다. 호스트에서 다음 단계를 수행 한 다음 데이터를 분석합니다.
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.datasysroot 외부의 경로에서 응용 프로그램을 수동으로 배포 한 경우 대신이 작업을 수행하십시오.
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.data응용 프로그램은 Sysroot 외부 및 AppPath 외부의 라이브러리를 사용하는 경우 다음을 수행하십시오.
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.data그리고 최악의 경우, 비표준 위치에서 분할 디버그 파일을 사용하는 경우 다음을 수행하십시오.
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data perf.data 파일 형식은 자체 포함되지 않습니다. 이를 분석하려면 디버그 기호와 함께 프로세스 프로세스의 실행 파일 및 라이브러리에 액세스해야합니다. 이로 인해 동료의 도움을 받아 성능 문제를 조사하거나 버그보고 목적으로 동료로부터 도움을받는 것이 어리석지 않습니다.
핫스팟을 사용하면 분석 된 데이터를 내보낼 수 있으며, 이는 완전히 독립적입니다. 이 기능은 "파일> 저장으로"메뉴 동작을 통해 액세스 할 수 있습니다. 그런 다음 데이터는 자체 포함 *.perfparser 파일로 저장됩니다. 데이터를 핫스팟으로 다시 가져 오려면 원래 perf.data 파일 대신 해당 파일을 직접 열어주십시오.
대안으로 --exportTo 옵션을 사용하여 명령 줄 (GUI 없이는 자동화 된 빌드로도 사용할 수 있음)에서도 내보내기를 수행 할 수도 있습니다.
참고 : 파일 형식은 아직 안정적 이지 않습니다 . 하나의 버전의 핫스팟으로 내보낸 데이터는 동일한 버전으로 만 다시 읽을 수 있습니다. 이 문제는 시간이 허락함에 따라 향후에 해결 될 것입니다.
핫스팟은 현재 타임 라인에 Tracepoints의 이름 만 표시됩니다.


핫스팟에는 분리기가 포함되어있어 교육 당 비용을 보여줄 수 있습니다. Disassembler는 색상을 사용하여 어떤 어셈블리 라인이 어떤 소스 코드 라인에 해당하는지 나타냅니다. 더 쉬운 내비게이션을 위해서는 단순히 라인을 클릭하면 다른보기가 점프됩니다. 더블 클릭으로 기능 통화를 따라갈 수 있습니다. Sorcecode보기에서 Ctrl+F를 누르거나 검색 아이콘을 눌러 검색 창을 열 수 있습니다.
다른 디렉토리에 소스가있는 경우 --sourcePaths 또는 설정을 선택할 수 있습니다.
위의 내용이 중단되고 출력이 perf report 보다 덜 사용하기 어려운 경우 GitHub에 문제를보고하십시오. 즉, 사람들이 여행 할 수있는 몇 가지 알려진 문제가 있습니다.
스택을 방해하기 위해 스택을 풀는 것은 어두운 예술이며 여러 가지면에서 잘못 될 수 있습니다. 핫스팟은 perfparser (아래 참조)에 의존하며, 이는 스택을 풀기 위해 Elfutils에서 libdw 에 의존합니다. 이것은 대부분의 시간에 잘 작동하지만 여전히 잘못 될 수 있습니다. 가장 주목할만한 것은 다음과 같은 경우 풀기가 실패합니다.
perf.data 파일이 누락 된 ELF 파일 (예 : 실행 파일 또는 라이브러리)--debugPaths <paths> : 비표준 위치에 분할 디버그 파일이있을 때 이것을 사용하십시오.--extraLibPaths <paths> : 녹음 이후 라이브러리를 다른 위치로 옮겼을 때 이것을 사용하십시오.--appPath <paths> : 이것은 위의 두 필드의 일종의 조합입니다. 경로는 재귀 적으로 통과하여 디버그 파일과 라이브러리를 찾고 있습니다.--sysroot <path> : 임베디드 플랫폼에 녹화 된 데이터 파일을 검사하려고 할 때 이것을 사용하십시오.-O2 -g 와 같은 것으로 호출되도록하십시오. perf record 단계를 반복해야합니다 기본적으로 perf record 스택의 일부만 데이터 파일에 복사합니다. 이것은 매우 깊은 콜 스택으로 문제가 발생할 수 있으며, 어느 시점에서 차단됩니다. 이 문제는 하향식보기 또는 불꽃 그래프에서 시각화 된대로 핫스팟에서 하향식 콜 트리를 깨뜨릴 것입니다. 이 문제를 해결하려면 스택 덤프 크기를 늘릴 수 있습니다.
perf record --call-graph dwarf,32768
이것은 perf.data 파일의 크기를 크게 증가시킬 수 있습니다. 조심스럽게 사용할 수 있습니다. 또한 man perf record 를 살펴보십시오.
일부 시나리오에서는 재귀 함수 호출이 단순히 풀리지 않습니다. #93도 참조하십시오
핫스팟은 DebuginFod를 통해 디버그 기호 다운로드를 지원합니다. 설정에서 다운로드 URL을 추가하거나 환경에서 정의 된 DEBUGINFOD_URLS 사용하여 핫스팟을 시작하여 활성화 할 수 있습니다.
perf report 와 비교할 때 핫스팟은 많은 기능을 놓치고 있습니다. 이 중 일부는 앞으로 해결 될 계획입니다. 다른 사람들은 잠재적으로 구현되지 않을 수 있습니다. 그러나 다음과 같은 기능은 현재 핫스팟에서 사용할 수 없습니다 .
--itrace , --mem-mode , --branch-stack 및 --branch-history 와 같은 고급 기능 중 많은 부분이 지원되지 않습니다. sudo 또는 root 사용자로 핫스팟을 시작하는 것은 좋은 생각이 아닙니다 . 해당 문제에 대한 기사의 루트로 파일 편집을 참조하십시오. 이슈 #83 도이 연락처와 관련이 있습니다.
그러나 슈퍼업자 권한이 없으면 Hotspot의 레코드 기능을 사용할 때 다음과 같은 오류 메시지가 표시 될 수 있습니다.
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
이 제한을 해결하기 위해 핫스팟은 특권이 높은 자체를 실행할 수 있습니다.
현재 데이터 내보내기는 동일한 버전의 핫스팟에서만 다시 읽을 수있는 형식으로 제한됩니다. 이것은 다른 시각화 도구와의 인터 로프를 불가능하게 만듭니다. 이것은 알려져 있으며 향후 개선 될 것입니다. Perfetto 또는 Mozilla Profiler와 같은 웹 시청자에 대한 수출 지원은 가장 주목할만한 것이 계획되었지만 아직 구현되지 않았습니다. 패치를 환영합니다!
이 프로젝트는 QT Company가 QT Creator IDE를 위해 만든 우수한 perfparser 유틸리티를 활용합니다. QT Creator를 이미 사용하고있는 경우 통합 CPU 사용 분석기를 활용하는 것이 좋습니다.
핫스팟은 GPL V2+에 따라 라이센스가 부여됩니다. 자세한 내용은 License.gpl.txt를 참조 하거나이 라이센스의 조건이 명확하지 않은 경우 [email protected]으로 문의하십시오.