如何增加 Mac OS X 上的最大交换空间?

Mar*_*ler 16 osx configuration swap virtual-memory darwin

在 Mac OS X Yosemite 10.10.5 上,当我尝试运行需要分配和使用 128 GB 内存的计算(它是一个用 C 编写的命令行程序)时,内核以极端的偏见杀死了我的进程。此控制台日志条目是一个实例的示例:

15 年 9 月 25 日 7:08:40.000 PM 内核 [0]:低交换:杀死 pid 6202 (huffgrp)

当它分配和使用 64 GB 内存时,计算工作正常并且在合理的时间内。我的 Mac 有 32 GB 的 RAM 和硬盘驱动器上的 Beaucoup 空间。我也在另一台具有 8 GB RAM 的 Mac 上尝试过这个,64 GB 的计算也运行良好,当然需要更长的时间,但 128 GB 的计算以相同的方式被内核杀死。

顺便说一句,malloc()无论我要求多少空间,都永远不会返回错误。内核只会在进程实际使用过多内存时终止该进程,从而导致大量交换到硬盘驱动器。

所以似乎有一个秘密交换空间限制在 64 GB 和 128 GB 之间。

我的问题是:如何重新配置​​内核以允许更多交换空间?我找到了一个很有前途的文件,/System/Library/LaunchDaemons/com.apple.dynamic_pager.plist但我没有看到里面的秘密号码。手册页dynamic_pager说它所做的只是设置交换文件的名称和位置。同一个手册页有一个旧版本,它记录了一个-S选项来设置创建的交换文件的大小。我试过了,请求 160 GB 交换文件,但没有效果。每个交换文件仍然是 1 GB,并且该进程仍然被内核杀死。

dat*_*ess 5

不是您要求的答案,但是如果您创建自己的适当大小的文件,将其映射到您的进程中,然后在此地址空间中运行您的计算,它应该具有与交换文件相同的效果,并且您可以保证有空间,而不是与其他进程竞争可用的 RAM/交换。

它也可能更慢,具体取决于您覆盖数据的频率,但应该更便携。

  • 好点子!我寄予厚望。唉,他们撞上了残酷的现实海岸。该进程_仍然_被内核杀死以进行大量交换,就像以前一样(“低交换”控制台消息),即使它使用的是我通过`mmap()`创建的用作虚拟内存的文件。 (3认同)