実際にプロセスの優先順位を決めるか、Linuxにプロセスの優先順位を尊重させる方法はありますか?

実際にプロセスの優先順位を決めるか、Linuxにプロセスの優先順位を尊重させる方法はありますか?

他のオペレーティングシステムと同様に、-20(最も優先順位)から19(あまり優先順位)までのプロセス優先順位があることを知っていますが、Linuxはこれを無視しているようです。

今はバックグラウンドでカーネルを構築しています(makeプロセスの優先順位は0ですが)。時間がかなりかかるので、何かを見てみることにしました。そのため、VLC(Core2 2.6GHz CPU時間の約30%)でかなりトリッキーなH264ビデオを開きました。 。

そのため、VLCの使用優先順位を変更することにしrenice、特にPulseAudioを見て-11同等の位置に置くことにしましたsudo renice -11 -p VLC_PROC_#

同じことが起こり続け、-20に設定しましたが、まだ視覚的なアーティファクトが見え続けました。

もしそうなら、Linuxが実際にいくつかの0プロセスよりも-20プロセスの優先順位を指定し、必要なものをすべて提供しないのはなぜですか? Linuxでプロセスの優先順位を実際に指定する方法はありますか?

万が一に備え、ここではXFCEをデスクトップ環境として使用して64ビットArchを実行しています。

編集する:ソースコードが/tmpあり、すべてがすでにRAMにある間、カーネルのコンパイルが行われました。tmpfsRAM使用量が60%にも達せず、ページングも発生しません。

上記のシナリオは1つだけです。テストケース私は、Linuxがなぜこのように動作するのか、そして真の優先順位を得る方法があるのか​​に興味があります。

答え1

reniceこれはプロセスの優先順位に影響します。しかし、経験したように、プロセスの優先順位が高いからといって、必要なすべてのリソースがあるわけではありません。優先順位が高いほど、プロセスがリソースを獲得する可能性が高くなります。

reniceCPU 時間にのみ影響します。したがって、2つ以上のプロセスがCPU時間を置いて競合する場合にのみ影響します。制限要素がCPU時間ではなくI / O帯域幅の場合、nice値は何の影響もありません。おそらくあなたの場合、コンパイルは多くのディスク帯域幅を使用し、vlcはディスクからデータを十分に高速に読み取ることができません。努力するionice交換または補完してくださいnice

これを頻繁に行うと、ビデオと編集内容が異なるディスクにある場合、より良い結果が得られます。また、ビデオをディスクキャッシュにプリロードしたり、cat /path/to/video.file >/dev/nullオフセット456 MBから始めて123 MBを読み取ったりすると、tail -c +456m | head -c 123m /path/to/video.file >/dev/nullより良い結果が得られます。ただし、RAMが多いと、コンパイル時にキャッシュスペースが回復する可能性があります。メモリにビデオがあるかどうかを確認するには、仮想ディスクを作成してビデオをここにコピーします。

答え2

調整しようとしたときにプロセス優先順位が機能する唯一の要素ではありません。ユーザー体験。カーネルコンパイルはI/O負担が大きいことです。小さなファイルで多くの読み取り/書き込みが行われているため、ファイルシステムが大幅に増える可能性があります(時にはこれが起こる理由があります)。単独でベースラインとして使用)、特にマルチプロセッサシステムではそうです。 RAMが十分な場合は、tmpfsでカーネルを少なくとも部分的にコンパイルしてください。そこにソースツリーを入れるか(効果的にキャッシュに事前にインポートする)、get thereを使用して出力を送信します。

make O=/dev/shm ...

tmpfsまたは、カーネルオブジェクトファイルを収容するのに十分な大きさのインスタンスをマウントすることにした場合は、ギガバイトの範囲に簡単に属します。

これに加えて、VLCに-cacheデータの内部キャッシュを要求するために使用できるキャッシュ機能があることを確認することもできます(たとえば、MPlayerにはオプションがあるようです)。これにより、必要に応じてデータをインポートする必要はありませんが、使用可能な場合はデータをインポートできます。

もう1つの点は、マークがXサーバーを介して実行されることです。優先順位も高くする必要があります(該当する質問の下にWumpus Q. Wumbleyの説明を参照)。

他の2つのオプションは、cgroupおよび/またはRTスケジューラを使用することです(最初のオプションについては、以下を参照してください)。cgroupを使用したアプリケーション優先順位の制御、後者の場合は、たとえば、次を参照してください。Gentoo命令)。

最後に、不要なサービスをオフにしてシステムを少し最適化することもできます。個人的には、PulseAudioが最初の選択だと思います。

しかし、あなたが説明する内容は、優先順位の高いI/Oが進んでいるように聞こえます。私の考えでは、あなたが過度のスワップを経験しているようです。 tmpfsは強制的にスワップアウトされませんか?そのような場合、少なくともioreniceはあまり役に立ちません。

答え3

他の人が言ったように、メモリ帯域幅を含むシステムの多くは影響を受け、システムの他の部分にも独自のスケジュールと優先順位があります。

いつでもchrt -i 0コンパイルに実際のアイドル優先順位を与えることができます。 http://linux.die.net/man/1/chrt

または、cgroupを使用してコンパイルを制限します。 http://kennystechtalk.blogspot.co.uk/2015/04/throttle-cpu-usage-with-linux-cgroups.html

またはすべてを投げてください:

eatmydata cgexec -g cpu:throttled chrt -i 0 ionice -c3 nice -n19 /path/to/compile-script >/dev/null

注:使用nice -n19時には影響しませんが、chrt -i 0害はありません。

私の古いP4はVLCを乱すことなく同じことをすることができます。

関連情報