Reddit

Simple optimization in Linux 7.4 improves VFS do_open() (open a file for reading) performance by up to 39%

Linux 7.4의 간단한 최적화로 VFS do_open() 성능 최대 39% 향상

Linux 커널의 VFS 파일 열기 경로인 do_open()에서 중복으로 수행하던 dentry 참조 작업을 제거하는 패치가 준비되고 있습니다. 20코어 VM에서 같은 파일을 읽기 전용으로 여는 will-it-scale 벤치마크를 실행한 결과 초당 처리량이 최대 39% 증가했습니다.

AI 요약

Linux 커널에서 경로명을 따라 파일을 여는 과정은 VFS(Virtual File System)의 do_open() 함수를 거칩니다. 이번 최적화는 파일 내용을 읽는 단계가 아니라, 파일을 열기 위해 경로의 마지막 구성 요소를 찾고 파일 객체를 준비하는 단계에서 발생하던 중복 작업을 없앱니다. 오픈소스 개발자 Mateusz Guzik이 이 작업을 이끌고 있으며, 패치는 지난 2년 동안 다섯 차례 수정된 뒤 VFS 서브시스템의 정식 Git 브랜치에 들어갔습니다.

■ 중복 dentry 참조 제거

파일 경로를 해석하면 각 경로 구성 요소를 디스크의 inode와 연결하기 위해 dentry(directory entry)를 사용합니다. 현재 파일을 여는 경로에서는 마지막 dentry에 대한 참조를 이미 확보한 뒤에도 같은 대상을 대상으로 참조를 한 번 더 조작하는 흐름이 남아 있습니다. Guzik의 설명에 따르면 __legitimize_path()가 마지막 dentry의 참조를 확보하고, 이어서 do_dentry_open()이 또 다른 참조를 확보합니다. 그 뒤 terminate_walk()이 처음 확보한 참조를 해제합니다.

패치의 방향은 do_dentry_open()이 새 참조를 추가로 확보하지 않고, 앞선 단계에서 이미 확보한 참조를 그대로 소비하도록 바꾸는 데 있습니다. 참조를 한 번 더 늘렸다가 줄이는 과정이 사라지므로 두 번의 수정 작업을 제거할 수 있습니다. 변경 규모는 약 30여 줄입니다. 파일을 실제로 읽는 과정의 데이터 처리 방식을 바꾸는 패치가 아니라, 읽기 작업에 들어가기 전에 파일을 여는 경로의 참조 관리 비용을 줄이는 패치입니다.

■ 20코어 VM에서 초당 처리량 39% 증가

성능 측정에는 will-it-scale 벤치마크가 사용됐습니다. 20코어 가상 머신에서 동일한 파일을 읽기 전용으로 여는 작업을 반복했고, 최적화 후 초당 처리량이 39% 증가했습니다. 측정 대상은 파일을 여는 동작이므로, 파일 내용을 실제로 읽고 처리하는 전체 프로그램의 성능이 항상 같은 비율로 증가한다고 해석하면 안 됩니다. 파일 열기 호출이 반복되는 워크로드에서는 효과가 직접 나타나지만, 대량의 파일 데이터를 읽는 작업에서는 파일 열기 비용이 전체 실행 시간에서 차지하는 비중에 따라 결과가 달라질 수 있습니다.

이번 결과는 코드 변경 규모가 작아도 시스템 호출 경로의 반복 작업을 줄이면 특정 벤치마크에서 큰 차이가 생길 수 있음을 보여줍니다. 다만 기사에서 제시한 39%는 20코어 VM에서 같은 파일을 읽기 전용으로 여는 조건의 수치입니다. 다른 저장장치, 파일 수, 경로 깊이, 동시성, 파일 읽기 방식에서 같은 결과가 나온다고 확대해서 설명하지는 않습니다.

■ Linux 7.4 반영 절차

패치는 VFS.git의 vfs-7.4.lookup 브랜치에 대기 중입니다. 이미 VFS 서브시스템의 정식 Git 브랜치에 들어갔고 Linux 7.4 대상 변경으로 표시된 상태이므로, 다음 Linux 7.4 머지 윈도우에 제출될 예정입니다. 기사에서는 안정 버전에 반영되는 시점을 2026년 말 이전으로 예상합니다. 다만 현재 단계는 안정 커널 릴리스가 아니라, VFS 트리에서 머지 윈도우 제출을 준비하는 단계입니다.

커뮤니티에서는 패치 원문 링크가 공유됐고, 이번 최적화가 파일을 여는 단계에만 적용된다는 점을 두고 실제 애플리케이션 성능에 미칠 영향을 묻는 질문이 나왔습니다. 같은 파일을 여는 호출을 집중적으로 수행하는 벤치마크와 실제 파일 데이터를 읽는 프로그램 사이의 차이를 확인하려는 반응입니다.

■ Reddit 반응

  • @u/ilep — 패치 링크입니다: https://lore.kernel.org/all/[email protected]/ 클릭 한 번 아껴드렸습니다.
  • @u/QazCetelic — 실제 데이터를 읽는 작업은 제외하고 파일을 여는 부분만 측정한 결과라면, 이 변화가 전체 성능에 미치는 영향이 얼마나 되는지 아는 사람이 있나요?

원문: Phoronix / 번역·요약: Trawling