2017-08-04 36 views
0

最近、ユーザーは私たちのクラスタで対話型ジョブを実行していました。我々は、ワークロードマネージャーとしてslurmを使用します。彼は割り当てを得ました:slurmはジョブのメモリ使用量をどのように決定するのですか

salloc --cpus-per-task=48 --time=14-0 --partition=himem 

これは、私たちのクラスタ上のハイメモリ(1.5TB)マシン全体を要求します。彼は仕事をしました。

salloc: Error memory limit exceeded 

は、私は、彼の仕事が唯一のRESで310ギガバイトを取っていたtopを使用して、ノードにログインして:それは実行していたが、彼の画面上に、彼は(このようなか何か)エラーメッセージが表示されました。しかしslurmd.log内のエラーのスルーは(8時間にわたる!)があり、このように:

[2017-08-03T23:21:55.200] [398692.4294967295] Step 398692.4294967295 exceeded memory limit (1588997632 > 1587511296), being killed 

はQUESTION:なぜトップSLURMは、彼が1.58TBを使用していると考えている間、彼は310ギガバイトを使っていると思うのでしょうか?

+1

slurmがプロセスを殺したと言われているので、ある時点で、1.5TBを使用していたプロセスがユーザーによって生成されていた可能性があります。 RedHatや派生したシステムがある場合は、[sadc](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Introduction_To_System_Administration/s3-resource-tools-sar-sadc)があるかもしれません。 .html)を実行し、この仮説をチェックするために10分間隔でmem使用データを収集します。 –

+0

そうではないと思います。上記の '398692.'で報告されたPIDは、310GBプロセスのPIDと一致します。私は 'top 39'と' '396692.4294967295のメモリ制限を超過しました 'エラーを生成している間にslurmログを見ていました。そのようなエラーが発生していた間に、それほど多くのメモリを持っていたプロセスはありませんでした。 –

答えて

1

質問に答えるために、Slurmは/proc/<pid>/statを使用してメモリ値を取得します。あなたのケースでは、@ドミトリ・チュバロフの提案したように、Slurmによって殺されたと思われるプロセスを、おそらく目撃することができませんでした。

もう一つの可能​​性は、あなたが最近バージョン17.2.7で修正されたSlurmバグに出会ったことです。

- SLURMが正しいRSS値を読み取って、要求されたよりも多くの のメモリを使用してジョブに行動を取ることができるように長いの/ proc // STAT出力を処理するためにバッファを増やし:変更ログから。

SLURMが繰り返しプロセスを殺そうとしたという事実は、(あなたは、ログ内のエントリのいくつかの出現を述べた)マシンはRAMが不足したことを示し、プロセスを強制終了しようとしているときにslurmdは問題に直面していました。タスク制御のためにcgroupsを有効にすることをお勧めします。それははるかに堅牢です。

+0

この変更を指摘してくれてありがとう。この変更に関連するバグは、https://bugs.schedmd.com/show_bug.cgi?id=3999です。現在、slurm用のcgroupsプラグインを使用しています。バグ修正では、バッファの長さを256バイトから512バイトに変更しました。エラーを再現し、/ proc//statの長さを確認できるかどうか確認します。私が持っている問題は、バグで説明されている問題とは少し異なりますが、試してみる価値があります。 –

関連する問題