성능 평가를 해야할 일이 있는데..
과연 이 작업이 유효한가.. 다른 많은 도구들이 있는데 찾아보면 되고..
그중 FlameGraph를 그릴수 있는 perf + FlameGraph 튜토리얼을 작성하고자 한다.
Linux에서는 이것을 사용하고 Windows에서는 vTune이나 AMD uprof를 사용하면 좋다.
VS의 성능 프로파일러로는 음 뭔가 확인하는 근거가 어렵다.
먼저 perf + FlameGraph 는 아래의 문서에서 확인할 수 있다.
https://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
이 perf를 WSL2 Ubuntu 환경에서 시작해보자.
perf를 WSL2 에서 사용하기 위해서는 직접 소스파일을 받아 빌드하여 사용해야 한다.
필자는 빌드한 바이너리를 usr/bin 에 카피하여 사용하였다.
Symbolic link를 걸어 사용할수도 있다.
https://stackoverflow.com/questions/60237123/is-there-any-method-to-run-perf-under-wsl
단, WSL에서 perf를 사용하는 평가는 정확하지 않을 수 있다.
https://askubuntu.com/questions/1314136/installing-linux-perf-tools-on-ubuntu-20-04-lts-with-wsl2
perf list 명령으로 perf가 잘 실행되는지 확인해서 사용하자.
문제없이 명령어가 먹힌다면 이제 바이너리의 성능을 쉽게 확인할 수 있다.
1. sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' 명령어로 캐시를 초기화한다.
2. perf record -g -e "cpu-clock" [실행할 바이너리]
- 각 옵션은 help를 확인하자.
-g: enables call-graph recording
-e, --event <event> event selector. use 'perf list' to list available events
- 이렇게 perf record 명령으로 기록한다.
- record 작업이 끝나면 아래와 같은 출력을 확인할 수 있다.
- 그리고 출력의 내용대로 perf.data를 얻을수 있다. 이 데이터를 읽을수 있는 작업이 필요하다.
FlameGraph
- 여기서 해당 패키지?가 필요하다. perf.data를 FlameGraph로 읽어 데이터를 확인할 것이다.
- https://github.com/brendangregg/FlameGraph 저장소에 상세히 설명되어 있다.
3. perf script -i perf.data | ../../../FlameGraph/stackcollapse-perf.pl | grep "main" > test.out
- script 명령을 사용해 뽑아낸다. -i, --input <file> input file name
- 그리고 FlameGraph를 사용하는데 stackvollapse-perf.pl로 FlameGraph 형식을 만들고
- Poco 문자열을 가진 경우만 test.out에 뽑아낸다.
- 이렇게 뽑아내면 이제 모든 작업이 끝이 난다.
* 간혹 -i 옵션 사용시 패키지가 없어 에러가 발생할수 있는데 패키지를 설치하고 perf를 수동으로 다시 설치하면 된다.
4. FlameGraph SVG 출력: ../../../FlameGraph/flamegraph.pl test.out > test.svg
- FlameGraph 경로의 flamegraph.pl 로 svg 그래프를 뽑아낸다.
이렇게하면 .svg파일에 예제에서 보이는 그래프를 확인할 수 있다. 이를통해 어떤 함수에서 clock을 많이 먹는지 등 성능을 확인할수 있을 것이다.
이를 잘 활용하기 위해서는 벤치마크 프로그램을 잘 잡아야 성능에 대해 확인할 수 있을것이다.
'Ubuntu, Android' 카테고리의 다른 글
[WSL] WSL not working.. and Ubuntu exe binary chmod (0) | 2023.01.09 |
---|---|
[Android] Exoplayer (0) | 2020.05.07 |
[Android] Binder (0) | 2019.10.19 |
[Ubuntu] 삼바(Samba)로 윈도우에서 ubuntu 파일 쓰기 (0) | 2019.10.09 |
[Android] 기기연결을 통한 풀 소스코드 빌드 및 부분빌드 (0) | 2019.09.25 |