¿Cómo puedo aumentar el espacio de intercambio máximo permitido?

6

Cuando trato de hacer un cálculo que necesita asignar y usar 128 GB de memoria (es un programa de línea de comandos escrito en C), el kernel mata mi proceso con extremo prejuicio. Esta entrada de registro de la consola es un ejemplo de una instancia:

  

9/25/15 7: 08: 40.000 PM kernel [0]: swap bajo: matando a pid 6202 (huffgrp)

El cálculo funciona bien y en un tiempo razonable cuando asigna y usa 64 GB de memoria. Mi máquina tiene 32 GB de RAM y espacio beaucoup en el disco duro. También probé esto en otra máquina con 8 GB de RAM, en la que el cálculo de 64 GB también funciona bien, y toma más tiempo, por supuesto, pero el kernel anula el cálculo de 128 GB de la misma manera. En ambos estoy ejecutando Yosemite 10.10.5.

Por cierto, malloc() nunca devuelve un error, no importa cuánto espacio pido. El kernel solo detendrá el proceso una vez que el proceso esté utilizando demasiado de esa memoria, lo que resultará en un gran intercambio al disco duro.

Parece que hay un límite de espacio de intercambio secreto entre 64 GB y 128 GB.

Mi pregunta es: ¿cómo reconfigurar el kernel para permitir más espacio de intercambio? Encontré un archivo de aspecto prometedor, /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist , pero no veo el número secreto allí. La página de manual de dynamic_pager dice que todo lo que hace es establecer el nombre y la ubicación de los archivos de intercambio. Hay una versión anterior de la misma página de manual que documenta una opción -S para establecer el tamaño de los archivos de intercambio creados. Intenté eso, solicitando archivos swap de 160 GB, pero no tuvo ningún efecto. Los archivos de intercambio aún eran de 1 GB cada uno, y el proceso aún fue eliminado por el núcleo.

    
pregunta Mark Adler 26.09.2015 - 19:45

1 respuesta

3

Aunque no pude encontrar ninguna documentación más reciente, "Mac OS X Internals: A Systems Approach" de Singh menciona dos límites oscuros en / sbin / dynamic_pager (p. 919 f.):

  
  • El tamaño mínimo y máximo absoluto de los archivos de intercambio es de 64 MB y 1 GB, respectivamente.

  •   
  • El tamaño máximo del archivo de intercambio no debe ser superior al 12,5% del espacio libre disponible en el volumen que contiene el archivo de intercambio. Además, el tamaño máximo del archivo de intercambio no debe ser mayor que la cantidad de memoria física en el sistema.

  •   
  • Como máximo, se pueden crear ocho archivos de intercambio.

  •   

[...]

Si bien el libro está un poco anticuado y es probable que los números hayan cambiado, la regla del 12.5% me parece muy sospechosa.

Singh implica que esos son límites rígidos en el binario y, por lo tanto, es probable que el archivo de propiedades que encontraste no sea de utilidad. También tenga en cuenta que el sistema de intercambio crea varios, pero solo hasta ocho, archivos de intercambio distintos.

/ sbin / dynamic_pager está documentado, como notó, como muy página de manual rudimentaria , y hay una declaración conflictiva en la actual documentación del desarrollador en la memoria virtual , indicando que

  

Para dar acceso a los procesos a todo su espacio de direcciones de 4 gigabytes o 18 exabytes, OS X usa el disco duro para almacenar datos que no están actualmente en uso. A medida que la memoria se llena, las secciones de la memoria que no se están utilizando se escriben en el disco para dejar espacio para los datos que se necesitan ahora. La parte del disco que almacena los datos no utilizados se conoce como almacén de respaldo porque proporciona el almacenamiento de respaldo para la memoria principal.

     

[...]

     

Nota: A diferencia de la mayoría de los sistemas operativos basados en UNIX, OS X no utiliza una partición de disco preasignada para el almacén de respaldo. En su lugar, utiliza todo el espacio disponible en la partición de inicio de la máquina .

(énfasis mío)

Por lo tanto, en torno a este punto, buscaría una solución pragmática. Tal vez intente aumentar su espacio en el disco aún más para verificar si existe una correlación en el tamaño de intercambio que se puede obtener, verificando así la limitación del 12.5% mencionada anteriormente.

    
respondido por el jstarek 23.12.2015 - 12:43

Lea otras preguntas en las etiquetas