다가오는 리눅스 6.17 버전은 SSD에 제로(0)를 쓰는 방식에서 상당한 개선을 도입하여 효율성을 높이고 쓰기 증폭을 줄입니다. 현재 fallocate() 함수는 FALLOC_FL_ZERO_RANGE 플래그가 지정되더라도 블록을 쓰지 않은 상태로 미리 할당합니다. 이로 인해 나중에 이러한 블록에 데이터를 쓸 때 메타데이터 변경과 저널 I/O가 필요해져 성능 저하가 발생합니다. 'dd'와 같은 도구를 사용하여 제로 데이터를 쓰는 전통적인 방법은 느리고 과도한 디스크 대역폭을 소모합니다.
새로운 구현을 통해 리눅스는 많은 플래시 기반 저장 장치에서 사용할 수 있는 unmap write zeroes 명령을 활용합니다. 예를 들어, UMMAP 비트를 가진 SCSI SSD나 DEAC 비트를 가진 NVMe SSD는 이 명령을 사용하여 실제 데이터를 쓰지 않고 제로화된 범위를 할당 해제 상태로 변환할 수 있어, 프로세스를 크게 가속화하고 디스크 쓰기 대역폭 사용을 최소화합니다.
이번 업데이트에는 SCSI, NVMe 및 디바이스 매퍼 드라이버를 위한 BLK_FEAT_WRITE_ZEROES_UNMAP 기능과 BLK_FLAG_WRITE_ZEROES_UNMAP_DISABLED 플래그가 도입되었습니다. 또한, fallocate()에 FALLOC_FL_WRITE_ZEROES 플래그에 대한 지원이 추가되어, 파일 매핑 메타데이터에 추가적인 변경 없이 지정된 파일 범위를 제로화할 수 있게 되었습니다. 이 개선은 후속 덮어쓰기 작업에 특히 유리하며, 블록 할당 및 메타데이터 변경을 줄여 전반적인 성능을 향상시킵니다.
* 이 글은
phoronix.com의 기사를 요약한 것입니다. 전체 기사의 내용은
이곳에서 확인하실 수 있습니다.