Application-Managed Flash는 FAST 2016에 발표된 연구다. 파일시스템과 SSD가 각각 수행하는 로그 구조 관리의 중복을 줄이는 데 초점을 둔다.

오픈채널 SSD(OCSSD), ZNS와 마찬가지로 호스트가 플래시 특성을 고려한다는 관점에서 읽을 수 있다. 다만 인터페이스와 호스트·장치의 책임 분담은 서로 다르다.

먼저 SSD 내부의 FTL이 수행하는 역할과 중복 관리 비용을 살펴본다.

FTL의 오버헤드

FTL은 SSD 내부의 컨트롤러에 존재하는 소프트웨어 레이어이다. 호스트의 논리 주소(LBA)를 NAND의 물리 주소(PBA)로 매핑해주는 변환기 역할을 주로 수행한다. 또한 가비지 컬렉션과 웨어 레벨링 같은 SSD의 낸드 플래시 칩을 관리하는 역할도 수행한다. SSD는 수명 한계가 있다.

SSD는 호스트에게 단순한 블록 디바이스로 보인다. 물론 SSD는 단순한 블록 디바이스가 아니다. 이러한 호환을 위해 FTL이 번역을 하고 있기 때문이다. 또한 모든 내부 NAND 관리 (매핑, GC, WL 등)는 SSD 내부의 FTL이 책임진다.

호스트에서 SSD 내부의 관리 동작을 직접 관찰하거나 제어하기 어렵다는 점이 문제다. 장치 내부의 GC 시점을 호스트에서 예측하기 어렵다. 이와 별개로 파일시스템과 FTL이 각각 로그 구조와 데이터 회수를 관리하면 작업이 중복되는 더블 로깅 문제가 생긴다.

오픈채널 SSD

이 제품은 호스트가 워크로드 특성에 맞게 매핑 최적화를 수행하고, GC/WL 스케줄링도 직접 제어할 수 있다. 따라서 예측 가능성도 높아진다.

ZNS

ZNS는 존 단위 순차 쓰기를 요구해 호스트가 데이터 배치를 관리하도록 한다. 이 제약은 장치 내부의 재배치 부담을 줄일 수 있지만, 시스템 전체에서 데이터 회수와 재배치가 사라지는 것은 아니다.

Application-Managed Flash

해당 연구에서는 더블 로깅 문제로 인해 발생하는 각종 지연들을 해소하고자 한다. FTL의 기능을 최소화하고, FTL의 주요한 기능(GC)를 호스트로 옮긴다. 그리고 시스템 호환을 위해 블록 인터페이스와 FTL을 새로운 인터페이스로 구현하여 각각 ALFS와 AFTL로 구성한다.

위 그림은 파일시스템과 플래시 계층의 역할 분담을 보여준다. 파일시스템은 다음 세그먼트로 구성된다.

  • 체크포인트 세그먼트
  • 아이노드 맵 세그먼트
  • 데이터 세그먼트

이 세그먼트는 데이터와 메타데이터를 관리한다. append-only 쓰기를 사용해 로그 구조를 유지한다. 여기서 중요한 것은 데이터 회수 작업 자체를 없애는 것이 아니라 파일시스템과 FTL의 중복된 GC를 줄이는 것이다.

위 이미지는 실험 테스트이다. AMF는 저자의 연구팀이 개발한 인터페이스이다. 해당 인터페이스에서 시스템이 상당히 안정된 것을 확인할 수 있고, PFTL과 DFTL은 비교 대상으로 사용한 FTL 방식이다.

저자는 해당 실험을 수행하기 위해 의도적으로 GC를 많이 발생시켰다고 한다. GC 발생을 위해 SSD 의 용량을 16GB로 제한하고, 호스트 DRAM 크기는 1.5GB로 제한했다고 한다.

실험 벤치마크는 위와 같다.

기여

이 연구의 의미는 파일시스템과 SSD를 독립적으로 최적화하기보다, 두 계층의 역할을 함께 재설계해 중복된 관리 비용을 줄였다는 점이다. “GC가 없는 시스템”으로 일반화하기보다 어떤 계층의 GC를 줄였는지 구분해야 한다.

참고 자료