2016-06-24 14 views
4

Я пытаюсь передать файлы с высокой задержкой и высокой пропускной способностью. К сожалению, когда я использую rsync, моя скорость передачи использует только часть моей доступной полосы пропускания. Мое общее время передачи занимает гораздо больше времени, чем ожидалось (т. Е. Время передачи = ширина байтов/байт в секунду)!Каков самый быстрый способ передачи файлов с высокой задержкой и высокой пропускной способностью?

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

Так, например:

  • задержка больше, чем 900 мс задержка (круглые время срабатывания)
  • полоса пропускания 512 кбит/с

[1] т.е. использовать большую часть доступной полоса пропускания

ответ

2

При использовании rsync в условиях высокой задержки и высокой пропускной способности ваша скорость передачи данных будет медленнее [1], чем у нашей доступной пропускной способности. Для приведенного примера ожидаемая скорость передачи будет составлять 56,25 KiB или менее 10% доступной полосы пропускания.

Одним из решений является запуск N rsync процессы параллельно:

#!/bin/bash 

# tar up the files 
tar -cvzf x.tar ${list_of_files} 

# [optional] 
# compute the md5sum 
md5sum x.tar > x.tar.md5sum 

# break the large tar file into N files (i.e. x.tar would become x.tar.1 ... x.tar.N) 
# TODO 

# start N `rsync` processes in parallel 
for ((i=1;i<=N;i++)); do rsync -avzh x.tar.${i} ${destination} & done 

# wait for the transfers to finish 
wait && echo "success" || echo "fail" && exit 1 

# stitch the N files back together into x.tar 
TODO 

# [optional... but gives everyone a nice warm and fuzzy] 
# copy the md5sum and verify your files (even though `rsync` already did so) 
scp x.tar.md5sum ${destination} 
ssh ${destination_machine} "cd ${path} && md5sum -c x.tar.md5sum && echo 'PASS (files verified with md5sum)' || echo 'FAIL (file verification failed md5sum)' && exit 1" 
# done! 

[1] Почему ваша скорость передачи данных медленно в этом примере?

Одним словом: bandwidth-delay product (три слова на самом деле)

Это пример высокой латентностью и высокой пропускной способности линии связи. Некоторые могут использовать инструмент, например rsync, для передачи своих данных. Если вы запускаете один экземпляр rsync (или что-то подобное, которое также использует протокол TCP или TCP), вы не будете использовать доступную пропускную способность.

Причина замедления связана с природой TCP-трафика (или TCP-подобных протоколов), требующим ACK, перед отправкой большего количества данных. Эта проблема официально упоминается как bandwidth-delay product. Каждая скорость соединения будет ограничена задержкой, превышающей полосу пропускания.

В частности, для приведенного примера теоретическая скорость будет составлять 56,25 KiB или менее 10% от вашей доступной полосы пропускания.

ограничение за подключение. Таким образом, используя только одинrsync для передачи вашего файла не будет полностью использовать вашу пропускную способность.

Решение 1:

Используйте другую программу, которая не использует TCP-подобный протокол, но по-прежнему гарантирует ваши данные с помощью других средств (быстрый поиск Google что-то вроде uftp, который передает данные по протоколу UDP вместо TCP). К сожалению, uftp по-прежнему не во многих дистрибутивах с этим письмом.

Решение 2:

Продолжайте использовать один rsync и изменять сетевые параметры TCP с обеих сторон, но это требует специальных знаний, которые я не всегда есть на данный момент.

Решение 3:

Запуск нескольких rsync процессы параллельно, как описано в начале этого вопроса.

+0

* изменить сетевые параметры TCP * [TCP-масштабирование] (https://en.wikipedia.org/wiki/TCP_window_scale_option) должно работать теоретически, и оно должно быть включено в ОС OP. Конечно, теория - это не реальность. –

+0

Автор [UFTP] (http://uftp-multicast.sourceforge.net) здесь. Даже если это не в вашем дистрибутиве, создание из источника должно быть довольно простым. Также доступны бинарные файлы для Windows. – dbush