FTL (Flash Translation Layer)
SSD가 HDD를 쉽게 대신할 수 있는 이유는 동일한 host interface를 이용하기 때문이다.
HDD는 수정이 가능하지만 SSD는 Nand Flash Memory의 특성상 수정이 불가능하다.
하지만 FTL 덕분에 동일한 host interface를 가질 수 있다. FTL은 SSD 컨트롤러 내부에 위치하는 컴포넌트로 Logical Block Mapping과 Garbage-collection 2가지를 담당한다.
Logical Block Mapping
정의 : LBA를 PBA로 변환시켜주는 역할
LBA (Logical Block Address) : OS가 인식하는 호스트 영역의 논리적 주소
PBA (Physical Block Address) : NAND 플래시 메모리의 물리적 주소
LBA + PBA로 구성된 테이블을 가진다.
-> RAM에 저장되어 빠른 엑세스 가능
-> 비휘발성인 플래시 메모리에도 저장됨.
-> 전원을 on/off하면 플래시 메모리에서 RAM으로 Load한다.
Garbage Collection
새로운 데이터는 free page에 기록
삭제할 데이터는 stable로 마킹 처리
호스트로부터 새로운 쓰기 요청에 대비하여 free page 공간을 확보하기 위해 주기적으로 Garbage Collection을 수행한다.
전략1 : Hot Data와 Cold Data를 분리한다.
-- Hot Data : 빈번하게 변경되는 정보
-- Cold Data : 자주 변경되지 않는 정보
--> Hot Data와 Cold Data가 동일한 Page에 저장된다면 Cold Data는 Block 단위의 지우기 작업을 통해 불필요하게 계속 쓰기 작업을 수행하게 된다.
전략2 : Hot Data Buffering
-- Hot Data는 버퍼링을 통해 SSD에 최대한 덜 업데이트 되도록 만든다.
-- 버퍼링 : 쓰기/덮어쓰기 작업이 일어났다고 해서 바로 실제 메모리에 결과를 반영하지 않고 임시 저장소 (버퍼)에 잠시동안 옮겨 놓았다가 나중에 다른 데이터 변경점들과 한꺼번에 실제 메모리에 반영하는 기술
출처1 : https://tech.kakao.com/2016/07/15/coding-for-ssd-part-3/