13P by xguru 7달전 | favorite | 댓글 4개
  • 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에 공개
  • 읽기 성능은 꽤 좋고, 쓰기는 작동하지만 아직 최적화가 필요함

제목과는 다르게 정작 Rust로 작성한 이유는 안나와있네요

원글의 초점은 우리만의 NFS서버를 개발한 이유...... 인데, Rust 같은 인기 키워드를 빼먹을 수 없어서 제목에 쓴것같네요 :-)

원글이 rust로 작성한 이유가 아니라 fuse대신 nfs를 선택했나하는 내용이네요.

앗 그러고보니 그냥 Rust라서 빠르다는 얘기말고는 없었군요. 아무 생각없이 요약을 했네요.