피드로 돌아가기
GeekNewsInfrastructure
원문 읽기
CPU를 정말 화나게 만드는 데이터 접근 패턴
메모리 접근 패턴 최적화로 무작위 접근 대비 최대 15배 성능 차이 입증
AI 요약
Context
CPU 성능은 단순 연산 속도보다 데이터 접근 패턴에 따른 Memory Hierarchy 효율성에 의해 결정됨. 선형 접근과 달리 예측 불가능한 메모리 참조는 CPU Prefetcher를 무력화하여 심각한 Latency를 유발함.
Technical Solution
- Linear Access: Sequential Read를 통한 하드웨어 Prefetcher 최대 활용 및 Cache Hit Rate 극대화
- Cache Line Stride: 64B 간격 접근을 통해 Cache Line당 단 하나의 데이터만 사용하여 Cache 효율성 저하 유도
- Page Stride: 4KiB 단위 접근으로 L1d Cache의 Set-Associative 특성을 이용한 Cache Set 충돌 및 유효 용량 축소(48KB → 768B)
- PTE Locality Break: Page Stride를 8로 설정하여 MMU의 Page Table Entry 캐시 지역성을 파괴함으로써 주소 변환 오버헤드 증가
- DRAM Bank Conflict: 물리 주소 매핑을 통한 동일 Bank 내 서로 다른 Row 반복 접근으로 Row-buffer Conflict 및 Precharge 강제 수행
Impact
- Linear Access: 1.33억 Cycles 기록
- Random Access: 15.7억 Cycles로 Linear 대비 10배 이상 지연
- Stride 8 Page Access: 20.6억 Cycles로 Random Access 대비 30% 추가 성능 저하
- DRAM Bank Conflict: 20.8억 Cycles로 측정된 최악의 성능 지표
Key Takeaway
소프트웨어 수준의 알고리즘 복잡도뿐만 아니라 하드웨어의 Cache Line, Page Boundary, DRAM Bank 구조를 고려한 Data Layout 설계가 실제 시스템 성능을 결정함.
실천 포인트
- 대량 데이터 처리 시 Sequential Access를 보장하는 Data Structure 채택 여부 검토 - Cache Line Padding 및 Alignment를 통한 False Sharing 방지 및 Cache 효율성 최적화 - 가상 주소 변환 오버헤드 감소를 위한 Huge Pages 적용 검토 - 다량의 Random Access가 불가피한 경우 Data Shuffling 최적화 및 Memory Locality 개선 전략 수립