ユーザープログラムサイズとkernel_taskの関係?
大規模な計算プログラム(2スレッド、使用メモリ12GB位)を走らせると途中からkernel_taskのスレッド占有が始まり、実行速度が最終的に1/10以下に低下してしまいます。一方使用メモリ4GB位で同一プログラムを走らせた場合そのような現象はありません。kernel_taskの挙動はユーザープログラムの占有メモリ規模に依存するものなのでしょうか?
Mac mini 2018 or later
大規模な計算プログラム(2スレッド、使用メモリ12GB位)を走らせると途中からkernel_taskのスレッド占有が始まり、実行速度が最終的に1/10以下に低下してしまいます。一方使用メモリ4GB位で同一プログラムを走らせた場合そのような現象はありません。kernel_taskの挙動はユーザープログラムの占有メモリ規模に依存するものなのでしょうか?
Mac mini 2018 or later
物理メモリーはどれだけあるマシンなのでしょう?
ユーザプログラムで大きなメモリー占有すれば、osが働くためのメモリースペースが減ってしまって、それを確保するために大きなスワップが発生してるのでは?大きなスワップが発生すれば、ディスクとメモリーとのデータのやり取りが激増しますので当然パーフォマンスはガタ落ちになります。スワップの大きさは、アクティビティモニターのメモリーを開けると最下段にその時点でのスワップの大きさが出てます。
もしそういうことなら、12GBも使うプログラムを動かすなら、32GBぐらいの物理メモリーを積んだマシンで実行するとか。(現在のマシンに積んでるメモリーがわからないので、適当に書いてます。現在、32GB積んだマシンでやってる時の話なら、64GBにするとか)
物理メモリーはどれだけあるマシンなのでしょう?
ユーザプログラムで大きなメモリー占有すれば、osが働くためのメモリースペースが減ってしまって、それを確保するために大きなスワップが発生してるのでは?大きなスワップが発生すれば、ディスクとメモリーとのデータのやり取りが激増しますので当然パーフォマンスはガタ落ちになります。スワップの大きさは、アクティビティモニターのメモリーを開けると最下段にその時点でのスワップの大きさが出てます。
もしそういうことなら、12GBも使うプログラムを動かすなら、32GBぐらいの物理メモリーを積んだマシンで実行するとか。(現在のマシンに積んでるメモリーがわからないので、適当に書いてます。現在、32GB積んだマシンでやってる時の話なら、64GBにするとか)
返信ありがとうございます。
M1チップ16GB環境で実験しています。
またアクティビティモニタを確認すると
スワップは0byteで、kernel_taskが確かに大量のディスクアクセスを伴っていました。
OS用には3〜4GB残しとけば良いと思っていましたが
プログラム内のメモリアクセスをOSがバックで支えていると考えれば理解できます。
ユーザープログラムサイズとkernel_taskの関係?