présentation

L'utilisation de la RAM dans les systèmes d'exploitation modernes est plus compliquée qu'il n'y paraît. Lors de la migration d'un serveur de site Web d'Ubuntu vers FreeBSD, j'ai remarqué des différences dans les rapports d'utilisation de la RAM entre les outils fastfetch et btop.

contexte technique

Les systèmes d'exploitation modernes utilisent un système de mémoire virtuelle (VM) qui divise la mémoire physique en pages de 4 Ko. Chaque page est ajoutée à des files d'attente différentes pour que le noyau puisse gérer la mémoire de manière efficace. Sur FreeBSD, les types de files d'attente de pages sont définis dans sys/vm/vm_page.h et incluent les files d'attente inactive, active, laundry et unwappable.

Le noyau utilise ces files d'attente pour gérer la mémoire et optimiser les performances. Par exemple, les pages inactives sont déplacées vers la file d'attente laundry pour être écrites sur le disque (swap) si nécessaire. Les pages actives sont celles qui sont utilisées par les processus utilisateur.

fondements techniques

Le système de fichiers ZFS utilisé par défaut sur FreeBSD dispose d'un système de cache appelé ARC (Adaptive Replacement Cache) qui stocke les données récemment utilisées en mémoire pour améliorer les performances. Le noyau dispose également de mécanismes pour gérer le cache, mais ARC contourne ces mécanismes.

Les outils tels que fastfetch, btop et htop utilisent des heuristiques différentes pour déterminer l'utilisation de la mémoire. Par exemple, fastfetch utilise la formule free memory = free + inactive + cache et used memory = total - free memory, tandis que btop utilise available memory = total memory - active - wired et used memory = active + wired.

analyse et conclusion

En analysant les codes sources de ces outils, j'ai constaté que btop utilise une heuristique incorrecte sur FreeBSD, ce qui entraîne des rapports d'utilisation de la RAM inexacts. Les différences dans les rapports d'utilisation de la RAM entre les outils sont dues à leurs heuristiques différentes et à la complexité de la gestion de la mémoire dans les systèmes d'exploitation modernes.

sysctl kstat.zfs.misc.arcstats

Cette commande permet d'accéder aux statistiques du cache ARC et de comprendre mieux comment le système de fichiers ZFS gère la mémoire sur FreeBSD.