我使用的是 HP DL360p Gen8。我已经安装了双引导 Windows Server 2008 R2 和 RHEL7。在这两个系统中,我都配置了 LACP 和 VLAN。所以这是相同的服务器、相同的硬件、相同的网络、相同的路由表等。
我担心延迟,包括网络延迟,因为我使用此服务器进行高频交易。
现在我期望如果我从 Windows 和 Linux ping 同一台主机,那么 Linux 一定会稍微好一些。令人惊讶的是,它根本没有好转。实际上,当我 ping 同一台主机时,它甚至比 Windows 还要差 5-10 微秒。
- 我
hrping
在 Windows 和ping
Linux 中使用 - 在 Windows 中,我使用 HP 实用程序进行分组,在 RHEL 7 中,我使用内置的“分组”(不是绑定)
我期待 Linux 会更好,因为:
- 我认为 RHEL 7 网络实施比 Windows Server 2008 R2 更快
- 我认为 RHEL 7 分组/LACP/VLAN 实施比 Windows Server 2008 R2/HP 更快
我的问题:
- 如果存在这样的数字:RHEL 7 的 ping 速度比 Windows Server 2008 R2 快多少微秒?
- 如果它表明 Linux 慢 5-10 微秒的潜在问题
ping
,或者我应该忽略这个事实? - 我可以做什么/诊断/排除故障以使 Linux ping 比 Windows 更快
当然,在现实生活中,我更关心实际流量的延迟,例如 TCP/UDP,但我将其ping
作为第一步。可能会ping
显示相同的数字,因为它“简单”,但在真实的 TCP/UDP 流量上 Linux 会更快吗?
答案1
有很多因素。首先是您正在运行的机器。如果windows和linux在不同的硬件上,那么测量就没有意义。
当然,您必须在多次尝试后测量平均 ping,前几次 ping 可能包括其他延迟。
数据包必须经过内核(IP 堆栈和网络设备驱动程序)传出,然后在收到响应时再次传入。在此阶段,可能有很多因素影响差异:
- 实际计时的内容:两种不同的 ping 实现可以在启动计时器和实际发送内容之间执行或多或少的样板工作(在接收路径上也是如此)。
- 存在过滤器:防火墙等,可以引入额外的步骤
- 时钟粒度:内核多路复用进程的精细程度如何?即使在不同的 Linux 级别中,tick 长度也可能有很大差异,或者内核可能或多或少是无tick的(如果只有一个进程正在运行,则运行不会中断)。
- 进程管理:当数据包返回时,进程被唤醒的速度和方式如何? Windows 和 Linux 以完全不同的方式实现这一点。
- 系统的其余部分在做什么?是否同时发生大量 IO 导致内核繁忙?如果您
nice
ping 到更高优先级,会有变化吗? - 频率缩放:CPU 频率的管理可能会有很大差异:Linux 有许多做不同事情的“调控器”。因此,Linux 在空闲时有可能以较低的时钟速度运行 - 而且,频率切换的时刻会产生额外的延迟。
- 实用程序的实现和编译
ping
也可能会产生一些较小的影响(尽管内核中的延迟可能是主要的影响)。
众所周知,Linux 内核的网络吞吐量达到了极限10千兆级别。所以......在微秒速度下应该不会产生太大的差异。这可能是调度、操作系统延迟等问题。并且 ping 延迟并不代表负载下的实际性能。当您做出任何决定时,不应将此衡量标准作为一个因素。您需要许多其他基准,特别是在实际负载下。
最后,Linux 内核设置可以极大地影响性能 - 实时项目需要专用内核才能以最佳水平执行。您会发现不同配置(在两个平台上)之间的变化比这两次尝试中发现的变化更多。