Réponses:
À la demande. En fait, Linux transférera lentement la mémoire physique pour la permuter lorsqu'elle est inactive (voir: "permutation").
Pendant le fonctionnement normal, les données de swap sont chargées dans la mémoire à la demande, comme d'autres l'ont répondu, mais il y a un cas de plus lorsque cela se produit: c'est lorsque l'espace de swap est désactivé, à condition qu'il y ait suffisamment de mémoire physique pour charger tout le contenu du swap.
Faites juste:
swapoff -a
… Et toutes vos données de swap «reviendront» dans la mémoire. L'effet secondaire est que les tampons / caches de disque peuvent être vidés.
Parfois, il peut être souhaitable de le faire swapoff -a ; swapon -a
, par exemple après un processus de fuite de mémoire bogué, avant de planter, des processus plus importants soient éliminés - pour vous assurer que tout processus en cours d'exécution dans le système est chargé en mémoire et n'attendra pas l'échange quelques minutes.
swapoff
qui n'échouera pas, mais le système manquera de mémoire peu de temps après swapoff
et le MOO tuera le processus aléatoire (dans le pire des cas, le shell sur le point d'appeler swapon
ou la swapon
commande). En pratique, cela est très peu probable - une grande quantité de mémoire est utilisée par les caches avant d' swapoff
être appelée, donc il devrait y avoir suffisamment de RAM pour que les deux commandes s'exécutent.
Comme d'autres l'ont souligné, les pages ne seront recopiées dans la RAM qu'en cas de besoin (à la demande) au lieu de prendre de la RAM qui pourrait être mieux laissée disponible pour le cache / les tampons.
Le fait que les pages soient recopiées dans la RAM et non déplacées est important et peut prêter à confusion si vous n'en avez pas conscience. La page ne sera pas désallouée du swap à moins qu'elle ne soit plus nécessaire du tout (c'est-à-dire que la page soit complètement désallouée), qu'elle soit modifiée dans la RAM (donc la copie dans swap n'est plus correcte), ou que le swap soit bas (et -des blocs de disque sont nécessaires pour échanger d'autres pages). De cette façon, si la page doit être à nouveau échangée à l'avenir, aucune écriture sur le disque n'est nécessaire car le noyau sait qu'il existe déjà une bonne copie sur le disque - cela peut réduire considérablement le "thrashing" lorsque la RAM disponible devient extrêmement faible mais l'espace de swap n'est pas également congestionné.
Vous pouvez voir combien de pages se trouvent actuellement dans la RAM et permuter cat /proc/meminfo
- la SwapCached
ligne est la quantité de données qui se trouve dans les pages qui sont actuellement à la fois dans la RAM et sur le disque. Si vous pensez que votre swap actuel l'utilise plus que prévu, vérifiez la valeur SwapCached car cela pourrait bien expliquer la différence.
Cela est généralement lié au matériel que vous utilisez. Sur la plupart des matériels (y compris Intel), la MMU contrôle l'ensemble du processus.
Lorsqu'un programme alloue de la mémoire, il le demandera à la MMU et récupérera une adresse virtuelle. À son tour, la MMU enregistrera cette page comme étant "en cours d'utilisation" dans la carte globale de l'espace d'adressage.
Lorsque le programme accède réellement à cet espace mémoire, la MMU recherche la page dans la carte d'adresses. Si cette page est en mémoire "live", elle renverra un pointeur "live" à l'OS qui gérera la lecture / écriture de la mémoire au nom du programme. Si la mémoire n'est pas actuellement allouée, cela déclenchera un défaut de page. Cette exception de processeur est ensuite interceptée par le système d'exploitation qui est ensuite chargé de déterminer où se trouvent les données dans le fichier d'échange, de les charger dans la mémoire physique et de rendre la page à la MMU afin que le processus initial puisse continuer.
Cela signifie que, à moins d'accéder à la page mémoire, elle ne reviendra jamais dans la mémoire "en direct" une fois mise en swap. C'est pourquoi il existe généralement une API de système d'exploitation qui permet aux programmes de spécifier qu'un bloc de mémoire particulier ne doit PAS être échangé sur le disque et doit être conservé en mémoire (je ne connais pas Linux, mais sous Windows, c'est la fonction VirtualLock) .
mlock(2)
linux.die.net/man/2/mlock