Назад | Перейти на главную страницу

Отладка медленной передачи файлов по локальной сети (ssh, nfs)

У меня есть два Linux-бокса, подключенных к гигабитному коммутатору. У них обоих гигабитные сетевые карты, кабели - cat7.

Тестирование сети с помощью iperf показывает быстрое соединение, но передача файлов с использованием общих ресурсов rsync, scp или nfs происходит медленно.

Тестирую с одним файлом размером 1Гб.

результат 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

Скорость передачи с помощью rsync, scp или nfs составляет около 13 МБ / с.

scp:

 scp bigfile odroid:/mnt/usb1/               [10:19:12]
bigfile                                        57%  590MB  12.2MB/s   00:35 ETA^CKilled by signal 2.

rsync:

 rsync --progress bigfile /mnt/usb1/
bigfile
     44,695,552   4%   12.15MB/s    0:01:11  ^C

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

1024 МБ / 71 с = 14,42 МБ / с

Поскольку тест 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

Сервер, 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

ОС на клиенте (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

ОС на сервере (сервер Ubuntu для odroid):

Linux odroid 3.10.92 #1 SMP PREEMPT Tue Nov 17 00:15:24 BRST 2015 armv7l armv7l armv7l GNU/Linux

В обеих системах ни ЦП, ни ОЗУ не перегружены.

Если я правильно интерпретирую результаты, скорость записи диска сервера (82,2 МБ / с) должна легко соответствовать сети. Почему передача файлов такая медленная?

Я надеюсь, что предоставленной информации достаточно и кто-нибудь может помочь мне найти узкое место.

Спасибо.

Судя по полученным числам, в вашей сети что-то не гигабитное.

Используйте ethtool или что-то подобное, чтобы проверить скорость на каждой сетевой карте.

Проверьте коммутатор и убедитесь, что порты действительно активны на гигабитной скорости (проверьте светодиоды или состояние порта конфигурации, если коммутатор поддерживает управление).

Запустите iperf или альтернативный вариант между клиентами.

Наконец, проверьте использование процессора - возможно, там что-то не так.