私はビデオエンコーディングベンチマークアプリケーションを開発しています。私にとって奇妙なことは、このコマンドを使用するときはsudo chrt -r 99 VideoEncoding cfg
常にVideoEncoding cfg
。人々はプロセスのリアルタイム属性を変更する方が速いと思ったが、実際には遅いことがわかった。
誰かがこれを説明できますか?
PS:私はUbuntu 20.04 LTSでベンチマークを実行しています。
答え1
プロセスのリアルタイム属性を変更する方が速いと仮定
これは完全に間違っています。
リアルタイムポリシーに基づいてすべてのスケジュールをスケジュールすることは、正確で決定的な待ち時間、タスク間の同期を達成するのに役立ちます。しかし、無料のランチはないのでスループットを犠牲にして。
CPU集中的なタスク(ビデオエンコーディングタスクとは何ですか)の特定の場合に必要なものは次のとおりです。スループット!
したがって、SCHED_RRを使用してこれらのタスクをスケジュールすると、システム内のすべてのもの(ベンチマークアプリケーションを含む)のパフォーマンスのみが低下します。
そして、CPU集約的なタスクがマルチスレッドであるほど(最新のCPU集約的なタスクである可能性が高い)、パフォーマンスが低下します。
再最適化はより良いパフォーマンスを達成するのに十分でなければならず、極端な場合は可能な限り最高のパフォーマンスが必要な場合はいくつかのアイドルCPUでタスクをスケジュールします。
ただし、可能な限り高い優先順位でRTを予約しないでください。問題が発生した場合、ハードウェアのリセット以外は何もできません。
BTW 2は言うまでもなく、同じシステムで実行されているベンチマークアプリケーションでRTシステムをベンチマークすることは言うまでもありません。
答え2
プロセスのリアルタイム属性を変更する方が速いと仮定すると、
いいえ、それは本当ではありません!
プロセスを「リアルタイム予約」に設定すると、速度が速くなるのではなく、プロセス予約間の最大時間が保証されます。これにより、より多くのコンテキスト切り替えが発生し、システムの速度が効果的に遅くなる可能性があります。