NFS > FUSE: 우리가 자체 NFS 서버를 Rust로 개발한 이유
(about.xethub.com)- FUSE는 파일시스템 드라이버를 커널 모듈 필요없이 작성할 수 있게 해줌
- NTFS, SFTP, S3 같은 다양한 파일시스템 클라이언트가 사용
- WikipediaFS 처럼 실제 파일시스템이 아닌 것도 만들 수 있음
- 하지만 FUSE는 개발하기에 불편함
- 2개의 API 중에서 선택: Low-Level 과 High-Level
- 호환되지 않는 2개의 API 버전: libfuse2 와 libfuse3
- 조금씩 계속 변경되는 API들 (FUSE_USE_VERSION)
- Mac 과 Windows 에서는 네이티브가 아니라 MacFuse, WinFuse 같은 써드파티 드라이버를 설치해야만 함
- 우리(XetHub)는 이미지 데이터셋의 다양한 버전을 S3 명령어 쓸 필요없이 개인 노트북에서 편하게 접근하게 만들고 싶었음
- "진정한 크로스 플랫폼인 유저스페이스 파일 시스템을 만들수 있을까?" 질문에서 NFSv3 에 도달
NFS
- NFSv3는 20년이 된 네트워크 파일 시스템 프로토콜로, 매우 간단하고 보편적이어서 거의 모든 운영 체제에서 기본으로 구현됨
- 아름답고 간단한 디자인 원칙
- 서버는 완전히 Stateless
- NFS 서버는 멍청하고 NFS 클라이언트는 스마트함
- 간단한 캐시 일관성 규칙(서버는 캐시 정책을 정의하지 않음. 클라언트는 원하는 만큼 알아서)
- NFS 클라이언트는 자신이 네트워크를 넘어서 대화하고 있다는 것을 알고 있음
- 실제로 매우 우수한 성능
- 요약하자면, FUSE 대신 로컬 호스트 NFS를 사용하여 사용자 모드 파일 시스템을 구현하면 성능과 복원력(resiliency)을 더 쉽게 얻을 수 있다는 것
- 서버 프로토콜만 한번 구현하면, 기존의 캐싱 및 20년 간 강화된 기능을 그대로 활용 가능
XetHub 에서 NFS를 사용하는 방법
- 네이티브 크로스 플랫폼, 사용자 모드 파일시스템 구현체를 개발
- 커널 드라이버 없이 대규모 데이터셋을 사용자 머신에 마운트 가능
- 660GB Llama 2 모델을 마운트 하거나, DuckDB 쿼리로 대규모 Parquet 파일을 분석 하는 등
- Linux, Mac 및 Windows Pro 버전 이상에서 지원(Windows Home은 동작하지 않음)
- Rust 로 구현한 NFS 서버인 nfsserve 는 GitHub에 공개
- 읽기 성능은 꽤 좋고, 쓰기는 작동하지만 아직 최적화가 필요함
원글의 초점은 우리만의 NFS서버를 개발한 이유...... 인데, Rust 같은 인기 키워드를 빼먹을 수 없어서 제목에 쓴것같네요 :-)