Como distribuir a computação de `tar czf` por mais tempo?

Como distribuir a computação de `tar czf` por mais tempo?

Meus sistemas ficam sob carga pesada quando executo

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

Os fãs vão ao máximo, etc. Eu gostaria de encontrar um melhor equilíbrio entre computação e consumo de energia. Não consigo monitorar bem o processo. Você não pode desacelerar durante o cálculo quando executado assim. Intuição: acrescente um pouco de sono, mas como. Eu realmente gostaria de ter uma xargsabordagem também, para compará-la com produtos “prontos”. Meus tops

  • eu faço topem repouso

    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 
    
  • Eu faço top1 minuto depois donice 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      
    
  • Eu faço top10 minutos após o início

    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
    

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

  • em 1 min, 13 - 22 MB/s; aos 2 min, 14 - 22 MB/s; aos 3 min, 5 - 7 MB/s; aos 4 min, 5 - 22 MB/s; aos 5 min, 15 - 17 MB/s; aos 6 min, 8 - 24 MB/s; aos 7 min, 16 - 20 MB/s
  • aos 19 min, 18-21 MB/s e ventiladores pequenos/constantes para que você possa ouvi-los

Sistema: Ubuntu 16.04 64 bits
Hardware: Macbook Air 2013-mid

Responder1

Em primeiro lugar, o consumo geral de energia provavelmente será igual ou maior se você desacelerar artificialmente o processo de backup. Simplesmente porque o número total de operações é o mesmo e se o processo demorar mais, a CPU consome menos energia de pico, mas por mais tempo. Por exemplo, se o processo for executado por 10 s com potência de pico de 200W, isso consumirá 10s*200W=2.000J, se o processo for executado por 100s a 30W, isso consumirá 100s*30W=3.000J.

Se você deseja principalmente melhorar a capacidade de resposta do seu computador durante o processo, você pode tentar aumentar a gentileza do processo (nice diminuirá a prioridade da CPU, liberando energia da CPU para outros processos, ionice reduzirá a prioridade do disco, liberando o disco i/ o para outros processos):

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

Isso reduzirá a prioridade do processo para que não atrase outros processos enquanto você trabalha na máquina. Fora isso, ele ainda tentará finalizar o processo o mais rápido possível e fazer seus fãs girarem.

Se você realmente deseja/precisa reduzir o pico de consumo de energia (porque seu sistema superaquece ou os ventiladores acordam você à noite), você pode tentar uma das seguintes abordagens:

Uma solução mais elaborada seria não compactar tudo de uma vez, mas diretório por diretório (coloque esse código em um arquivo chamado backup_home.sh, torne-o executável e execute-o via 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

Observe, entretanto, que o consumo geral de energia não será reduzido, ele simplesmente se espalhará por um período mais longo (aumentando a possibilidade de um arquivo ser alterado durante o backup. Além disso, isso não distribuirá uniformemente a carga, pois provavelmente nem todas as pastas terão o mesmo tamanho. Eu recomendo fortemente que você use bem e deixe o resto para o sistema.

Finalmente, se você realmente quiser se aprofundar nisso, você pode usarEscala de frequência da CPUpara fazer underclock manualmente em sua CPU durante o backup

Responder2

Uma abordagem seria usar compactação paralela para usar todos os núcleos do seu sistema e, portanto, reduzir o tempo de compactação. Isso não reduzirá a carga do seu sistema, mas será carregado no menor tempo possível!

Você pode descobrir como fazer isso nestas perguntas e respostas, por exemplo:utilizando-multi-core-for-targzip-bzip-compression-decompression

Por exemplo:

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

Responder3

O comando

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

é igual a este:

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

Quando você executou top, ele mostrou que o gzip estava usando cerca de 100% de um thread da CPU. O software NTFS FUSE também está usando uma quantidade diferente de zero de CPU, mas essencialmente você está limitado pela CPU por causa desse gzip. Sua média de carga é em torno de 2, e com 2 núcleos de 2 threads cada, você não está sobrecarregando seu sistema.

Mas, se o seu objetivo é reduzir o uso máximo da CPU (porque os ventiladores estão funcionando no máximo), uma maneira fácil de fazer isso é diminuir a taxa dos dados que estão sendo alimentados no gzip.

Você executou o teste

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

e pv indicou que a taxa máxima de transferência para gzip foi de 20MiB/seg. Eu recomendo cortar isso pela metade, dando a -L 10mopção pv.

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

Tente ajustar esse limite de taxa para mais ou para menos até obter o uso de CPU desejado.

informação relacionada