Mac OSの場合、次のコンソールログエントリはインスタンスの例です。
2015年9月25日午後7時08分40.000カーネル[0]:低スワップ:pid 6202終了(huffgrp)
64GBのメモリを割り当てて使用すると、計算が正常に機能し、適切な時間がかかります。私のMacには32GBのRAMと素晴らしいハードドライブスペースがあります。また、8GBのRAMを搭載した他のMacでもこれを試しました。その Mac では、64 GB のコンピューティングも正常に実行され、さらに時間がかかりましたが、128 GB のコンピューティングは同じ方法でカーネルによって中断されました。
しかし、malloc()
どんなに多くのスペースを要求してもエラーは返されません。カーネルは、実際に多すぎるメモリを使用している場合にのみプロセスを終了し、ハードドライブに大量のスワップを発生させます。
したがって、64 GBから128 GBの間の秘密のスワップスペース制限があるようです。
私の質問は:より多くのスワップスペースを許可するようにカーネルをどのように再設定できますか?有望に見えるファイルが見つかりまし/System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
たが、その中にパスワードが表示されませんでした。マニュアルページには、dynamic_pager
スワップファイルの名前と場所を設定することがすべてであることがわかります。同じマニュアルページの以前のバージョンには、-S
生成されたスワップファイルのサイズを設定するオプションが文書化されていました。 160GBのスワップファイルを要求しましたが、役に立ちませんでした。各スワップファイルはまだ1 GBで、プロセスはまだカーネルによって終了します。
答え1
あなたが要求した答えではありませんが、適切なサイズのファイルを直接作成してプロセスにマップし、このアドレス空間で計算を実行すると、スワップファイルと同じ効果があり、所有権が保証されます。使用可能なRAM/スワップを置き、他のプロセスと競合するのではなく、スペースを解放します。
データをどのくらい頻繁に上書きするかによっては遅くなる可能性がありますが、移植性は高くなければなりません。
答え2
私のMac情報は古く、これを行うカーネルの魔法はもうないかもしれません。したがって、この手順では、非常に簡単にフォルダまたはパーティションをスワップパーティションとしてマウントできるLinuxを使用することをお勧めします。
動的スワップフォルダの使用の不確実性を排除します。物理スワップパーティションを作成します(Linuxでは、16進コードであるスワップ用のディスクテーブルタイプコードを使用してフォーマットされていない空のパーティション0x82
)。それから:
- /etc/rcファイルを編集し、スワップセクションを見つけてすべてコメントアウトします。行を追加
mount -vat swap
- /etc/fstab にすべてのスワップパーティションをマウントしたことを示します。
- 走る
pdisk /dev/disk? -dump
- 「?」は、ハードドライブのディスク番号に書き込まれたスワップパーティションの横の数字です。
- /etc/fstabを編集または作成します(存在しない可能性があります)。次の行を追加してください。
/dev/disk?s?? none swap sw 0 0
- ?あなたのディスクです。
- ??はスワップパーティションの番号です。
- 再起動。