为什么 ping 这么慢?

为什么 ping 这么慢?

我的设置:

服务器在地窖+GBit交换机。长电缆到屋顶。千兆位开关。我在屋顶有三台电脑。其中一台只有 100MBit 以太网,一台有 GBit 的笔记本电脑和一台新电脑。

来自旧 100MBit 计算机的 Ping 时间:平均 0.5 毫秒 来自笔记本电脑的 Ping 时间:平均 0.4 毫秒 来自我的新计算机的 Ping 时间:平均 5 毫秒或 30 毫秒或 200 毫秒,但我经常看到 Ping 时间高达 980 毫秒。一般来说,吞吐量很不稳定。

我更换了屋顶的开关。不用找了。我更换了将新计算机连接到屋顶开关的电缆。不用找了。我安装了带有 Intel GBit 芯片 (82541PI) 的 PCI 网卡,并使用它代替内置的 Realtek RTL8111/8168B。不用找了。是的,我确信我已将电缆插入正确的端口,因为我现在从 DHCP 服务器获得了不同的 IP 地址。

同样的网卡在我使用相同操作系统 (openSUSE 12.1) 的旧计算机上完美运行。

ifconfig说:

      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:15679 errors:0 dropped:0 overruns:0 frame:0
      TX packets:13077 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 Sendewarteschlangenlänge:1000 

ethtool说:

    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair

什么可能导致这种行为?

[编辑]我发现了一些有趣的事情:

# cat /proc/interrupts 
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0:        178          0          0          0          0          0          0          0  IR-IO-APIC-edge      timer
  1:          6          0          0          0          0          0          0          0  IR-IO-APIC-edge      i8042
  8:          1          0          0          0          0          0          0          0  IR-IO-APIC-edge      rtc0
  9:          0          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   acpi
 12:         10          0          0          0          0          0          0          0  IR-IO-APIC-edge      i8042
 16:    3302428          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   ehci_hcd:usb1, nvidia, mei, eth1
 17:        184          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   snd_hda_intel
 23:      16721          0          0          0          0          0          0          0  IR-IO-APIC-fasteoi   ehci_hcd:usb2

如您所见,中断 16 服务于一个 USB 端口、显卡、“mei”(?)和eth1

我想这可以解释为什么它很慢。 2012年如何分配中断?

答案1

我的主板是华硕 P8Z77-M。 BIOS 版本是 0802。这个 BIOS 有一个 bug:它将相同的 IRQ (16) 分配给所有高吞吐量设备,这可能会导致各种问题(例如将文件复制到 USB 设备时冻结桌面)。

升级到版本 1206 改善了这种情况。网卡现在获得了自己的 IRQ,并且 ping 时间现在处于应有的位置:

64 bytes from ds.digulla (192.168.0.3): icmp_seq=1 ttl=64 time=0.197 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=2 ttl=64 time=0.252 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=3 ttl=64 time=0.200 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=4 ttl=64 time=0.239 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=5 ttl=64 time=0.215 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=6 ttl=64 time=0.204 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=7 ttl=64 time=0.244 ms
64 bytes from ds.digulla (192.168.0.3): icmp_seq=8 ttl=64 time=0.190 ms
^C
--- ds.digulla ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7001ms
rtt min/avg/max/mdev = 0.190/0.217/0.252/0.027 ms

相关内容