組み込みLinux環境で[〜#〜] napi [〜#〜]機能をテストしようとしています。 'pktgen'を使用して多数のパケットを生成し、/ proc/interruptsでネットワークインターフェイスの割り込みカウントを確認しようとしました。
割り込みカウントは、生成されたパケットよりも比較的少ないことがわかりました。また、割り込みの減少を観察できるように、 'netdev_budget'の値を1から1000(デフォルトは300)に調整しようとしています。 netdev_budgetが増加したときにカウントします。
ただし、netdev_budgetを増やしても効果がないようです。割り込みは、netdev_budgetを300に設定して観察された割り込みカウントの割り込みと似ています。
だからここに私の質問があります:
どんな助けでも大歓迎です。
前もって感謝します。
私は Linuxネットワークチューニングに関する包括的なブログ投稿 を作成しました。これは、Linuxネットワークスタックの監視、チューニング、および最適化(NAPIの重みを含む)に関するすべてを説明しています。見てください。
注意:一部のドライバーは、NAPIの起動時にNIC)からIRQを無効にしません。ドライバーのハードIRQハンドラーを調べて、ハードIRQが無効になっているかどうかを確認することで、これを確認できます。
ブログ投稿および以下に記載されているように、ハードIRQが再度有効になる場合があることに注意してください。
あなたの質問に関する限り:
netdev_budget
を増やすと、NET_RXsoftirqが処理できるパケットの数が増えます。処理できるパッケージの数も制限時間によって制限されており、調整できません。これは、NET_RX softirqがCPU使用率を100%消費しないようにするためです。デバイスが時間割り当て中に処理するのに十分なパケットを受信しない場合、hardirqは更新可能になり、NAPIは無効になります。
NICがサポートされている場合は、NICのIRQ合体設定を変更してみることもできます。これを行う方法とこれが正確に何を意味するかについての詳細は、上記のブログ投稿を参照してください。
/proc/net/softnet_stat
ファイルに監視を追加する必要があります。このファイルのフィールドは、処理されているパケットの数、時間切れかどうかなどを把握するのに役立ちます。
私がそうするかもしれないならば、あなたが考慮すべき質問:
なぜあなたのhardirqレートが重要なのですか?おそらく直接問題ではありません。 NICドライバーのhardirqハンドラーは、実行する作業をできるだけ少なくする必要があるため、多くの実行はシステムにとっておそらく問題ではありません。問題がある場合は、見た目どおりに慎重に測定する必要があります。それでも、IRQ合体設定とIRQ CPUアフィニティを調整して、処理を分散し、それぞれNICによって生成され、特定のCPUによって処理されるhardirqの数を変更できます。
おそらく、パケット処理のスループットとパケット処理の遅延のどちらに関心があるかを検討する必要があります。どちらが問題であるかに応じて、ネットワークスタックを適切に調整できます。
Linuxネットワークスタックを完全に調整および最適化するには、各コンポーネントを監視および調整する必要があります。それらはすべて絡み合っており、スタックの1つの側面だけを監視および調整することは困難です(多くの場合、正しくありません)。