「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 - 22MB/秒、2分、14 - 22MB/秒、4分、5 - 22MB/秒、15 - 17MB/秒 6分、8~24MB/秒、7分、16~20MB/秒
  • 19分、18-21MB/秒、ファンが小さく安定しているので聞くことができる

システム:Ubuntu 16.04 64ビット
ハードウェア:Macbook Air 2013-mid

答え1

第1に、人為的にバックアップ処理速度を遅くすると、全体的な消費電力が等しくなるか又は高まる可能性がある。その理由は、単に全体のジョブ数が同じであるため、処理時間が長いと、CPUが消費するピーク電力は少なくなりますが、時間がかかるためです。たとえば、プロセスが10秒間200Wのピーク電力で実行されると、10秒* 200W = 2000Jを消費します。プロセスが100秒間30Wで実行されると、100秒* 30W = 3000Jを消費します。

処理中にコンピュータの応答性を主に向上させたい場合は、プロセスのニースを増やそうとします。 (niceはCPUの優先順位を下げて他のプロセスのCPU性能を確保し、ioniceはディスクの優先順位を下げてディスクの空き容量を確保します。)他のプロセスの場合はi / o):

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を使用し、残りをシステムで実行することをお勧めします。

最後に、本当に詳しく知りたい場合は、次のものを使用できます。CPU周波数スケーリングバックアップ中のCPU周波数を手動で減らします。

答え2

1つのアプローチは、システムの全てのコアが使用されるように並列圧縮を使用して圧縮時間を短縮することである。システムの負荷は減りませんが、できるだけ短時間でロードされます。

このQ&Aでこれを行う方法の例を見つけることができます。targzip-bzip-compression-decompression のマルチコア活用

たとえば、

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

これを実行すると、topgzipが1つのCPUスレッドを約100%使用していることがわかります。 NTFS FUSE ソフトウェアもゼロ以外の CPU を使用しますが、デフォルトでは gzip によって CPU が制限されます。負荷平均は約2で、それぞれ2つのスレッドを持つ2つのコアがあるため、システムは過負荷になりません。

しかし、目標が最大CPU使用率を減らすことである場合(ファンが最大速度で実行されるため)、簡単なアプローチはgzipに供給されるデータレートを減らすことです。

あなたはテストを見ました

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

pvはgzipの最大転送速度が20MiB /秒であることを意味します。このオプションをpvに提供して-L 10m半分にすることをお勧めします。

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

必要なCPU使用率が得られるまで、速度制限を高くまたは低く調整してみてください。

関連情報