Quero fazer backup de 1 terabyte de dados em um disco externo.
Eu estou usando este comando: tar cf /media/MYDISK/backup.tar mydata
PROBLEMA: Meu pobre laptop congela e trava sempre que uso 100% de CPU ou 100% de disco (se você quiser reagir sobre isso, escreva aqui ) . Então, eu quero ficar com cerca de 50% da CPU e 50% do disco no máximo.
Minha pergunta: Como acelerar a CPU e o disco com o tar
comando?
O Rsync tem uma opção --bwlimit, mas eu quero um arquivo porque 1) existem muitos arquivos pequenos 2) Prefiro gerenciar um único arquivo do que uma árvore. É por isso que eu uso tar
.
nice
não vai impedir que 100% da CPURespostas:
Você pode usar
pv
para acelerar a largura de banda de um tubo. Como o seu caso de uso é fortemente vinculado a E / S, a sobrecarga adicional da CPU de passar por um canal não deve ser perceptível e você não precisa fazer nenhuma otimização da CPU.fonte
apt-get install pv
. Eu recomendo adicionar `-b` depois-L 1m
: dessa forma, um contador de bytes incrementais será impresso, atualizado a cada segundo. Desta forma, você sabe quantos bytes foram escritos até agoratar czf
vez detar cf
), o limite se refere à saída compactada (portanto,-L 1m
a gravação no disco não excederá 1 MB / s .... mas a leitura do disco provavelmente estará entre 1 MB / s e 5 MB / s, dependendo do seu tipo de conteúdo)Você pode tentar a ferramenta cpulimit, que limita a porcentagem da CPU. Não é uma ferramenta padrão, portanto você precisará instalá-la. Aqui está um trecho rápido do README:
Então, eu recomendaria o ionice para limitar o uso de E / S, embora seja o acesso simultâneo que seria limitado, e não o rendimento máximo ... Mesmo assim, aqui está como usá-lo:
fonte
Você realmente não pode obter um processo para executar menos . Você pode usar
nice
para dar uma prioridade mais baixa, mas isso é em relação a outros processos. A maneira de executar o cooler da CPU durante a execução de um processo éusleep(3)
forçar o processo para sair do estado de execução por um certo período de tempo, mas isso envolveria a aplicação de patchestar
ou o uso doLD_PRELOAD
mecanismo para fornecer uma função corrigidatar
usa muito (por exemplo,fopen(3)
)Eu suspeito que suas melhores soluções alternativas são as de hardware que você mencionou no SuperUser: manter o laptop fresco e / ou diminuir o clock da CPU.
Uma solução alternativa irritante, mas possivelmente viável (um kludge, na verdade) funciona em um nível 'macroscópico'. Em vez de
tar
executar 100ms a cada 200ms, você pode executar um segundo a cada dois. Nota: este é um argumento horrível e horrível. Mas ei, pode até funcionar!O primeiro
sleep
ajusta o tempo de suspensão, o segundo ajusta o tempo de execução. Tal como está agora, possui um ciclo de trabalho de 50%. Para manter a temperatura baixa, você provavelmente precisará reduzir o ciclo de trabalho para talvez 25% ou menos (1 segundo de execução, 3 segundos de sono = 1 de cada 4 segundos = 25% de ciclo de trabalho). O comando shellsleep
pode levar tempos fracionários, a propósito. Então você poderia até dizersleep 0.1
. Mantenha-o acima de 0,001 apenas para ter certeza e não esqueça que a execução do script também aumenta o tempo.fonte
Uma maneira mais geral de limitar a CPU é usar
/sys
. Parece o que você deseja, de qualquer maneira, já que outras coisas que nãotar
são capazes de executar tarefas computacionalmente caras, é exatamente o que você está vendotar
fazer mais.A maneira de fazer isso é:
/sys/devices/system/cpu/cpuX/cpufreq
para cada uma de suas CPUs (substituacpuX
por cada CPU).scaling_available_frequencies
para ver quais frequências sua CPU suporta.echo 1234567 > scaling_max_freq
Isso impedirá que a CPU fique acima da frequência especificada.
fonte