Linuxカーネルrt
およびlowlatency
に関する適切な情報が見つかりません。
なぜ誰がnotが低レイテンシのカーネルを使用したいと思うのでしょうか。
また、具体的な違いを誰かが教えてくれるなら、それも素晴らしいことです。
「一般」、「低レイテンシ」(Ubuntuで設定)、RTなどのさまざまな構成はすべて、スループットとレイテンシのバランスをとることを目的としています。一般的なカーネルは、レイテンシよりもスループットを優先し、他のカーネルはスループットよりもレイテンシを優先します。したがって、低レイテンシよりもスループットが必要なユーザーは、低レイテンシカーネルを選択しません。
一般的な構成と比較して、低遅延カーネルは次の設定を変更します。
CONFIG_PREEMPT
の代わりに CONFIG_PREEMPT_VOLUNTARY
);RTカーネルは、メインラインカーネルに 多数のパッチ を追加し、さらにいくつかの設定を微調整します。これらのパッチのほとんどの目的は、ロックを削除または分割することにより、プリエンプションの機会を増やし、カーネルが無停電タスクの処理に費やす時間を削減することです(特に、ロギングメカニズムを改善し、使用を減らすことで)。 。これらすべての目標は、カーネルが 締め切りに間に合わせる 、ieが何かを処理する必要がある場合に、それを確実にすることです、他のことをするのに忙しくない。これは、高スループットや低レイテンシと同じではありませんが、レイテンシの問題を修正すると役立ちます。
ほとんどのディストリビューションでデフォルトで設定されている汎用カーネルは、「賢明な」妥協案として設計されています。単一のタスクがシステムを長時間独占できないこと、およびタスクがかなり頻繁に切り替わることを保証しますが、スループットを損なうことはありません。 —カーネルが(カーネルの内部または外部で)タスクを切り替えるか、割り込みを処理するかを検討するのに費やす時間が長いほど、システム全体が「作業」に費やす時間は短くなります。その妥協は、リアルタイムのオーディオやビデオの処理など、レイテンシの影響を受けやすいワークロードには十分ではありません。これらの場合、低レイテンシカーネルは、スループットを犠牲にしてレイテンシを低くします。また、リアルタイム要件の場合、リアルタイムカーネルは、より多くのスループットを犠牲にして、可能な限り多くの低遅延ブロッカーを削除します。
Linuxのメインストリームディストリビューションは主にサーバーにインストールされ、従来はレイテンシはそれほど重要視されていませんでした(ただし、パーセンタイルパフォーマンス分析を行い、上位パーセンタイルパフォーマンスに注意を払うと、同意できない場合があります)。したがって、デフォルトのカーネルはかなり保守的。カーネルのドキュメントで提案されているように、デスクトップユーザーはおそらく低遅延カーネルを使用する必要があります。実際、レイテンシの低いカーネルを使用すればするほど、関連性に関するフィードバックが多くなり、デフォルトのカーネル構成に一般的に適用可能な改善が得られるようになります。同じことがRTカーネルにも当てはまります(RTパッチの多くは、ある時点で、主流のカーネルを対象としています)。
このトピックに関するプレゼンテーション は、かなり多くの背景を提供します。
スティーブン・キットは、構成とバランス、そしてすべてのニースを技術的パラメーターで説明しました。私はほんの少し直感的な違いを提供したいと思います:
あなたはサファリに乗っており、ジープで地形を走っています。獲物が走っている。獲物が十字線の中にいるとき、トリガーを引いてライフルが発射します-計算は簡単です-十字線の獲物=ヒット、十字線のない獲物=ミス-あなたは必死に必要です低遅延-その後回復します、ライフルをリロードし、別の獲物を見つけてください-余分な速度の必要性、規則性の必要性はありません。 レイテンシがすべてです。
あなたはそのサファリからビデオを変換しています。長くて数時間かかります。特定のフレームが処理されるときや、一部のフレームの処理に他のフレームよりも時間がかかるかどうかは関係ありません。できるだけ早くプロセスを完了する必要があります-より良いスループットは時間数が少ないことを意味し、他には何も問題ありません
電信-ショート、ロング、スペースのみ-モールスは解読が簡単で、各Pulseがいつ開始または終了したかを正確に知る必要はありませんが、保証が必要ですミスしていないそれらのいずれか-必要リアルタイム(遅いかもしれませんが、電信はそれほど速くありませんが、それは定期的でなければなりません
この3つの例では、明らかな理由により、latency、throughputまたはregularityのいずれか1つのみを明確に選択し、他の2つを犠牲にします。そして、3つすべてを同時に使用できない場合は、1つだけで低レイテンシが本当に必要です。
トレードオフがあるからです。プロセスの切り替えや、割り込みの開始/終了には時間がかかります。たとえば、スケジューラを250Hzではなく1000Hzで実行すると、タイマー割り込みが発生し、プロセスを4回頻繁に切り替える可能性があります。これにより、プロセスの実行がより定期的に許可されるため、プロセスの反応が速くなります。ただし、人間としてはおそらく違いに気付かないでしょう(250Hzは4msごとを意味し、人間の反応時間よりもはるかに高速です)。
処理能力またはI/Oスループットの合計量は制限されており、スケジューラを頻繁に呼び出すことは、その一部を無駄にすることになるだけです。
素人の言葉で:
基本的に、汎用カーネルはほとんどの作業を最短時間で実行しますが、低レイテンシカーネルはPCの応答性を最も高くします。カーネルまたはシステムでバグが発生していないと仮定します。
ほとんどの人にとって、低遅延カーネルは最も理にかなっています。しかし、PCに常に多くの作業を任せている場合は、汎用カーネルが適しています。
すべてのコアでのCPU負荷の90%が60%未満の場合に別の言い方をすると、低レイテンシカーネルが適しています。一方、すべてのコアのCPU負荷が80%、90%、またはそれ以上の場合、汎用カーネルが適しています。
クイズ:どのカーネルがベンチマークでより良いスコアを出しますか?ベンチマークパラメータとしてレイテンシが無視されている限り、ジェネリックは常に競争に勝ちますが、レイテンシが低いということは、あなたの側でタコを委任する準備ができているようなものです。