Назад | Перейти на главную страницу

Скорость копирования и вставки очень низкая для большого количества файлов в Windows

Я провел следующий тест. Я создал папку, содержащую 15000 файлов по 400 байтов, используя этот пакет:

@ECHO off
SET times=15000

FOR /L %%i IN (1,1,%times%) DO (
    fsutil file createnew filename%%i.txt 400
)

затем я копирую его на свой компьютер с Windows, используя эту команду:

robocopy LargeNumberOfFiles\ LargeNumberOfFiles2\

После его завершения я вижу, что скорость передачи была 915810 байт / сек, это меньше 1 МБ / с. На копирование 7 МБ у меня ушло несколько секунд. Обратите внимание, что это очень медленно.

Я пробовал то же самое с папкой с одним файлом размером 50 Мбайт и скоростью передачи 1219512195 байт / сек. (да, ГБ / с) мгновенно.

Почему копирование большого количества файлов занимает так много времени - ресурсы в файловой системе Windows?

Обратите внимание, что я пытался сделать то же самое в системе Linux, которая работает на том же компьютере в виртуальной машине (проигрыватель vmware) с файловой системой ext3.

Я использую команду cp, и копирование происходит мгновенно!

Также обратите внимание на следующее:

Для выполнения ваших 15000 файлов требуется не менее 60000 транзакций HD:

  1. Прочтите исходный файл
  2. Назначьте дескриптор файла нового места назначения
  3. Запишите целевой файл
  4. Обновите дескриптор файла назначения

Вероятно, вы тоже используете диск SATA (просто догадывайтесь), который не поддерживает очередь команд, а это означает, что диску придется обрабатывать все 60000 операций индивидуально. Высококачественные диски и массивы SCSI повысили бы производительность, поставив в очередь несколько операций в аналогичных местах перед их выполнением.

Для вашей единственной копии файла потребовалось как минимум 4 (хотя, вероятно, несколько больше, в зависимости от обстоятельств); так же, как прежде. Может быть больше 4, если есть фрагменты файла при операциях чтения или записи.

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

Наиболее вероятная причина заключается в том, что ваши системы Windows создают превью эскизов при копировании и вставке. Используйте инструмент командной строки, например Робокопиявместо этого.