"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

첫째, 인위적으로 백업 프로세스 속도를 늦추면 전체 전력 소비량이 같거나 높아질 수 있습니다. 그 이유는 단순히 전체 작업 횟수가 동일하기 때문에 처리 시간이 길면 CPU가 소비하는 피크 전력은 적지만 시간이 더 오래 걸리기 때문입니다. 예를 들어 프로세스가 10초 동안 200W 피크 전력으로 실행되면 10초*200W=2000J를 소비합니다. 프로세스가 100초 동안 30W로 실행되면 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-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이 하나의 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 사용량을 얻을 때까지 속도 제한을 높거나 낮게 조정해 보십시오.

관련 정보