`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 MB/秒、2 分で 14 - 22 MB/秒、3 分で 5 - 7 MB/秒、4 分で 5 - 22 MB/秒、5 分で 15 - 17 MB/秒、6 分で 8 - 24 MB/秒、7 分で 16 - 20 MB/秒
  • 19分、18~21 MB/秒でファンが少し/安定して作動し、音が聞こえる

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

答え1

まず、バックアップ プロセスを人為的に遅くした場合、全体的な電力消費は同じかそれ以上になる可能性があります。これは、操作の合計数が同じで、プロセスにかかる時間が長くなると、CPU が消費するピーク電力は少なくなりますが、消費時間は長くなります。たとえば、プロセスがピーク電力 200W で 10 秒間実行される場合、消費される電力は 10 秒 * 200W = 2000J になります。プロセスが 30W で 100 秒間実行される場合、消費される電力は 100 秒 * 30W = 3000J になります。

プロセス中のコンピュータの応答性の向上を主な目的とする場合は、プロセスの nice 値を上げることを検討してください (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 圧縮/解凍

例えば:

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 が 1 つの CPU スレッドの約 100% を使用していることが示されました。NTFS FUSE ソフトウェアも CPU を 0 以外の量使用していますが、基本的には gzip のせいで CPU に縛られています。負荷平均は約 2 で、2 つのコアとそれぞれ 2 つのスレッドがあるため、システムに過負荷はかかりません。

しかし、CPU の最大使用率を下げることが目標である場合 (ファンが最大限に稼働しているため)、これを実現する簡単な方法の 1 つは、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 使用率が得られるまで、レート制限を高くまたは低く調整してみてください。

関連情報