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

Почему tar -c dir | pigz> /mnt/nfs/dir.tgz использовать сеть, затем ЦП циклами вместо обоих сразу (с одним узким местом)

Я хочу наиболее эффективно перенести многотерабайтный каталог в смонтированный каталог nfs по сети 1 Гбит (вероятно, ограничивающий фактор)

3 варианта -

  1. tar и сжать на месте, затем скопировать
  2. скопировать, затем tar и сжать
  3. смола | компресс

Мне кажется очевидным, что №3 должен быть наиболее эффективным, поскольку я читаю и записываю данные только один раз. К сожалению, моя команда (tar -c dir | pigz> /mnt/nfs/dir.tgz) какое-то время кажется tar, затем zip на некоторое время, затем tar на некоторое время ... и сеть простаивает для больших кусков времени, то процессор простаивает.

Я пропустил какой-то вариант?

P.S. Мой вопрос кажется связанным с этот вопрос но на это нет ответа, и на самом деле он не задает точного вопроса о чередовании между сетью и насыщением процессора.

Возможно, вы забываете тот факт, что в UNIX / Linux процесс может одновременно выполнять только одну операцию BLOCKING I / O. Ни в функциях tar, ни в функциях сжатия нет одновременных операций чтения или записи. Ни один из этих двух процессов не обрабатывает данные во время вызовов ввода-вывода.

Существуют фильтры буферизации, которые пытаются уменьшить этот эффект, используя общую память и 2 процесса: один для чтения, а другой для записи.

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