5.3.3. Massif를 사용하여 힙 및 스택 영역 프로파일링
Massif는 특정 프로그램이 사용하는 힙 영역을 측정합니다. 사용 가능한 공간 및 부기 및 조정 목적으로 할당된 추가 공간 모두에 해당합니다. 이는 프로그램에 의해 사용되는 메모리 양을 줄이는데 도움을 줄 수 있습니다. 이로 인해 프로그램 속도가 개선되고 프로그램을 실행하는 컴퓨터의 스왑 공간을 프로그램이 고갈할 가능성을 감소시킬 수 있습니다. Massif는 프로그램의 어떤 부분이 힙 메모리 할당에 대해 관여하는가에 대한 자세한 정보도 제공합니다. Massif와 함께 실행되는 프로그램은 정상적인 실행 속도보다 약 20 배 더 느리게 실행됩니다.
프로그램의 힙 사용량을 프로파일링하려면 사용하고자 하는 Valgrind 도구로
massif
를 지정합니다:
# valgrind --tool=massif program
Massif가 수집한 프로파일링 데이터는 기본값으로
massif.out.pid
라는 파일에 기록됩니다. 여기서 pid는 지정된 program의 프로세스 ID입니다.
이러한 프로파일링 데이터는 다음과 같이
ms_print
명령으로 그래프화할 수 있습니다:
# ms_print massif.out.pid
이는 프로그램의 실행에 대한 메모리 사용량을 표시하는 그래프를 생성하며 최고 메모리 할당 지점을 포함하는 프로그램에 있는 다양한 지점에서 할당을 담당하는 사이트에 대한 자세한 정보도 생성합니다.
Massif는 도구의 출력을 지시하는데 사용할 수 있는 명령행 옵션을 제공합니다. 사용 가능한 옵션 중 일부는 다음과 같습니다:
--heap
- 힙 프로파일링을 수행할 지에 대한 여부를 지정합니다. 기본값은
yes
입니다. 이 옵션을no
로 설정하면 힙 프로파일링을 비활성화할 수 있습니다. --heap-admin
- 힙 프로파일링을 활성화할 때 관리에 사용할 블록 당 바이트 수를 지정합니다. 기본값은 블록 당
8
바이트입니다. --stacks
- 스택 프로파일링을 수행할 지에 대한 여부를 지정합니다. 기본값은
no
(비활성화)입니다. 스택 프로파일링을 활성화하려면 이 옵션을yes
로 설정합니다. 하지만 이러한 설정으로 Massif가 현저히 느려지게 될 것임에 유의합니다. 또한 프로파일링된 프로그램이 제어하는 스택 부분의 크기를 보다 알기 쉽게 표시하기 위해 Massif는 메인 스택 크기가 시작 시 0이라고 가정하고 있다는 점에 유의합니다. --time-unit
- 프로파일링에 사용되는 시간 단위를 지정합니다. 이 옵션에는 세 개의 유효한 값이 있습니다: 실행된 명령 (
i
), 기본값으로 대부분의 경우 유용합니다. 실시간 (ms
밀리초 단위), 특정 인스턴스에서 유용합니다. 힙 또는 스택에서 할당/할당해제된 바이트 (B
), 이는 다른 시스템에서 가장 재생 가능해서 단기 실행 프로그램 및 테스트 목적으로 유용합니다. 이 옵션은ms_print
로 Massif 출력을 그래프화할 때 유용합니다.
옵션의 전체 목록은
/usr/share/doc/valgrind-version/valgrind_manual.pdf
에 있는 문서에서 참조하십시오.