2009-03-25 6 views
6

운영 체제에서 메모리 페이지가 DRAM에 있는지 또는 스왑에 있는지 확인할 수 있습니다. 예를 들어, 단순히 액세스하려고 시도하고 페이지 폴트가 발생하면 그렇지 않습니다.메모리 위치가 CPU 캐시에 있는지 확인하십시오.

그러나 CPU 캐시에서도 동일한 작업이 가능합니까?

주어진 메모리 위치가 캐시 라인에로드되었는지 여부를 알 수있는 효율적인 방법이 있습니까?

답변

6

일반적으로 이것이 가능하지 않다고 생각합니다. DRAM과 페이지 파일은 OS 관리 리소스이기 때문에 작동하며 캐시는 CPU 자체에서 관리합니다.

OS는 메모리 읽기의 엄격한 타이밍 루프를 수행 할 수 있으며 캐시에서 빠져 나오기에 충분히 빠르거나 주 메모리로 나가야하는지 확인하려고합니다. 이는 매우 오류가 날 수 있습니다.

멀티 코어/멀티 프로세스 시스템에서 서로간에 캐시를 무효화해야 할 때를 결정하기 위해 프로세서간에 사용되는 cache coherency protocols이 있습니다.이 프로토콜을 스누핑하는 사용자 지정 장치를 OS 쿼리 할 것입니다.

무엇을하려하십니까? 무언가를 메모리에 강제로 저장하려면 현재 x86 프로세서가 비 차단 방식으로 메모리에 대한 프리 페치를 지원합니다. 예를 들어 Visual C++에서는 _mm_prefetch을 사용하여 캐시에 행을 페치 할 수 있습니다.

편집 : 나는이 작업을 직접 수행하지 않았으므로 책임지고 사용하십시오. 프로파일 링에 대한 캐시 누락을 판별하려면 일부 아키텍처 특정 레지스터를 사용할 수 있습니다. http://download.intel.com/design/processor/manuals/253669.pdf, 부록 A는 "성능 조정 이벤트"를 제공합니다. 이는 개별 주소가 캐시에 있는지 또는 캐시에로드되었는지를 판별하는 데 사용할 수 없지만 전체 통계에 사용할 수 있습니다. 나는 이것이 vTune (이 수준의 경이로운 프로파일 러)이 사용하는 것이라고 믿습니다.

+0

감사합니다. 필자는 커널 작성에 관심이 많기 때문에 관심이 있습니다. 실제 하드웨어에서 캐시 라인 누락을 프로파일 링하는 데 관심이 있습니다. 나는 Herb Sutter의 슬라이드를보기 전까지는 현대 CPU에 얼마나 해가되는지 잘 몰랐다. http://is.gd/oWwp –

+0

하드웨어에서 이것을 프로파일 링하는 방법이있다. vtune은 그렇다. – Michael

+0

많은 최신 CPU에는 캐시 관련 통계를 비롯하여 모든 종류의 정보를 제공 할 수있는 성능 카운터가 있습니다. – sigjuice

6

이 문제를 직접 확인하려고하면 프로그램 실행과 관련된 작업이 관련 캐시 라인을 무효화하여 측정을 쓸모 없게 만들 수 있습니다.

이것은 측정하는 것에 영향을주지 않고 무언가를 측정 할 수 없다는 과학적 원리를 반영하는 경우 중 하나입니다.

+0

위치 정보가 캐시에 있는지 * 확인하는 것은 매우 쉽습니다. 그것에서 다만 읽으십시오, 포일, 그것은 시렁에있을 것이다. ;) 트릭은 캐시에 무언가 *가 있는지 여부를 테스트하는 중입니다. :) – jalf

+1

캐시 할 수없는 메모리에서 코드를 실행하는 경우 프로그램을 실행하는 단순한 동작만으로도 캐시에 영향을 미치지 않습니다. –

+0

좋은 지적. 그래서 기본적으로 캐시 미스가 문제의 메모리를로드했는지 여부를 알기 위해 발생할 수있는 모든 문제를 설명해야합니다. –

1

X86 주소 캐시 에 있지만 여기 주소가 캐시에있는 경우

rdtsc 
save timestamp 
mov eax,address 
rdtsc read timestamp counter 
calculate timestamp difference 
if < threshold then was in cache 

임계 값은 문서에서 결정되어야 또는 경험적으로

일부 시스템 확인하는 방법 경우 확인하는 방법 잘 모릅니다 캐시 히트/미스 카운터가 있어도 똑같이 작동합니다.

관련 문제