コンピュータが冷えている間にプログラムを実行する

コンピュータが冷えている間にプログラムを実行する

冷却が不十分なコンピューターでプログラムをコンパイルしようとしています。

具体的には、このプログラムはプロセッサ固有の最適化が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))

ただし、必要に応じて調整する必要があるかもしれません。

関連情報