Cette question est née d'une plaisanterie entre collègues sur l'augmentation des performances en déplaçant des fichiers d'échange vers un tmpfs. De toute évidence, même si cela est possible, ce n'est pas une bonne idée. Tout ce que je veux savoir, c'est que cela peut être fait?
Je suis actuellement sur Ubuntu 14.04, mais j'imagine que le processus est similaire pour la plupart des machines Linux / Unix. Voici ce que je fais:
> mkdir /mnt/tmp
> mount -t tmpfs -o size=10m tmpfs /mnt/tmp
> dd if=/dev/zero of=/mnt/tmp/swapfile bs=1024 count=10240
> chmod 600 /mnt/tmp/swapfile
> mkswap /mnt/tmp/swapfile
# So far, so good!
> swapon /mnt/tmp/swapfile
swapon: /mnt/tmp/swapfile: swapon failed: Invalid argument
Donc, sur Linux ou Unix (je suis intéressé par une solution), pouvez-vous configurer le swap sur un fichier / une partition résidant dans RAM? Existe-t-il un moyen de contourner l' Invalid argument
erreur que j'obtiens ci-dessus?
Encore une fois, je tiens à souligner que je ne m'attends pas à ce que ce soit une solution à un problème du monde réel. Juste une expérience amusante, je suppose.
Réponses:
Sûr. Sur FreeBSD:
Cela montre qu'actuellement, j'ai une partition d'échange cryptée 4G avec une redondance en miroir. J'ajouterai un autre 4G de swap non redondant et non crypté:
Créez d'abord un périphérique "disque de mémoire" 4G soutenu par la RAM
md
:Dites ensuite
swapon
d'ajouter cela au pool de périphériques de swap disponibles etswapinfo
confirme que j'ai maintenant 8G de swap:la source
mdconfig(8)
inclut une note qui omettant l'-o reserve
option "est un moyen très simple de paniquer un système". Il note également que le type peut être défini surswap
ce qui permet le scénario très amusant d'un système déplaçant des pages de mémoire en swap qui lui-même réside en mémoire! Il existe même une option-o force
pour les nuls comme moi qui veulent omettre les "vérifications de santé mentale supplémentaires". J'ai bien ri en lisant ceci.Cela ne devrait pas être possible.
swapon
l'appel système nécessitereadpage
etbmap
(indirectement) des appels mis en œuvre par le système de fichiers:http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
Mais aucun d'entre eux n'est implémenté par tmpfs , une telle entrée manque dans la correspondance
address_space_operations
: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104Pour la même raison, tmpfs ne peut pas contenir de montages en boucle, et ramfs ne fonctionnera pas non plus (il n'a pas d'
bmap
appel)la source
De cette Q&A /superuser/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem (le site référencé d'origine ne répond pas):
La raison de l'incompatibilité que je soupçonne est une "dépendance circulaire". De cet article: http://www.jamescoyle.net/knowledge/951-the-difference-between-a-tmpfs-and-ramfs-ram-disk :
Ce qui serait pratiquement impossible dans votre scénario.
Cela pourrait fonctionner avec
ramfs
, tho - qui n'a pas ce problème.la source
tmpfs
partition en tant que swap démarrerait et ferait une boucle sans fin lorsque la machine commence le swap.Vous pouvez facilement éviter les problèmes avec les fonctions manquantes et passer aux tmpfs, bien qu'un peu indirectement:
Combiné avec zswap, cela ressemblait à une excellente solution "d'extension de mémoire" jusqu'à ce que mon RasPi4 se bloque presque complètement (la console ssh a gelé, X a gelé, youtube en chrome a continué à parler pendant plusieurs minutes et a également gelé, mais le système répondait aux pings et au chien de garde n'a pas Lancé via ssh (avant que cela ne se produise) au sommet ne montrait pas non plus quelque chose d'exceptionnel - il semblait y avoir suffisamment de RAM libre et d'espace de swap, En fait, idée similaire avec OpenSolaris (swap à un zvol compressé) conduire à un résultat similaire.
la source