FAT32 File-System Seeing As Much As 265x Improvement With Linux 7.4
리눅스 7.4 FAT32 패치, 파일 공간 사전 할당 최대 265배 빨라져
리눅스 7.4에 FAT32 파일 공간 사전 할당을 여러 클러스터 단위로 처리하는 패치가 들어갔습니다. 개발자 벤치마크에서는 5.3~265.4배 빨라졌지만, 최대치는 동기 마운트에서 실행한 특정 `fallocate()` 시험 결과입니다.
- 주제
본문
리눅스 7.4에 FAT32 드라이버가 파일 공간을 미리 할당하는 작업을 빠르게 처리하는 패치가 병합됐습니다. 기존에는 FALLOC_FL_KEEP_SIZE 경로에서 클러스터를 하나씩 할당했지만, 패치 뒤에는 여러 클러스터를 한 번의 호출로 할당합니다. 개발자의 QEMU/KVM 벤치마크에서 성능 향상은 조건에 따라 5.3~265.4배였습니다. 최대치는 4096바이트 클러스터와 동기 마운트 등 특정 조건에서 나온 수치로, 일반 파일 복사 속도 향상을 뜻하지는 않습니다.
무엇을 바꿨나
FALLOC_FL_KEEP_SIZE는 파일의 보고된 크기를 바꾸지 않고 디스크 공간을 미리 확보하는 데 쓰입니다. FAT 드라이버는 이 경로에서 필요한 클러스터 수만큼 한 클러스터씩 할당했습니다. 패치는 여러 클러스터를 한 번의 fat_add_clusters() 호출로 처리하도록 바꿨습니다. 동기 마운트에서는 FAT 갱신을 묶어 처리할 수 있어 개선 폭이 특히 커졌다고 패치 작성자 Matheus Alves de Almeida는 설명했습니다.
265배가 나온 조건
가장 큰 개선폭인 265.4배는 FAT32, 4096바이트 클러스터, 16개 파일, 파일당 16MiB, 동기 마운트 조건에서 측정됐습니다. 해당 시험의 처리 시간은 변경 전 92.489초에서 변경 후 0.348초로 줄었습니다. 반면 128개 파일에 파일당 16KiB를 할당한 비동기 마운트 시험에서는 5.3배 향상됐습니다. 같은 벤치마크 표의 비동기 조건 결과에는 256MiB 할당의 11.9배와 16MiB 할당의 14.6배도 있습니다.
벤치마크는 QEMU/KVM의 virtio-blk 장치에 cache=none을 설정해 진행했고, 각 결과는 샘플의 산술평균입니다. 따라서 수치는 fallocate()를 이용한 사전 할당 성능을 보여줍니다. 일반적인 USB 저장장치의 파일 복사나 전체 시스템 작업이 같은 비율로 빨라진다는 근거는 제공되지 않았습니다. 패치는 리눅스 7.4에 병합됐습니다.
자료: Phoronix, Linux 커널 메일링 리스트 / 정리·해설: Trawling
참고 자료
- [PATCH v2 0/3] fat: allocate multiple clusters in fallocate - Matheus Alves de Almeida — https://lore.kernel.org/all/[email protected]/
- [PATCH v2 3/3] fat: allocate multiple clusters in fallocate - Matheus Alves de Almeida — https://lore.kernel.org/all/[email protected]/