与Windows和Linux上的命名管道和其他方法相比,在执行IPC时使用套接字的效率如何?
现在,我在4个需要通讯的单独盒子上有4个单独的应用程序。两个是在Windows Server 2003 R2上运行的.NET 3.5应用程序。两个是Linux(Suse Linux 10)。它们通常不受CPU限制。流量不是很大,但是很重要的一点是低延迟。我们现在使用的套接字已禁用nagle,并且在Linux机器上安装了sles10慢启动补丁。
您认为通过简单地在同一Windows框上运行两个Windows应用程序和在同一Linux框上运行两个Linux应用程序并且不进行代码更改(即仍然使用套接字),将获得多少速度提升。
操作系统是否会意识到端点在同一台计算机上并且知道不随数据包一起出入以太网?他们的数据包是否仍然需要遍历整个网络堆栈?如果我们花时间更改到命名管道或内存映射文件或其他内容,速度会快多少?
至于TCP性能,我最近在HP-UX服务器(8个Intel Itanium 2处理器1.5 GHz 6 MB,400 MT / s总线)和Red Hat Linux(2 IA-64 1,6 Ghz)上进行了这种测试。 )。我使用iperf来测试TCP性能。我发现在同一台计算机上运行iperf时,与在两台不同计算机上运行iperf相比,TCP交换的速度要快十倍以上。
您也可以尝试一下,因为可能有一些您可能会感兴趣的选项- 读取或写入的缓冲区长度,设置TCP无延迟等。您也可以比较Windows机器上TCP交换的速度,因为有适用于Winddws的iperf版本。
这是更详细的比较:
1)在不同HP-UX服务器上运行的两个iperf应用程序之间的TCP交换速度,默认TCP窗口32K:387 Mbits / sec
2)在不同HP-UX服务器上运行的两个iperf应用程序之间的TCP交换速度,TCP窗口512K:640 Mbits / sec
3)在同一HP-UX服务器上运行的两个iperf应用程序之间的TCP交换速度,默认TCP窗口32K:5.60 Gbits / sec
4)在同一HP-UX服务器上运行的两个iperf应用程序之间的TCP交换速度,默认TCP窗口512K:5.70 Gbits / sec。
5)在同一Linux服务器上运行的两个iperf应用程序之间的TCP交换速度,TCP窗口512K:7.06 Gbits / sec
6)在HP-UX和Linux上运行的两个iperf应用程序之间的TCP交换速度,TCP窗口512K:699 Mbits /秒