DFTL
DFTL은 hybrid mapping의 단점을 극복하기 위해서 등장하였습니다. Hybrid mapping에 해당하는 FAST와 BAST는 full-merge를 수행해야하는데, full merge는 erase 작업을 반드시 수반하게 됩니다. 그렇기 때문에 DFTL은 page-level mapping을 사용하되, page-level mapping이 페이지 테이블이 메모리를 많이 차지하는 단점을 해결하기 위해 NAND Flash에 페이지 테이블을 저장하고 자주 액세스 되는 매핑 정보만 SRAM에 캐싱하여 요청이 올때마다 load/unload를 수행합니다. 이는 저장장치에 들어오는 요청은 결국 같은 요청이 반복되는 temporal locality가 높기 떄문에 이러한 방식을 사용합니다.
Architecture
DFTL은 Cached Mapping Table (CMT)와 Global Translaion Directory(GTD)로 구성됩니다. CMT는 매핑 테이블 중 SRAM에 저장한 부분이며, GTD는 플래시에 translation page의 주소를 저장하는 부분입니다. 요청된 매핑정보가 CMT에 존재하는 경우, 그 정보를 이용해 바로 redad/write을 수행합니다. 하지만 SRAM에 저장되지 않은 경우 translation page에 저장되어있는 매핑 정보를 CMT로 fetch합니다. 이를 위해 CMT내의 매핑정보를 victim으로 설정 후 제거합니다.
Example
- Victim entry 확인
- D_LPN = 1, Dirty = 1 → Flush 필요
- 어느 Translation Page에 저장돼야 하는지 계산
- M_VPN = D_LPN // 512 = 1 // 512 = 0
- GTD에서 M_VPN = 0에 해당하는 물리 위치 확인
- GTD[0] = M_PPN = 21
- M_PPN = 21 페이지를 NAND에서 읽기
- 기존의 D_LPN → D_PPN 매핑 정보 존재
- D_LPN = 1의 D_PPN을 260으로 수정
- Translation page는 덮어쓰기 불가 → 새 M_PPN = 23에 수정된 매핑 저장
- GTD 업데이트
- M_VPN = 0 → M_PPN = 23으로 갱신
'Storage' 카테고리의 다른 글
[FTL] BAST, FAST (0) | 2022.01.10 |
---|---|
FTL (0) | 2022.01.09 |
Data Deduplication (0) | 2021.12.21 |
Wear Leveling (WL) (0) | 2021.11.27 |
댓글