장기간 `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/s; 2분에 14~22MB/s; 3분에 5~7MB/s; 4분에 5 - 22MB/s; 5분에 15~17MB/s; 6분에 8 - 24MB/s; 7분에 16 - 20MB/s
  • 19분, 18~21MB/s, 팬이 거의/꾸준하게 켜져 있어 들을 수 있음

시스템: Ubuntu 16.04 64비트
하드웨어: Macbook Air 2013-mid

답변1

우선, 인위적으로 백업 프로세스 속도를 늦추면 전체 전력 소비량이 동일하거나 그 이상이 될 가능성이 높습니다. 총 작업 수가 동일하고 프로세스가 더 오래 걸리면 CPU는 피크 전력을 덜 소비하지만 시간은 더 길어집니다. 예를 들어, 프로세스가 200W의 피크 전력에서 10초 동안 실행되면 10초*200W=2000J를 소비하고, 프로세스가 30W에서 100초 동안 실행되면 100초*30W=3000J를 소비합니다.

주로 프로세스 중 컴퓨터의 응답성을 향상시키고자 한다면 프로세스의 niceness를 높여볼 수 있습니다. (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

한 가지 접근 방식은 시스템의 모든 코어를 사용하여 압축 시간을 줄이기 위해 병렬 압축을 사용하는 것입니다. 시스템의 로드가 줄어들지는 않지만 가장 짧은 시간 동안 로드됩니다!

예를 들어 이 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

를 실행했을 때 topgzip이 하나의 CPU 스레드를 약 100% 사용하고 있는 것으로 나타났습니다. NTFS FUSE 소프트웨어도 0이 아닌 양의 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 사용량을 얻을 때까지 속도 제한을 높거나 낮게 조정해 보세요.

관련 정보