По гигабитному соединению Teracopy работает со скоростью 31 МБ / с, а в Windows 8 - со скоростью ~ 109 МБ в секунду?
Что именно вызывает это? И можно ли включить такие скорости через Teracopy? Я действительно копаю дополнительные функции, которые есть у Teracopy, теперь я наверняка буду скучать по ним:D
Два слова: проверка и кеш
Техническое объяснение
Это общая процедура для копирования файла с помощью проводника Windows:
- Считать порцию данных с исходного диска в память
- Отправить чанк через систему (ы)
- Запишите чанк на целевой диск
- Если это еще не сделано, вернитесь к шагу 1
Это кажется простым и достаточно коротким. С помощью этого алгоритма передачи каждый байт файла обрабатывается только два раза: одно чтение, одна запись.
Но кроме того, Windows использует память (как и сам диск) для кэширования некоторых данных. Таким образом, вместо того, чтобы ждать, пока предыдущий блок завершит запись, а затем прочитать следующий блок, можно прочитать новый блок, пока предыдущий еще записывается. Очевидно, что это не может длиться вечно, но Windows может использовать всю оставшуюся свободную память в качестве временного буфера для хранения большей части, если не всей, файла, который читается в памяти.
Вы можете увидеть кеширование в действии, скопировав большой файл или папку, содержащую много файлов, с одного диска на другой, а затем сразу же сравнив их. В этот момент сравнение будет намного быстрее, чем если бы вы сделали это позже, потому что файлы все еще находятся в памяти, поэтому они фактически не читают их с дисковода (-ов).
Поскольку память очень быстрая, а скорость чтения, как правило, немного выше скорости записи, конечная скорость передачи в конечном итоге ограничивается только скоростью записи целевого диска.
Teracopy может делать две вещи, которые могут замедлить передачу файлов, что не делает Explorer:
В отличие от Проводника, который проверяет только основные ошибки во время передачи, Teracopy может фактически проверить, что данные были правильно записаны на целевой диск, чтобы предотвратить повреждение данных, которое может произойти из-за проблем на носителе передачи (сеть / кабель диска / и т.д.).) или сам диск (плохой сектор и т. д.) Это означает, что он должен прочитать файл из места назначения, чтобы сравнить его с оригиналом.
В зависимости от используемого алгоритма и размера файла, проверка может быть оптимизирована всего лишь (но не менее) тремя операциями на диске для каждого файла / файла-чанка, в отличие от двух операций Explorer: прочитать файл из источника, записать файл до места назначения, и прочитайте файл от места назначения.
Посмотрите, что происходит, когда вы копируете файл с помощью Teracopy (с алгоритмом, оптимизированным для жесткого диска):
- Прочитать чанк с исходного диска
- Хэш чанка прочитанного с исходного диска
- Отправить чанк через систему (ы)
- Запишите это на целевой диск
- Очистить кеши
- Прочитать чанк обратно с целевого диска
- Хешировать чанк с диска назначения
- Сравните хэши
- Определите следующий шаг
- Если хэши не совпадают, выведите ошибку и предложите пользователю выполнить действие
- Если хэши совпадают и не завершены, вернитесь к шагу 1
Проблема в том, что если вы кэшируете файлы во время передачи, сравнение становится бесполезным, потому что вы не читаете фактические данные на целевом диске, вы читаете копию, кэшированную в памяти из источника. Поэтому для правильной проверки необходимо очистить кеш. Это может быть сделано после каждого чтения и записи (что является дополнительной операцией, которая в конечном итоге выполняется бесчисленное количество раз для файлов любого значительного размера), или только один раз после передачи всего файла.
Согласно скриншоту ниже, TeraCopy выполняет проверку после передачи файлов, а не во время. Это означает, что вместо этого он использует оптимизированный для CPU/RAM алгоритм передачи:
- Прочитать чанк с исходного диска
- Отправить чанк через систему (ы)
- Запишите это на целевой диск
- Если это еще не сделано, вернитесь к шагу 1
- Копирование завершено, поэтому очистите кэши и проверяйте
- Прочитать чанк с исходного диска
- Хешировать чанк с диска назначения
- Прочитать кусок с целевого диска
- Хешировать чанк с диска назначения
- Сравните хэши
- Определите следующий шаг
- Если хэши не совпадают, выведите ошибку и предложите пользователю выполнить действие
- Если хэши совпадают и не завершены, вернитесь к шагу 6
Хотя этот алгоритм создает немного меньшую нагрузку на процессор и оперативную память, он также значительно увеличивает нагрузку на накопитель (и), поскольку теперь каждый файл должен обрабатываться четыре раза: прочитать весь файл из источника, записать его в место назначения. , затем прочитайте его снова из источника и снова из пункта назначения.
(Если бы TeraCopy был оптимизирован для передачи по сети, он мог бы избежать повторной отправки всего файла для проверки и отправки только тех хешей, которые намного меньше, но в настоящее время это не так, и сетевые драйверы обрабатываются одинаково как локальный диск, поэтому он фактически перечитывает источник.)
По умолчанию TeraCopy не проверяет и не использует кэш. Не проверки будет ускорить передачу вверх (или , точнее, не замедлить его), а не используя кэш бы замедлить его.
заявка
Чтобы определить ваши конкретные результаты по скорости, вам необходимо проверить свои настройки, чтобы увидеть, изменили ли вы их. Затем вы можете попытаться приблизиться к тому, какую скорость вы получите с различными настройками (имейте в виду, что они, вероятно, будут взаимодействовать, поэтому сложнее или сложнее сложить).
Тем не менее, давайте сделаем краткий расчет, используя ваши числа:
- Локальная передача файлов: 875 Мбит / с (т. Е. Скорость диска)
- Скорость сети: 1 Гбит / с = 119,21 Мбит / с
- Копирование через проводник Windows: 109 МБ / с
- Копирование через TeraCopy: 34 Мбит / с
Сразу же мы видим, что передача файлов в Explorer практически увеличивает пропускную способность вашей сети. Канал 1 Гбит / с равен 1 000 000 000 бит в секунду, что в двоичных единицах байтов составляет 119 МБ / с. Explorer работает со скоростью 109 МБ / с, а оставшиеся 10 МБ / с (что было довольно забавно, было вашим предыдущим максимумом :^Þ
), легко можно объяснить издержками, фоновой загрузкой и фрагментацией.
(Поскольку скорость передачи почти равна скорости сети, мы можем предположить, что передача файлов в Проводнике является односторонней, и отправляется только одна копия каждого файла.)
Проводник получает 110 Мбит / с для двух обращений к файлу на файл.
Теперь для TeraCopy. Кажется, что TeraCopy набирает почти одну треть скорости Explorer.
В зависимости от того, точно ли в его диалоговом окне настроек указан алгоритм, который он использует, TeraCopy может фактически дважды отправить весь исходный файл, чтобы он мог проверить копию. Сразу же, это сокращает пропускную способность в два раза. Если кеш включен, то это тоже снижает скорость, поскольку приходится ждать окончания каждой записи, прежде чем отправлять новый чанк. В сочетании с проверкой он может сбить его с ног.
Ваша скорость передачи 34 Мбит / с кажется разумной, если у вас есть проверка и кеширование. Если вы выключите проверку и включите кэширование, вы должны получить примерно то же самое, что и Explorer (вы все равно можете получить немного меньше или даже чуть больше в зависимости от того, насколько отличается код передачи файлов, используемый TeraCopy, от кода, который использует Explorer).
Если вы хотите передать почти 10 ГБ, то вы также можете просто попробовать изменить настройки и повторить передачу для каждой из четырех перестановок и записать скорости, которые вы получаете (для безопасности, закажите, чтобы кэш был между прогонами: V+C+, V+C-, V-C+, V-C-
).