web-dev-qa-db-ja.com

すべてのプロセスとコアのCPU使用率を制限する

最近、2つのコア(つまり2つの論理CPU)を搭載したDellボックスにScientific linux 7(64ビット)をインストールしました。しばらくの間、ファンやクーラーなどを掃除するためにコンピューターを開いていません。どちらかの(または両方の)コアで高(たとえば100%)CPUを数分間使用すると、コンピューターはシャットダウンします(通常novea表示グラフィックスを破壊するか、PDF上のドキュメントfirefoxまたはmake )。

システムをクリーンアップするまで、CPU使用率をコアあたり約75または80%に制限したい(notper process!)ので、私はしません予期しないシャットダウンを取得しません。このようにして、プロセスは複数のCPUを利用できますが、CPU使用率%の制限を超えてそれらのいずれかをプッシュすることはできません。これを行う方法はありますか?

5
Cool Charac

数日間の集中的な調査の結果、プロセスのCPU使用率を下げる2つの方法を見つけました。一般に、マシン全体のCPU使用率を下げたい場合、おそらく最も長く持続するCPUを使用するプログラムがいくつかあり、マシン全体に負担をかけるのではなくthoseを制限する必要があります。また、バッテリー寿命を節約するためにこれを行う場合、ハードウェアの電力使用量を制御することもできます。 tunedまたはpowertop、ほとんどのディストリビューションにはそれを支援するツールがあります。

  1. 停止/継続信号

シグナルはUNIXから存在していました。 SIGSTOPまたはSIGTSTPをプロセスに送信します(違いは、前者がプロセスをクラッシュさせる可能性がある場合、前者はプロセスをクラッシュさせる可能性がありますmustクリーンアップ作業を実行し、プロセスは後者で強制的に停止されません。プロセスに適したプロセスを使用します。 )一時停止します(CPUを解放し、場合によっては温度を下げます)。次に、SIGCONTをプロセスに送信して再開し、CPUを取得します。この方法では、CPUグラフに一連の「スパイク」が発生し、プロセスを一時停止することで十分な時間が与えられないため、プロセッサの過熱が停止します。

このメソッドの結果は、これらの一時停止がsmoothではないことです。つまり、ビデオの再生やWebのブラウジングもスムーズではないため、このメソッドをシェルコマンド(マルチプロセスプログラム)で使用することができます。またはGoogleのようなコマンドChromeまたはmakeはこの方法でもうまく機能しません。)明らかに、systemdのようなシステムプロセスを一時停止/再開することをお勧めしますnot

これは手動で行うこともできますが、 cpulimit は、この方法を使用する素敵な小さなプログラムです(SIGSTOP/SIGCONTを使用します)。説明に反して、複数のコアがある場合でも、指定するCPU%は0〜100です。また、Ctrl-Zを使用すると、いつでもターミナルでジョブを一時停止できます。

  1. cpupower(強く推奨)

これはLinuxカーネルに組み込まれているため、ほとんどのディストリビューションで提供されています(入手しない場合は here )。このコマンドラインユーティリティは、CPU周波数を管理するため、ガバナの状態(パフォーマンス、省電力など)を使用してCPU全体をほぼ制御しますが、他のことも実行できます。一時停止/再開メソッドとは異なり、これによりプロセスはmuchよりスムーズになります。プロセッサーの最大周波数を設定する必要があります。

  1. cpupower frequency-infoを実行して、使用可能なプロセッサの状態を確認します。
  2. Rootとしてcpupower frequency-set -u <frequency>と入力し、手元にある最低の周波数から始めて、過熱しない最高の周波数を探します。
  3. (これはオプションです)必要に応じて、システム温度を確認できるlm_sensorsパッケージをインストールできます。次にsensors-detectを実行し、すべての質問に「はい」と答えます。最後に、sensorsを実行して、現在の温度と(システムがオーバーヒートする)クリティカルな温度を確認します。

この時点で、現在の温度はずっと低くなっているはずです。上記のコマンドを入力すると、ゲームなどのパフォーマンスを重視するプログラムがハングする可能性がありますが、そのメッセージがポップアップウィンドウに表示された場合は、強制終了せずにプログラムを待つ必要があります。システムを再起動するたびにこのコマンドを入力する必要があることに注意してください(自動的に実行することができない場合)。 cpupowerの詳細については、 this および this を参照してください。

4
Cool Charac