冷却が不十分なコンピューターでプログラムをコンパイルしようとしています。
具体的には、このプログラムはプロセッサ固有の最適化がlinux-ck
施されたカーネルである-mtune=native march=native
ため、別のコンピュータで実行するだけでは目的を達成できません。
現在、冷却問題の解決に取り組んでいます。注記:コンピューターに物理的にアクセスできないため、トラブルシューティングを手伝わないでください。
^Z
代わりに、 CPU が によって測定された特定の温度を超えたときにプログラムを一時停止し (シェル ジョブ制御 ' -style')、温度が安全なレベルに戻ったと測定されたらプログラムを再開する方法がsensors
必要です。
注記:このコンピューターは以前に 91°C に達したことがあります。
コンピューターは Arch Linux を実行しており、完全に更新されています。
答え1
解決策は、メインジョブの PID を変数に割り当て、次のスクリプトを記述することです。
温度は約10秒ごとにチェックされます。
temp=($(sensors | awk -F'[+.]' '{print $2}'))
私のボックスでは 2 つの温度 (acpitz と coretemp) を含むテーブルが作成されます
temp
が、出力に合わせて調整する必要があるかもしれませんsensors
。temp > $TEMPMAX の場合は
kill -TSTP PID
ジョブに送信します (CTRL-Z、別名 suspend)(( $temp[1] > 80 || $temp[2] > 80 )) && kill -TSTP $JOBPID
temp < $TEMPRUN の場合は
kill -CONT PID
ジョブに送信します (bg コマンドと同じ)(( $temp[1] < 40 && $temp[2] < 40 )) && kill -CONT $JOBPID
スクリプトは頻繁に実行されるため、sensors
速度を少し上げるために、コマンドではなくソースから温度を取得する必要があるかもしれません。多くのマシンでは、これは機能します:
temp=($(cut -c 1-2 /sys/class/hwmon/hwmon0/temp1_input) $(cut -c 1-2 /sys/class/hwmon/hwmon1/device/temp2_input))
ただし、必要に応じて調整する必要があるかもしれません。