Rust에서 캐시 인식 데이터 레이아웃: 필드 구역화와 128바이트 규칙
Cache-Conscious Data Layout in Rust: Field Zoning, False Sharing, 128-Byte Rule
멀티스레드 구조체의 성능은 필드 배치에 크게 좌우됩니다. 이 글은 SPSC 링 버퍼를 예로 들어, 각 필드를 '누가 쓰는가'에 따라 구역을 나누는 필드 구역화(field zoning)와, 64바이트 캐시 라인을 넘어 128바이트 정렬을 사용하는 이유를 설명합니다. 또한 `#[repr(C)]`의 중요성, false sharing 문제, 그리고 소프트웨어 프리페치 힌트가 오히려 성능을 떨어뜨릴 수 있는 이유를 다룹니다.
코드는 lock-free처럼 보이지만, 벤치마크는 그렇지 않다고 말한다.