Linuxで実行されているクラスターマシンで作業しています。
mpirun
を使用してジョブをクラスターマシンに送信するシェルスクリプトがあります。同じスクリプトで、ジョブに割り当てるノードの数を選択できます。ここまでは順調ですね。
私の問題はその後発生します。いくつかのジョブを送信すると、すべて正常に動作しますが、ノードの容量をいっぱいにすると、送信されたジョブの一部が完了しません。その結果、クラスターで使用可能なメモリが、すべてのジョブを同時に処理するには不十分であると思われます。
これが、各ジョブのメモリ使用量を経時的に確認したい理由であり、次にqstat -f
コマンドを使用しますが、多くのことを表示し、それらのほとんどは理解できません。
これが私の質問です:以下のqstat -f
コマンドの出力例では、mem
とvmem
の2種類のメモリを確認できます。これら2つの違いと、実際に使用されているメモリの量を知りたいのですが。
resources_used.cput = 00:21:04
resources_used.mem = 2099860kb
resources_used.vmem = 40505676kb
resources_used.walltime = 00:21:08
さらに、このコマンドの出力が詳細に記載されている参考資料をいただければ幸いです。私はman qstatを試しましたが、返された各行の詳細には入りません。
これを未解決の質問のリストから削除し、簡単な回答を与えるために(上記のgoldilocksのコメントとqstatのドキュメントは、システムに精通していることを前提としています):
答えは、「実際に使用されたメモリ量」の正確な意味に依存します(コメントへの返信の後半:「使用済みRAMスペース」)。
「mem」は、マシンのRAMがジョブによって使用された量、より正確には、観測されたピーク使用量です。これは、クラスター上のジョブ監視システムが実際のピーク使用量であるとは限りません。使用状況を頻繁にチェックしているだけです。ジョブはここで報告されているより多くのメモリを使用しようとしている可能性がありますが、同じマシンで実行されているメモリや他のタスクがないなどの理由で、システムはジョブにそれ以上のメモリを与えていません。また、ファイルシステムキャッシュは、大量のファイルアクティビティ(I/O)がある場合、RAM)の競合になる可能性があります。
「vmem」は、最新のプロセッサがメモリを管理する方法に関連する量です。ここでもピーク値です。この数には、メモリマップトファイルやスワップスペースなど、プロセスがアクセスできるさまざまなものを含めることができます。これには、プロセスが割り当てたが使用されなかったスペースが含まれているため、非常に大きくなる可能性があります。数が少ない場合は、メモリは問題ではないと結論付けることができますが、数が多い場合は、わからないため、さらに調査する必要があります。一部のアプリケーションは、ほんの一部しか必要としない場合でも、大量の仮想メモリを割り当てます。