Наверное туповатый вопрос, поскольку по логике разархивация должна быть дольше, тем более если есть сжатие. Но всё же, вдруг не всё так просто как кажется.
Что будет быстрее, скопировать папку с файлами в 1гб, или же разархивировать архив с точно такими же файлами без сжатия.
Ответ
Думаю все дело в I/O записи, что обычно ниже чем чтения
Тесты
~$ du -sh test/
5.2G test/
Прямое копирование:
~$ time cp -R tmp/ test/
real 0m34.953s
user 0m0.084s
sys 0m5.110s
Сжатие, копирование, распаковка:
~$ time { tar cf tmp.tar tmp && mv tmp.tar test/ && tar xf test/tmp.tar -C test/; }
real 1m1.619s
user 0m0.563s
sys 0m12.964s
Копирование уже сжатого каталога:
~$ time cp tmp.tar test/
real 0m26.251s
user 0m0.028s
sys 0m4.557s
Посчитаем колчиество чтения-записи
Для архива:
~$ strace cp tmp.tar test/ 2>&1 | grep -c "read\|write"
55259
~$ strace cp tmp.tar test/ 2>&1 | grep -c "write"
27623
Для каталога:
~$ strace cp -R tmp test/ 2>&1 | grep -c "read\|write"
70955
~$ strace cp -R tmp test/ 2>&1 | grep -c "write"
32455
В итоге разница между количеством записей для каталога и пакета вышла 4832, что при копирование на медленный носитель, может значительно увеличить время ожидания.
При хорошем CPU имеет смысл паковать все предварительно перед копированием.
00
Комментариев нет:
Отправить комментарий