调试慢 lan (ssh, nfs) 文件传输

pin*_*pox 6 performance ssh nfs file-transfer linux-networking

我有两个 linux 盒子连接到一个千兆交换机。他们都有千兆网卡,电缆是cat7。

使用 iperf 测试网络显示连接速度很快,但使用 rsync、scp 或 nfs 共享传输文件很慢。

我正在测试一个 1GB 的文件。

iperf 结果:

Client connecting to odroid, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.26 port 58788 connected with 192.168.1.32 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   979 MBytes   821 Mbits/sec
Run Code Online (Sandbox Code Playgroud)

使用 rsync、scp 或 nfs 的传输速度约为 ~13Mb/s

SCP:

 scp bigfile odroid:/mnt/usb1/               [10:19:12]
bigfile                                        57%  590MB  12.2MB/s   00:35 ETA^CKilled by signal 2.
Run Code Online (Sandbox Code Playgroud)

同步:

 rsync --progress bigfile /mnt/usb1/
bigfile
     44,695,552   4%   12.15MB/s    0:01:11  ^C
Run Code Online (Sandbox Code Playgroud)

nfs:

binaryplease?~(master?)» time cp bigfile /mnt/nfs/usb1/      
cp -i bigfile /mnt/nfs/usb1/  0.01s user 0.94s system 1% cpu 1:11.06 total
Run Code Online (Sandbox Code Playgroud)

1024MB/71 秒 = 14,42 MB/秒

由于 iperf 测试显示网络连接速度较快,我假设存储设备速度较慢有问题,但情况似乎也并非如此:

客户端、SSD、内部:

binaryplease?~(master?)» sudo hdparm -tT /dev/sda                    
/dev/sda:
 Timing cached reads:   20344 MB in  2.00 seconds = 10181.50 MB/sec
 Timing buffered disk reads: 1498 MB in  3.00 seconds = 498.98 MB/sec

binaryplease?~(master?)» dd if=/dev/zero of=test oflag=direct bs=8M count=64
64+0 records in
64+0 records out
536870912 bytes (537 MB) copied, 2.03861 s, 263 MB/s

binaryplease?~(master?)» dd if=test of=/dev/null iflag=direct bs=8M  [12:29:01]
64+0 records in
64+0 records out
536870912 bytes (537 MB) copied, 1.11392 s, 482 MB/s
Run Code Online (Sandbox Code Playgroud)

服务器,USB 3.0 驱动器,外部:

?  ~ git:(master) ? sudo hdparm -tT /dev/sda   
/dev/sda:
 Timing cached reads:   1980 MB in  2.00 seconds = 991.66 MB/sec
 Timing buffered disk reads: 266 MB in  3.01 seconds =  88.27 MB/sec
?  usb1   dd if=/dev/zero of=test oflag=direct bs=8M count=64
64+0 records in
64+0 records out
536870912 bytes (537 MB) copied, 6.53386 s, 82.2 MB/s
?  usb1  dd if=test of=/dev/null iflag=direct bs=8M
64+0 records in
64+0 records out
536870912 bytes (537 MB) copied, 7.13567 s, 75.2 MB/s
Run Code Online (Sandbox Code Playgroud)

客户端上的操作系统(Linux arch):

Linux binaryplease-laptop 4.3.3-2-ARCH #1 SMP PREEMPT Wed Dec 23 20:09:18 CET 2015 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

服务器上的操作系统(odroid 的 Ubuntu 服务器):

Linux odroid 3.10.92 #1 SMP PREEMPT Tue Nov 17 00:15:24 BRST 2015 armv7l armv7l armv7l GNU/Linux
Run Code Online (Sandbox Code Playgroud)

在两个系统上,cpu 或 ram 都没有达到最大值。

如果我正确解释了结果,服务器驱动器的写入速度 (82.2 MB/s) 应该很容易被网络匹配。文件传输怎么这么慢?

我希望提供的信息是足够的,有人可以帮我找到瓶颈。

谢谢。

Ove*_*ind 2

从您得到的数字来看,您的网络中似乎有些东西实际上并不是千兆位。

使用 ethtool 或类似的工具检查每台机器网卡的速度。

检查交换机并确保端口实际上以千兆位速度处于活动状态(如果交换机支持管理,请检查 LED 或配置端口状态)。

运行 iperf 或客户端之间的替代方案。

最后,检查 CPU 使用情况 - 也许那里出了问题。