2014-06-07 6 views
3

내 코드의 캐시 누락 율을 측정하고 싶습니다. 지원 목록을 사용하여 지원되는 이벤트를 표시 할 수 있습니다. 내 데스크탑은 인텔 (R) 코어 (TM) i5-2400 CPU @의 3.10GHz 프로세서가의 반환 한 목록은 다음과 같이 캐시 refrences 및 캐시 미스를 포함 :캐시 참조 용 Linux perf 명령

cpu-cycles OR cycles        [Hardware event] 
    stalled-cycles-frontend OR idle-cycles-frontend [Hardware event] 
    stalled-cycles-backend OR idle-cycles-backend  [Hardware event] 
    instructions          [Hardware event] 
    cache-references         [Hardware event] 
    cache-misses          [Hardware event] 

나는 캐시 미스가 생각 Intel 아키텍처 소프트웨어 개발자 매뉴얼에 따라 하드웨어 이벤트 LLC- 미스에 매핑됩니다 (이는 perf stat -e r412eperf stat -e cache-misses과 거의 동일합니다). 그러나 캐시 참조는 어떻게 계산됩니까? 기존 하드웨어 이벤트를 사용하여 전체 캐시 참조를 얻는 이벤트 나 방법을 찾지 못했습니다. 그래서이 캐시 참조가 내 컴퓨터에 정확한지 궁금하네요?

+0

캐시 - 미스 바로 아래에 캐시 참조가 표시됩니다. 정확한 시간 문제 란 무엇입니까? –

+0

캐시 참조가 주어졌지만, 어떻게 계산되었는지 궁금합니다. 정확합니까? 인텔 지침에서 캐시 참조에 대한 이벤트 카운터를 찾지 못했습니다. – Robert

답변

3

인텔에서는 하드웨어 수준에서 perf이 총 캐시 참조를 측정하는 이벤트를 제공하지 않는다고 생각합니다. 당신은 perf list에 의해 자신이보고 된 하드웨어 캐시 이벤트를 사용하여이 정보를 계산 할 수 있어야한다 : -misses 태그하지

L1-dcache-loads         [Hardware cache event] 
L1-dcache-load-misses        [Hardware cache event] 
L1-dcache-stores         [Hardware cache event] 
L1-dcache-store-misses        [Hardware cache event] 
L1-dcache-prefetches        [Hardware cache event] 
L1-dcache-prefetch-misses       [Hardware cache event] 
L1-icache-loads         [Hardware cache event] 
L1-icache-load-misses        [Hardware cache event] 
L1-icache-prefetches        [Hardware cache event] 
L1-icache-prefetch-misses       [Hardware cache event] 
LLC-loads           [Hardware cache event] 
LLC-load-misses         [Hardware cache event] 
LLC-stores           [Hardware cache event] 
LLC-store-misses         [Hardware cache event] 
LLC-prefetches          [Hardware cache event] 
LLC-prefetch-misses        [Hardware cache event] 

이벤트 관련 캐시에 참고 문헌의 수를 나타냅니다.

참고 : perf_event_open (perf에서 내부적으로 사용)에 대한이 questionman page은 도움이 될 수 있습니다.

+0

'perf list'의 모든 이벤트를 하드웨어 성능 카운터에 매핑 할 수있는 것은 아닙니다 ... – osgx

3

커널 코드에서 arch/x86/kernel/cpu/perf_event_intel.c를 보면. 당신은

"PERF_COUNT_HW_CACHE_REFERENCES = 0x4f2e". 

"PERF_COUNT_HW_CACHE_MISSES= 0x412e" 

로 86 architectual 설명서 0x4f2e는 "이 이벤트는 마지막 레벨 캐시의 캐시 라인을 참조하는 코어에서 발생하는 요청을 계산"말한다 것을 볼 수 있습니다. 그래서 나는 그것이 옳다고 생각합니다.

+0

예. 이 두 가지 이벤트는 Intel 프로세서의 아키텍처 성능 이벤트입니다. 0x4f2e는 * 가장 긴 레이턴시 캐시 참조로 설명되는 LLC 참조이며 * 0x412e는 * 가장 긴 캐시 실패 *로 설명되는 LLC 누락입니다. 이 설명서 [Intel 설명서] (http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b)에서이 정보를 얻을 수 있습니다. -part-2-manual.html). 그러나 LLC 참조는 L1 및 L2 캐시 히트를 포함하지 않는 동안 LLC를 누르는 메모리 액세스 일 뿐이라고 생각합니다. 그래서 정확하지 않습니다. – Robert

+0

그래서 0x4f2e는 LLC를 치는 캐시 참조 일뿐 L1 및 L2를 치는 캐시 참조는 포함하지 않습니다. – Robert

1

Intel에서 Vtune이라는 도구를 사용해 보았습니다. 총 캐시 참조를 측정하는 방법에 대한 단서가 있습니다. 그들은 마이크로 연산 코드를 측정 할 수 있고 총 캐시 참조를 얻기 위해로드 또는 저장하는 명령어를 필터링 할 수 있습니다. 하지만 perf 도구에서도이 방법을 사용하는지 확실하지 않습니다.

+0

pmu-tools의 ocperf.py https://github.com/andikleen/pmu-tools는 인텔에서 심볼 이름으로 이벤트를 사용할 수 있습니다 (스크립트는'perf' 도구를 프로그램합니다). 몇 가지 유용한 스크립트가 포함되어 있습니다. – osgx