プロセスの CPU 使用量を減らす方法はありますか?

プロセスの CPU 使用量を減らす方法はありますか?

バッテリーを節約するために、デバイスのCPU使用率を下げたいです。CPUを大量に使用するプログラムがあります。CPUniceが100%になったときにスケジュールを変更するだけなので役に立ちません。そこまで高くしたくないのですが。

答え1

CPUのバッテリー消費を抑えるには、CPUを低速で実行する必要があります。プログラムの実行に必要なCPU命令の総量は、プログラムの実行速度に依存しないため、プログラムが使用するCPU時間の割合を制限すると、もっとCPU は、それ以下ではありません。CPU がプログラムを実行せずに何もしていないときでも、電力を消費しています。CPU が何もしていない休止時間は、せいぜい省電力状態に入るのに十分な長さですが、それでも余分な電力状態遷移に対してペナルティを払うことになります。

プロセスが使用するCPU時間の割合を制限すると、カーネルがCPUクロック速度を遅くする間接的な効果が生じる可能性があります。これが発生するかどうかは、CPU周波数ガバナーおよび関連する正確な数値。デフォルトのガバナー (オンデマンド) では発生しますが、レートを制御するのは困難です。

電力を節約したい場合、最善の戦略は、プログラムが利用可能な CPU パワーの 100% を使用するようにし (できるだけ早く終了するように)、CPU の実行速度をできるだけ遅くすることです (命令ごとに消費されるエネルギーの量は CPU 速度とともに増加するため)。

CPU周波数は、/sys/devices/system/cpu/cpu0/cpufreqおよびその類似のパラメータ、またはさまざまなユーザーインターフェイスを使用して設定できます。cpufreq ユーティリティ2 つのコマンドライン ツールを提供します。cpufreq-infocpufreq-set. そこにはより高度なツールスイートと呼ばれるCPUパワーこれは現在カーネルソースに含まれています。Gnome を使用している場合は、Cpufreq アプレットを使用できます。他の GUI もあります。

バッテリーをできるだけ節約するには、CPU を最小周波数で実行します。 を実行すると、cpufreq-info使用可能な周波数が表示されます。 を実行すると、CPU 0 が常に最小周波数で実行されます (他の CPU のcpufreq-set -c 0 -g powersave値を増やしながら繰り返します)。-c

答え2

たとえば特定のPIDに対してcpulimitを使用することができます

 sudo cpulimit -b -l 80 -p 1183

レニス:

renice +19 1183

これにより、1183の優先度が可能な限り低くなります。

答え3

これに対するエレガントな解決策があるかどうかはわかりませんが、シグナルを使用してプロセスを停止して再起動することができます。

PID=1234
mode=running
run_time=0.1
stop_time=0.1
while true; do
  if [ running = "$mode" ]; then
    kill -STOP "$PID"
    mode=stopped
    sleep "$run_time"
  else
    kill -CONT "$PID"
    mode=running
    sleep "$stop_time"
  fi
done

関連情報