web-dev-qa-db-ja.com

Windows Server 2012R2でのネットワーク割り込みのアフィニティの設定

大量のネットワークトラフィックを送受信するアプリケーションがありますが、割り込みが原因で最大パフォーマンスを下回っています。 20Mbpsの入力と20Mbpsの出力(1 Gbps回線上)では、ネットワーク割り込みはコア0の100%を使用し、オペレーティングシステムはフリーズします(Windowsパフォーマンスアナライザーで確認)。ネットワークカード(BroadCom)のRSS機能を使用しても、状況は改善されませんでした。

レジストリを介して特定の割り込みのアフィニティを編集できることを理解しています(Linuxで行うようにネットワーク割り込みに2番目のコアを使用することを目的としています)が、編集する適切なキーを見つける方法がわかりません。他のアドバイスは大歓迎です。

1
akonskarm

システムに固有の具体的な回答をどこでどのように見つけることができるかについての手がかりとともに、部分的な回答を提供します。

この関数は、オペレーティングシステムの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重チェックの構成に基づいてシステムが期待どおりに動作しない場合も、その可能性を追求することをお勧めします。

1
ErikE