관리 메뉴

개발자비행일지

Write Through, Write Back 본문

▶ Computer Science

Write Through, Write Back

Cyber0946 2020. 9. 28. 19:33

우리는 흔히 캐시를 읽을 때, 빠르게 읽기 위해서 사용하는 저장공간으로만 알고 있다. 하지만, 캐시는 쓰기 명령을 수행할 때도 사용된다. 아래의 그림처럼 캐시에 Write Buffer라는 걸 두어서 쓰기 성능을 좋게 한 System도 있다.

http://recipes.egloos.com/5170809

즉, Write Buffer를 이용해서 CPU가 쓰기 명령 수행중에 좀 더 효율적으로 다른 일을 할 수 있도록 해주는 System이다. 쓰기 버퍼 방식은 크게 두 가지가 존재한다.  Write Through와 Write Back이다.

먼저 Write Through라는 용어는 쓰루 패스와 마찬가지로 Memory에 뭔가를 쓰기 명령을 수행할 때, Cache와 Memory값을 일치 시켜주는 방식을 말한다. Write Through를 쓰게 되면 Cache와 Memory에 모두 Update를 같이 수행한다. 

그리고  Write Back은 Data를 쓸 때 Memory에는 안 쓰고 Cache만 update하는 방법이다. 이는 Write Through보다 훨씬 빠르다는 장점을 가진다. 나중에 Cache에 있는 내용을 버리게 되는 경우에만 메모리에 update를 해준다. 하지만 단점이 Write Back을 하면 속도가 빠른 대신에 Memory와 Cache가 서로 값이 다르게 된다는 단점이 있다. 이걸 Inconsistency라고 부른다. 다른 건 그렇다 치더라도 Device를 Control할 때 Write back을 쓰게 되면 실제 Device에 값을 써야 되는데 Cache에만 써놓고, Device에 값을 안 넘기는 경우가 생긴다. 

여기에서 다시 한번 Write Buffer의 역할을 얘기하자면 쓰기 할때 FIFO buffer를 가지고 CPU대신에 Memory에 Data를 적어주는 일을 하는 것이다. Write Through할 때도 그렇고 Write Back할 때도 그렇고. Cache자체를 사용 자제해야 하는 경우도 있다. DMA를 사용할 경우이다. CPU는 DMA를 통해서 뭔가를 대량으로 썼을 경우에 실제 Memory와 Cache간의 데이터 불일치가 발생하게 되기 때문이다. 

이를 방지하기 위한 방법으로는 Cache Flush나, Cache Clean을 이용하거나, MMU의 Page Table을 Cacheable - Non Cacheable 영역으로 정해 방법이 있다. Cache Flush나 Cache Clean을 다뤄봐야겠네요. Cache Flush는 Cache Invalidate라고도 불린다. Flush는 Cache 안의 내용을 마치 Reset하듯이 정리한다. Cache Clean은 Data Cache에 해당하는 말이다. 이 명령을 수행하면, Cache에 있던 내용을 Memory에도 update해준다.
 
요약하면 다음과 같다. 

▶Write Through란?

CPU가 데이터를 사용하면 캐시에 저장되게 되는데, 데이터가 캐시 됨과 동시에 주기억장치 또는 디스크로 기입되는 방식을 지원하는 구조의 캐시이다. 즉, 캐시와 메모리 둘다에 업데이트를 해버리는 방식이다.

장점 : 캐시와 메모리에 업데이트를 같이 하여, 데이터 일관성을 유지할 수 있어서 안정적이다.
단점 : 속도가 느린 주기억장치 또는 보조기억장치에 데이터를 기록할 때, CPU가 대기하는 시간이 필요하기 때문에 성능이 떨어진다.

데이터 로스가 발생하면 안되는 상황에서는 Write Through를 사용하는 것이 좋다.

▶Write Back이란?

CPU 데이터를 사용할 때 데이터는 먼저 캐시로 기록되는데, 캐시 내에 일시적으로 저장된 후에 블록 단위에 캐시로부터 해제되는 때(캐시안에 있는 내용을 버릴시) 에만 주기억장치 또는 보조기억장치에 기록되는 방식이다. 즉, 데이터를 쓸 때 메모리에는 쓰지 않고 캐시에만 업데이트를 하다가 필요할 때에만 주기억장치나 보조기억장치에 기록하는 방법이다.

장점 : Write Through보다 훨씬 빠르다.
단점 : 속도가 빠르지만 캐시에 업데이트 하고 메모리에는 바로 업데이트를 하지 않기 때문에, 캐시와 메모리가 서로 값이 다른 경우가 발생할 때가 있다.

빠른 서비스를 요하는 상황에서는 Write Back을 사용하는 것이 좋다.

'▶ Computer Science' 카테고리의 다른 글

신호  (0) 2020.11.15
DNSSEC(DNS Security Extensions)  (0) 2020.10.20
스트림 암호 one-time-pad 공격  (0) 2020.09.03
버스 스누핑(Bus Snooping), 캐시 일관성, 커널 보안  (0) 2020.09.03
리눅스 기초 명령어 head  (0) 2020.07.23