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

Что быстрее: cp -R или распаковка файлов tar.gz?

У меня есть несколько файлов tar.gz, которые составляют много гигабайт в системе CentOS. Большинство файлов tar.gz на самом деле довольно маленькие, но файлы с изображениями большие. Один - 7,7 Гбит / с, другой - около 4G, а пара - около 1 Гбит / с.

Я уже однажды распаковал файлы, и теперь мне нужна вторая копия всех этих файлов.

Я предполагал, что копирование распакованных файлов будет быстрее, чем их повторная распаковка. Но я начал запускать cp -R около 10 минут назад, и пока копируется менее 500 МБ. Я уверен, что распаковка прошла быстрее.

Я прав?

И если да, то почему? Кажется, не имеет смысла, что распаковка будет быстрее, чем просто дублирование существующих структур.

Рассмотрим два сценария:

  • Копирование требует, чтобы вы прочитали полный файл с диска и записали его на диск
  • Tar-Gzip требует, чтобы вы прочитали файл меньшего размера с диска, распаковали и записали его на диск.

Если ваш ЦП не обременен процессом декомпрессии, очевидно, что операции ввода-вывода ограничены. По этому аргументу (и поскольку вы должны записать одинаковое количество в обоих случаях), чтение меньшего файла (tar.gz) занимает меньше времени, чем чтение большего файла. Также экономится время, потому что читать один файл быстрее, чем читать много маленьких файлов.

Экономия времени зависит от разницы между временем, затрачиваемым на чтение (ввод-вывод) и распаковку (ЦП). Следовательно, для файлов, которые минимально сжимаются (например, уже сжатые файлы, такие как mp3, jpg, zip и т. Д.), Где время, необходимое для распаковки, вероятно, будет больше, чем время, сэкономленное на операции чтения, оно фактически будет медленнее распаковывать, чем копировать.

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

Чтение очень маленького файла происходит намного быстрее, чем чтение кучи больших файлов. Обычно это верно, даже если ЦП должен распаковать его.