이 글은 CCL 저작자표시-비영리-변경금지 2.0 대한민국을 사용하고 있습니다.
인용 부분의 저작권은 인용 출처에 있습니다.
본 글은 이방인(ebangin127)의 개인적인 해석을 포함하고 있습니다.
절대 본 글이 JESD 등 인용문에 대한 절대적인 해석이 될 수 없음을 알려드립니다.
본 글의 내용은 일반 사용자의 보편적 이해를 위해 비유를 사용하여 정확성을 희생하였습니다.
정확한 내용을 원하시는 분들은 각 내용에 해당하는 논문을 보세요.
4. 창고지기와 WAF
여러분은 혹시 창고지기(소코반)라 불리는 게임을 기억하시나요?
박스 혹은 여러가지 짐이 있고 각각의 자리로 옮기는 게임이지요. 혹시 감이 안 오신다면 아래의 링크로 가서 한 판 해 보시고 오시는 것도 좋습니다.
링크: http://muzbox.tistory.com/41
이 게임이 WAF와 무슨 관계가 있을까요? 기억이 나셨거나 한 판 해보셨다면 그에 대한 이야기를 해 봅시다.
우선 목표를 생각해봅시다. 아래 그림에서 보면 결국 목표는 파란 구슬을 집으로 옮기는 작업일겁니다. 즉 아래의 상태에서 거리를 고려하지 않고 이동량을 생각해본다면 최소한의 값은 4입니다. 파란 구슬 4개를 각각 집으로 이동시키면 되니까요.
하지만 일이 항상 그렇게 쉽게만 풀리는 건 아닙니다. 일단 옮기는 데에도 4 발자국 이상이 걸립니다. 이걸 바로 ‘쓰기 속도’에 비유할 수 있습니다. 또한 나중에 아래와 같은 상황이 되면 구슬 하나를 집에 위치시키기 위해서 다른 구슬을 밀어야 될 상황도 옵니다.
이렇게 하나의 자료를 자리로 보내기 위해서 다른 자료들을 옮기는 작업들이 필요하기 때문에, 쓰기량은 압축과 같은 수가 없으면(여기서는 옮겨야 할 구슬의 양이 줄어드는 것으로 비유할 수 있습니다) 자체 데이터의 양보다 많아지게 됩니다. 여기서 하나의 구슬을 자리로 보낼 때 밀어야 하는 구슬의 총량을 WAF로 생각하시면 어느 정도 맞습니다. 구슬이 많아질 수록 밀어야 하는 구슬도 많아지겠죠. 즉 사용자의 쓰기량 대비 실제 쓰기량이 많아진다는 것이지요. 그게 바로 더티 상태가 되면 수명에 좋지 않은 이유입니다. 정리를 한 번 해보자면 다음과 같습니다.
호스트 쓰기: 옮겨야 하는 구슬
낸드 쓰기: 실제로 건드린 구슬
WAF: 구슬을 1개 옮길 때마다 건드린 구슬의 양
더티 상태: 구슬이 많음
OP영역 설정: 게임 시작 전에 구슬이 배치되지 않는 빈 공간을 설정
그럼 하드 디스크에서는 이런 일이 없었던 것 같은데, SSD는 왜 이렇게 귀찮은 방식으로 기록을 할까요?
그 이유는 SSD는 아래 그림처럼 쓰기와 지우기의 단위가 다르기 때문입니다.
(출처: http://en.wikipedia.org/wiki/Write_amplification)
SSD에 수명이 있기 때문에 최대한 쓰기와 지우기가 적게 일어나야 한다는 것은 다들 아실겁니다. 덮어쓰기는 지우기 + 쓰기이기 때문에, 명령 그대로 항상 덮어쓰기를 수행해버리면 무리가 가므로 최대한 데이터를 추스리는 과정이 들어갑니다. 이 부분이 각 업체들의 자체적인 정리 방법이 필요한 부분입니다. 즉 위의 스테이지들을 자동으로 푸는 공식들을 지정한다고 보시면 됩니다.
여기서 멍청한 방법을 쓰면 시간이 많이 걸리거나 쓰기량이 많이 나오겠지만, 너무 똑똑한 방법을 쓰려고 하다보면 속도가 느려지거나 발열과 소비 전력이 늘어나겠죠. 한 쪽에 지나치게 쏠리지 않도록 알아서 잘 만드는 것이 바로 업체들이 하는 일입니다.