라이트 얼로케이트와 노 라이트 얼로케이트의 차이: 쓰기 미스 시 동작·트래픽·조합 비교

라이트 얼로케이트와 노 라이트 얼로케이트는 쓰기가 미스했을 때 라인을 캐시에 가져올지를 정하는 정책입니다. 라이트 얼로케이트에서는 캐시가 먼저 아래 계층에서 라인을 읽어 온 뒤 캐시 안에서 쓰기를 합니다. 노 라이트 얼로케이트에서는 라인을 가져오지 않고 쓰기를 그대로 아래 계층에 보냅니다. 이는 히트한 쓰기를 언제 아래 계층에 반영할지 정하는 라이트백과 라이트 스루의 선택과는 별개이지만, 보통 라이트 얼로케이트는 라이트백과, 노 라이트 얼로케이트는 라이트 스루와 짝을 이룹니다.

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

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

라이트 얼로케이트
배열 요소를 갱신하는 루프처럼, 쓴 데이터를 곧 다시 읽거나 쓸 때. 시간 지역성이 있는 쓰기에 적합합니다.
노 라이트 얼로케이트
한동안 다시 읽지 않을 대량의 데이터를 쓸 때. 쓸모없는 읽기를 피하고 캐시를 쓸모 있는 데이터를 위해 비워 둡니다.
소프트웨어에서
라이트 얼로케이트 캐시에서도 논템포럴 스토어를 쓰면 큰 쓰기 전용 버퍼의 라인 읽기를 피할 수 있습니다. 다만 쓴 데이터가 캐시에 남지 않으므로 바로 다시 읽으면 느려집니다.

자주 묻는 질문

라이트 얼로케이트와 노 라이트 얼로케이트의 차이는 무엇인가요?

쓰기 미스 시 라이트 얼로케이트는 라인을 캐시에 읽어 온 뒤 캐시 안에서 씁니다. 노 라이트 얼로케이트는 라인을 읽어 오지 않고 아래 계층에 직접 씁니다.

라이트 스루는 항상 노 라이트 얼로케이트를 쓰나요?

항상 그렇지는 않습니다. 쓰기 히트를 어떻게 반영할지(라이트백 또는 라이트 스루)와 미스 시 라인을 가져올지는 별개의 선택입니다. 다만 실제로는 라이트 스루는 노 라이트 얼로케이트와, 라이트백은 라이트 얼로케이트와 짝을 이루는 경우가 대부분입니다. 라이트 스루 캐시에서 히트한 스토어는 캐시의 사본을 갱신하고 아래 계층에도 쓰며, 미스한 스토어는 보통 라인을 가져오지 않고 그대로 아래로 보냅니다.

쓰기 전용 데이터에서 라이트 얼로케이트가 느린 이유는 무엇인가요?

덮어쓸 뿐인 라인을 하나하나 먼저 메인 메모리에서 읽기 때문입니다. 이 읽기와 나중의 라이트백으로 트래픽이 약 2배가 되고, 재사용될 다른 데이터도 밀려납니다. 논템포럴 스토어를 쓰면 이 읽기를 피할 수 있습니다.

이해도 확인

쓰기에서 캐시 미스가 났을 때 그 라인을 읽어 오지 않고 하위 계층에 직접 쓰는 방식은?

  1. A라이트 얼로케이트
  2. B라이트 백
  3. C노 라이트 얼로케이트
정답과 해설 보기

정답: C. 노 라이트 얼로케이트

쓰기 미스 시 라인을 읽지 않고 하위 계층에 직접 쓰는 방식은 노 라이트 얼로케이트이며, 라이트 스루 방식과 조합하는 경우가 많습니다. 한 번 쓰고 다시 읽지 않는 데이터에서는 불필요한 읽기를 생략할 수 있습니다. 라이트 얼로케이트는 반대로 라인을 읽어 온 뒤에 쓰는 방식으로, 쓴 데이터를 곧바로 다시 사용하는 경우에 유리하므로 라이트 백 방식과 조합하는 경우가 많습니다. 라이트 백은 히트한 쓰기의 처리를 정하는 방식이며, 미스 시 읽기 여부와는 다른 축입니다.

한 번 쓴 뒤 당분간 다시 읽지 않는 큰 데이터를 쓸 때, 캐시를 거치지 않는 스토어(논템포럴 스토어)를 사용하는 주된 이점은?

  1. A쓴 데이터가 캐시에 오래 남아 나중에 읽을 때 빨라진다
  2. B재사용하지 않는 데이터로 캐시를 채우지 않아도 된다
  3. C쓰기 순서가 보장되지 않게 되므로 프로그램 오류를 찾기 쉬워진다
