소프트웨어/툴 & 프로파일링

gperftools & tcmalloc 소개

2017. 5. 30. 22:00
반응형

[소개]

구글의 성능 측정 툴이 모태가 되어서 개발된 오픈소스 툴이다.

멀티스레드 환경에서 잘 동작한다고 주장하고 있으며 아래 세 가지가 메인 기능이라고 한다.

  1. malloc 성능향상 : tcmalloc
  2. heap-checker
  3. heap-profiler
  4. cpu-profiler


체커나 프로파일을 위한 리포트를 생성하기 위해서 pprof 라는 내부 툴이 있다.

다만 해당이 golang 버전으로 대체 되었다고 한다.

얼핏 살펴보니 perf 또한 지원하는 형태로 발전한 듯 하다.

나중에 시간나면 한번 살펴봐야지.


 - https://github.com/google/pprof


[TCMALLOC]

간단하게 -ltcmalloc 또는 -ltcmalloc_minimal 을 링크하는 것으로 끝이다.

이렇게 하면 코드 상의 malloc 또는 new는 tcmalloc 버전으로 대체된다.

당연히 기존 malloc과 new에 비해서는 성능이 향상된다.


아래는 TCMALLOC과 다른 라이브러리의 성능을 비교한 링크이다.


  1. http://www.highlandsun.com/hyc/malloc/
  2. http://gaiacrtn.free.fr/articles/win32perftools.html


잠깐 확인해보니 전반적으로 TCMALLOC가 메모리 절약 및 성능이 뛰어나다는 것을 알 수 있다.

다만 해당 문서가 오래전에 만들어진 것 같으니 최신의 정보가 있으면 더 좋을 것 같다.


추가로 살펴보니 다른 재밌는 솔루션도 많다. 아래는 lockless allocator에 대한 성능 리포트를 보여준다.


 - https://locklessinc.com/benchmarks_allocator.shtml


굉장히 높은 성능을 보여주는데 안타깝게도 size에 대한 정보는 없다.

TCMALLOC 보다 약간 성능이 좋은 것 같지만 크게 차이는 나지 않는다.


jemalloc이라고 FACEBOOK에서 개발한 솔루션도 있다. TCMALLOC과의 비교에 대한 이야기는 아래 링크에 조금 나온다.


 - https://stackoverflow.com/questions/7852731/c-memory-allocation-mechanism-performance-comparison-tcmalloc-vs-jemalloc


정리하자면 일반적인 케이스에서는 TCMALLOC이 좀더 좋은 결과를 보여준다고 한다.


[HEAP PROFILER]

Heap 메모리 사용량을 분석하는 툴이다.



1) 실행파일에 -ltcmalloc 를 링크한다.

2) HEAPPROFILE 환경변수와 함께 실행한다.

     $ HEAPPROFILE=/tmp/heapprof <path/to/binary> [binary args]

3) pprof 를 통해서 heap 사용량을 분석한다.

     $ pprof <path/to/binary> /tmp/heapprof.0045.heap  # run 'ls' to see options

     $ pprof --gv <path/to/binary> /tmp/heapprof.0045.heap


-ltcmalloc으로 컴파일 되지 않은 실행파일의 경우, LD_PRELOAD를 통해서 테스트해 볼수도 있다.



[HEAP CHECKER]

메모리 릭을 잡아내는 툴이다. 중요한 점은 tcmalloc 라이브러리가 실행파일의 마지막에 링크되어야 한다는 점이다.

마지막에 링크되지 않으면 이전에 링크된 라이브러리의 메모리 릭을 확인하지 못할 수 있다.


1) 실행파일에 -ltcmalloc 를 마지막에 링크한다.

2) HEAPCHECK 환경변수와 함께 실행한다.

     $ HEAPCHECK=1 <path/to/binary> [binary args]



-ltcmalloc으로 컴파일 되지 않은 실행파일의 경우, LD_PRELOAD를 통해서 테스트해 볼수도 있다.



