シーケンシャル ユーザー空間プログラム (ある種のメモリ集約型検索データ構造) があります。プログラムのパフォーマンス (CPU サイクル数として測定) は、基礎となるデータ構造のメモリ レイアウトとデータ キャッシュ サイズ (LLC) によって異なります。
これまでのところ、ユーザー空間プログラムは完全に調整されていますが、ユーザー空間コードをカーネルに (カーネル モジュールとして) 移動することでパフォーマンスが向上するかどうか疑問に思っています。カーネル空間でのパフォーマンスを向上させる次の要因が考えられます...
- システム コールのオーバーヘッドはありません (システム コールごとに得られる CPU サイクル数)。プログラムの起動時にメモリを割り当てることを除いて、プログラムでシステムコールをほとんど使用していないため、これはそれほど重要ではありません。
- スケジューリングを制御することで、カーネル スレッドを作成し、捨てずに特定のコアで実行することができます。
- kmallocメモリ割り当てを使用できるため、割り当てられたメモリをより詳細に制御でき、割り当てられたメモリを制御することでキャッシュの色付けをより正確に制御できる場合もあります。試してみる価値はありますか?
カーネルの専門家への質問...
- 上記のリストで、パフォーマンスをさらに向上させる要因を見落としていませんか?
- 試してみる価値はありますか、それともパフォーマンスが大幅に向上しないことは明らかですか?
- カーネルでパフォーマンスの向上が可能である場合、それがどれだけ向上できるかの推定値はありますか (理論上の推測)?
ありがとう。