9 votos

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

Cuando intento hacer un cálculo que necesita asignar y utilizar 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 del registro de la consola es un ejemplo de un caso:

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

El cálculo funciona bien y en un tiempo razonable cuando asigna y utiliza 64 GB de memoria. Mi máquina tiene 32 GB de RAM y mucho espacio 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 funciona bien también, tomando más tiempo, por supuesto, pero el cálculo de 128 GB es asesinado por el núcleo de la misma manera. En ambos casos estoy ejecutando Yosemite 10.10.5.

Por cierto, malloc() nunca devuelve un error, no importa cuánto espacio pida. El kernel sólo matará el proceso una vez que el proceso esté utilizando demasiada memoria, lo que resulta en un montón de intercambio en el disco duro.

Así que parece que hay un límite secreto de espacio de intercambio en algún lugar entre 64 GB y 128 GB.

Mi pregunta es: ¿cómo puedo reconfigurar el kernel para permitir más espacio de intercambio? He encontrado un archivo que parece prometedor, /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist , pero no veo el número secreto ahí. 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 más antigua de la misma página man que documenta un -S para establecer el tamaño de los archivos de intercambio creados. Probé eso, solicitando archivos de intercambio de 160 GB, pero no tuvo ningún efecto. Los archivos de intercambio seguían siendo de 1 GB cada uno, y el proceso seguía siendo matado por el kernel.

3voto

Bob Cross Puntos 187

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

  • Los tamaños mínimos y máximos absolutos del archivo de intercambio son 64MB y 1GB, 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 del sistema.

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

[...]

Aunque el libro es un poco antiguo y es probable que las cifras hayan cambiado, la regla del 12,5% me parece muy sospechosa.

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

/sbin/dynamic_pager está documentado, como has señalado, como un página man rudimentaria y hay una declaración conflictiva en la actual documentación para desarrolladores sobre la memoria virtual , declarando que

Para dar a los procesos acceso a todo su espacio de direcciones de 4 gigabytes o 18 exabytes, OS X utiliza el disco duro para mantener los datos que no están en uso. A medida que la memoria se llena, las secciones de memoria que no se están utilizando se escriben en el disco para dejar espacio a 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 reserva 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 copias de seguridad. En su lugar, utiliza todo el espacio disponible en la partición de arranque de la máquina .

(énfasis mío)

Por lo tanto, en torno a este punto, yo optaría por alguna solución pragmática. Tal vez intente aumentar aún más su espacio en disco para comprobar si hay una correlación en el tamaño de intercambio obtenible, comprobando así la limitación del 12,5% mencionada anteriormente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X