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

Почему скорость передачи по локальной сети уменьшается с увеличением файлов?

Укороченная версия: У меня есть сервер Linux (RHEL5) и ноутбук с Windows 7 Professional в локальной проводной сети. Копирование больших файлов на сервер постепенно замедляется до полного прекращения.

Длинная версия

На сервере есть общий ресурс Samba, к которому я могу подключиться, и у меня есть доступ для чтения и записи.

Все передачи с сервера на портативный компьютер работают нормально, но при передаче с ноутбука на сервер скорость передачи данных снижается, а иногда и полностью прекращается.

Небольшие файлы передаются нормально, но файлы размером более 2 МБ обычно не работают.

Чтобы проверить, была ли это проблема Samba или что-то еще, я попытался скопировать некоторые файлы с ноутбука на сервер, используя scp (Замазка pscp). Файл размером 1 МБ копируется практически мгновенно, 2 МБ - 3 минуты, а 3,7 МБ - 18 минут. Так что это не относится к Samba.

Кроме того, с помощью Samba и SCP я могу без проблем копировать несколько МБ очень маленьких файлов.

Что могло быть причиной такого поведения? Буду очень признателен за любой совет.

Windows выдает это сообщение об ошибке:

There is a problem accessing H:\
Make sure you are connected to the network and try again

На сервере ifconfig показывает некоторые ошибки:

eth0      Link encap:Ethernet  HWaddr 00:22:19:AD:52:E2
          inet addr:192.168.1.7  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::222:19ff:fead:52e2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4125439 errors:72181 dropped:0 overruns:0 frame:0
          TX packets:3575918 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4481289749 (4.1 GiB)  TX bytes:581533090 (554.5 MiB)
          Interrupt:169 Memory:dfdf0000-dfe00000

/var/log/messages:

Aug 16 14:50:16 dev smbd[475]: [2013/08/16 14:50:16, 0] lib/util_sock.c:read_data(540)
Aug 16 14:50:16 dev smbd[475]:   read_data: read failure for 4 bytes to client 192.168.1.12. Error = Connection reset by peer
Aug 16 14:50:16 dev smbd[475]: [2013/08/16 14:50:16, 0] lib/util_sock.c:write_data(568)
Aug 16 14:50:16 dev smbd[475]:   write_data: write failure in writing to client 192.168.1.12. Error Broken pipe
Aug 16 14:50:16 dev smbd[475]: [2013/08/16 14:50:16, 0] lib/util_sock.c:send_smb(767)
Aug 16 14:50:16 dev smbd[475]:   Error writing 75 bytes to client. -1. (Broken pipe)

/var/log/samba/smbd.log:

[2013/08/16 14:50:16, 0] lib/util_sock.c:read_data(540)
  read_data: read failure for 4 bytes to client 192.168.1.12. Error = Connection reset by peer
[2013/08/16 14:50:16, 0] lib/util_sock.c:write_data(568)
  write_data: write failure in writing to client 192.168.1.12. Error Broken pipe
[2013/08/16 14:50:16, 0] lib/util_sock.c:send_smb(767)
  Error writing 75 bytes to client. -1. (Broken pipe)
[2013/08/16 14:50:16, 1] smbd/service.c:make_connection_snum(1077)
  liam-pc (192.168.1.12) connect to service external initially as user liam (uid=502, gid=502) (pid 529)

РЕДАКТИРОВАТЬ: если я загружаюсь в Ubuntu на ноутбуке, у меня нет проблем с копированием больших файлов в общий ресурс SMB на сервере. Так что проблема либо в Windows 7, либо в комбинации Windows 7 / RHEL5.

Я побежал service network restart и, похоже, проблема устранилась. Это кажется немного странным, потому что проблема существует больше года, и с тех пор сервер несколько раз перезагружался. Я скопировал файл размером 365 МБ на сервер в 70-х, в среднем 5,2 МБ / с, без ошибок.

Я столкнулся с этой проблемой из-за дешевых коммутаторов D-link. Например DGS-1008D. Эта проблема одинакова для smb и nfs.

Я использую wget и внутренний http-сервер для выявления проблем с сетью:

wget http://static-http.example.local/1024mb_file -O /dev/null

Вы можете использовать любой хост в качестве внутреннего http-сервера, используя python:

python -m SimpleHTTPServer 8000

Это будет обслуживать файлы относительно текущего каталога на сервере.

Затем используйте следующую команду на клиенте:

wget http://host:8000/bigfile.tgz -O /dev/null

Если у вас есть гигабитная сеть, вы должны получить скорость около 90-100 Мбит / с. Если у вас 10-мегабитная сеть, вы должны получить скорость около 10 Мбит / с.

Эта скорость может быть достигнута при второй попытке чтения, потому что файлы кэшируются. Перед тем, как файлы будут кэшироваться, вы получите скорость чтения с диска хоста.

Но если вы столкнетесь с проблемами сети с Ethernet, вы получите в 10 раз меньшую скорость, чем обычно.

Выключение / включение переключателя решает проблему, но на некоторое время.

Похоже на проблему с сетью или несовместимость версий Samba для Windows и Linux.

Вы пробовали подключить ноутбук напрямую к серверу? Если он работает правильно с Ubuntu, это не должно быть проблемой, но вы можете попробовать.

Вам следует сделать несколько захватов трафика, чтобы увидеть, что на самом деле происходит в вашей сети. Вы можете поделиться этим здесь, и, возможно, мы сможем найти проблему.

Если ничего не работает, вы можете попробовать этот инструмент анализа. Мне это показалось действительно интересным, вы можете загрузить файл pcap, и они отправят вам анализ по электронной почте. Как я понял, вы можете отправить свою проблему в форму.