후기 입 및 연속 기입 캐싱?


95

내 이해는 두 방법의 주요 차이점은 "쓰기"방법에서는 데이터가 캐시를 통해 주 메모리에 즉시 기록되는 반면 "후기 입"에서는 데이터가 "지연 시간"에 기록된다는 것입니다.

우리는 여전히 "후기"에 메모리를 기다려야하므로 "기입"의 이점은 무엇입니까?


@EricWang 나는 당신 write back이 더 나은 성능 을 의미한다고 생각 합니까?
wlnirvana

@wlnirvana 네, 맞아요, 내 사무 오류입니다. 나는 그것을 제거하고 미래의 오해를 피하기 위해 여기에 새로운 주석을 달 것입니다.
에릭 왕

6
간단히 말해서, write back메인 메모리에 쓰는 것이 CPU 캐시에 쓰는 것보다 훨씬 느리고 데이터가 짧을 수 있기 때문에 성능이 더 좋습니다. 복잡하지만 더 정교하며 현대 CPU의 대부분의 메모리는이 정책을 사용합니다.
에릭 왕

나는 설명이 주어진 것을 본다. 다시 쓰기 알고리즘을 다룬 후 Write-Allocate, Write-NoAllocate 태그를 살펴 보는 것이 좋습니다.
Çağlayan DÖKME

귀하의 질문에 대한 대답은 연속 기입 캐싱을 사용하면 동일한 블록 내에서 쓸 때 주 메모리에 한 번만 쓰기가 필요하다는 것입니다. 자세한 내용은 내 대답을 참조하십시오.
qwr

답변:


113

주 메모리에 대한 연속 기입의 이점은 컴퓨터 시스템의 설계를 단순화한다는 것입니다. 연속 기입을 사용하면 주 메모리에 항상 최신 행 복사본이 있습니다. 따라서 읽기가 완료되면 주 메모리는 항상 요청 된 데이터로 응답 할 수 있습니다.

후기 입이 사용되는 경우 최신 데이터가 프로세서 캐시에 있고 때로는 주 메모리에 있습니다. 데이터가 프로세서 캐시에있는 경우 주 메모리에 오래된 데이터 복사본이있을 수 있으므로 해당 프로세서는 주 메모리가 읽기 요청에 응답하는 것을 중지해야합니다. 이것은 연속 기입보다 더 복잡합니다.

또한 Write-through는 수정 상태 가 필요하지 않기 때문에 캐시 일관성 프로토콜을 단순화 할 수 있습니다 . 수정 이 무효화 또는 라인을 축출하기 전에 캐시는 캐시 라인을 다시 작성해야한다는 국가 기록합니다. write-through에서 캐시 라인은 메모리에 이미 라인의 최신 사본이 있으므로 다시 쓰지 않고 항상 무효화 될 수 있습니다.

한 가지 더-메모리 매핑 된 I / O 레지스터에 쓰는 후기 입 아키텍처 소프트웨어에서는 쓰기가 캐시에서 즉시 전송되도록 추가 단계를 거쳐야합니다. 그렇지 않으면 다른 프로세서에서 라인을 읽거나 라인이 제거 될 때까지 코어 외부에서 쓰기가 표시되지 않습니다.


8
메모리 매핑 I / O의 경우 이러한 주소는 일반적으로 캐시되지 않은 것으로 매핑됩니다. Write through를 사용하여 안정성을 높일 수도 있습니다 (예 : L1에 패리티 보호 만 있고 L2에 ECC가있는 경우). Write through는 쓰기 할당을 사용하지 않는 작은 캐시에서도 더 많이 사용됩니다 (즉, 쓰기 미스로 인해 블록이 캐시에 할당되지 않아 잠재적으로 L1 용량 및 L2 읽기 / L1 채우기 대역폭에 대한 수요가 감소 함). 이러한 쓰기에 대한 쓰기 요구 사항은 이미 존재합니다.
Paul A. Clayton

1
내 코어의 캐시 방법이 다시 쓰기인지 또는 쓰기인지 확인할 수 있습니까?
ArtificiallyIntelligence

