UFS: Difference between revisions

From air
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
= Synthèse Veille Technologique =
Scale and Performance in a Filesystem Semi-Microkernel (SOSP'21)


== FAWAZ Ali ==
https://research.cs.wisc.edu/adsl/Publications/ufs-sosp21.pdf


[mailto:ali.fawaz etu.univ-grenoble-alpes.fr ali.fawaz etu.univ-grenoble-alpes.fr]
https://github.com/WiscADSL/uFS


==Abstract==
== MIRAS Romain ==


[mailto:romain.miras etu.univ-grenoble-alpes.fr romain.miras etu.univ-grenoble-alpes.fr]
We present uFS, a user-level filesystem semi-microkernel. uFS takes advantage of a high-performance storage development kit to realize a fully-functional, crash-consistent, highly-scalable filesystem, with relative developer ease. uFS delivers scalable high performance with a number of novel techniques: careful partitioning of in-memory and on-disk data structures to enable concurrent access without locking, inode migration for balancing load across filesystem threads, and a dynamic scaling algorithm for determining the number of filesystem threads to serve the current workload. Through measurements, we show that uFS has good base performance and excellent scalability; for example, uFS delivers nearly twice the throughput of ext4 for LevelDB on YCSB workloads.


= Scale and Performance in a Filesystem Semi-Microkernel =
==Bio==


== Résumé ==
Jing Liu (https://jingliu.xyz/) is a Ph.D. candidate in Computer Sciences at the University of Wisconsin – Madison, advised by Prof. Andrea Arpaci-Dusseau and Prof. Remzi Arpaci-Dusseau. She is interested in storage systems, with a focus on scale and performance. Her work aims to design layered distributed storage systems where each layer will scale independently to each other with optimized performance and parallelism within the layer, ranging from the local file systems to geo-distributed deployments. Prior to UW-Madison, she received a BEng from Nanjing University. Jing is a receipt of the 2022 Meta Ph.D. research fellowship in systems.

L’uFS est une nouvelle abstraction semi-microkernel pour la conception de systèmes de fichiers. Il essaie de donner une nouvelle approche entre les performances des dispositifs de stockage de pointe et celles des systèmes de fichiers conventionnels. Il utilise également un serveur sur l’espace utilisateur avec un accès direct au stockage et un gestionnaire de mémoire très efficace pour les transferts DMA. Dans ce système, le multiplexage centralisé ne permet aucun partage d’état entre les applications. L’uFS présente une meilleure évolutivité, des performances à un seul fil par rapport à d’autres systèmes traditionnels comme ext4, tout en conservant la cohérence en cas de crash. Le système de gestion dynamique de la charge garantit une utilisation efficace des ressources et une adaptabilité aux charges de travail changeantes.

== Mots-clés ==

'''Système de fichiers :''' Logiciel qui organise et gère le stockage des données, permettant la création, lecture et modification de fichiers et dossiers.

Semi-microkernel : Architecture où certaines fonctions du noyau sont déplacées en espace utilisateur pour plus de modularité et flexibilité.

'''Architecture sans partage :''' Conception où chaque unité dispose de ses propres ressources (mémoire, disque) sans partage direct pour éviter les conflits.

'''Performance de stockage :''' Mesure de la rapidité et de l’efficacité des dispositifs de stockage, basée sur la latence, la bande passante et les IOPS.

'''Multiplexage centralisé :''' Méthode où les requêtes multiples sont gérées par un gestionnaire central pour une coordination efficace.

'''Gestion de charge dynamique :''' Répartition automatique de la charge de travail entre les ressources disponibles pour optimiser les performances.

'''Inode :''' Structure de données qui stocke les métadonnées des fichiers (taille, permissions, etc.) et les pointe vers leurs blocs de données.

'''Journalisation :''' Enregistrement des modifications dans un journal avant leur application pour garantir la cohérence des données en cas de panne.

== Abstract ==

UFS introduces a novel semi-microkernel approach to file systems, addressing the growing performance gap between modern storage devices and traditional file systems. This architecture combines a user-space server with direct storage access and efficient memory management for DMA transfers. The system implements a centralized multiplexing approach and shared-nothing architecture, enabling better isolation and optimized sharing between applications. UFS demonstrates superior scalability and single-threaded performance compared to traditional systems like ext4, while maintaining crash consistency. The dynamic load management system ensures efficient resource utilization and adaptability to varying workloads.

== Keywords ==

'''File System :''' A software that organizes and manages data storage on a disk, allowing users to create, read, and modify files and directories.

'''Semi-Microkernel :''' An OS architecture where certain kernel functionalities are moved to user space, improving modularity and flexibility while maintaining security.

'''Shared-nothing Architecture :''' A design where each computing unit has its own resources (memory, disk) to avoid synchronization issues and improve scalability.

'''Storage Performance :''' The speed and efficiency of data storage devices, measured by latency, bandwidth, and input/output operations per second (IOPS).

'''Centralized Multiplexing :''' A method where multiple data requests are handled by a single centralized thread or manager for better coordination.

'''Dynamic Load Management :''' Automatic distribution of workload across resources to optimize usage and maintain high performance.

'''Inode :''' A data structure in UNIX-based file systems that stores metadata about files (size, permissions, timestamps) and pointers to their storage blocks.

'''Journalisation :''' A mechanism in file systems that logs changes before applying them, ensuring data consistency in case of crashes.

== Synthèse ==

=== Introduction et Motivation ===

uFS est un système de fichiers à base de semi-microkernel conçu pour une évolutivité et des performances élevées.<br />
Les systèmes de fichiers traditionnels basés sur le noyau, comme ext4, rencontrent des difficultés face aux exigences croissantes des dispositifs de stockage haute performance tels que les disques NVMe.<br />
Les mécanismes de protection du noyau, notamment les appels système et les commutations de contexte, introduisent des surcharges substantielles lors des interactions avec ces dispositifs.<br />
En outre, le développement basé sur le noyau est lent en raison de sa complexité et des exigences rigoureuses en matière de tests.

uFS exploite une architecture de semi-microkernel pour déplacer la logique du système de fichiers vers l’espace utilisateur tout en conservant le noyau monolithique de l’OS pour d’autres sous-systèmes. Cette approche permet des cycles de développement plus rapides et une intégration plus étroite avec les besoins spécifiques des applications. De plus, elle capitalise sur l’essor des bibliothèques de niveau utilisateur telles que le Storage Performance Development Kit (SPDK), qui fournit un accès direct aux dispositifs NVMe depuis l’espace utilisateur, contournant ainsi complètement le noyau. Les principales motivations pour uFS incluent :

'''Rapidité de développement :''' Déplacer la logique du système de fichiers vers l’espace utilisateur accélère le développement et le déploiement par rapport aux implémentations basées sur le noyau.

'''Intégration verticale :''' Adapter le système de fichiers aux besoins spécifiques des applications est plus simple hors du noyau.

'''Scalabilité avec le matériel moderne :''' Les surcharges du noyau dans la gestion des dispositifs NVMe modernes peuvent être évitées grâce à des bibliothèques de stockage de niveau utilisateur telles que SPDK.

'''Modèles Semi-Microkernel éprouvés :''' Les conceptions basées sur des semi-microkernels ont démontré leur succès dans les sous-systèmes de mise en réseau, ce qui motive leur application aux systèmes de fichiers.

=== Conception et Implémentation ===

uFS se compose de deux composants principaux :

==== Serveur uFS ====

Un processus multi-thread en espace utilisateur responsable de la gestion des opérations sur les fichiers.

Fonctionne sur un modèle de parallélisme de données “shared-nothing”, où chaque thread gère des ensembles distincts d’inodes, minimisant ainsi la synchronisation.

Garantit la cohérence après crash via la journalisation.

==== Bibliothèque uFS (uLib) ====

Une bibliothèque liée aux applications, fournissant une interface pour communiquer avec le serveur uFS via une communication inter-processus (IPC).

Inclut des optimisations de mise en cache pour réduire les surcharges de communication.

=== Principales Fonctionnalités de uFS ===

'''Cohérence après Crash :''' Journalisation logique où les modifications des métadonnées sont enregistrées dans un journal avant leur application.

'''Scalabilité :''' Architecture “shared-nothing” permettant une évolutivité efficace des threads.

'''Optimisation de la Mise en Cache :''' Utilisation de “leases” pour réduire les surcharges IPC.

'''Gestion Dynamique de la Charge :''' Surveillance et répartition dynamique de la charge de travail entre les threads pour éviter les goulets d’étranglement.

=== Mécanismes Clés ===

Le uFS utilise un système appellé "Runtime Owner Ship". Ce système permet de déterminer quel worker est responsable de quel inode. Ainsi, chaque worker est responsable d'un ensemble d'inodes et de leurs métadonnées. Cela permet de minimiser les conflits de synchronisation et d'optimiser les performances. Pour plus de détails, un systéme de worker asymétrique est ainsi utilisé comprenant un worker principale (W0) et une liste de worker secondaire. Le worker principale posséde tout les dossiers du système de fichiers et est par défault le possesseur de tout les fichiers, il est celui qui coordonnera le réassigement de tout les fichiers au worker secondaires. Quant aux worker secondaires, ils possèdent un ensemble de fichiers et sont responsable de toutes les opérations sur ces fichiers.

=== Gestion de la charge ===

Afin d'avoir une gestion de charge efficace, un thread dédié pour le Load Balancing fu créer. Celui-ci collecte périodiquement des statistiques sur les performances des workers et rééquilibre la charge en fonction des performances. Puis il décide l'objectif de charge pour chaque worker via un algorithme de simulation appellé "What If". Cette algorhtime simulera alors les performances de chaque worker si l'on ajoute ou retire un coeur ou si l'on garde l'état actuel, la meilleur option sera alors choisie.

=== Évaluation et Benchmarks ===

Les performances de uFS ont été évaluées par rapport à ext4 dans des scénarios single-thread, multi-thread et avec des charges de travail pratiques comme Varmail, Webserver et LevelDB. Les résultats montrent des améliorations significatives en termes de scalabilité et d’efficacité des ressources.

=== Défis et Limitations ===

Malgré ses nombreux avantages, uFS présente des limitations, notamment un goulot d’étranglement du thread principal pour les opérations sur les répertoires et un support incomplet pour certaines fonctionnalités avancées.

=== Conclusion ===

L’approche semi-microkernel de uFS démontre un potentiel significatif pour résoudre les limitations des systèmes de fichiers traditionnels. Ce projet a été conçu pour des stockages modernes, performants et évolutif. De plus, il a montré son efficacité par diverses expériences et benchmarks. Celui ci évolue indépendamment des applications et s'adapte dynamiquement à la charge de travail.


== Références ==

* ACM SIGOPS. (2021, 21 octobre). SOSP 2021 : Scale and Performance in a Filesystem Semi-Microkernel [Vidéo]. YouTube. https://www.youtube.com/watch?v=J7Ou48NKUis
* Liu, J., Rebello, A., Dai, Y., Ye, C., Kannan, S., Arpaci-Dusseau, A. C., &amp; Arpaci-Dusseau, R. H. (2021). Scale and Performance in a Filesystem Semi-Microkernel. University of Wisconsin-Madison, 819-835. https://doi.org/10.1145/3477132.3483581
* WiscADSL. (s. d.). GitHub - WISCADSL/UFS : a filesystem Semi-Microkernel. GitHub. https://github.com/WiscADSL/uFS

Latest revision as of 15:06, 16 December 2024

Synthèse Veille Technologique

FAWAZ Ali

etu.univ-grenoble-alpes.fr ali.fawaz etu.univ-grenoble-alpes.fr

MIRAS Romain

etu.univ-grenoble-alpes.fr romain.miras etu.univ-grenoble-alpes.fr

Scale and Performance in a Filesystem Semi-Microkernel

Résumé

L’uFS est une nouvelle abstraction semi-microkernel pour la conception de systèmes de fichiers. Il essaie de donner une nouvelle approche entre les performances des dispositifs de stockage de pointe et celles des systèmes de fichiers conventionnels. Il utilise également un serveur sur l’espace utilisateur avec un accès direct au stockage et un gestionnaire de mémoire très efficace pour les transferts DMA. Dans ce système, le multiplexage centralisé ne permet aucun partage d’état entre les applications. L’uFS présente une meilleure évolutivité, des performances à un seul fil par rapport à d’autres systèmes traditionnels comme ext4, tout en conservant la cohérence en cas de crash. Le système de gestion dynamique de la charge garantit une utilisation efficace des ressources et une adaptabilité aux charges de travail changeantes.

Mots-clés

Système de fichiers : Logiciel qui organise et gère le stockage des données, permettant la création, lecture et modification de fichiers et dossiers.

Semi-microkernel : Architecture où certaines fonctions du noyau sont déplacées en espace utilisateur pour plus de modularité et flexibilité.

Architecture sans partage : Conception où chaque unité dispose de ses propres ressources (mémoire, disque) sans partage direct pour éviter les conflits.

Performance de stockage : Mesure de la rapidité et de l’efficacité des dispositifs de stockage, basée sur la latence, la bande passante et les IOPS.

Multiplexage centralisé : Méthode où les requêtes multiples sont gérées par un gestionnaire central pour une coordination efficace.

Gestion de charge dynamique : Répartition automatique de la charge de travail entre les ressources disponibles pour optimiser les performances.

Inode : Structure de données qui stocke les métadonnées des fichiers (taille, permissions, etc.) et les pointe vers leurs blocs de données.

Journalisation : Enregistrement des modifications dans un journal avant leur application pour garantir la cohérence des données en cas de panne.

Abstract

UFS introduces a novel semi-microkernel approach to file systems, addressing the growing performance gap between modern storage devices and traditional file systems. This architecture combines a user-space server with direct storage access and efficient memory management for DMA transfers. The system implements a centralized multiplexing approach and shared-nothing architecture, enabling better isolation and optimized sharing between applications. UFS demonstrates superior scalability and single-threaded performance compared to traditional systems like ext4, while maintaining crash consistency. The dynamic load management system ensures efficient resource utilization and adaptability to varying workloads.

Keywords

File System : A software that organizes and manages data storage on a disk, allowing users to create, read, and modify files and directories.

Semi-Microkernel : An OS architecture where certain kernel functionalities are moved to user space, improving modularity and flexibility while maintaining security.

Shared-nothing Architecture : A design where each computing unit has its own resources (memory, disk) to avoid synchronization issues and improve scalability.

Storage Performance : The speed and efficiency of data storage devices, measured by latency, bandwidth, and input/output operations per second (IOPS).

Centralized Multiplexing : A method where multiple data requests are handled by a single centralized thread or manager for better coordination.

Dynamic Load Management : Automatic distribution of workload across resources to optimize usage and maintain high performance.

Inode : A data structure in UNIX-based file systems that stores metadata about files (size, permissions, timestamps) and pointers to their storage blocks.

Journalisation : A mechanism in file systems that logs changes before applying them, ensuring data consistency in case of crashes.

Synthèse

Introduction et Motivation

uFS est un système de fichiers à base de semi-microkernel conçu pour une évolutivité et des performances élevées.
Les systèmes de fichiers traditionnels basés sur le noyau, comme ext4, rencontrent des difficultés face aux exigences croissantes des dispositifs de stockage haute performance tels que les disques NVMe.
Les mécanismes de protection du noyau, notamment les appels système et les commutations de contexte, introduisent des surcharges substantielles lors des interactions avec ces dispositifs.
En outre, le développement basé sur le noyau est lent en raison de sa complexité et des exigences rigoureuses en matière de tests.

uFS exploite une architecture de semi-microkernel pour déplacer la logique du système de fichiers vers l’espace utilisateur tout en conservant le noyau monolithique de l’OS pour d’autres sous-systèmes. Cette approche permet des cycles de développement plus rapides et une intégration plus étroite avec les besoins spécifiques des applications. De plus, elle capitalise sur l’essor des bibliothèques de niveau utilisateur telles que le Storage Performance Development Kit (SPDK), qui fournit un accès direct aux dispositifs NVMe depuis l’espace utilisateur, contournant ainsi complètement le noyau. Les principales motivations pour uFS incluent :

Rapidité de développement : Déplacer la logique du système de fichiers vers l’espace utilisateur accélère le développement et le déploiement par rapport aux implémentations basées sur le noyau.

Intégration verticale : Adapter le système de fichiers aux besoins spécifiques des applications est plus simple hors du noyau.

Scalabilité avec le matériel moderne : Les surcharges du noyau dans la gestion des dispositifs NVMe modernes peuvent être évitées grâce à des bibliothèques de stockage de niveau utilisateur telles que SPDK.

Modèles Semi-Microkernel éprouvés : Les conceptions basées sur des semi-microkernels ont démontré leur succès dans les sous-systèmes de mise en réseau, ce qui motive leur application aux systèmes de fichiers.

Conception et Implémentation

uFS se compose de deux composants principaux :

Serveur uFS

Un processus multi-thread en espace utilisateur responsable de la gestion des opérations sur les fichiers.

Fonctionne sur un modèle de parallélisme de données “shared-nothing”, où chaque thread gère des ensembles distincts d’inodes, minimisant ainsi la synchronisation.

Garantit la cohérence après crash via la journalisation.

Bibliothèque uFS (uLib)

Une bibliothèque liée aux applications, fournissant une interface pour communiquer avec le serveur uFS via une communication inter-processus (IPC).

Inclut des optimisations de mise en cache pour réduire les surcharges de communication.

Principales Fonctionnalités de uFS

Cohérence après Crash : Journalisation logique où les modifications des métadonnées sont enregistrées dans un journal avant leur application.

Scalabilité : Architecture “shared-nothing” permettant une évolutivité efficace des threads.

Optimisation de la Mise en Cache : Utilisation de “leases” pour réduire les surcharges IPC.

Gestion Dynamique de la Charge : Surveillance et répartition dynamique de la charge de travail entre les threads pour éviter les goulets d’étranglement.

Mécanismes Clés

Le uFS utilise un système appellé "Runtime Owner Ship". Ce système permet de déterminer quel worker est responsable de quel inode. Ainsi, chaque worker est responsable d'un ensemble d'inodes et de leurs métadonnées. Cela permet de minimiser les conflits de synchronisation et d'optimiser les performances. Pour plus de détails, un systéme de worker asymétrique est ainsi utilisé comprenant un worker principale (W0) et une liste de worker secondaire. Le worker principale posséde tout les dossiers du système de fichiers et est par défault le possesseur de tout les fichiers, il est celui qui coordonnera le réassigement de tout les fichiers au worker secondaires. Quant aux worker secondaires, ils possèdent un ensemble de fichiers et sont responsable de toutes les opérations sur ces fichiers.

Gestion de la charge

Afin d'avoir une gestion de charge efficace, un thread dédié pour le Load Balancing fu créer. Celui-ci collecte périodiquement des statistiques sur les performances des workers et rééquilibre la charge en fonction des performances. Puis il décide l'objectif de charge pour chaque worker via un algorithme de simulation appellé "What If". Cette algorhtime simulera alors les performances de chaque worker si l'on ajoute ou retire un coeur ou si l'on garde l'état actuel, la meilleur option sera alors choisie.

Évaluation et Benchmarks

Les performances de uFS ont été évaluées par rapport à ext4 dans des scénarios single-thread, multi-thread et avec des charges de travail pratiques comme Varmail, Webserver et LevelDB. Les résultats montrent des améliorations significatives en termes de scalabilité et d’efficacité des ressources.

Défis et Limitations

Malgré ses nombreux avantages, uFS présente des limitations, notamment un goulot d’étranglement du thread principal pour les opérations sur les répertoires et un support incomplet pour certaines fonctionnalités avancées.

Conclusion

L’approche semi-microkernel de uFS démontre un potentiel significatif pour résoudre les limitations des systèmes de fichiers traditionnels. Ce projet a été conçu pour des stockages modernes, performants et évolutif. De plus, il a montré son efficacité par diverses expériences et benchmarks. Celui ci évolue indépendamment des applications et s'adapte dynamiquement à la charge de travail.


Références