为什么这个网络连接这么慢?

为什么这个网络连接这么慢?

我在运行 Ubuntu 9.10 的 Linux 服务器上遇到网络性能速度问题。在 1000mbit/s 有线以太网连接上,所有类型流量的传输速度约为 1.5MB/s。最近,该服务器的速度已超过 samba 55MB/s。我没有更改硬件或网络设置。我确实定期运行更新,并且 Ubuntu 存储库中的最新、最好的版本都在这台机器上运行。

硬件设置

桌面 Windows PC - 1000 交换机 - 1000 交换机 - Linux 服务器

所有交换机都是 netgear,它们的连接都显示绿灯,这意味着连接速度为 1000mbit/s。当连接速度仅为 100mbit/s 时,指示灯呈黄色。其他诊断信息:

root@server:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:6e:3e:ae:36
          inet addr:192.168.1.30  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:6eff:fe3e:ae36/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28678 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73531 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2109780 (2.1 MB)  TX bytes:111039729 (111.0 MB)
          Interrupt:22

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:113 errors:0 dropped:0 overruns:0 frame:0
          TX packets:113 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:23469 (23.4 KB)  TX bytes:23469 (23.4 KB)


root@server:~# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pg
        Wake-on: g
        Current message level: 0x00000037 (55)
        Link detected: yes

root@server:~# mii-tool
eth0: negotiated 1000baseT-FD flow-control, link ok

服务器认为它有一个 1000mbit/s 的连接。我通过使用Samba复制文件来测试传输速度。我还在服务器上使用了 netcat (nc target 10000 < aBigFile) 来传输到 Windows (nc -l -p 10000),并看到了类似水平的低性能。

我使用 hdparm 测试了硬盘的速度并得到:

root@server:~# hdparm -tT /dev/md0
/dev/md0:
 Timing cached reads:   1436 MB in  2.00 seconds = 718.01 MB/sec
 Timing buffered disk reads:  444 MB in  3.02 seconds = 147.24 MB/sec

使用 DD 读取同一文件进行传输会产生以下结果:

paul@server:/home/share/Series/New$ dd if=aBigFile of=/dev/null
3200369+1 records in
3200369+1 records out
1638589012 bytes (1.6 GB) copied, 12.7091 s, 129 MB/s

我很困惑。是什么导致网络性能比网络能力低 2 个数量级?

答案1

您应该考虑检查一些事项:

  1. 双工 - 如果一侧认为链路是全双工,而另一侧认为链路是半双工,则预期会出现不良情况。
  2. 开关有故障?绕过它/他们。
  3. 巨型帧。 9000 字节 MTU 减少了开销,这应该会增加吞吐量(损失一点延迟)。听起来你的问题很严重,但这并没有帮助。
  4. TCP特性:ECN、SACK、拥塞控制算法
  5. TCP 发送/接收窗口大小(Linux 的详细信息

netperf 非常适合解决网络性能问题。但在紧要关头,netcat 还不错。

答案2

根据我的专业经验,我一直在努力通过 GNU/Linux 上的 Samba 获得良好可靠的网络性能。你提到你已经用它实现了 55 MBps 的速度,我相信这一点,所以我猜肯定还有其他因素在起作用。

但是,您尝试过 NFS、FTP 和 SCP 吗?不同协议的带宽问题是否一致?如果是这样,它可能会缩小到物理连接。如果得到不一致的结果,则可能是软件问题。

除了测试其他协议之外,您是否在传输中使用加密?例如,使用rsync -z压缩功能很不错,但它会消耗 CPU 成本,从而严重影响整体传输速度。如果使用SSHwith rsync,那么您会在压缩之上进行加密,并且您的 CPU 将承受一定的压力,从而导致严重的速度损失。

答案3

  1. 尝试netstat -i查找 rx/tx 错误。
  2. 尝试netstat -s查找 TCP 问题 - 比较文件复制之前和之后的值,并查找重置或重新传输中的大峰值。

答案4

如果可能的话,为了消除大多数人对这确实是操作系统/驱动程序/卡问题的怀疑,请使用交叉电缆将计算机连接在一起。这将从您的等式中消除交换机和其他可能的网络问题。

相关内容