
rt
およびLinux カーネルに関する適切な情報が見つかりませんlowlatency
。
なぜそんなことをするのか不思議だない低レイテンシカーネルを使用したい。
また、具体的な違いが何かわかる方がいらっしゃいましたら、それもありがたいです。
答え1
「generic」、「lowlatency」(Ubuntu での設定)、RT(「real-time」)などのさまざまな設定は、すべてスループットとレイテンシのバランスを取るためのものです。汎用カーネルはレイテンシよりもスループットを重視し、その他のカーネルはレイテンシよりもスループットを重視します。したがって、低レイテンシよりもスループットを必要とするユーザーは、低レイテンシ カーネルを選択しません。
一般的な構成と比較して、低レイテンシ カーネルでは次の設定が変更されます。
- IRQはデフォルトでスレッド化されており、より多くのIRQ(まだ全てIRQ はプリエンプト可能で、優先順位を付けて CPU アフィニティを制御することもできます。
- カーネル全体でプリエンプションが有効になっている(
CONFIG_PREEMPT
の代わりにCONFIG_PREEMPT_VOLUNTARY
); - のレイテンシデバッグツールが有効になっているため、ユーザーはどのカーネル操作が進行を妨げているかを判断できます。
- タイマー周波数は1000 Hzの代わりに250 Hz。
RTカーネルは追加パッチの数メインラインカーネルへのパッチと、いくつかの設定の調整。これらのパッチの目的は、ロックを削除または分割することでプリエンプションの機会を増やし、カーネルが中断不可能なタスクの処理に費やす時間を減らすことです(特に、ログメカニズムを改善し、その使用を減らすことで)。これらすべての目標は、カーネルが期限を守る、つまり何かを処理する必要があるときに、他の処理でビジー状態にならないようにします。これは、高スループットや低レイテンシと同じではありませんが、レイテンシの問題を修正することは役立ちます。
ほとんどのディストリビューションでデフォルトで設定されている汎用カーネルは、「賢明な」妥協案となるよう設計されています。つまり、単一のタスクが長時間システムを独占できないようにし、タスクが適度に頻繁に切り替えられるようにしつつ、スループットを犠牲にしないようにします。これは、カーネルがタスクを切り替えるかどうか (カーネル内またはカーネル外) の検討や割り込み処理に費やす時間が長くなるほど、システム全体が「作業」に費やせる時間が短くなるためです。この妥協案は、リアルタイムのオーディオやビデオ処理など、遅延に敏感なワークロードには不十分です。これらのワークロードでは、低遅延カーネルはスループットをいくらか犠牲にして、遅延を低くします。また、リアルタイム要件の場合、リアルタイム カーネルは、スループットを犠牲にして、可能な限り多くの低遅延ブロッカーを削除します。
Linux の主流ディストリビューションは、主にサーバー上にインストールされます。サーバーでは、従来、レイテンシはそれほど重要視されていませんでした (ただし、パーセンタイル パフォーマンス分析を行い、上位パーセンタイルのパフォーマンスを気にするなら、同意しないかもしれません)。そのため、デフォルトのカーネルは非常に保守的です。デスクトップ ユーザーは、カーネル自体のドキュメントで提案されているように、低レイテンシ カーネルを使用することをお勧めします。実際、低レイテンシ カーネルが使用されるほど、その関連性に関するフィードバックが増え、一般的に適用可能な改善をデフォルトのカーネル構成に取り入れるのに役立ちます。RT カーネルについても同じことが言えます (多くの RT パッチは、いずれは主流カーネル向けに意図されています)。
このトピックに関するプレゼンテーションかなり多くの背景情報を提供します。
Linuxカーネルのバージョン5.12以降では、「ダイナミックプリエンプション」有効にすることができます。これにより、デフォルトのプリエンプションモデルをカーネルコマンドラインで上書きすることができます。preempt=
パラメータ。現在、none
(サーバー)、voluntary
(デスクトップ)、full
(低遅延デスクトップ) をサポートしています。
答え2
Stephen Kitt 氏は、構成とバランス、そして技術的なパラメータのすべてについて説明しました。私は、直感的な違いを少しだけ示したいと思います。
あなたはサファリでジープに乗って地形を走っています。獲物は走っています。獲物が照準線に入ったら、引き金を引いてライフルを撃ちます。計算は簡単です。獲物が照準線に入っている=ヒット、獲物が照準線に入っていない=ミスです。低遅延- その後回復し、ライフルを再装填し、別の獲物を見つけます。余分なスピードは必要ありませんし、規則性も必要ありません。レイテンシーすべてであります。
あなたはSafariからビデオを変換しています。それは長く、何時間もかかります。特定のフレームがいつ処理されるか、いくつかのフレームが他のフレームよりも処理に時間がかかるかどうかは気にしません。できるだけ早くプロセスを終わらせる必要があります。スループット労働時間が減るということ、それ以外は関係ない
受信しているのは電信信号です。ショート、ロング、スペースだけです。モールス信号は解読が簡単で、各パルスがいつ始まったのか、いつ終わったのかを正確に知る必要はありませんが、保証、あなたがする見逃さないいずれか1つが必要ですリアルタイム(遅いかもしれない、電信はそれほど速くはないが、規則的でなければならない
この3つの例では、明らかに1つだけを選択していますレイテンシー、スループットまたは規則性明らかな理由により、他の 2 つを犠牲にします。3 つすべてを同時に実現できない場合は、1 つだけ低レイテンシが本当に必要になります。
答え3
簡単に言うと:
- 定期的に PC に作業を行わない場合は、低遅延カーネルが最適です。
- PC の CPU を集中的に使用するタスクを常に実行する必要がある場合は、汎用カーネルが最適です。
- ブラウジング、ビデオの再生、音楽の再生などに PC をカジュアルに使用するだけであれば、低遅延が最適です。
- ゲームをプレイする場合、低レイテンシと汎用の理論的な違いは、レベル読み込みを除くすべてのシナリオで低レイテンシが勝つということになりますが、これは SSD の有無と SSD の品質に大きく依存します。基本的な SSD は 1 倍の速度で動作しますが、最高の PCI-Express SSD は 6 倍の速度です。従来のハード ドライブは 0.1 倍の速度です。つまり、SSD は従来のハード ドライブよりも 60 倍高速になる可能性があります。
基本的に、汎用カーネルは最短時間で最大の作業を完了しますが、低レイテンシカーネルは PC の応答性を最も高めます (カーネルまたはシステムにバグが発生しないことを前提とします)。
ほとんどの人にとって、低レイテンシ カーネルが最も理にかなっています。ただし、PC に常に多くの作業を実行させる場合は、汎用カーネルが適しています。
別の言い方をすると、90% の時間ですべてのコアの CPU 負荷が 60% 未満であれば、低レイテンシ カーネルが適しています。一方、すべてのコアの CPU 負荷が 80% 以上、90% 以上であれば、汎用カーネルが適しています。
クイズ: ベンチマークでより良いスコアを獲得できるカーネルはどれですか? レイテンシがベンチマーク パラメーターとして無視される限り、ジェネリックが常に勝利しますが、レイテンシが低いと、委任する準備ができているタコがそばにいるようなものです。
答え4
トレードオフがあるからです。プロセスの切り替えや割り込みの開始/終了には時間がかかります。たとえば、スケジューラを 250Hz ではなく 1000Hz で実行すると、タイマー割り込みが発生し、プロセスの切り替えが 4 倍の頻度になる可能性があります。これにより、プロセスの実行がより定期的に許可されるため、プロセスの反応が速くなります。ただし、人間にとっては違いに気付かないかもしれません (250Hz は 4 ミリ秒ごとを意味し、これはすでに人間の反応時間よりもはるかに高速です)。
処理能力または I/O スループットの合計には制限があり、スケジューラを頻繁に呼び出すと、その一部が無駄になるだけです。