大量のネットワークトラフィックを送受信するアプリケーションがありますが、割り込みが原因で最大パフォーマンスを下回っています。 20Mbpsの入力と20Mbpsの出力(1 Gbps回線上)では、ネットワーク割り込みはコア0の100%を使用し、オペレーティングシステムはフリーズします(Windowsパフォーマンスアナライザーで確認)。ネットワークカード(BroadCom)のRSS機能を使用しても、状況は改善されませんでした。
レジストリを介して特定の割り込みのアフィニティを編集できることを理解しています(Linuxで行うようにネットワーク割り込みに2番目のコアを使用することを目的としています)が、編集する適切なキーを見つける方法がわかりません。他のアドバイスは大歓迎です。
システムに固有の具体的な回答をどこでどのように見つけることができるかについての手がかりとともに、部分的な回答を提供します。
この関数は、オペレーティングシステムのNDIS
バージョンと密接に関連しています。
初期の参照は、HKLM\SYSTEM\CurrentControlSet\Services\NDIS\Parameters
キーの ProcessorAffinityMask パラメーターです。これは、Windows2000でネットワークアダプタドライバの割り込みを処理するために使用できるようにするプロセッサを設定します。
Receive Side Scaling
サブシステムは、Windows 2008の ここ で説明されているように、ネットワーク処理キューを使用可能なプロセッサにマップするために、後のバージョンで進化しました。
ここ はWindows 2012 R2(NDIS 6.40だと思います)のRSS
のドキュメントであり、手がかりは最初のフレーズで示されています。
受信したデータを効率的に処理するために、ミニポートドライバーの受信割り込みサービス機能は、遅延プロシージャコール(DPC)をスケジュールします。 RSSがない場合、通常のDPCは、DPCコール内で受信したすべてのデータを示します。したがって、割り込みに関連するすべての受信処理は、受信割り込みが発生するCPUで実行されます。
このリンク の終わりには、すべての6.xNDIS
バージョンの参照資料へのリンクがあります。これらの参照を使用して、特定のシステムの答えを見つけたり、Googleのあいまいさに対する正確な用語を特定したりできると思います。
質問が提供する情報(詳細ではありません)に基づいて、ドキュメントには何が表示されますか?
RSS
で使用できるように設定されたプロセッサセットの最初のプロセッサは、Windows 2008のHKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\NDIS\Parameters\RssBaseCpu
パラメータを使用して設定されます ここ 。うまくいけば、これはWindows 2012R2にも当てはまります。
同様に、RSS
で使用できるプロセッサの最大数は、説明されているようにHKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\Ndis\Parameters\MaxNumRssCpus
を使用して設定されます ここ 。
これを考えると、Win2008およびできればWin2012でも、RssBaseCpu
を1に設定し、MaxNumRssCpus
を1に設定すると、RSS
が正常にアクティブ化されたと仮定して、RSS
処理を2番目の論理CPUにロックします。 RSS
ステータスは、次のような管理コマンドプロンプトを使用してWindows内から確認できます。
netsh int tcp show global
文書化されているように ここ 。
このような状況を考えると、問題の原因がNICデバイスドライバーの記述が不十分であることが原因である可能性があります。 NICオフロードメカニズム(RSSが属する一般的なカテゴリ)、特にDellサーバー上のBroadcom統合NICおよび関連するドライバーでかなりの問題が発生しました。 4重チェックの構成に基づいてシステムが期待どおりに動作しない場合も、その可能性を追求することをお勧めします。