본 포스팅은 DFTL을 FEMU에 구현하는 것을 목표로 한다.

DFTL(Demand-based Flash Translation Layer)는 플래시 메모리 기반 저장장치에서 페이지 단위 주소 변환(페이지-레벨 어드레스 매핑)의 장점을 유지하면서 메모리(DRAM) 부족 문제를 해결하기 위해 요구 기반 선택적 캐싱(Demand-based Selective Caching) 방식을 사용하는 플래시 변환 계층 기술이다.

플래시 메모리에서 랜덤 쓰기가 불리한 이유를 이해하려면, 먼저 페이지와 블록의 차이를 알아야 한다. 페이지는 데이터를 읽고 쓰는 단위이고, 블록은 여러 페이지를 묶은 삭제 단위이다. 페이지 하나만 지울 수 없기 때문에 데이터를 수정할 때는 다른 빈 페이지에 기록하고, FTL이 주소 매핑을 바꾼다. 갱신이 반복되면 기존 페이지는 무효 데이터로 남는다. 이 공간을 회수하려면 유효 데이터를 옮기고 블록을 삭제해야 하므로 추가 작업이 발생한다.

Flash Translation Layer

앞 절에서는 플래시 메모리의 읽기·쓰기와 삭제 단위가 다르다는 점을 살펴봤다. 이제 이러한 특성을 관리하고 논리 주소를 물리 주소로 변환하는 FTL(Flash Translation Layer)의 동작을 알아본다.

FTL의 주요 기능은 다음과 같다.

  • 주소 매핑
  • Out-of-place Update
  • 가비지 컬렉션
  • 웨어 레벨링
  • 불량 블록 관리
  • 매핑 정보 복구

2009년 DFTL 논문은 하이브리드 FTL에서 발생하는 병합 비용에 주목한다. 하이브리드 FTL은 주소 매핑을 두 가지로 나눠 관리한다.

  • Data Block: 블록 단위 매핑
  • Log Block(Update Block): 페이지 단위 매핑 갱신 데이터는 Log Block에 기록한다. 공간이 부족해지면 기존 Data Block의 유효 데이터와 합치는 Merge 작업이 필요하다. 랜덤 쓰기에서는 여러 Data Block의 갱신 내용이 하나의 Log Block에 섞일 수 있어, Full Merge 과정에서 많은 페이지 복사와 블록 삭제가 발생한다. DFTL은 전체 데이터를 페이지 단위로 매핑해 Data Block과 Log Block 사이의 병합을 없앤다. 대신 커지는 매핑 테이블은 필요한 항목만 메모리에 캐싱하는 방식으로 관리한다. 다음 절에서는 이 구조를 살펴본다.

하이브리드 FTL과 오리지널 FTL 차이

초기 FTL은 주소 매핑 단위에 따라 페이지 단위 매핑(Page-level Mapping) 과 블록 단위 매핑(Block-level Mapping) 으로 구분할 수 있다.

페이지 단위 매핑은 각 논리 페이지를 개별적인 물리 페이지에 대응시키는 방식이다. 따라서 데이터 갱신 시 새로운 물리 페이지에 데이터를 기록하고 해당 페이지의 매핑 정보만 변경하면 된다. 이러한 방식은 주소 배치의 유연성이 높지만, 모든 페이지에 대한 매핑 정보를 관리해야 하므로 많은 메모리가 필요하다. 반면 블록 단위 매핑은 논리 블록과 물리 블록을 대응시키는 방식이다. 페이지 단위 매핑보다 매핑 테이블의 크기를 줄일 수 있지만, 블록 내부의 페이지 배치가 제약되므로 일부 페이지의 갱신만으로도 다른 유효 페이지를 복사해야 하는 문제가 발생할 수 있다.

하이브리드 FTL(Hybrid FTL) 은 이러한 두 매핑 방식의 장단점을 절충하기 위해 제안되었다. 대부분의 데이터는 블록 단위로 매핑되는 Data Block에 저장하고, 기존 데이터의 갱신 내용은 페이지 단위로 매핑되는 Log Block(Update Block)에 기록한다.

증명

우리는 FEMU에 있는 DFTL을 활용하여 실험적으로 증명하고자 한다.