Créer un disque virtuel en RAM sur macOS
La mémoire virtuelle permet de compenser un manque de mémoire vive en utilisant une portion du disque dur. C'est une action que fait automatiquement macOS pour continuer à fonctionner lorsque la mémoire vive se remplit.
Mais lorsque l'on dispose d'un excédant de mémoire vive, savez vous qu'il est possible de faire l'inverse ? Il est possible de créer un disque dur virtuel qui sera stocké en mémoire vive.
A quoi cela peut il bien servir ?
Depuis toujours, nous disposons toujours de bien plus de stockage sur nos disques durs que de mémoire vive, cependant cette dernière est toujours bien plus rapide.
Il peut donc être intéressant, si l'on a besoin d'un stockage rapide de créer un disque sur une portion de sa mémoire vive. Ce volume, une fois monté, permettra des débits bien plus élevé que sur un disque dur classique. Il est donc possible d'accélérer le chargement de fichiers ou d'applications en les stockant en RAM.
Attention tout de même, stocker en mémoire vive n'a pas que des avantages. En effet, la mémoire vive ne conserve ses données que tant qu'elle est alimentée. Une fois le Mac éteint, tout ce qui est en mémoire vive est perdu, il est nécessaire de démarrer macOS depuis le début pour retrouver un système fonctionnel.
En aparté, en sachant cela, vous comprendrez peut être désormais mieux la différence entre un Mac en veille et un Mac en veille profonde. Lorsque vous fermez votre MacBook et que vous le ré-ouvrez, il revient directement là où vous l'aviez laissé, mais la batterie ne s'est pas "trop" vidée. Votre Mac s'est mis en veille, pas totalement éteint, la mémoire vive continue d'être alimentée mais tout le reste est mis au repos.
Si vous le laissez fermer trop longtemps, que la batterie arrive sur ses réserves, le Mac va alors passer en veille profonde. Pour cela, il va copier l'intégralité de la mémoire vive sur le disque dur, et s'éteindre. Au redémarrage, il retrouvera le bloc mémoire, et le restaurera tel qu'il était. La barre de progression que l'on voit lors d'une sortie de veille profonde est tout simplement la copie depuis le disque vers la mémoire.
La mémoire vive étant perdue lors d'une extinction, travailler avec un disque en RAM est à faire avec des précautions. Au démarrage, il faut veiller à copier les informations que l'on veut y stocker avant de s'en servir. Et à l'extinction, il faut s'assurer qu'aucune donnée n'y reste sans avoir été récupérée et placer sur un disque dur. Dans l'idéal, il faudrait aussi veiller à copier régulièrement les données ayant changé sur le disque virtuel vers le disque dur, dans le cas où le Mac planterait.
Aujourd'hui, les SSD disposent de vitesses de lecture et d'écriture fulgurantes, avec des temps de latence extrêmement faibles pour couronner le tout. Ce qui veut dire qu'il y a de moins en moins l'utilité d'un disque en RAM.
Cependant, un disque situé en RAM peut toujours servir de mémoire tampon, notamment lors de très nombreuses écritures. Cela peut ainsi permettre d'économiser de la durée de vie de nos SSDs qui sont désormais soudés sur la carte mère de nos Mac.
Si par exemple, vous devez télécharger de nombreuses archives d'une certaine taille, les décompresser et les ranger où vous devez le faire. Lors du téléchargement, vous allez écrire une première fois dans le dossier Téléchargements sur votre disque, lors de la décompression, une seconde fois, et au final, vous allez, au mieux, déplacer les fichiers de votre dossier Téléchargements, sans impact négatif pour votre disque, au pire, les déplacer sur une autre partition, ce qui implique une copie sur l'autre disque, et une suppression sur votre disque principal. Avec un téléchargement sur un disque virtuel, votre disque dur ne serait utilisé que l'on de la dernière copie.
Créer un disque virtuel sur macOS
La création d'un disque virtuel se fait en deux étapes. La première va être d'allouer une portion de la mémoire vive pour créer le disque. La seconde va être de la formatter et de la monter afin que macOS puisse s'en servir. Ouvrons un terminal.
La première étape se fait avec la commande hidutil
hdiutil attach -nomount ram://2000000
Dans ce cas, je viens de créer un espace de 1Go, et la commande me répond
/dev/disk9
qui est l'identifiant du volume créé. Vous en aurez certainement un différent selon le nombre de volumes que votre macOS connait.
Jusqu'ici, vous ne verrez rien dans Finder, mais vous pourrez le trouver dans Utilitaire de disque (ou via le terminal). Vous pouvez ainsi voir que nous disposons d'un volume non initialisé, d'un peu plus d'1 Go, et qu'il est bien à l'emplacement /dev/disk9.
Vous pouvez faire varier la taille selon vos besoins, ainsi que votre mémoire disponible.
Maintenant, il faut formatter le volume afin qu'il soit utilisable par macOS. Le plus simple est de formatter le volume en HFS+, le format de fichier historique d'Apple, mais qui n'est plus utilisé, depuis 10.13 / 10.14.
diskutil eraseVolume HFS+ "DisqueRAM" /dev/disk9
Cette commande va faire le formattage de votre disque, et le monter sur Finder.
Started erase on disk9
Unmounting disk
Erasing
Initialized /dev/rdisk9 as a 977 MB case-insensitive HFS Plus volume
Mounting disk
Finished erase on disk9 DisqueRAM
Comme vous pouvez le voir, dans Utilitaire de disque, votre volume est désormais un disque Mac OS étendu.
Et il y a déjà 24Mo de consommé alors que le disque est vide. Il s'agit de la table de partition.
Petite astuce, vous pouvez réaliser l'action avec une seule ligne de commande
diskutil eraseVolume HFS+ "DisqueRAM" `hdiutil attach -nomount ram://2000000`
Depuis 10.13, Apple propose un nouveau format schéma de partition pour le formattage de ses disques durs, l'APFS dont nous vous avions déjà parlé ici.
Il peut donc être pratique de monter un volume avec ce format, pour cela la seconde commande sera
diskutil apfs create /dev/disk9 "DisqueRAM"
avec le résultat, légèrement plus complet dû à la structure plus complexe de l'APFS
Started APFS operation on disk9
Creating a new empty APFS Container
Unmounting Volumes
Switching disk9 to APFS
Creating APFS Container
Created new APFS Container disk10
Disk from APFS operation: disk10
Finished APFS operation on disk9
Started APFS operation on disk10
Preparing to add APFS Volume to APFS Container disk10
Creating APFS Volume
Created new APFS Volume disk10s1
Mounting APFS Volume
Setting volume permissions
Disk from APFS operation: disk10s1
Finished APFS operation on disk10
macOS 10.13 High Sierra supporte APFS cependant il s'agissait plus d'une pré-version très buggée, et le montage d'un volume virtuel ne fonctionne pas. Il faudra donc se contenter d'un volume HFS+, comme pour toutes les versions inférieure de mac OS ou Mac OS X. A partir de macOS 10.14, il ne devrait pas y avoir de soucis.
Comme pour la commande en HFS+, il est possible de regrouper les deux commandes en une.
diskutil apfs create `hdiutil attach -nomount ram://2000000` "DisqueRAM"
De part la structure du format APFS, l'image disque est ici toujours visible dans Utilitaire de disque. Cependant, il n'est pas possible de l'éjecter tant que le volume APFS est en fonction.
Et bien évidemment, vous n'êtes pas limité à un disque virtuel, vous pouvez en créer autant que vous le souhaitez, et tant que votre Mac dispose de suffisamment de mémoire vive.
Il existe plusieurs logiciels qui vont permettre de créer des disques virtuels, cependant, ils ne sont que des interfaces graphiques à ces commandes que l'on peut effectuer dans le terminal. Maintenant que vous connaissez les commandes, vous saurez exactement ce que ces logiciels font. Il peut être intéressant de garder les commandes en tête pour les utiliser en conjonction de launchd pour un montage automatique d'un disque RAM à l'ouverture de la session.
Quelques précautions
Attention, lorsque vous allez créer un disque virtuel en mémoire, celle ci sera réservée et ne pourra plus être utilisée pour charger de nouvelles applications ou de nouveaux fichiers dans ces dernières.
Il faut donc veiller à allouer une portion de sa mémoire qui ne génera pas macOS dans son fonctionnement. Il serait ridicule de créer un dique RAM si volumineux que macOS serait obligé d'utiliser massivement de la mémoire virtuelle en échange. Pire, il pourrait finir par planter, perdant toutes les informations que vous auriez placé sur le disque virtuel. Sauf cas particuliers, ce serait donc totalement contre-productif.
Petit comparatif de vitesse
Mettre en place et utiliser un disque virtuel nécessite un peu de travail et peut se révéler être une vraie contrainte. En dehors d'une éventuelle réduction de l'usure de votre disque quel est le gain en vitesse.
Voici quelques benchs réalisés sur un vieux Mac Pro 2009, qui peut prendre en charge jusqu'à 128 Go de RAM et donc permettre de beaux volumes virtuels.
Voici les premiers benchs tirés d'un précédent article sur l'installation d'un disque NVME placé sur une carte PCI dans cette machine.
Disque à plateau sur SATA 2 (3Gbit/s)
Disque SSD sur SATA 2 (3Gbit/s)
Disque SSD NVMe sur PCI
Et voici les performances de notre disque virtuel situé en RAM, toujours sur le même Mac Pro.
Disque RAM
Comme on peut le voir, le disque en RAM est le plus rapide. Cependant, le SSD NVMe en PCI se rapproche des scores du disque en RAM. Comme indiqué dans le précédent article, le disque dispose normalement de bien meilleures performances, mais semblait limité par le Mac. Aujourd'hui, nous pouvons confirmer que c'est bien le cas, puisque de toute façon, la mémoire RAM n'est pas capable d'aller beaucoup plus vite.
Il serait intéressant de faire le test sur une machine récente. Car, si les disques sont désormais les mêmes que celui utilisé dans le Mac Pro, la mémoire vive et ses débits se sont largement améliorés en 12 ans.