기대값과 성능 지표를 따로 만듭니다
정확성 오라클은 같은 입력에서 나와야 할 값을 판단하는 기준입니다. 시험이 만든 주소·데이터와 기대 결과를 재현 가능한 seed와 함께 보존하고 실제 결과를 비교합니다. 캐시 hit율이나 짧은 실행 시간은 그 비교를 대신하지 않습니다. CPU·리비전, 캐시 라인 크기, 공유 범위, 코어·NUMA 배치와 주소 변환 조건을 먼저 기록합니다.
첫 접근과 재사용, 용량 압력, set 충돌, 라인·페이지 경계, 여러 코어의 공유를 서로 다른 시나리오로 나눕니다. 단순한 index 비트 예제를 모든 VIPT·PIPT 구현에 적용하지 않습니다. 멀티코어 시험은 언어 규칙에 맞는 원자 연산과 동기화를 사용해야 하며 데이터 경쟁을 일부러 만든 프로그램의 이상 결과를 곧바로 캐시 결함으로 분류하지 않습니다.
32MiB 배열을 만들고 100만 번 읽으면?
8-byte 원소로 구성한 32MiB 배열은 4,194,304개 원소를 담습니다. 중복 없이 모든 원소를 지나는 하나의 포인터 고리를 만들었다고 가정하면, 1,000,000번의 의존적 접근은 그 고리의 약 23.84%만 방문합니다. 크기마다 같은 반복 횟수를 적용하면 큰 배열에서 전체 고리를 한 번도 돌지 못할 수 있습니다.
N = 32 × 1024 × 1024 / 8
= 4,194,304
방문 비율 = 1,000,000 / N
≈ 23.84%방문한 원소 수와 방문한 캐시 라인 수는 다릅니다. 무작위 원소가 여러 라인에 흩어져 있다면 일부 원소만 읽어도 넓은 주소 범위의 라인을 가져올 수 있습니다. 이 계산을 “캐시에 올라온 데이터가 정확히 8MB”라는 주장으로 바꾸지 않습니다. 고리가 여러 개로 나뉘었거나 원소가 반복되면 위 방문 비율 가정도 다시 확인해야 합니다.
평균 시간에 붙일 이름을 먼저 제한합니다
Intel MLC 설명은 의존적 pointer chasing으로 접근을 직렬화하는 측정과 다른 트래픽이 있는 loaded latency를 구분합니다. 여러 독립 접근의 처리량은 하나씩 의존하는 접근의 지연과 같지 않습니다. lmbench의 메모리 계층 문서도 접근 패턴과 prefetch 때문에 예상과 다른 계층을 측정할 수 있는 문제를 다룹니다.
워밍업·CPU 고정·NUMA 배치·페이지와 TLB·prefetch·컴파일된 루프·타이머 비용을 기록하고 반복 분포를 비교합니다. volatile만 넣었다고 루프 오버헤드나 다른 영향을 제거한 것은 아닙니다. 배열 크기와 나노초 값 하나만으로 결과를 순수 DRAM 지연 또는 특정 캐시 경계라고 이름 붙이지 않습니다.
cache-misses가 곧 L1 miss는 아닙니다
perf_event_open(2)은 일반 cache 이벤트가 보통 마지막 레벨 캐시를 가리키지만 CPU에 따라 의미가 달라질 수 있음을 설명합니다. prefetch와 coherence가 포함되는지도 이벤트 정의를 확인해야 합니다. perf list와 해당 모델의 이벤트 문서에서 지원 여부·단위·필터를 먼저 확인합니다.
카운터가 multiplex되면 time_enabled와 time_running이 달라집니다. 시간 비율을 이용한 scaling은 관측하지 못한 구간을 추정하는 것이므로 그 구간의 작업이 동일하다고 자동 보장하지 않습니다. miss 수를 모든 접근으로 나누기 전 분모도 같은 범위·실행 구간인지 확인하고, 그 비율만으로 평균 지연을 산출하지 않습니다.
검증 계획과 실제 측정 결과를 구분합니다
보존된 캐시 검증 원고 #372·#373에 원고 #268의 고정 반복 횟수 문제를 함께 대조했습니다. 출발 실험은 Karan Lodhi Rajput의 게시물입니다. 원본 이미지나 기기 실험을 재현하지 않았으며 그 화면의 특정 나노초 수치를 이 사이트의 측정값으로 제시하지 않습니다. 이 글의 수치 검사는 원소 수·방문 비율의 산술에 한정됩니다.
English summary. Validate expected values separately from timing. A fixed access count may not traverse a large pointer cycle, but visited elements are not the same as visited cache lines. PMU events and multiplex scaling require model- and interval-specific interpretation.