我们使用具有独立客户端和服务器程序的数据库,它们使用 RPC 相互通信。我们有一台运行 Windows Server 2003 SP2 的计算机和六台运行 Windows 7 Pro 32 位的工作站。网络是一个简单的 100Mbps 网络,带有一个网络交换机。
服务器计算机和两个工作站都配有 Gigabyte G31M-ES2L 主板,该主板集成了 Atheros 网络控制器。其他工作站都配有 Gigabyte H61MA-D2V 主板,该主板集成了 Realtek 网络控制器。
我们发现,配备 Atheros NIC 的计算机的数据库性能非常好,但配备 Realtek NIC 的计算机的数据库性能非常差。
我认为问题与数据库程序本身有关,因此我决定使用程序 RpcPing.exe 来测试 RPC 协议的性能。
我一直使用以下命令来计时对网络上的各个计算机执行 1000 次 RPC 需要多长时间:
rpcping -u 10 -a connect -s [ip 地址] -i 1000
我的平均结果如下:
Atheros 到任何 Atheros:200-250ms Atheros 到任何 Realtek:800-1000ms Realtek 到任何 Atheros:800-1000ms Realtek 到任何 Realtek:1100-1200ms
无论操作系统是 Windows Server 2003 还是 Windows 7,结果都是一样的。
作为测试,我在一块带有 Realtek NIC 的主板上安装了 Windows XP,发现与任何 Atheros NIC 通信需要 200-250 毫秒,与任何带有 Realtek NIC 的 Windows 7 计算机通信需要 800-1000 毫秒。我还测试了 Windows 7 的基本安装,只是为了确保没有程序干扰它,结果和往常一样糟糕。
我尝试了最新的 NIC 驱动程序以及几个早期版本,并排除了网络的任何物理问题。我也在其他网络上进行了测试,偶尔会发现与我的类似的结果。当然,无论是兆位网络还是千兆网络都没有区别。
那么,有人可以解释一下为什么使用这些 Realtek 芯片组 NIC 的 Windows 7 的 RPC 性能如此差吗?
答案1
一周前我给 Realtek 发了一封电子邮件,但没想到会收到回复。令人惊讶的是,他们刚刚回复了我。他们要求我在 Windows 7 上安装 Windows XP 驱动程序。这解决了 RPC 性能问题,但中断了互联网访问。
然后他们让我重新安装 Windows 7 驱动程序,并尝试在 NIC 属性页面的高级设置中禁用“中断审核”。这样就解决了问题!
显然,禁用“中断审核”会提高网卡的性能,但会增加 CPU 的使用率。
我猜想我在逐个测试每个设置时一定漏掉了这个设置,或者这些设置的某个组合导致禁用“中断调节”无效。无论如何,现在问题已经解决了。
有趣的是,Atheros 芯片组启用了此设置,但并没有受到 RPC 性能问题的影响。
感谢那些回复的人。我很感激你们花时间提出建议。