web-dev-qa-db-ja.com

ギガビットネットワークインターフェイスは、CPUが25MB /秒に制限されています。スループットを最大化するにはどうすればよいですか?

NForceギガビットネットワークアダプターを搭載したAcerAspireR1600-U910Hを持っています。最大TCPスループットは約25MB/sであり、明らかにシングルコアIntel Atom 230;最大スループットに達すると、 CPU使用率は約50%〜60%であり、これはハイパースレッディング対応のCPUであることを考慮すると、完全な使用率に相当します。

同じ問題がWindows XPとUbuntu8.04の両方で発生します。Windowsでは、最新のnForceチップセットドライバーをインストールし、省電力機能を無効にし、チェックサムオフロードを有効にしました。Linuxでは、デフォルトのドライバーチェックサムオフロードが有効になっています。NvidiaのWebサイトで利用できるLinuxドライバーはありません。

ethtool -k eth0は、チェックサムオフロードが有効になっていることを示しています。

Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off

以下は、ネットワークがアイドル状態のときのpowertopの出力です。

Wakeups-from-idle per second : 61.9     interval: 10.0s
no ACPI power usage estimate available

Top causes for wakeups:
  90.9% (101.3)       <interrupt> : eth0
   4.5% (  5.0)             iftop : schedule_timeout (process_timeout)
   1.8% (  2.0)     <kernel core> : clocksource_register (clocksource_watchdog)
   0.9% (  1.0)            dhcdbd : schedule_timeout (process_timeout)
   0.5% (  0.6)     <kernel core> : neigh_table_init_no_netlink (neigh_periodic_timer)

そして、約25MB/sの最大スループットに達したとき:

Wakeups-from-idle per second : 11175.5  interval: 10.0s
no ACPI power usage estimate available

Top causes for wakeups:
  99.9% (22097.4)       <interrupt> : eth0
   0.0% (  5.0)             iftop : schedule_timeout (process_timeout)
   0.0% (  2.0)     <kernel core> : clocksource_register (clocksource_watchdog)
   0.0% (  1.0)            dhcdbd : schedule_timeout (process_timeout)
   0.0% (  0.6)     <kernel core> : neigh_table_init_no_netlink (neigh_periodic_timer)

1秒あたり20000の割り込みに注意してください。これがCPU使用率が高くスループットが低い原因である可能性がありますか?もしそうなら、どうすれば状況を改善できますか?

参考までに、ネットワーク内の他のコンピューターは通常、50 + MB/sで問題なく転送できます。 Core 2 CPUを搭載したコンピューターは、110MB /秒で転送する場合、1秒あたり5000回の割り込みしか生成しません。割り込みの数は、Atomシステムの約20分の1です(割り込みがスループットに比例してスケーリングする場合)。

TCPウィンドウサイズを大きくすると問題は解決しますか?それはOSの一般的な設定ですか、それともアプリケーション固有ですか?

そしてマイナーな質問:eth0に使用されているドライバーを見つけるにはどうすればよいですか?

3
netvope

ネットワークカードのバッファはかなり小さく、割り込みモードで動作しているようです。NIC&ドライバでサポートされている場合は、ポーリングに切り替えることでスループットを向上できる可能性があります。

ただし、より大きなバッファを使用してNICに切り替えることなく、問題を完全に解決できない可能性があります。これは、そのハードウェアではおそらく不可能です。

2
Eric

Eth0に使用されているドライバーを確認するにはどうすればよいですか?

dmesgの出力を調べると役立つ場合があります。

これは私が答えをタイプするこのコンピュータで私が得る特定のケースです:

$ dmesg | grep ethernet
forcedeth: Reverse Engineered nForce ethernet driver. Version 0.62.

場合によっては、NICサポートは(モジュールとしてではなく)カーネルに直接組み込まれます。したがって、少なくともlsmodの出力には表示されません。

1
geek

TCP Optimizer を使用してみてください。最適化された推奨事項を選択すると、デフォルトのインストールTCP設定よりもスループットが一貫して向上します。

0
Lawrence Dol