最近、ワークステーションでビデオをエンコードするために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 -
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?=AMD64
とCPUTYPE?=core2
を使用しています。プロセッサまたはブロックI/O機能の高負荷の下でベンチマークを行っていませんが、LANゲートウェイとしては問題なく機能しているようです。
単一の重い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ボックスはそれを備えており、非常に簡単に操作できます。
あなたは「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