정답과 해설 보기

정답: B. 재사용하지 않는 데이터로 캐시를 채우지 않아도 된다

일반 쓰기에서는 라이트 얼로케이트로 인해 라인을 주기억장치에서 읽어 온 뒤에 쓰므로, 쓰기만 하는 데이터여도 읽기 통신이 발생하고 재사용할 다른 데이터를 쫓아내 버립니다. 논템포럴 스토어는 쓰기를 모아 직접 주기억장치로 보내므로 캐시를 오염시키지 않고 불필요한 읽기도 생략할 수 있습니다. 쓴 데이터는 캐시에 남지 않으므로 곧바로 다시 읽는 경우에는 오히려 느려집니다. 순서 처리가 달라지는 것은 부작용이지 이점이 아닙니다.

같은 라인에 여러 번 쓰는 처리에서 라이트 스루 방식보다 라이트 백 방식이 유리해지는 주된 이유는?

  1. A쓰기가 캐시 안에서 처리되고 주기억장치에는 쫓아낼 때 한 번만 쓰면 되기 때문
  2. B쓰기마다 주기억장치도 최신이 되므로 쫓아낼 때의 처리가 필요 없기 때문
  3. C캐시와 주기억장치의 내용이 항상 일치하므로 일관성 관리가 필요 없기 때문
정답과 해설 보기

정답: A. 쓰기가 캐시 안에서 처리되고 주기억장치에는 쫓아낼 때 한 번만 쓰면 되기 때문

라이트 백 방식에서는 같은 라인에 대한 여러 번의 쓰기를 캐시 안에서만 처리하고, 쫓아낼 때 더티인 라인을 한 번 되쓰기만 하면 됩니다. 따라서 주기억장치로의 통신량과 전력을 크게 줄일 수 있습니다. 쓰기마다 주기억장치도 최신으로 만드는 것은 라이트 스루 방식의 성질이며, 같은 라인에 여러 번 쓰면 그때마다 통신이 발생합니다. 캐시와 주기억장치가 항상 일치하는 것도 라이트 스루의 성질이며, 라이트 백에서는 일치하지 않는 기간이 있습니다.

  1. 캐시의 쓰기 방식 중 라이트백 방식의 설명으로 올바른 것은?
  2. 라이트 스루 방식 캐시에서 쓰기 버퍼를 두는 주된 목적은?
  3. 라이트 백 방식 캐시에서 각 라인에 붙이는 더티 비트의 역할로 올바른 것은?

메모리 계층 구조 문제 풀기

주요 용어 설명

라이트 얼로케이트(Write-allocate)
쓰기에서 캐시 미스가 났을 때 그 라인을 캐시에 읽어 들인 후 쓰는 방식. 라이트백 방식과 조합하는 경우가 많다. 읽지 않고 하위 계층에 직접 쓰는 방식은 노 라이트 얼로케이트라 한다.
라이트 스루 방식(write-through)
캐시에 쓰는 동시에 하위 계층(주기억장치 등)에도 쓰는 방식. 하위 계층이 항상 최신으로 유지되지만 쓰기 통신량이 많아 쓰기 버퍼와 함께 쓴다.
캐시 라인(Cache Line)
캐시와 하위 계층 사이에서 데이터를 읽고 쓰는 단위. 캐시 블록이라고도 한다. 대부분의 CPU에서는 64바이트이며, 주소의 하위 비트가 라인 내 위치(오프셋)를 나타낸다.
캐시 메모리
CPU 가까이에 두는 고속·소용량 메모리. 자주 쓰는 데이터를 보관하여 주기억장치와의 속도 차이를 완화한다. 주로 SRAM으로 만든다.
시간 지역성(Temporal Locality)
한 번 접근한 데이터나 명령에 가까운 시일 안에 다시 접근하기 쉬운 성질. 루프 안에서 반복 사용하는 변수 등이 예이며, 캐시가 효과적인 이유 중 하나이다.
캐시 일관성(Cache Coherency)
멀티코어 CPU에서 각 코어의 캐시에 같은 주소의 데이터가 있을 때 그 내용의 일관성을 유지하는 방식. 한 코어가 값을 고치면 다른 코어의 오래된 사본을 무효화하는 식으로 구현한다.

관련 비교