Linux 7.4-rc2 변경 사항, FAT32에서 최대 162배 개선 효과를 가져오다
LINUX STORAGE
오픈소스 개발자 Matheus Alves de Almeida가 Linux FAT 드라이버를 이용해 FAT32 성능 향상 작업을 계속하고 있습니다. 이번 주에 병합된 작업은 fat_cont_expand() 함수 내에서 확장 전에 공간을 미리 할당(pre-allocating)하는 것입니다. 그는 패치에서 다음과 같이 설명했습니다:
"fat_cont_expand() 구현은 새 클러스터 할당을 generic_cont_expand_simple()에 맡깁니다. 이 경로는 많은 작은 클러스터 할당을 수행하여 성능을 저해합니다.
fat_cont_expand()에서 클러스터 공간을 미리 할당해야 합니다. preallocation을 fat_cont_expand()와 fat_fallocate(FALLOC_FL_KEEP_SIZE) 모두가 사용하는 새로운 fat_preallocate() 헬퍼로 이동시킵니다. 클러스터가 할당된 후 새 크기를 다시 확인하는 것을 방지하기 위해 generic_cont_expand_simple() 대신 FAT 전용의 fat_cont_expand_simple()을 사용해야 합니다."
이 패치는 상당한 개선 사항들을 처리할 수 있습니다:
이 최적화 작업의 가장 큰 영향은 동기식 마운트(synchronous mounts) 환경에서 작은 클러스터 크기를 가진 FAT32 파일 시스템에 미칩니다.
"대부분은 OCFS2 수정 사항입니다. 이들은 확장 속성(extended-attribute) 손상, 누락된 속성 및 커널 버그(kernel BUGs), 클러스터 구성, 락 마이그레이션, 복구 및 언마운트 중 발생하는 충돌을 해결합니다. 또한 범위가 안정적인 파일 크기와 일치하는지 검증하도록 익스텐트 이동(Extent movement)도 수정되었습니다."
세 가지 FAT 변경 사항은 쓰기 실패(failed-write)/FIBMAP 경쟁 조건(race)으로 인해 파일 시스템이 임의로 읽기 전용 상태가 되는 것을 방지하고, 이름 변경 후 디렉터리 링크 카운트를 수정하며, 파일 확장을 가속화합니다. 보고된 QEMU 벤치마크는 동기식 마운트에서 특히 큰 개선을 보여줍니다.
타인트 문자열(taint-string) 수정은 커널 로그에서 슬랩 내용(slab contents)을 노출할 수 있는 범위 초과 읽기(out-of-bounds read)를 방지합니다. 또한 하드웨어 곱셈기가 없는 CPU용 OpenRISC 모듈 및 Clang 24에 대한 빌드 수정 사항도 있습니다.
이 작업은 일요일에 Linux 7.4-rc2보다 앞서 비(非) MM 핫픽스 풀 리퀘스트를 통해 반영되었습니다.