5.3.2. Cachegrind로 캐시 사용량 프로파일링

Cachegrind는 시스템의 캐시 계층 및 (옵션으로) 분기 예측과 프로그램의 상호 작용을 시뮬레이션합니다. 이는 시뮬레이션된 첫 번째 레벨의 지시 사항 및 데이터 캐시 사용을 추적하여 이러한 캐시 레벨과 상호 작용한 불충분한 코드를 감지하고 마지막 레벨 캐시 (이것이 두 번째 또는 세 번째 레벨 캐시이던지 간에)에서 메인 메모리로의 액세스를 추적합니다. 결과적으로 Cachegrind와 함께 실행되는 프로그램은 일반적으로 실행되는 것 보다 20-100배 더 느리게 실행됩니다.
Cachegrind를 실행하려면 다음과 같은 명령을 실행합니다. 여기서 program은 Cachegrind로 프로파일링하고자 하는 프로그램으로 대체합니다.
# valgrind --tool=cachegrind program
Cachegrind는 전체 프로그램에서 그리고 프로그램에 있는 각 기능에 대해 다음과 같은 통계를 수집할 수 있습니다:
  • 첫 번째 레벨 지시 캐시 읽기 (또는 실행된 명령) 및 읽기 미스, 마지막 레벨 지시 캐시 읽기 미스;
  • 데이터 캐시 읽기 (또는 메모리 읽기), 읽기 미스, 마지막 레벨 캐시 데이터 읽기 미스;
  • 데이터 캐시 쓰기 (또는 메모리 쓰기), 쓰기 미스 및 마지막 레벨 캐시 쓰기 미스
  • 실행 및 잘못 예측된 조건 분기
  • 실행 및 잘못 예측된 간접 분기
Cachegrind는 이러한 통계에 대한 요약 정보를 콘솔에 인쇄하고 파일에 보다 자세한 프로파일링 정보를 씁니다 (기본값으로 cachegrind.out.pid, 여기서 pid는 Cachegrind를 실행하는 프로그램의 프로세스 ID입니다). 이러한 파일은 다음과 같이 cg_annotate 도구로 추가 처리할 수 있습니다:
# cg_annotate cachegrind.out.pid

참고

cg_annotate는 경로의 길이에 따라 120 자 보다 긴 행을 출력할 수 있습니다. 출력을 명확하게 하고 읽기 쉽게하려면 위의 명령을 실행하기 전 창을 적어도 이 폭으로 확대하는 것이 좋습니다.
또한 Cachegrind에 의해 생성된 프로파일 파일을 비교하여 변경 전 후의 프로그램 성능을 쉽게 도표로 만들 수 있습니다. 이를 위해 cg_diff 명령을 사용합니다. 여기서 first는 초기 프로파일 출력 파일로 second는 후속 프로파일 출력 파일로 바꿉니다:
# cg_diff first second
이 명령은 결합된 출력 파일을 생성하며, 보다 자세한 내용은 cg_annotate를 사용하여 확인할 수 있습니다.
Cachegrind는 출력에 초점을 두는 옵션을 지원합니다. 사용 가능한 옵션 중 일부는 다음과 같습니다:
--I1
콤마로 구분하여 첫 번째 레벨 지시 캐시의 크기, 연결성, 행의 크기를 지정합니다: --I1=size,associativity,line size.
--D1
콤마로 구분하여 첫 번째 레벨 데이터 캐시의 크기, 연결성, 행의 크기를 지정합니다: --D1=size,associativity,line size.
--LL
콤마로 구분하여 마지막 레벨 캐시의 크기, 연결성, 행의 크기를 지정합니다: --LL=size,associativity,line size.
--cache-sim
캐시 액세스 및 미스 카운트의 모음을 활성화 또는 비활성화합니다. 기본값은 yes (활성화)입니다.
이 옵션 및 --branch-sim 모두를 비활성화하면 Cachegrind에는 수집할 정보가 없게 됨에 유의합니다.
--branch-sim
분기 지시 및 예측 실패 수의 모음을 활성화 또는 비활성화합니다. 이는 Cachegrind를 약 25% 느리게 할 수 있으므로 기본값은 no (비활성화)로 설정되어 있습니다.
이 옵션 및 --cache-sim 모두를 비활성화하면 Cachegrind에는 수집할 정보가 없게 됨에 유의합니다.
옵션의 전체 목록은 /usr/share/doc/valgrind-version/valgrind_manual.pdf에 있는 문서에서 참조하십시오.

Red Hat의 최신 제품 문서 번역을 신속하게 제공하기 위해 이 페이지에는 영어 원본을 한국어로 자동 번역한 내용이 포함되어 있을 수 있습니다. [자세한 내용보기]