[CPU PROFILER]

CPU 사용량을 프로파일링하는 툴이다.


1) 실행파일에 -lprofiler 를 링크한다.

2)  CPUPROFILE 환경변수와 함께 실행한다

     $ CPUPROFILE=/tmp/prof.out <path/to/binary> [binary args]

3) pprof 를 통해서 cpu 사용량을 분석한다.

     $ pprof <path/to/binary> /tmp/prof.out              # -pg-like text output

     $ pprof --gv <path/to/binary> /tmp/prof.out      # really cool graphical output



[ENVIRONMENT VARIABLES]

라이브러리를 링크하더라도 실제로 기능을 on하지 않으면 해당 라이브러리는 동작하지 않는다.

따라서 라이브러리 링크 자체는 안전하다고 한다.


기능을 on시키는 가장 간단한 방법은 이전에 표시했듯이 환경변수를 설정하는 것이다.

기본적인 환경변수들은 아래와 같다.


  1.  HEAPPROFILE=<pre> : HEAP PROFILER 실행
  2.  HEAPCHECK=<type> : HEAP CHECKER 실행
  3.  CPUPROFILE=<file> : CPU PROFILER 실행


아래는 CPU PROFILER에 대한 추가적인 환경변수들이다.


  1. PROFILESELECTED=1 : 1일 경우, CPU PROFILER은 ProfilerEnable()와 ProfilerDisable()로 둘러쌓은 부분만 프로파일링
  2. CPUPROFILE_FREQUENCY=x : CPU PROFILER의 샘플링 기준을 설정한다


아래는 message 관련된 추가 환경변수들이다.


  1. PERFTOOLS_VERBOSE=<level> : malloc시 레벨에 해당하는 추가 메시지 제공
  2. MALLOCSTATS=<level> : 프로그램 종료시 메모리 사용정보 출력


[링크]

  1. 홈페이지 https://github.com/gperftools/gperftools
  2. 메일링 리스트 : https://groups.google.com/forum/#!forum/gperftools


반응형
저작자표시 비영리 변경금지 (새창열림)

'소프트웨어 > 툴 & 프로파일링' 카테고리의 다른 글

gprof 고급사용법 : call 그래프 결과 이미지로 변환하기 등  (0) 2017.06.01
예제와 함께하는 gprof를 이용한 기본적인 CPU 프로파일링  (0) 2017.05.31
'소프트웨어/툴 & 프로파일링' 카테고리의 다른 글
  • gprof 고급사용법 : call 그래프 결과 이미지로 변환하기 등
  • 예제와 함께하는 gprof를 이용한 기본적인 CPU 프로파일링
강에바
강에바
일상/메모
강에바
강에바의 이것저것
강에바
전체
오늘
어제
  • 전체 (79)
    • 소프트웨어 (51)
      • 파이썬 (python) (3)
      • 데브옵스 (DevOps) (0)
      • 리눅스 (4)
      • IDE (2)
      • AI (1)
      • 툴 & 프로파일링 (3)
      • 안드로이드앱 (16)
      • 라즈베리파이2 (5)
      • 모바일웹게임 (6)
      • OTA(on-the-air) (8)
      • 기타 (3)
    • 취미 (17)
      • 여행 (4)
      • 맛집 (6)
      • 자전거 (1)
      • 블로그 (6)
    • 기타 (6)

블로그 메뉴

  • 홈
  • 미디어로그

공지사항

인기 글

태그

  • 안드로이드
  • libsystemd
  • 편집기
  • ROS2
  • Yocto
  • gperftools
  • ROS
  • systemd
  • tcmalloc
  • Prompt engineering
  • 라즈베리파이2
  • ChatGPT
  • pixi.js
  • Large Language Model
  • 프롬프트 엔지니어링
  • LLM
  • systemctl
  • program_options
  • gprof
  • call 그래프

최근 댓글

최근 글

hELLO · Designed By 정상우.
강에바
gperftools & tcmalloc 소개
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.