Определение, почему передача файлов происходит так медленно
Я пытаюсь передать большие файлы (3+ гигабайт каждый) по локальной сети. Мое соединение составляет 100 мегабит с коробкой, с гигабитной магистралью. Однако при передаче файлов между серверами и с сервера на мой локальный компьютер скорость передачи составляет около 11–13 мегабит в секунду.
Однако большие загрузки из Интернета идут значительно быстрее.
Я поднял эту проблему с моими людьми сетевой инфраструктуры, но они настаивают, что все в порядке с конфигурацией сети.
Существуют ли какие-либо инструменты, которые я могу установить на своем компьютере или серверах, чтобы попытаться изолировать источник замедления?
8 ответов
Сначала проверьте счетчики интерфейса на каждом сервере, должно быть 0 или около 0 сообщений об ошибках.
Во-вторых, проверьте дуплекс обоих серверов. Если вы смешиваете 100 Мбит и GbE, то у вас может быть несоответствие дуплекса. Убедитесь, что обе стороны настроены на авто / авто, или вручную установите скорость и дуплекс на всех интерфейсах.
В-третьих, какие разногласия существуют в магистрали GbE, можете ли вы подтвердить, что существует достаточный запас для вашего перевода?
Наконец, ваш отправляющий сервер способен передавать достаточно быстро. Как показывают комментарии ниже, вы ограничены пропускной способностью ввода-вывода дисков отправителей или процессором (если вы используете scp или аналогичный)?
Кстати, от 11 до 13 мегабайт в секунду - это теоретический максимум для 100 Мбит. Вы уверены, что инструмент, который вы используете для измерения, сообщает правильные единицы измерения?
Проверьте следующую процедуру, которую я использую, которая может помочь сузить суть проблемы.
Когда я проверяю пропускную способность сети, лучше всего удалить как можно больше переменных, таких как дисковый ввод-вывод или ограничения ЦП. Вот процедура, которую я использую, которая может проиллюстрировать типичный максимум, который вы когда-либо увидите в своей сети.
Инструменты:
Обе эти утилиты должны быть доступны в большинстве современных систем *nix, либо предустановлены с помощью пакетов, либо могут быть скомпилированы из исходного кода.
Процедура:
Выполните следующую команду на одном компьютере, чтобы настроить прослушиватель UDP. (Использование UDP даст более высокие показатели производительности из-за отсутствия накладных расходов TCP для передачи.)
nc -ulp 5000 > /dev/null
На другом компьютере выполните следующую команду, подставив IP-адрес слушателя, чтобы отправить поток нулей по сети слушателю nc. Утилита pv покажет текущую производительность, отслеживаемую получателем.
pv < /dev/zero | nc -u listener-ip-address 5000
Заметки:
- Теоретический максимум для соединения Gig Ethernet составляет 119 МБ / с (обратите внимание, MB, а не Mb)
- TCP также можно проверить, удалив -u в обеих командах nc
- В реальных приложениях вы никогда не достигнете показателей производительности, показанных в выводе pv.
Этот метод дает предсказуемые результаты в хорошо спроектированной сети с правильно функционирующим оборудованием. По этой причине это хороший инструмент, помогающий определить, способствует ли сама сеть или сетевое оборудование воспринимаемой "медлительности".
Вы на Windows Vista? Обратите внимание, что Vista блокирует передачу по локальной сети каждый раз, когда у вас открыто мультимедийное приложение (включая веб-браузер с flash).
У меня была эта проблема с ограничениями передачи на 10 МБ / с, когда они должны были работать на скорости 30-40 МБ / с.
Вы можете отключить регулирование в разделе реестра, подробно описанном здесь:
Когда вы передаете файлы "между серверами", серверы общаются напрямую?
Или вы в Windows, и у вас есть диски, связанные с каждым сервером, и вы перетаскиваете файлы через них?
В этом втором сценарии все идет через ваш компьютер, поэтому самая быстрая передача, которую вы получите, будет около 11 Мбит / с.
Если вы работаете в системе *nix, используйте ttcp, чтобы определить, является ли ваше TCP-соединение узким местом.
Глупое предположение, но возможно ли, что передача происходит не по локальной сети, а на самом деле через Интернет? Как вы подключаетесь между машинами? Я спрашиваю, потому что ваши симптомы похожи на те, что обсуждались в недавнем эпизоде DotNetRocks. Смотрите стенограмму решения, начните читать по адресу:
Карл Франклин: Да. Мозговой Разрушитель, мы хотели, чтобы люди присылали свои предложения или ответы, которые они думают, на то, что произошло.
Если вы используете Windows, я настоятельно рекомендую использовать бесплатную утилиту RichCopy. Он многопоточный и может приостанавливать и возобновлять операции копирования файлов. Мне очень повезло, используя его для передачи файлов между серверами.
Также рассмотрите различия в протоколе между двумя сценариями. "Большие загрузки из Интернета" звучит как HTTP или FTP через TCP/IP. В локальной сети вы используете что-то другое? Возможно несоответствующий набор реализаций SMB или совместное использование файлов Apple? Я упоминаю об этом только потому, что видел, как трафик SMB между системами Windows и UNIX/Linux ведет себя по-настоящему умственно.
Попробуйте поэкспериментировать с различными механизмами передачи и посмотреть, дает ли это разные результаты.
Это действительно старый инструмент, но в прошлом у меня был хороший успех с Netperf. Это должно дать вам начальное представление о пропускной способности между двумя устройствами.