ZNS SSD에 대해
배경
기존 SSD의 블록지우기, 페이지쓰기,읽기 로 가비지렉션,프로비저닝 등의 쓰기증폭,공간낭비가 발생하는데
기존의 FTL의 역할을 줄이고 호스트 매니지드 SSD를 제안
최신 SSD는 메모리처럼 병렬처리를 위해 다중 채널을 채택하고 있다.
셀 간섭때문에 플래시 블록 내부의 페이지를 순차적으로 프로그래밍 할 것을 권장함.
기존 FTL역할
논리 주소를 채널,플래인,(삭제)블록,페이지 의 계층구조로 변환.
가비지 컬렉션 : 한 블록에 유효한 페이지와 그렇지 않은 페이지가 있어 지울때
free블록으로 유효한 것만 옮기고 이전 블록을 삭제.
on-board Dram 매핑테이블, 가비지컬렉션 메타데이터를 보관.(램 용량을 많이 차지함)
페이지를 4KB로 가정하면 1TB의 플래시 메모리당 1GB의 Dram이 필요함.
가비지 컬렉션을 위한 Over-Provisioning(예비공간할당)으로 전체 용량의 7~28%를 예약해둠.
ZNS SSD
주소 공간을 삭제블록과 유사하게 동작하는 zone으로 분할.
zone내에는 순차적 쓰기만 가능.
zone이 가득 차면 쓰기전에 reset하고, 현재 쓰기 위치는 쓰기 포인터로 추적함.
zone은 empty, open, closed, full, read-only, and offline 여섯개의 상태로 있을 수 있음.
zone은 empty 상태로 시작하여 full상태 까지 open상태이고 reset이후 open상태로 전환
각 active zone이 buffer를 소비하기때문에 제한된 수의 zone만 한번에 활성화 될 수 있다.
또한 동시에 read-only 상태일 수 있다.
플래시 셀 오류가 일어나면 zone의 크기를 줄이거나 offline상태로 전환하여 없는 상태로 만들 수 있다.
zone은 삭제블록만큼 크다.
ZNS SSD 기존 ssd와 비교할 점
on-board dram resource 감소
16MB 삭제블록당 하나의 워드를 필요로 하게 된다면 256KB dram만 필요하게 됨.
하지만 호스트 리소스를 사용하기 때문에 이것이 적절한 tradeoff인지 알아야함.
Over-Provisioning 감소
OP할 필요가 없기때문에 ssd가격을 낮출 수 있다.
따라서 거의 모든 플래시 용량을 사용할 수 있지만 약간의 용량만을 불량 블록을 교체하기 위해 예약해둠.
Garbage Collection on device 하지 않음
zone을 reset할때 zone내 block을 완전히 무효화하고 지워지기 때문
NVMe 표준의 복사 명령어를 통해 호스트가 장치의 컨트롤러를 관리 할 수 있다.
이 명령을 통해 zone을 지우기 전에 유효한 데이터를 앞으로(다른 zone) 복사하면 PCIe대역폭을 사용하지 않을 수 있다.
즉, 호스트의 DIMM Dram을 활용하거나 추가적으로 늘리는 것이 각 SSD에 임베디드Dram을 사는것보다 저렴하다고 함.
호스트에서 가비지 컬렉션 등을 관리하게 되면 애플리케이션과 가깝기 때문에 데이터 저장방식에 대한 더 나은 통찰이 있다.
즉 한마디로 안좋은 controller,빈약한 dram 때문에 일어난 GC, wear-leveling 등을 호스트에게 넘긴고 OP를 없앤다.
사용되는 fs : zonefs, f2fs, btrfs, ext4
모든 fs를 지원하지 않기 때문에 zns블록장치를 에뮬레이팅 하기 위해 dm-zoned (device mapper, apple의 Rosetta와 비슷한 역할?)를 제공한다.
용어
erase block : zone
page : chunk
의미는 다르지만 개념은 유사함.
zone은 연속쓰기 관리 단위, chunk는 zone내부의 작은 단위