Linux 7.2에 적용될 Btrfs 변경 사항으로 매우 유의미한 성능 향상 달성
LINUX STORAGE
Linux 7.2에 도입될 Btrfs의 변경 사항은 Direct I/O (DIO) 쓰기 작업을 강제로 직렬화(serialize)하지 않도록 하는 것입니다. Meta의 Mark Harmstone은 Linux 커널의 새로운 마운트 API (mount API)로 파일 시스템을 전환하는 과정에서, 2023년부터 Btrfs가 DIO 쓰기를 실수로 직렬화하고 있었다는 사실을 발견했습니다. Harmstone은 이번 변경 사항에 대해 다음과 같이 설명했습니다.
"2023년에 btrfs가 새로운 마운트 API로 전환하기 전에는, btrfs_mount_root()에서 SB_NOSEC를 설정했습니다. 이 플래그는 VFS(Virtual File System)에 파일 시스템에 보안 확장 속성(security xattrs)이 없는 파일이 있을 수 있음을 알려주어, 몇 가지 최적화를 수행할 수 있게 합니다.
불행히도 전환 과정에서 이 부분이 누락되었고, 이는 btrfs inode에 대해 IS_NOSEC가 항상 false를 반환함을 의미합니다. 결과적으로 btrfs_direct_write() 호출은 항상 inode 락(lock)을 독점적으로 획득하게 되며, 이는 동일한 파일에 대한 DIO 쓰기가 직렬화됨을 의미합니다.
제 컴퓨터에서는 이 한 줄의 변경만으로 DIO 처리량(throughput)이 약 59% 향상되었습니다."
826 MB/s에서 1311 MB/s로 처리량이 거의 60% 향상된 매우 훌륭한 성과입니다.
Intel의 커널 테스트 로봇(Kernel Test Robot) 또한 자체 테스트와 하드웨어 환경에서 이 변경 사항을 통해 Btrfs의 성능이 약 12% 향상되었다고 보고하고 있습니다.
해당 패치는 현재 "-next" 코드에 포함되어 있으며, 6월에 진행될 Linux 7.2 병합 윈도우(merge window)와 함께 이 Btrfs 변경 사항이 반영될 것으로 보입니다.