我有两台服务器放在一个运行 Ubuntu 16.04 的机架上,它们之间有一条 1 米长的以太网电缆,都配有标准英特尔以太网适配器。
ping
两者之间的时间约为300 us
(微秒)。
这是我在大多数千兆以太网设置中看到的标准延迟。
但与理论极限相比,这种延迟似乎仍然很高;为什么呢?我读到 1 GbE 可以实现 40 us 的延迟。
这是我能预期的最小延迟吗?或者我可以执行软件调整来减少此延迟吗?瓶颈是什么?是 Linux 吗?此适用于 Windows 的游戏玩家网站屏幕截图中的工具在大多数情况下似乎表明延迟为 40 微秒,但这对我的 Linux 服务器没有太大帮助。
我怎样才能赚到ping
40 美元?
编辑:看着截图再次,显示的 40 微秒可能实际上不是往返时间,但它实际上是 Windows 内核内的特定延迟,因此 40 微秒可能只是部分总往返时间,可能更高,未列出。这也与此处的答案一致。
(我原本在超级用户处问了这个问题;当时我并不清楚 ServerFault 是否是更适合提出网络性能问题的社区,而且我在那里的声誉不足以提出这个问题,所以我把问题放在这里。我也将硬件换成了服务器硬件。)
答案1
Aping
不测量延迟,也不测量往返时间。它测量 ICMP 回显请求响应时间。ICMP 消息以低优先级运行,并占用方式比严重的交通拥堵还要长。
正如 @barbequesauce 指出的那样,双绞线需要一些复杂的编码,因此 1000BASE-T NIC 至少需要每边 10 µs 的编解码器(加上系统总线和 IRQ 延迟)。双绞线 cat.6 的速度系数为 65%(~200,000 km/s),因此每 10 米会增加 .05 µs 或 50 ns。光纤实际上并没有更快(VF 为 67%),但使用更简单的编码,每边可能为 5 µs,而不是 10 µs。
IP 堆栈将为您的延迟预算增加一些 µs。在快速系统上,您可能可以达到约 20 µs。
当然,NIC、系统总线和 IP 堆栈的确切值取决于您的硬件和软件。上面的数字是您能获得的最佳数字。不要用它ping
来测量。
简而言之,您肯定没有遇到任何真正的问题,问题在于解释输出ping
。
答案2
因此需要考虑两件事 -
与光纤相比,铜缆会增加延迟 - 如果我没记错的话,在我从事高频交易期间,每边交换机的延迟为 15 微秒。1 米长的铜缆本身就会带来 60 微秒的延迟。而光纤的延迟约为 5 微秒。
另一个(可能更重要的)考虑因素是 IP 堆栈调整和序列化延迟。默认情况下,堆栈可能会针对较小的数据包进行调整;在这种情况下,ping 将被分成多个块以进行发送和接收,因此堆栈会减慢响应时间……请确保两侧都针对相同的大小进行调整。