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.