web-dev-qa-db-ja.com

「Nice」が十分でない場合の対処方法(FreeBSD)

最近、ワークステーションでビデオをエンコードするためにx265を使用していますが、問題があります。Nice -n 20 x265を使用してビデオの優先順位を下げても、コンピューターのクロール速度が低下します。ランニング。すべてがまだ機能します、それはただ...遅いです!ターミナルに入力しているときに文字が表示されるまでに遅延が見られます。

私はこれと一緒に暮らす必要がありますか、それとも私が試すことができる他のいくつかのことがありますか?

EDIT:おそらく、以下は、Nice値が実際にx265に適用されていることの証拠として役立ちますか? NI列を見てください。

% ps -awux -O Nice | egrep "x265|PID"
USER      PID  %CPU %MEM     VSZ     RSS TT  STAT STARTED       TIME COMMAND            PID NI TT  STAT       TIME COMMAND
nobody  56654 789.3  3.7  785656  623384 11  SN+J 11:56PM    6:05.80 x265 --input-csp 56654 20 11  SN+J    6:05.80 x265 --input-csp i420 --bframes 5 -
8
gravitation

FreeBSDカーネルは、I/Oスケジューラのようなもの、つまり gsched を実装します。マニュアルページを確認すると、デバイス固有のIOスケジューラーです。個人的には、FreeBSDのリアルタイムアプリケーションに対する素晴らしい基調講演であり、既存のFreeBSDドキュメントを検索する大きな理由だと思います。 、率直に。

投機的ではありますが、おそらくルートパーティションのブロックデバイスがrrスケジューラを使用するように構成され、gschedを使用し、メディアファイルが別のブロックデバイスに保存されている場合、おそらくそれはオペレーティングを可能にするのに役立つかもしれませんI/Oのボトルネックがあっても、I/Oでより応答性の高い機能を発揮するシステムはありますか?

おそらく、プロセッサの優先順位の構成とともにgschedを適用すると、 rtprioおよび/またはidprio などの適用-プライマリオペレーティングシステムの応答性を向上させるのに役立つ可能性があります。メディアファイル処理からの高負荷の下で。

あるいは、CPU固有の最適化の下でコンパイルされたポートを使用して、プロセッサの帯域幅をさらに増やすことができる場合もあります。その効果に向けて、MACHINE_CPUARCHフィールドとCPUTYPEフィールドがあり、/etc/make.confに適用でき、ポートのビルドプロセス中に適用されます[ マニュアルページ ]。もちろん、ハンドブックには、FreeBSD [ ch.5 ]を使用したポートの構築に関する多くの指針が記載されています。私自身、古い東芝のラップトップでMACHINE_CPUARCH?=AMD64CPUTYPE?=core2を使用しています。プロセッサまたはブロックI/O機能の高負荷の下でベンチマークを行っていませんが、LANゲートウェイとしては問題なく機能しているようです。

3
Sean Champ

単一の重いI/O操作が、最初のデバイスで直接操作されていないものも含め、すべてのI/Oタックに関してカーネルのパフォーマンスに影響を与える場合があります。

  • I/Oスケジューリングの優先順位を制御する最初の間接的な方法は、すでに述べたプロセスのニースレベルの調整です。最近のLinuxでは、Nice値が19(つまり最大)のプロセスはデフォルトでベストエフォートクラスであり、優先度は(19 + 20)/ 5 = 7に等しくなります。クラス内で利用可能な最低の優先度。より一般的には、そのようなマッピング関数に従って[0,7]の範囲になります。

  • I/Oスケジューリングを制御するための、2番目の直接的でより強力な方法は、プロセスに割り当てられたI/Oスケジューリングクラスに手動で介入することです。これにより、プロセスを2つの追加クラスにも入れることができます。リアルタイムクラス、ベストエフォートレベル0よりも優先度が高く、アイドルクラス、優先度がベストよりも低い作業レベル7。これは理論的には、他のI/O操作がアイドルスケジュールのプロセス操作を待機できないことを保証します。 Niceコマンドと同様に、ioniceを使用すると、特定の優先度でプロセスを生成したり、既存のプロセスの優先度を変更したりできます。このツールと一般的なLinuxカーネルでのI/Oスケジューリングの詳細については、 ioniceのマニュアルページ を参照してください。

そうは言っても、ionice -c 3 x265 ...を使用してプロセスを起動しようとしましたか?

P.S。申し訳ありませんが、回答を投稿した後、質問の「FreeBSD」タグに気づきました。これはおそらく次のように分類されます。

FreeBSDにはI/Oスケジューラはないと思います。 Linuxボックスで作業を実行することを検討してください。Linuxボックスはそれを備えており、非常に簡単に操作できます。

2
Marco Solieri

あなたは「rctl」が欲しい

見る:

man rctl

これにより、ユーザーごと、プロセスごと、jailまたはログインクラスごとにリソースを割り当てることができます。例えば。

# user root, maximum reads of 400 transfers per sec (tps) per the whole user :
rctl -a user:root:readiops:throttle=400/user

# user root, maximum reads of 30Mb per sec (31,457,280 bytes) per the whole user :
rctl -a user:root:readbps:throttle=31457280/user
0