/proc/filesystems 읽기 작업이 놀라울 정도로 빈번하게 수행되며, 이제 최대 444% 더 빨라졌습니다
LINUX STORAGE
실행 중인 커널이 지원하는 파일 시스템 목록을 얻기 위해 /proc/filesystems를 사용하는 작업은 Linux에서 빈번하게 이루어집니다. 구체적으로는 SELinux 라이브러리 (libselinux)에 의해 읽히기 때문인데, /proc/filesystems를 읽는 작업은 일반적으로 예상하는 것보다 더 자주 수행되며, 이제 Linux 7.2 커널은 이를 최적화하여 훨씬 더 나은 성능을 제공하도록 합니다.
지금까지 제가 본 Linux 7.2 커널을 위한 최적화 중 가장 놀라운 것은, 접근 빈도가 높은 /proc/filesystems를 통해 더 효율적인 성능을 전달하도록 하는 것입니다. 이제 /proc/filesystems 문자열을 미리 생성(pre-generating)하고 파일 시스템 목록을 RCU화(RCU'ified)함으로써, 성능이 현재 Linux 커널 릴리스보다 최대 444% 더 빨라질 수 있습니다.
Christian Brauner는 Linux 7.2를 위한 /proc/filesystems 처리 방식을 개편하는 풀 리퀘스트(pull request)에서 다음과 같이 설명했습니다:
"이 파일은 정리가 절실히 필요한 수동으로 구현된 연결 리스트(hand-rolled linked list)로 인해 엉망이었습니다. 이제 파일 시스템 목록은 RCU화되었고, /proc 파일들은 fs/proc/ 외부에서 영구적인 것으로 표시될 수 있으며, /proc/filesystems를 읽을 때 출력되는 문자열은 매번 읽을 때마다 포인터를 추적(pointer-chasing)하고 항목별로 printf를 호출하는 대신 미리 생성되어 캐싱됩니다. 이 파일은 libselinux가 읽고, libselinux가 수많은 자주 사용되는 프로그램(sed처럼 예상치 못한 프로그램까지!)에 링크되어 있기 때문에 빈번하게 읽힙니다. 또한 열기/닫기(open/close) 시 참조 유지(reference maintenance)를 우회하므로 확장성(Scalability)도 향상됩니다."
그리고 실제로 /proc/filesystems가 얼마나 빈번하게 읽히는지를 고려할 때, 이는 극적인 개선을 가져다줍니다:
Linus Torvalds는 오늘 Linux 7.2를 위해 이 훌륭한 개선 사항을 병합(merged)했습니다.