私のネットワークインターフェイスがあまりにも多くのパケットを受信し、シングルコアプロセッサがあるとしましょう。
継続的にコアを停止し、基本的にCPUを排他的にするのを防ぐことは何ですか(半分、半分、半分)?
答え1
仕事量が多すぎると一番下半分はSoftirqd:ksoftirqdの形で、カーネルスレッドで実行されるため、他のプロセスと比較して「プロセス」CPU割り当てのみを受け取ります。この問題は、特にあなたが言及したネットワークケースのために2016年頃に修正されました。
https://lwn.net/Articles/687617/
私はSoftirqが既知のすべてのパケットを処理するまで上位半分を再度有効にする必要はないと思います。ただし、これはNAPI専用です。 LWN.netでNAPIに関する以前の記事を見ることができます。
https://lwn.net/Articles/30107/
https://lwn.net/Articles/214457/
https://lwn.net/Articles/244640/
ドライバは、以前の2.4テクノロジを使用してネットワークスタックに接続でき、NAPI変更の利点を享受することはできません。カーネルにNAPIを追加しても、以前のバージョンとの互換性は損なわれません。ただし、NAPI を使用するには、次の機能を使用できる必要があります。
A)DMAリングまたはソフトウェアデバイスにパケットを格納するのに十分なRAM。
B)パケットをスタックに送信できる割り込みやイベントをオフにする機能。