
После нескольких минут копирования он становится все медленнее и медленнее. Почему?
Например, скорость начинается с 20 МБ/с, а когда заканчивается, она составляет 10 МБ/с.
Различные файлы, большие, маленькие и т. д.
ОБНОВЛЕНИЕ: вопрос касается различных операционных систем, поэтому это «общий вопрос»
решение1
Это поведение не является специфичным для вашего флэш-накопителя, вы можете видеть это и на жестких дисках. Это связано с механизмом кэширования, который большинство операционных систем и дисков используют для ускорения небольших записей.
20 МБ/с, которые вы видите, — это данные, записываемые в дисковый кэш (обычно быстрый, но небольшой объем памяти). После заполнения кэша его необходимо сбросить на диск — и теперь вы ограничены более медленным диском.
Пример 1: Эффект действительно заметен, если у вас есть контроллер с большим кэшем (например, хороший контроллер RAID5), где ~500 МБ данных могут быть быстро кэшированы, прежде чем их придется сбрасывать на диск.
Пример 2: Вы можете увидеть кэш в действии, если вытащите флэш-накопитель в то же время, когда копирование файла "завершилось". В этот момент ваш файл разделен между диском и кэшем - поэтому копирование "завершено" с точки зрения операционной системы, но контроллеру диска все еще нужно записать то, что осталось в кэше, на диск. Если вы вставите флэш-накопитель обратно и проверите файл, вы увидите, что он не весь там.
Отказ от ответственности: эти примеры не будут работать, если в вашей операционной системе/на диске не включено кэширование записи.
Далее, если этонеткэширование диска в работе, то, скорее всего, вы видите эффект фрагментации. По мере того, как диск заполняется все больше и больше, остается все меньше непрерывного свободного пространства, и файловой системе приходится работать усерднее, чтобы найти места для размещения ваших файлов.
решение2
Хотя кэширование и вызывает некоторые из этих факторов, оно не является единственным фактором. Если бы кэширование было единственным фактором, то мы бы ожидали, что скорость записи быстро упадет с нескольких сотен МБ/с до фактической скорости записи диска очень быстро и останется на этом уровне до конца записи. Однако это не то, что я наблюдал при выполнении больших передач на диск и с него (например, при записи загрузочных образов). Вместо этого я наблюдаю, что скорость постепенно снижается в течение всей операции.
Это замедление вызвано остаточной намагниченностью данных на флэш-чипе(ах), используемых для хранения данных, что приводит к необходимости записи некоторых блоков более одного раза.
Внутри флэш-чипа есть блок данных, в который можно записать данные. При записи компьютер может сделать только две вещи: стереть весь блок или изменить некоторые (или все) биты в блоке с 0 на 1.
Однако некоторые из этих блоков лучше других, особенно в низкокачественных флэш-накопителях, и в результате при записи на них новых данных некоторые биты иногда могут переключаться обратно на 0 сами по себе сразу после записи и не изменяться. Таким образом, при записи в блок ОС должна проверить, что все данные были записаны правильно, и если это не так, она должна переделать блок, записав те же данные в тот же блок два или три раза, пока данные не застрянут.
Итак, когда ваш компьютер записывает кучу данных на флэш-накопитель, вот (не совсем точное, но достаточно хорошее) объяснение того, как он это делает:
- Возьмите первый набор блоков, которые нужно записать, и запишите их все.
- Перечитайте все блоки, которые мы только что написали, и составьте список тех, которые не совпадают.
- Напишите следующий набор блоков вместе с теми, которые были написаны неправильно в прошлый раз.
- Повторяйте пункты 2–3, пока все блоки не будут написаны правильно.
Когда компьютер записывает данные на диск, он сообщает о скорости, с которой он записывает блоки на диск в первый раз. Поскольку ему также придется перезаписывать более ранние блоки в то же время, общая пропускная способность, которая может быть использована для чистых блоков, снижается по мере увеличения числа перезаписей, которые также должны быть выполнены. Таким образом, кажущаяся скорость записи со временем уменьшается.
решение3
Я страдал от этого на OSX и мне удалось значительно улучшить ситуацию. Сначала я остановил индекс Spotlight от попыток индексировать целевой диск. Затем я остановил генерацию миниатюр на целевом диске (копирование 55K изображений)
И в конце концов я отказался от использования графического интерфейса и перешел на командную строку с помощью rsync -a source target
Вероятно, аналогичные действия можно выполнить и для других операционных систем.
решение4
Когда файл записывается на диск, будь то флэш-накопитель USB или жесткий диск, данные НЕ / НИКОГДА не считываются обратно, чтобы проверить, совпадают ли они. Это заняло бы целую вечность. Проверка записи выполняется оборудованием (проверка циклической избыточности), и если возникает ошибка, она отправляется обратно в приложение с оборудования, обнаружившего ошибку. Возникающее торможение и замедление (даже до паузы) вызвано тем, что ЦП пишет быстрее, чем устройство может с этим справиться. Вы не обнаружите этого на внутренних жестких дисках. Вы никогда не увидите, что на самом деле происходит в ОС Windows, но в Linux вы действительно можете увидеть, что ЦП приостанавливается, пока оборудование USB не скажет «ОК для продолжения».