9 votes

Comment puis-je augmenter l'espace d'échange maximum autorisé ?

Lorsque j'essaie d'effectuer un calcul qui nécessite l'allocation et l'utilisation de 128 Go de mémoire (il s'agit d'un programme en ligne de commande écrit en C), le noyau tue mon processus avec un préjudice extrême. Cette entrée du journal de la console en est un exemple :

9/25/15 7:08:40.000 PM kernel[0] : low swap : killing pid 6202 (huffgrp)

Le calcul fonctionne bien et en un temps raisonnable lorsqu'il alloue et utilise 64 Go de mémoire. Ma machine a 32 Go de RAM et beaucoup d'espace sur le disque dur. J'ai également essayé sur une autre machine avec 8 Go de RAM, sur laquelle le calcul de 64 Go fonctionne bien aussi, en prenant plus de temps bien sûr, mais le calcul de 128 Go est tué par le noyau de la même manière. Sur les deux machines, j'utilise Yosemite 10.10.5.

Au fait, malloc() ne renvoie jamais d'erreur, quelle que soit la quantité d'espace que je demande. Le noyau n'arrêtera le processus qu'une fois qu'une trop grande partie de cette mémoire sera utilisée par le processus, ce qui entraînera beaucoup de swapping sur le disque dur.

Il semble donc y avoir une limite secrète d'espace d'échange quelque part entre 64 et 128 Go.

Ma question est la suivante : comment puis-je reconfigurer le noyau pour permettre plus d'espace d'échange ? J'ai trouvé un fichier qui semble prometteur, /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist mais je ne vois pas le numéro secret là-dedans. La page de manuel de dynamic_pager dit que tout ce qu'il fait est de définir le nom et l'emplacement des fichiers d'échange. Il existe une version plus ancienne de la même page de manuel qui documente une méthode d'utilisation de l'espace de pagination. -S pour définir la taille des fichiers d'échange créés. J'ai essayé cela, en demandant des swapfiles de 160 Go, mais cela n'a eu aucun effet. Les fichiers d'échange étaient toujours de 1 Go chacun, et le processus était toujours tué par le noyau.

4voto

jstarek Points 3108

Bien que je n'aie pas pu trouver de documentation plus récente, l'ouvrage de Singh "Mac OS X Internals : A Systems Approach" mentionne deux limites obscures dans /sbin/dynamic_pager (p. 919 et suivantes) :

  • Les tailles minimale et maximale absolues du fichier d'échange sont respectivement de 64 Mo et 1 Go.

  • La taille maximale du fichier d'échange ne doit pas être supérieure à 12,5 % de l'espace libre disponible sur le volume qui contient le fichier d'échange. De plus, la taille maximale du fichier swap ne doit pas être supérieure à la quantité de mémoire physique du système.

  • Au maximum, huit fichiers d'échange peuvent être créés.

[...]

Bien que le livre date un peu et que les chiffres aient probablement changé, la règle des 12,5 % me semble très suspecte.

Singh implique que ces limites sont codées en dur dans le binaire et donc que le fichier de propriétés que vous avez trouvé ne sera probablement pas utile. Notez également que le système de swap crée plusieurs, mais seulement jusqu'à huit, fichiers de swap distincts.

/sbin/dynamic_pager est documenté, comme vous l'avez noté, comme un très page de manuel rudimentaire et qu'il y a une déclaration contradictoire dans la version actuelle de l'accord. documentation du développeur sur la mémoire virtuelle en déclarant que

Pour permettre aux processus d'accéder à la totalité de leur espace d'adressage de 4 gigaoctets ou 18 exaoctets, OS X utilise le disque dur pour conserver les données qui ne sont pas actuellement utilisées. Au fur et à mesure que la mémoire se remplit, les sections de la mémoire qui ne sont pas utilisées sont écrites sur le disque pour faire de la place aux données qui sont nécessaires maintenant. La partie du disque qui stocke les données inutilisées est connue sous le nom de "backing store" car elle fournit un stockage de secours pour la mémoire principale.

[...]

Remarque : contrairement à la plupart des systèmes d'exploitation basés sur UNIX, OS X n'utilise pas une partition de disque préallouée pour le magasin de sauvegarde. Au lieu de cela, il utilise tout l'espace disponible sur la partition de démarrage de la machine .

(c'est moi qui souligne)

C'est pourquoi, à ce stade, j'opterais pour une solution de rechange pragmatique. Essayez peut-être d'augmenter encore votre espace disque pour vérifier une corrélation dans la taille de swap obtenue, vérifiant ainsi la limitation de 12,5% mentionnée ci-dessus.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X