そこらの2Ghzマシンで、1秒間に10回ほど2000クライアント程と50バイトぐらいずつ交換出来ないだろうかと思いサーバープログラムを作成しています。
書籍の「Winsock 2.0」やMSのサンプルを見ながらI/O完了ポートを利用して実装してみました。
データ交換は出来るようになったのですが、サーバーとクライアントを同じPCで実行している時と、他のマシンと分けて実行した時では、ReadFile,WriteFileの処理クロックが変わってしまいました。
後者では倍ほど遅くなりました。
チューニング目的で、接続クライアントの状況が変わるとCPU占有率も変わるのか、それとも単にLANの使用目的でシステムがCPUを使用していたのか知りたくなりました。
LANのチップはSisのマザーにオンチップのRealTechのRTL-8139(A)でOSはWin2kProです。
winのシステム内部にも疎くて、ボトルネックがあるかも分からないのですが、高速化の方法があったら情報を下さい。

クライアントの送受信間にSleepを入れたりしてみましたが、CPU使用率は変わりませんでした。(非同期化はOK?)
クロックの測定はrdtsc命令を使って測っています。
他スレッドが完了ポートキューを見張っていますが、測定ではデータ処理は行ってません。
サーバーからは1クライアントにつき秒間320バイト、逆は秒間140バイト送信しています。
プロセスが別PC上だと、サーバー側では1秒間に100クライアント当たりのRealFile、WriteFile実行に90MClock必要でした。
理由がわからないのですが、1クライアント当たり秒間90万Clock、1通信当たり9万Clockも使用しています。
32バイトを転送し、14バイトの受信を行うソケットの処理に9万clockも必要なんでしょうか?
情報不足の突っ込みお願いします。