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

Определение того, почему передача файлов такая медленная

Пытаюсь передать по лану большие файлы (3+ гига). У меня подключение к коробке 100 мегабит, магистраль гигабит. Однако при передаче файлов между серверами и с сервера на мой локальный компьютер скорость передачи колеблется от 11 до 13 мегабит в секунду.

Однако большие загрузки из Интернета выполняются значительно быстрее.

Я поднял эту проблему со своими специалистами по сетевой инфраструктуре, но они настаивают, что с конфигурацией сети все в порядке.

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

Сначала проверьте счетчики интерфейса на каждом сервере, должно быть зарегистрировано 0 или около 0 ошибок.

Во-вторых, проверьте дуплекс обоих серверов. Если вы смешиваете 100 Мбит и GbE, у вас может быть несоответствие дуплекса. Убедитесь, что обе стороны настроены на автоматический / автоматический режим, или вручную установите скорость и дуплекс на всех интерфейсах.

В-третьих, какие разногласия существуют на магистрали GbE, можете ли вы подтвердить, что имеется достаточный запас для вашего переноса?

Наконец, способен ли ваш отправляющий сервер передавать достаточно быстро. Как следует из комментариев ниже, вы ограничены пропускной способностью ввода-вывода дисков отправителя или процессором (если вы используете scp или аналогичный)?

Кстати, от 11 до 13 мега байты в секунду - это теоретический максимум для 100 Мбит, уверены ли вы, что инструмент, который вы используете для измерения, сообщает правильные единицы измерения?

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


Когда я тестирую пропускную способность сети, лучше всего удалить как можно больше переменных, таких как дисковый ввод-вывод или ограничения ЦП. Вот процедура, которую я использую, которая может проиллюстрировать типичный максимум, который вы когда-либо увидите в своей сети.

Инструменты:

Обе эти утилиты должны быть доступны в большинстве современных систем * nix либо предустановленными, либо в виде пакетов, либо с возможностью компиляции из исходного кода.

Процедура:

  1. Выполните следующую команду на одном компьютере, чтобы настроить приемник UDP. (Использование UDP даст более высокие показатели производительности из-за отсутствия накладных расходов TCP для передачи.)

    nc -ulp 5000 > /dev/null

  2. На другом компьютере выполните следующую команду, подставив IP-адрес слушателя, чтобы отправить поток нулей по сети в прослушиватель nc. Утилита pv покажет текущую производительность, отслеживаемую приемником.

    pv < /dev/zero | nc -u listener-ip-address 5000

Ноты:

  • Теоретический максимум для подключения Gig Ethernet составляет 119 МБ / с (примечание, MB, а не Mб)
  • TCP также можно протестировать, удалив -u в обеих командах nc.
  • В реальных приложениях вы никогда не достигнете показателей производительности, показанных в выходных данных pv.

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

Вы используете Windows Vista? Обратите внимание, что Vista ограничивает передачу по локальной сети каждый раз, когда у вас открыто мультимедийное приложение (включая веб-браузер с флеш-памятью).

У меня была эта проблема с ограничением передачи 10 МБ / с, когда они должны были передавать 30-40 МБ / с.

Вы можете отключить регулирование в разделе реестра, подробно описанном здесь:

http://www.anandtech.com/systems/showdoc.aspx?i=3233&p=2

Также рассмотрите различия в протоколе между двумя сценариями. «Большие загрузки из Интернета» звучат как HTTP или FTP через TCP / IP. В локальной сети вы используете что-то другое? Возможно, несоответствующий набор реализаций SMB или совместное использование файлов Apple? Я упоминаю об этом только потому, что видел, как трафик SMB между Windows и системами UNIX / Linux ведет себя по-настоящему бессмысленным образом.

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

Когда вы передаете файлы «между серверами», серверы общаются напрямую?

Или вы работаете в Windows, и у вас есть диски, подключенные к каждому серверу, и вы перетаскиваете файлы по ним?

В этом втором сценарии все происходит через ваш компьютер, поэтому самая быстрая передача, которую вы получите, будет около 11 Мбит / с.

Если вы работаете в системе * nix, используйте ttcp, чтобы определить, является ли ваше TCP-соединение узким местом.

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

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

Глупое предложение, но возможно ли, что передача происходит не по локальной сети, а на самом деле происходит через Интернет? Как вы подключаетесь между машинами? Я спрашиваю, потому что ваши симптомы похожи на те, которые обсуждались в недавнем выпуске DotNetRocks. Увидеть стенограмма решения начать чтение:

Карл Франклин: Да. Brain Buster, мы хотели, чтобы люди присылали свои предложения или ответы, которые они думают, о том, что произошло.