13 points par xguru 2023-09-22 | 4 commentaires | Partager sur WhatsApp
  • FUSE permet d’écrire des pilotes de système de fichiers sans avoir besoin d’un module noyau
    • Utilisé par divers clients de systèmes de fichiers comme NTFS, SFTP et S3
    • Permet même de créer des systèmes qui ne sont pas de vrais systèmes de fichiers, comme WikipediaFS
  • Mais FUSE est peu pratique à développer
    • Il faut choisir entre deux API : Low-Level et High-Level
    • Deux versions d’API incompatibles : libfuse2 et libfuse3
    • Des API qui continuent d’évoluer par petites touches (FUSE_USE_VERSION)
    • Sur Mac et Windows, ce n’est pas natif : il faut installer des pilotes tiers comme MacFuse ou WinFuse
  • Nous (XetHub) voulions permettre d’accéder facilement à différentes versions de jeux de données d’images depuis un ordinateur portable personnel, sans avoir à utiliser des commandes S3
  • La question « peut-on créer un système de fichiers en espace utilisateur vraiment cross-platform ? » nous a menés vers NFSv3

NFS

  • NFSv3 est un protocole de système de fichiers réseau vieux de 20 ans, très simple et universel, implémenté nativement sur presque tous les systèmes d’exploitation
  • Des principes de conception beaux et simples
    • Le serveur est totalement stateless
    • Le serveur NFS est simple, et le client NFS est intelligent
    • Règles simples de cohérence du cache (le serveur ne définit pas de politique de cache ; le client gère cela comme il l’entend)
    • Le client NFS sait qu’il dialogue à travers le réseau
    • En pratique, les performances sont excellentes
  • En résumé, utiliser NFS en localhost à la place de FUSE pour implémenter un système de fichiers en mode utilisateur permet d’obtenir plus facilement de bonnes performances et de la résilience
  • Il suffit d’implémenter une seule fois le protocole serveur pour réutiliser directement le cache existant et les fonctionnalités renforcées au fil de 20 ans d’usage

Comment XetHub utilise NFS

  • Développement d’une implémentation native, cross-platform et en mode utilisateur d’un système de fichiers
  • Possibilité de monter de très grands jeux de données sur la machine de l’utilisateur sans pilote noyau
    • Par exemple, monter le modèle Llama 2 de 660 Go ou analyser de gros fichiers Parquet avec des requêtes DuckDB
  • Pris en charge sur Linux, Mac et Windows Pro ou versions supérieures (Windows Home n’est pas compatible)
  • Le serveur NFS implémenté en Rust, nfsserve, est publié sur GitHub
  • Les performances en lecture sont assez bonnes, et l’écriture fonctionne, mais nécessite encore des optimisations

4 commentaires

 
ntpd3300 2023-09-22

Contrairement à ce que laisse penser le titre, on n’y explique pas vraiment pourquoi cela a été écrit en Rust.

 
botplaysdice 2023-09-23

L’idée centrale de l’article original est plutôt d’expliquer pourquoi ils ont développé leur propre serveur NFS… mais ils n’ont sans doute pas pu résister à l’envie de glisser un mot-clé populaire comme Rust dans le titre :-)

 
blueprajna 2023-09-22

Il semble que l’article original ne traite pas de la raison pour laquelle il a été écrit en Rust, mais plutôt de celle pour laquelle NFS a été choisi à la place de FUSE.

 
xguru 2023-09-22

Ah, maintenant que j’y pense, il n’y avait en fait pas d’autre explication que le fait que c’est rapide simplement parce que c’est en Rust. J’ai fait ce résumé sans trop réfléchir.