Windows 和 Linux 同一台机器上的套接字
与 Windows 和 Linux 上的命名管道和其他方法相比,在进行 IPC 时使用套接字的效率如何?
现在,我在 4 个独立的盒子上有 4 个独立的应用程序需要通信。其中两个是在 Windows Server 2003 R2 上运行的 .NET 3.5 应用程序。两个是Linux(Suse Linux 10)。它们通常不受 CPU 限制。流量不是很大,但低延迟非常重要。我们现在使用的是禁用 nagle 的套接字,并且在 Linux 机器上安装了 sles10 慢启动补丁。
您认为通过简单地在同一个 Windows 机器上运行两个 Windows 应用程序并在同一个 Linux 机器上运行两个 Linux 应用程序并且不进行任何代码更改(即仍然使用套接字),我们可以获得多少速度提升。
操作系统是否会意识到端点位于同一台机器上并且知道不要将数据包发送到以太网?它们的数据包仍然需要经过整个网络堆栈吗?如果我们花时间更改为命名管道或内存映射文件或其他东西,速度会快多少?
How efficient is it to use sockets when doing IPC as compared to named pipes and other methods on Windows and Linux?
Right now, I have 4 separate apps on 4 separate boxes that need to communicate. Two are .NET 3.5 applications running on Windows Server 2003 R2. Two are Linux (Suse Linux 10). They're not generally CPU bound. The amount of traffic is not that large but its very important that it be low latency. We're using sockets right now with nagle dis-abled and the sles10 slow start patch installed on the linux machines.
How much of a speed boost do you think we would get by simply running the two windows apps on the same windows box and the two linux apps on the same linux box and making no code changes (ie still using sockets).
Will the OS's realize that the endpoints are on the same machine and know not to go out to the ethernet with the packets? Will they packets still have to go through the whole networking stack? How much faster it be if we took the time to change to named pipes or memory mapped files or something else?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
至于 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 时,TCP 交换的速度比在两台不同机器上运行 iperf 快十倍以上。
您也可以尝试一下,因为有一些您可能感兴趣的选项 - 读取或写入的缓冲区长度、设置 TCP 无延迟等。您还可以比较 Windows 计算机上的 TCP 交换速度,因为 Winddws 有一个 iperf 版本。
这是更详细的比较:
1) 在不同 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,默认 TCP 窗口 32K:387 Mbits/sec
2) 在不同 HP-UX 上运行的两个 iperf 应用程序之间的 TCP 交换速度服务器,TCP 窗口 512K:640 Mbits/秒
3) 在同一 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,默认 TCP 窗口 32K:5.60 Gbits/秒
4) 在同一 HP-UX 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度同一 HP-UX 服务器,默认 TCP 窗口 512K:5.70 Gbits/sec。
5) 在同一 Linux 服务器上运行的两个 iperf 应用程序之间的 TCP 交换速度,TCP 窗口 512K:7.06 Gbits/秒
6) 在 HP-UX 和 Linux 上运行的两个 iperf 应用程序之间的 TCP 交换速度,TCP 窗口 512K:699 Mbits/秒秒
As for TCP performance, I have done this sort of test recently on an HP-UX server (8 Intel Itanium 2 processors 1.5 GHz 6 MB, 400 MT/s bus) and on Red Hat Linux (2 IA-64 1,6 Ghz). I used iperf in order to test TCP performance. I found that speed of TCP exchange is more than ten times faster when I run iperf on the same machine comparing to running iperf on two different machines.
You can also give it a try as there are options that might be of interest to you - length of buffer to read or write, set TCP no delay and so on. Also you can compare speed of TCP exchange on Windows machines as there is a version of iperf for Winddws.
This is a more detailed comparison:
1) Speed of TCP exchange between two iperf applicatons running on different HP-UX server, default TCP window 32K: 387 Mbits/sec
2) Speed of TCP exchange between two iperf applicatons running on different HP-UX server, TCP window 512K: 640 Mbits/sec
3) Speed of TCP exchange between two iperf applicatons running on the same HP-UX server, default TCP window 32K: 5.60 Gbits/sec
4) Speed of TCP exchange between two iperf applicatons running on the same HP-UX server, default TCP window 512K: 5.70 Gbits/sec.
5) Speed of TCP exchange between two iperf applicatons running on the same Linux server, TCP window 512K: 7.06 Gbits/sec
6) Speed of TCP exchange between two iperf applicatons running on HP-UX and Linux, TCP window 512K: 699 Mbits/sec
本地命名管道会更快,因为它们在内核模式下运行。
Local named pipes will be faster since they run in kernel mode.