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.