Как распределить вычисления `tar czf` на более длительное время?

Как распределить вычисления `tar czf` на более длительное время?

Мои системы подвергаются большой нагрузке, когда я работаю

sudo tar czf /media/masi/ntfsDisc/backup_home.tar.gz $HOME/

Вентиляторы работают на максимум и т. д. Хотелось бы найти лучший баланс между вычислением и энергопотреблением. Я не могу достаточно хорошо контролировать процесс. Вы не можете замедлить его во время вычислений, когда работаете таким образом. Интуиция: добавить немного сна, но как. Мне бы xargsтоже очень хотелось иметь подход, чтобы сравнить его с «готовыми» продуктами. Мои топы

  • Я делаю это topв состоянии покоя

    top - 09:34:34 up 19:14,  1 user,  load average: 0.52, 0.42, 0.24
    Tasks: 236 total,   1 running, 235 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.5 us,  1.1 sy,  0.0 ni, 97.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 s
    KiB Mem :  8115460 total,   257036 free,  3006452 used,  4851972 buff/cache
    KiB Swap:  8326140 total,  8321852 free,     4288 used.  4369448 avail Mem 
    
  • Я делаю top1 минуту послеnice tar czf ...

    top - 09:48:49 up 19:28,  1 user,  load average: 1.63, 0.99, 0.62
    Tasks: 244 total,   2 running, 242 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.4 us,  0.9 sy, 24.1 ni, 73.2 id,  0.3 wa,  0.0 hi,  0.1 si,  0.0 s
    KiB Mem :  8115460 total,   127644 free,  3237648 used,  4750168 buff/cache
    KiB Swap:  8326140 total,  8321868 free,     4272 used.  4092404 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   
    28831 root      30  10    4640   1600   1316 R  97.7  0.0   1:43.24 gzip      
     9573 root      20   0   21196   2860   1772 S   2.3  0.0  13:16.29 mount.nt+ 
      842 root      20   0  380136  63780  48568 S   1.7  0.8  23:57.16 Xorg      
    
  • Я делаю topчерез 10 минут после начала

    top - 10:00:33 up 19:40,  1 user,  load average: 1.98, 2.13, 1.50
    Tasks: 253 total,   2 running, 251 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  2.6 us,  2.8 sy, 21.4 ni, 73.0 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 s
    KiB Mem :  8115460 total,   130408 free,  4432384 used,  3552668 buff/cache
    KiB Swap:  8326140 total,  8321948 free,     4192 used.  2837616 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   
    28831 root      30  10    4640   1600   1316 R  87.0  0.0  11:49.08 gzip      
     9573 root      20   0   21196   2860   1772 S  13.6  0.0  14:45.84 mount.nt+ 
      842 root      20   0  384936  66304  51092 S   2.0  0.8  24:18.44 Xorg      
    28830 root      30  10   37584   3096   2688 S   1.3  0.0   0:14.50 tar       
     1674
    

Мой PVtar cf - $HOME/ | pv | gzip > media/masi/ntfsDisc/testbackup.tar.gz

  • в 1 мин, 13 - 22 МБ/с; в 2 мин, 14 - 22 МБ/с; в 3 мин, 5 - 7 МБ/с; в 4 мин, 5 - 22 МБ/с; в 5 мин, 15 - 17 МБ/с; в 6 мин, 8 - 24 МБ/с; в 7 мин, 16 - 20 МБ/с
  • на 19 минуте, 18-21 МБ/с и вентиляторы работают медленно/постоянно, так что вы можете их услышать

Система: Ubuntu 16.04 64 бит
Оборудование: Macbook Air 2013-середина

решение1

Прежде всего, общее энергопотребление, скорее всего, будет таким же или больше, если вы искусственно замедлите процесс резервного копирования. Просто потому, что общее количество операций одинаково, и если процесс занимает больше времени, процессор потребляет меньше пиковой мощности, но в течение большего времени. Например, если процесс выполняется в течение 10 с при пиковой мощности 200 Вт, он потребит 10 с*200 Вт=2000 Дж, если процесс выполняется в течение 100 с при 30 Вт, он потребит 100 с*30 Вт=3000 Дж.