4
프로세서가 주 메모리가 읽기 요청에 응답하는 것을 중지해야하기 때문에 후기 입이 더 복잡하다고 말하는 것은 오해의 소지가 있습니다. 또한 캐시는 "더티 비트"를 사용하여 데이터가 데이터 (메인 메모리와 일치하지 않음)와 그렇지 않은 데이터를 추적하므로 메인 메모리를 전혀 확인하지 않을 수 있습니다.
steviejay

@Shaowu "lshw"명령이 "비동기 내부 다시 쓰기"와 같은 쇼 캐시 기능
mug896

다시 쓰기에 사용되는 실제 단계가 무엇인지 여전히 이해하지 못하지만 복잡하다는 것만 알고 있습니다. 더 많은 리소스 / 세부 정보를 제공 할 수 있습니까?
qwerty9898

10

예를 들어 이것을 살펴 보겠습니다. 직접 매핑 된 캐시가 있고 쓰기 정책이 사용된다고 가정합니다. 따라서 캐시 라인에 유효한 비트, 더티 비트, 태그 및 데이터 필드가 있습니다. 연산이 있다고 가정합니다 : write A (여기서 A는 캐시의 첫 번째 줄에 매핑 됨).

프로세서의 데이터 (A)가 캐시의 첫 번째 줄에 기록됩니다. 유효한 비트 및 태그 비트가 설정됩니다. 더티 비트는 1로 설정됩니다.

더티 비트는 단순히 캐시에 마지막으로 가져온 이후 기록 된 캐시 라인임을 나타냅니다!

이제 다른 작업이 수행되었다고 가정합니다. 읽기 E (E도 첫 번째 캐시 라인에 매핑 됨)

직접 매핑 된 캐시가 있으므로 첫 번째 줄은 메모리에서 가져올 E 블록으로 간단히 대체 할 수 있습니다. 그러나 라인에 마지막으로 기록 된 블록 (블록 A)이 아직 메모리 (더티 비트로 표시됨)에 기록되지 않았으므로 캐시 컨트롤러는 먼저 메모리에 다시 쓰기 를 실행하여 블록 A를 메모리로 전송 한 다음 메모리에 읽기 작업을 실행하여 라인을 블록 E로 대체합니다. 더티 비트는 이제 0으로 설정됩니다.

따라서 쓰기 정책은 블록이 메모리 및 관련 캐시 라인에서 동일하다는 것을 보장하지 않습니다. 그러나 라인이 교체 될 때마다 처음에 쓰기가 수행됩니다.

쓰기 정책은 그 반대입니다. 이에 따르면 메모리에는 항상 최신 데이터가 있습니다. 즉, 캐시 블록이 기록되면 그에 따라 메모리도 기록됩니다. (더티 비트 사용 안함)


8

이 기사가 여기에 링크하는 데 도움이 될 수 있습니다 .

연속 기입 : 쓰기는 캐시와 백업 저장소 모두에 동 기적으로 수행됩니다.

Write-back (또는 Write-behind) : 쓰기는 캐시에만 수행됩니다. 수정 된 캐시 블록은 교체되기 직전에 저장소에 다시 기록됩니다.

Write-through : 데이터가 업데이트되면 캐시와 백엔드 스토리지 모두에 기록됩니다. 이 모드는 작동하기 쉽지만 캐시와 스토리지 모두에 데이터를 써야하기 때문에 데이터 쓰기 속도가 느립니다.

후기 입 : 데이터가 업데이트되면 캐시에만 기록됩니다. 수정 된 데이터는 캐시에서 데이터가 제거 된 경우에만 백엔드 스토리지에 기록됩니다. 이 모드는 데이터 쓰기 속도가 빠르지 만 업데이트 된 데이터가 스토리지에 기록되기 전에 정전이 발생하면 데이터가 손실됩니다.


나는 마지막 문장의 설명을 따르지 않습니다. 정전시 DRAM은 write-through 또는 write-back에 관계없이 데이터를 잃게되므로 write-back 특정 문제가 아닙니다.
gustafbstrom

5

Write-back 및 write-through는 쓰기 적중이 발생할 때, 즉 캐시에 요청 된 정보가있을 때 정책을 설명 합니다. 이 예에서는 단일 프로세서가 캐시를 사용하여 주 메모리에 쓰고 있다고 가정합니다.

