适用于Windows和Linux的同一台机器上的套接字

Mic*_*lli 18 c# sockets linux networking tcp

与Windows和Linux上的命名管道和其他方法相比,在执行IPC时使用套接字的效率如何?

现在,我在4个需要通信的独立盒子上有4个独立的应用程序.两个是在Windows Server 2003 R2上运行的.NET 3.5应用程序.两个是Linux(Suse Linux 10).它们通常不受CPU限制.流量不是很大,但非常重要的是低延迟.我们现在正在使用套接字,nagle dis-abled和linux机器上安装的sles10慢启动补丁.

你认为我们可以通过简单地在相同的Windows机器上运行两个Windows应用程序和同一个Linux机器上的两个Linux应用程序并且不进行代码更改(即仍然使用套接字)来获得多少速度提升.

操作系统是否会意识到端点位于同一台机器上,并且知道不通过数据包进入以太网?他们的数据包是否仍然需要通过整个网络堆栈?如果我们花时间更改命名管道或内存映射文件或其他东西,速度会快多少?

Ser*_*kov 17

至于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/sec