Linuxプロセスを非常に低い優先度で実行しますか?


12

私はそれほど重要ではないがCPUパワーを大量に消費する通常のプロセスがあります。また、非常に重要な別のプロセスがありますが、ほとんどの時間はアイドル状態ですが、仕事を得たときは本当に高い計算能力が必要です

で実行しnice -20 ./low_priority_processてみましnice --20 ./high_priority_processたが、優先度の高いプロセスが必要な場合は、優先度の低いプロセスが大量のCPUを消費します。CPUパワーを使用している別のプロセスが実際に生成または自動中断するプロセスを実行するにはどうすればよいですか。


優先度の高いプロセスが実際に必要であるとどのように判断していますか?
muru

多くのスレッドを生成するか、プロセスがCPU容量の50%以上をCPUを
消費する

RR優先度の高いプロセスにはスケジューリングを使用します。
Ramesh 2014

@Rameshそれはどんな違いを生み出しますか?
Ken Sharp

回答:


10

cgroupsを見てください。CPU予約などの必要なものが正確に提供されているはずです。cgroupsを使用してアプリケーションの制御優先度を読むことをお勧めします

とはいえ、CPUの95%が割り当てられている重要な、しかししばしばアイドル状態のプロセスを5%の割り当てられた別のアプリケーションにグループ化します-必要なときに、常に電力を必要とするプロセスは、それらの時間にせいぜい5%しか得られません。計算の急増がなくなると、すべてのCPUパフォーマンスが残りのプロセスでスローされます。利点として、のようなプロセス用に(最小限のパフォーマンス要件で)特別なcgroupを作成するsshdと、可能なすべてのCPUを取得しようとしていてもログインできます-一部のCPU時間はのために予約されsshdます。


1
以下のようなコマンドがあるcpulimitか、niceプロセスののcgroupを修正するには?cgroupがAPI呼び出しである場合、cgroupを使用するためにこれらのアプリを再コンパイルできないので
uray

いいえ、cgroup階層をどこかにマウントし、グループごとのディレクトリを作成して、プロセスのPIDをいくつかのファイルに書き込みます。これはすべてrootとして(より正確には適切な特権を使用して)実行する必要があります。一部のinitシステム(つまりsystemd、少なくとも一部の場合)は、initグループインターフェイス(通常は特別なコマンド)を使用する必要があるユーザーからcgroupsインターフェイスを「盗み取り」ます。リンクされた回答とウィキペディアの記事を読んでください。本当に。:)
peterph 2014

ああ、libcgroupパッケージもあります。これには、cgrulesengdいくつかの条件に応じて実際にプロセスをグループに分類できるデーモン()を含むcgroupを操作するためのユーティリティが付属しています。
peterph 2014

7

プロセスの優先度(nice値)が低い場合は、優先度の高いプロセスを中断することはありません。優先度の高いプロセスではないので、あなたがより高い優先度のプロセスが実行されている場合、まだCPUを大量に消費し、低優先度のプロセスを見ている理由があることを忙しいです。おそらくIOを待っています。chrt -p -i 0 $PIDプロセスをより低い優先度で実行するために使用しますnice 19 -p $PID(ここではLinuxについて話していると想定しています)。

chrt -p -i 0 $PID プロセスを「真の」アイドルスケジューラに入れます。

http://linux.die.net/man/1/chrt


2
chrt -p -i 0 $ PID
Robert Foss

chrtはまだ十分ではありません。私がやろうとしていることは、バックグラウンドで他のビデオを再エンコードしながらビデオを見ることです。chrtを使用するとYouTube動画は役に立ちましたが、非常に高品質のmkvsはスキップされます。私が望んでいたのは、ビデオを通常の方法で再生することですが、実行する膨大なバッチがあるため、再エンコードには残りのすべてのCPUパワーを使用します。
1

0

この例を使用して、プロセスを低プロセスとして実行します。

あなたが仕事なら素敵なtar xvf asets.zip

使用する

nice tar xvf assets.zip

その後、発行

解凍プロセスを監視するトップ

ps aux | grep "tar"

cpulimitで特定のことを試してください

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null&


ええ-20、「優先度が低い」と--20「優先度が高い」ですnice。コマンドのダブルダッシュを見てください。はい、私はnice値について完全に理解していますが、私の質問は、nice値を使用する以外にスケジューラに伝える方法があるということです
uray

2
@ user77710よろしいですか?UbuntuマンページPOSIXマンページもこの構文を指定していません。どちらの使用-n -20-n 20など
muru

何でもええ、構文は重要ではありません、私のポイントは非常に低いのnice値をsettngと非常に高い両方のプロセスのためにされたことは、私が何を望むかの結果を与えるものではありません
uray

2
@ user77710なに?「構文は重要ではない」?では、nicenessの値を設定していることをどのように確認できますか?
muru、2014

私は、上のプロセスのナイス値を見ることができるので、htopまたはtopまたはpsまたはものは何でも
uray

-1

これから来る人のためにniceストレスのある完全な例を示します。

  1. テストマシンには2つのCPUがあります。
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. インストールstressapt-get install stress
  2. ストレスへの優先度の低い呼び出しで2つのCPUをビジーにします。 nice -20 stress --cpu 2
  3. CPU使用率を確認するにはtop
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

これは、両方のCPUが完全に占有されていることを示しています。

  1. 優先度の高いシングルCPUストレスプロセスを開始します。 nice --20 stress --cpu 1
  2. CPUの使用状況をもう一度確認します top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

これは、シングルコアストレスプロセスが完全なCPUを取得する一方で、優先度の低いプロセスは両方とも残りの1 CPUを共有することを示しています

  1. 一方、上記のstress呼び出しをすべて終了し、単一の3プロセスstress --cpu 3をトリガーするだけで、それぞれに66%のCPUが割り当てられます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.