git status
- это команда, которая читает и записывает множество файлов. Сетевое хранилище, даже через некоторые подключения к локальной сети, может быть неприемлемо медленным при работе с большим количеством файлов, большим количеством данных или обоими.
Проблема в том, что SMB (Server Message Block, также известный как Samba, также известный как Windows File Sharing) является очень "болтливым" протоколом, отправляющим множество маленьких пакетов назад и вперед, и он требует загрузки "ходов приложений", что увеличивает масштаб больше данных вам нужно. "Поворот" - это двустороннее путешествие между клиентом и сервером.
Несколько вещей:
Попробуйте ping
ваш удаленный хост с вашего локального компьютера. Если это больше, чем 5 миллисекунд, сетевое хранилище, вероятно, не подходит для гораздо большего, чем загрузка нескольких килобайт в несколько файлов. Также проверьте джиттер и потерю пакетов. Джиттер - это когда пинг сильно варьируется между различными значениями, а потеря пакета - это когда пинг полностью сбрасывается (на него не реагируют). Оба очень плохие нарушения, почти так же плохо, как латентность.
Попробуйте использовать WireShark для наблюдения за трафиком между вашим хостом и вашим маршрутизатором при выполнении git status
. Вероятно, вы увидите много TCP-запросов, которые выглядят примерно так:
Пакет выходит с вашей машины
- Ваша машина ждет (ничего не делает)
- Сервер отправляет ответ
Для каждого пакета, исходящего с вашего компьютера и предназначенного для удаленного блока, пометьте этот пакет "O" как "исходящий". Для каждого пакета, который отправляется с удаленного устройства и предназначен для вашего компьютера, пометьте этот пакет "I" как "входящий".
- Подсчитайте количество пакетов "I" в строке без промежуточных пакетов "O".
- Подсчитайте количество пакетов "O" в строке без промежуточных пакетов "I".
- Придумайте примерное соотношение количества пакетов "I" к количеству пакетов "O".
- Если вы читаете (загрузка) файлов, а также отношение высоко не в пользу "I" пакетов (пакеты , приходящие на ваш компьютер), то протокол болтливый.
- Если вы пишете (загрузка или модифицирующие файлы), а отношение сильно не в пользу "O" пакеты (пакеты , исходящие от компьютера), то протокол болтливый.
- Проверьте размер каждого пакета относительно ожидаемой пропускной способности соединения при загрузке большого файла по протоколу HTTP.
- Умножьте задержку на количество циклов и добавьте время передачи файлов, чтобы получить некоторое число, которое должно составлять около 25 секунд.
Решение: уменьшите задержку или используйте более новую версию протокола SMB, поддерживаемую более новыми версиями Windows Server (с меньшим количеством обращений к приложениям и, следовательно, более высокой производительностью по глобальной сети), или используйте что-то вроде FTP, который имеет очень низкое взаимодействие (но все же большие накладные расходы при доступе ко многим файлам), или просто работайте непосредственно на сервере и передавайте данные только по мере необходимости (например, zip-файлы) на удаленный сервер.