Если вы в основном хотите улучшить отзывчивость вашего компьютера во время процесса, вы можете попробовать увеличить niceness процесса (nice снизит приоритет процессора, освободив мощность процессора для других процессов, ionice снизит приоритет диска, освободив дисковый ввод-вывод для других процессов):

sudo nice -n19 ionice -c2 -n7 tar czf /media/masi/ntfsDisc/backup_home.tar.gz $HOME/

Это снизит приоритет процесса, чтобы он не замедлял другие процессы, пока вы работаете на машине. Кроме этого, он все равно попытается завершить процесс как можно быстрее и заставит ваши вентиляторы раскручиваться.

Если вы действительно хотите/нужно снизить пиковое энергопотребление (из-за перегрева системы или из-за того, что вентиляторы будят вас ночью), вы можете попробовать один из следующих подходов:

Более сложным решением было бы не сжимать все сразу, а сжимать каталог за каталогом (поместить этот код в файл backup_home.sh, сделать его исполняемым и запустить через sudo backup_home.sh):

#!/bin/bash
OLDIFS=$IFS
IFS='
'
for dir in $(ls -d1 $HOME/*); do
   nice tar rf /media/masi/ntfsDisc/backup_home.tar $HOME/
   sleep 10
done;
gzip /media/masi/ntfsDisc/backup_home.tar
IFS=$OLDIFS

Однако следует отметить, что общее энергопотребление не уменьшится, а просто распределится на более длительный период времени (увеличивая вероятность изменения файла во время резервного копирования). Кроме того, это не позволит равномерно распределить нагрузку, поскольку, скорее всего, не все папки будут иметь одинаковый размер. Я настоятельно рекомендую вам использовать nice и предоставить все остальное системе.

Наконец, если вы действительно хотите погрузиться в это, вы можете использоватьМасштабирование частоты ЦПвручную снизить частоту процессора на время резервного копирования

решение2

Одним из подходов было бы использование параллельного сжатия для использования всех ядер вашей системы и, следовательно, сокращения времени сжатия. Это не снизит нагрузку на вашу систему, но она будет загружена в течение кратчайшего времени!

Как это сделать, вы можете узнать, например, в этом разделе вопросов и ответов:использование-многоядерного-для-targzip-bzip-сжатия-распаковки

Например:

tar cf - paths-to-archive | pigz > archive.tar.gz

решение3

Команда

tar czf /media/masi/ntfsDisc/backup_home.tar.gz $HOME/

то же самое, что и это:

tar cf - $HOME/ | gzip > /media/masi/ntfsDisc/backup_home.tar.gz

Когда вы запустили top, он показал, что gzip использует около 100% одного потока процессора. Программное обеспечение NTFS FUSE также использует ненулевое количество ресурсов процессора, но по сути вы ограничены процессором из-за этого gzip. Ваша средняя нагрузка составляет около 2, и с 2 ядрами по 2 потока каждое вы не перегружаете свою систему.

Но если ваша цель — снизить максимальную загрузку ЦП (поскольку вентиляторы работают на максимуме), один из простых способов сделать это — замедлить скорость передачи данных в gzip.

Вы провели тест

tar cf - $HOME/ | pv | gzip > /media/masi/ntfsDisc/testbackup.tar.gz

и pv указал пиковую скорость передачи в gzip 20МиБ/сек. Я бы рекомендовал сократить ее вдвое, предоставив pv опцию -L 10m.

tar cf - $HOME/ | pv -L 10m | gzip > /media/masi/ntfsDisc/testbackup.tar.gz

Попробуйте увеличить или уменьшить этот предел, пока не получите желаемую загрузку ЦП.

Связанный контент