Quando provo a fare un calcolo che deve allocare e utilizzare 128 GB di memoria (è un programma a riga di comando scritto in C), il kernel uccide il mio processo con estremo pregiudizio. Questa voce del registro della console è un esempio di un'istanza:
9/25/15 7:08:40.000 PM kernel[0]: low swap: killing pid 6202 (huffgrp)
Il calcolo funziona correttamente e in un intervallo di tempo ragionevole quando assegna e utilizza 64 GB di memoria. La mia macchina ha 32 GB di RAM e spazio beaucoup sul disco rigido. Ho anche provato questo su un'altra macchina con 8 GB di RAM, su cui il calcolo da 64 GB funziona bene, impiegando più tempo ovviamente, ma il calcolo di 128 GB viene ucciso dal kernel nello stesso modo. Su entrambi eseguo Yosemite 10.10.5.
A proposito, malloc()
non restituisce mai un errore, indipendentemente dalla quantità di spazio che chiedo. Il kernel ucciderà il processo solo una volta che troppa memoria sarà effettivamente utilizzata dal processo, con un notevole scambio di dati sul disco rigido.
Quindi sembra esserci un limite di spazio di swap segreto da qualche parte tra 64 GB e 128 GB.
La mia domanda è: come riconfigurare il kernel per consentire più spazio di swap? Ho trovato un file dall'aspetto promettente, /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
, ma non vedo il numero segreto lì dentro. La pagina man per dynamic_pager
dice che tutto ciò che fa è impostare il nome e la posizione dei file di scambio. Esiste una versione precedente della stessa pagina man che documenta un'opzione -S
per impostare la dimensione dei file di swap creati. L'ho provato, richiedendo file di scambio da 160 GB, ma non ha avuto alcun effetto. I file di swap erano ancora 1 GB ciascuno, e il processo era ancora ucciso dal kernel.