라이트 얼로케이트와 노 라이트 얼로케이트의 차이: 쓰기 미스 시 동작·트래픽·조합 비교
라이트 얼로케이트와 노 라이트 얼로케이트는 쓰기가 미스했을 때 라인을 캐시에 가져올지를 정하는 정책입니다. 라이트 얼로케이트에서는 캐시가 먼저 아래 계층에서 라인을 읽어 온 뒤 캐시 안에서 쓰기를 합니다. 노 라이트 얼로케이트에서는 라인을 가져오지 않고 쓰기를 그대로 아래 계층에 보냅니다. 이는 히트한 쓰기를 언제 아래 계층에 반영할지 정하는 라이트백과 라이트 스루의 선택과는 별개이지만, 보통 라이트 얼로케이트는 라이트백과, 노 라이트 얼로케이트는 라이트 스루와 짝을 이룹니다.
| 비교 항목 | 라이트 얼로케이트 | 노 라이트 얼로케이트 |
|---|---|---|
| 쓰기 미스 시 | 아래 계층에서 라인 전체를 읽어 캐시에 넣은 뒤 그 라인에 씁니다 | 캐시는 건드리지 않고 쓰기를 아래 계층에 직접 보냅니다 |
| 라인 채우기(읽기) | 필요합니다. 멀티코어에서는 쓰기 전에 다른 코어의 사본을 무효화하는 RFO(Read For Ownership)가 되므로, 스토어 미스가 메모리 버스에서는 읽기로 보입니다 | 필요 없습니다. 쓴 데이터만 아래 계층에 보냅니다 |
| 일반적인 조합 | 라이트백: 가져온 라인에 대한 이후의 쓰기가 히트해 메모리 트래픽 없이 흡수되므로, 처음 읽기의 비용을 되찾습니다 | 라이트 스루: 어차피 모든 쓰기가 아래 계층에 가므로, 라인을 가져와도 쓰기 트래픽이 줄지 않습니다 |
| 아래 계층으로의 트래픽 | 같은 라인에 여러 번 쓰거나 쓴 데이터를 다시 읽을 때 적어집니다 | 미스한 쓰기는 매번 나가지만, 추가 읽기는 생기지 않습니다 |
| 대량의 쓰기 전용 데이터(메모리 초기화, 출력 쓰기) | 덮어쓸 뿐인 라인을 일일이 읽고 나중에 다시 써 보내므로 트래픽이 약 2배가 되고, 쓸모 있는 데이터가 캐시에서 밀려납니다 | 읽기도 캐시 오염도 없으므로 이런 데이터에 적합합니다 |
| 쓴 직후의 읽기 | 라인이 캐시에 있으므로 히트합니다 | 라인이 캐시에 없으므로 미스하고 가져옵니다 |
| 구현 기법 | 쓰기 전용 데이터에는 논템포럴(스트리밍) 스토어가 캐시를 우회해 모은 쓰기를 메인 메모리에 바로 보냅니다. 이전 내용을 읽지 않고 라인 전체를 0으로 만드는 명령어를 가진 ISA도 있습니다 | 쓰기 버퍼가 쓰기 지연을 감추며, 같은 라인에 대한 여러 쓰기를 한 번의 전송으로 합치는 경우가 많습니다 |
| 사용처 | 라이트백 캐시에서 일반적입니다. 대부분의 CPU L1~L3 캐시는 라이트백입니다 | 라이트 스루 캐시에서 일반적입니다. 라이트백 L2가 뒤에 있는 작은 L1이나 단순한 임베디드 프로세서 등 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.