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

Posted

技术标签:

【中文标题】用于 Windows 和 Linux 的同一台机器上的套接字【英文标题】:Sockets On Same Machine For Windows and Linux 【发布时间】:2010-12-11 07:39:08 【问题描述】:

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

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

您认为我们只需在同一个 windows 机器上运行两个 windows 应用程序和在同一个 linux 机器上运行两个 linux 应用程序并且不进行任何代码更改(即仍然使用套接字),我们会获得多少速度提升。

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

【问题讨论】:

这很容易测试。测试一下。 +1,jeffamaphone:这里没有含糊的 cmets 或轶事证据很重要。重要的是 Michael 的 程序的行为方式。 同意,我应该测试一下。鉴于网络、设置等方面的所有差异,这是唯一确定的方法。但我只是希望有人能与已经做过非常相似测试的人建立链接。我无法想象严格比较这些东西的性能是一个新想法——可能比我更了解网络的人已经做过 100 次了。 我没有可用的数据了,所以你必须相信我的话。但是 Linux 上的 Unix Domain 套接字比 TCP over loopback 快得多。 【参考方案1】:

至于 TCP 性能,我最近在 HP-UX 服务器(8 个 Intel Itanium 2 处理器 1.5 GHz 6 MB,400 MT/s 总线)和 Red Hat Linux(2 IA-64 1 ,6 赫兹)。我使用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

【讨论】:

太完美了。将在我的设置上运行它作为开始。谢谢!【参考方案2】:

本地命名管道会更快,因为它们在内核模式下运行。

【讨论】:

同意。但就数量级而言,从(不同机器上的套接字)->(同一机器上的套接字)->(命名管道)中哪个跳跃更大?仅在同一台机器上运行应用程序与花时间转换为命名管道相比,您能花多少钱? 在同一台机器上运行应用程序将为您带来巨大的性能提升,因为以太网延迟将大大减少。如果你需要的话,迁移到命名管道可能会给你带来更多的提升。我建议您先尝试仅使用 TCP/IP 堆栈,然后如果您绝对需要这种提升,则转到命名管道。很可能你不会,但我不能确定,因为我对你的情况了解不够。 使用 UNIX 域套接字!这些在性能上将等于或接近命名管道,但在使用上几乎与 TCP 套接字相同。 我听说那些很好。但是您是否有任何网站可以比较使用以太网上的常规套接字、同一台机器、unix 域套接字和管道的相同数据传输?

以上是关于用于 Windows 和 Linux 的同一台机器上的套接字的主要内容,如果未能解决你的问题,请参考以下文章

linux 进程间通信方式

将docker和virtual box安装在同一台机器上,并同时使用两种应用程序

有人在同一台机器上同时使用Tortoise Git和Subversion吗?

Access 2003和2007都安装在同一台机器上时,如何防止Windows Installer在每次启动时运行? [关闭]

将 UDP 数据从 Windows 服务发送到同一台机器上运行网页的浏览器

在同一台 linux 机器上使用 zope-plone 安装 xampp 的指南?