none
ndis.sysのCore割り当て RRS feed

  • 質問

  •  サーバーから画像をネットワークで受信して、クライアント側で画像処理して動画表示するシステムを作成しています。

    サーバーからは33msec(1/30)毎に画像が出力され、クライアント側でこのデータを受信して、画像処理しています。画像処理はパイプライン構造をしており、マルチスレッド動作しております。6コアのCPU搭載のCPUを使用しているのですが、画像データを受信するDLLの挙動をXperfなどで観測すると、画像データを受信する仕事をしている時だけ、ndis.sysが常にCore0に割り当てられて動作しています。

    画像通信は負荷の軽い仕事で、アイドル状態の場合が多いのですが、このときは、コア0以外にも割り当てられているのですが、受信動作をするときだけ、常にcore0でndis.sysが動作しています。これはndis.sysの仕様なのでしょうか?複数のネットワークカードで試してみましたが、みな同じ症状を示します。

     OSはWindows7 Proです。

     ご存知の方がいましたら、是非、教えてください。

    • 移動 星 睦美 2013年9月18日 5:13 Visual C++
    2013年9月18日 4:40

回答

すべての返信

  • フォーラム オペレーターの星 睦美です。
    yoshimartina さん、投稿ありがとうございます。

    Windows7 とネットワーク ドライバ 関連の情報が集まりやすいのではないかと思いますので、私のほうでWindows クライアント開発 - 全般 フォーラム に質問を移動させていただきますね。

    ※フォーラムで役立つ回答がありましたら、投稿者からの[回答としてマーク]をお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2013年9月18日 5:33 修正
    2013年9月18日 5:12
    • 回答の候補に設定 星 睦美 2013年9月27日 4:49
    • 回答としてマーク 星 睦美 2013年10月1日 2:32
    2013年9月19日 2:11
  • 今回は私のほうでも何か関連した情報がないか探してみました。
    以下のTechNet ブログのReceive Side Scaling (RSS)の説明が参考になるのではないかと思いますので、ご紹介します。

    (参考情報)
    予期せぬ挙動が!? 新機能 Scalable Networking Pack をご存知ですか?:

    yoshimartina さんが質問されているように、Windows Server 2008 以降の OS (Windows Vista、Windows 7、Windows Server 2008 R2、Windows 8、Windows Server 2012) では、ネットワーク アダプターに関しては、複数のプロセッサに処理を分散する RSS (Receive-side Scaling) 機能があります。

    RSS を有効にして利用することにより、ネットワーク処理が複数のプロセッサに分散されるようになりますので、yoshimartina さんの環境でRSS 機能が有効化されているかどうか確認してみてはいかがでしょうか?

    ※RSS が有効となるには、NIC が NDIS 6 のインターフェースをサポートしていなければなりません。かつ、ハードウェアが、複数プロセッサでの受信処理をサポートしていること (MSI-X 機能) が必要です。
    また、NDIS がオフロード機能全体の有効/無効を決定するタスクオフロード (TaskOffload) が有効でなければなりません。

    以下のコマンドにて、タスクオフロードが有効になっていることを確認できます。
      netsh interface ipv4 show global
      netsh interface ipv6 show global

    タスクオフロードを有効にする方法。
      netsh interface ipv4 set global taskoffload=enabled
      netsh interface ipv6 set global taskoffload=enabled

    RSS が有効になっているかを確認する方法。
      netsh interface tcp show global

    RSS を有効にする方法。
    netsh interface tcp set global rss=enabled

    こちらの情報がお役にたちましたら幸いです。


    フォーラム オペレーター 星 睦美 - MSDN Community Support



    • 編集済み 星 睦美 2013年9月20日 4:44 編集
    • 回答の候補に設定 星 睦美 2013年9月25日 5:06
    2013年9月20日 4:43
  •  ご返事が遅れて申し訳ないです。

     使用PCにおいて、RSS機能が有効化されていることは確認済みです。NICもRSS対応です。

     しかし、通信中にNdis.sysがCore0で動作する状況は変わりません。

     ここで質問ですが、RSSは、通信量の多いサーバーなどで、CPU負荷をマルチコアで分散するシステムのようですが、逆に通信量が少ない時は、RSSが有効でも、TCP/IPの受信動作は固定のコアで動作するというようなことはないでしょうか?

     以上よろしくお願いいたします。

    2013年9月27日 0:25
  • yoshimartina さん、返信ありがとうございます。

    さきにお馬鹿 さんからの返信でWindows 7 と Windows Server 2008 R2 でのプロセッサの電源管理 をご紹介いただきました。その中のコア保留(core parking) に関する説明が参考になるのではないかと思います。

    コア保留に関しては以下のようなブログもありますので、参考までにご紹介しておきます。

    Windows 7 で Core Parking を利用する方法:

    Windows 7 のOS 機能に関して疑問な点やさらに情報が必要な場合には、開発者向けのMSDN フォーラムよりも TechNet -Windows 7 全般 フォーラム で関連した知識をもつユーザーと情報交換することができると思います。
    よろしければご活用ください。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2013年9月27日 5:19 改行
    2013年9月27日 5:18