2012-02-15 2 views
2

for 루프를 사용하여 1에서 100까지의 숫자를 인쇄하는 간단한 C++ 프로그램을 작성했습니다. 특정 TLB 히트 및 누락 횟수를 찾고 싶습니다. 실행 중에 프로그램. 이 데이터를 얻을 가능성이 있습니까?우분투에서 TLB 히트 및 TLB 미스를 프로파일 링하는 방법

나는 우분투를 사용하고 있습니다. 내가 perf 도구를 사용했습니다. 그러나 그것은 다른 시간에 다른 결과를 만들어 내고 있습니다. 내 코드가 TLB 히트 수, TLB 누락 및 캐시 누락으로 이어지는 부분은 매우 혼란 스럽습니다.

물론 우분투 GUI처럼 다른 프로세스가 동시에 실행될 수도 있습니다. 그러나이 결과에도 그러한 과정이 포함되어 있습니까? 명령은 내가 사용 :

결과 :

./hellocc 처음으로 ..

 909,822 dTLB-loads             
     2,023 dTLB-misses    # 0.22% of all dTLB cache hits 
     4,512 cache-misses             

    0.006821182 seconds time elapsed 

LB-미스 통계를 규칙적 DTLB -로드 './hellocc'에 대한 dTPerformance 카운터 통계를 -e -e

결과 :

 907,810 dTLB-loads             
     2,045 dTLB-misses    # 0.23% of all dTLB cache hits 
     4,533 cache-misses             

    0.006780635 seconds time elapsed 

내 간단한 코드 :

'./hellocc'에 대한 둘째으로 .. 성능 카운터 통계
#include <iostream>  
using namespace std;  
int main 
{  
    cout << "hello" << "\n";  
    for(int i=1; i <= 100; i = i + 1)  
     cout<< i << "\t" ;  
    return 0;  
} 
+0

콘솔 출력은 상당히 복잡하므로 느린 코드입니다. 99 + %의 코드가 IO에있을 것입니다. –

답변

2

프로그램의 캐시 동작은 그 당시에 시스템에서 어떤 현상이 있었는지에 따라 다릅니다.

Linux 시스템에는 X 서버 및 창 관리자, 터미널, 편집기, 다양한 데몬 프로세스 및 실행중인 다른 프로세스 (예 : 웹 브라우저)와 같이 많은 프로세스가 실행 중입니다.

스케줄러의 변동 사항과 이러한 다른 프로그램이 시스템에 저장되는 요구 사항에 따라 프로그램의 데이터가 캐시에 남아 있거나 유지되지 않을 수 있습니다 (스케줄러는 프로세스를 완전히 스왑 파일로 이동할 수 있습니다). 캐시 누락 횟수는 실행중인 다른 응용 프로그램에 따라 다릅니다.

4

당신이 이것을 시뮬레이션 할 수있는 한 가지 방법은 valgrind의 일부인 cachegrind을 사용하는 것입니다.

Cachegrind는 프로그램이 시스템의 캐시 계층 구조 및 선택적으로 분기 예측기와 상호 작용하는 방식을 시뮬레이트합니다. 통합 2 차 레벨 캐시 (L2)가 지원되는 독립적 인 1 차 레벨 명령 및 데이터 캐시 (I1 및 D1)가있는 시스템을 시뮬레이션합니다. 이것은 많은 최신 기계의 구성과 정확하게 일치합니다.

귀하의 하드웨어가 아니지만 사용자가 얻을 수있을 것 같지 않은데, 좋은 대목입니다.

+0

그들은 TLB 미스를 요청했지만 캐시 미스는 아닙니다 ..... – user997112

관련 문제