Write-through : 정보가 캐시와 메모리에 기록되고 둘 다 완료되면 쓰기가 완료됩니다. 이것은 구현이 더 간단하다는 장점이 있으며 주 메모리는 항상 캐시 (단일 프로세서의 경우-다른 장치가 주 메모리를 수정하는 경우이 정책이 충분하지 않음)와 일관되며 읽기 실패 주 메모리에 쓰지 않습니다. 명백한 단점은 모든 쓰기 적중이 두 번의 쓰기를 수행해야한다는 것입니다. 그 중 하나는 더 느린 주 메모리에 액세스합니다.

후기 입 : 정보가 캐시의 블록에 기록됩니다. 수정 된 캐시 블록은 교체 될 때만 메모리에 기록됩니다 (실제로는 지연 쓰기 ). 각 캐시 블록의 특수 비트 인 더티 비트 는 캐시 블록이 캐시에있는 동안 수정되었는지 여부를 표시합니다. 더티 비트가 설정되지 않은 경우 캐시 블록은 "깨끗한"상태가되고 쓰기 미스로 인해 블록을 메모리에 쓸 필요가 없습니다.

장점은 쓰기가 캐시 속도로 발생할 수 있으며 동일한 블록 내에서 쓰기를 수행하는 경우 주 메모리에 한 번만 쓰기 만하면된다는 것입니다 (이전 블록이 교체 될 때). 단점은이 프로토콜을 구현하기가 더 어렵고, 주 메모리가 캐시와 일치하지 않을 수 있으며 (동기화되지 않을 수 있으며) 교체로 이어지는 읽기로 인해 더티 블록이 주 메모리에 기록 될 수 있다는 것입니다.

쓰기 누락 에 대한 정책은 첫 번째 링크에 자세히 설명되어 있습니다.

이러한 프로토콜은 최신 프로세서에서 일반적으로 사용되는 것처럼 다중 프로세서 및 다중 캐시가있는 경우를 처리하지 않습니다. 이를 위해서는보다 복잡한 캐시 일관성 메커니즘이 필요합니다. 연속 기입 캐시는 캐시에 대한 쓰기가 메모리에 즉시 반영되므로 프로토콜이 더 간단합니다.

좋은 자원 :


0

Write-Back은 더 복잡하고 복잡한 MOESI (Cache Coherence Protocol)가 필요하지만 시스템을 빠르고 효율적으로 만들기 때문에 그만한 가치가 있습니다.

Write-Through의 유일한 이점은 구현이 매우 간단하고 복잡한 캐시 일관성 프로토콜이 필요하지 않다는 것입니다.


2
WT에는 여전히 일관성 프로토콜이 필요합니다. 한 코어의 저장소는 여전히 다른 캐시의 복사본을 무효화해야하므로 오래된 데이터를 무기한 읽지 않습니다. Atomic RMW는 특별한 지원이 필요합니다. 이 모든 것이 WT를 사용하면 더 쉽다고 생각하지만 필요한 일관성은 여전히 ​​다소 복잡합니다.
Peter Cordes

또는 L1 / L2 (또는 그 이상)의 캐시 계층 구조를 가진 단일 코어 시스템에 대해 이야기하고있을 수도 있습니다. 이 경우 가장 바깥 쪽 캐시 방향에 액세스 할 수있는 캐시 일관된 DMA를 지원하지 않는 한 외부 캐시를 통해 가져 오는 내부 캐시에 대해 MESI / MOESI를 사용할 필요가 없습니다. 그러나 내부 캐시를 무효화하기 위해 DMA 쓰기에 대한 일관성이 여전히 필요합니다.
Peter Cordes 19

1
캐시 일관성 프로토콜은 여러 캐시 / 프로세서에 대한 지원이 필요하거나 DMA와 같은 메모리에 영향을 미치는 경우에만 필요합니다. Write-through는 단일 프로세서 시스템에서도 장점, 즉 쓰기 속도가 있습니다.
qwr

DMA의 경우 OS는 I / O 후 캐시를 명시 적으로 플러시 할 수 있습니다. 소프트웨어이기 때문에 효율성이 떨어집니다.
qwr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.