Je souhaite sauvegarder 1 téraoctet de données sur un disque externe.
J'utilise cette commande: tar cf /media/MYDISK/backup.tar mydata
PROBLÈME: Mon pauvre ordinateur portable se bloque et se bloque chaque fois que j'utilise 100% de CPU ou 100% de disque (si vous voulez réagir à ce sujet, veuillez écrire ici ) . Je veux donc rester à environ 50% du processeur et 50% du disque max.
Ma question: comment limiter le CPU et le disque avec la tar
commande?
Rsync a une option --bwlimit, mais je veux une archive car 1) il y a beaucoup de petits fichiers 2) Je préfère gérer un seul fichier plutôt qu'une arborescence. Voilà pourquoi j'utilise tar
.
nice
n'empêchera pas 100% d'utilisation du CPURéponses:
Vous pouvez utiliser
pv
pour limiter la bande passante d'un tuyau. Étant donné que votre cas d'utilisation est fortement lié aux E / S, la surcharge supplémentaire du processeur liée au passage dans un canal ne devrait pas être perceptible, et vous n'avez pas besoin d'effectuer de limitation du processeur.la source
apt-get install pv
. Je recommande d'ajouter `-b` après-L 1m
: de cette façon, un compteur d'octets incrémentiel sera imprimé, mis à jour toutes les secondes. De cette façon, vous savez combien d'octets ont été écrits jusqu'à présenttar czf
place detar cf
), la limite se réfère à la sortie compressée (donc avec-L 1m
votre écriture sur le disque ne dépassera pas 1 Mo / s ... mais la lecture de votre disque sera probablement entre 1 Mo / s et 5 Mo / s, selon votre type de contenu)Vous pouvez essayer l' outil cpulimit qui limite le pourcentage CPU. Ce n'est pas un outil standard, vous devrez donc l'installer. Voici un bref extrait du README:
Ensuite, je recommanderais ionice pour limiter l'utilisation des E / S, bien que ce soit l'accès simultané qui serait limité, pas le débit maximal ... Néanmoins, voici comment l'utiliser:
la source
Vous ne pouvez pas vraiment faire en sorte qu'un processus s'exécute moins . Vous pouvez utiliser
nice
pour lui donner une priorité inférieure, mais c'est en relation avec d'autres processus. La façon d'exécuter le refroidisseur de processeur pendant l'exécution d'un processus consiste à utiliserusleep(3)
pour forcer le processus à sortir de l'état d'exécution un certain temps, mais cela impliquerait soit de corrigertar
soit d'utiliser leLD_PRELOAD
mécanisme pour fournir une fonction corrigée quitar
utilise beaucoup (par exemplefopen(3)
).Je soupçonne que vos meilleures solutions de contournement sont celles que vous avez mentionnées sur SuperUser: garder l'ordinateur portable au frais et / ou réduire l'horloge du processeur.
Une solution de contournement ennuyeuse mais possiblement viable (un coup de coude, vraiment) fonctionne à un niveau «macroscopique». Plutôt que de faire
tar
courir 100 ms toutes les 200 ms, vous pouvez le faire courir une seconde sur deux. Remarque: il s'agit d'un horrible, horrible kludge. Mais bon, ça pourrait même marcher!Le premier
sleep
ajuste le temps de sommeil, le second ajuste le temps d'exécution. À l'heure actuelle, il a un cycle d'utilisation de 50%. Pour maintenir la température basse, vous devrez très probablement réduire le cycle de service à peut-être 25% ou moins (1 seconde de course, 3 secondes de sommeil = 1 de toutes les 4 secondes = 25% de cycle de service). La commande shellsleep
peut prendre des temps fractionnaires, soit dit en passant. On pourrait même diresleep 0.1
. Gardez-le au-dessus de 0,001 juste pour être sûr, et n'oubliez pas que l'exécution du script ajoute du temps aussi.la source
Une manière plus générale de limiter le CPU est d'utiliser
/sys
. Cela semble être ce que vous voulez de toute façon, car d'autres choses que celles quitar
sont capables d'effectuer des tâches de calcul coûteuses, c'est juste que vous voyez letar
faire le plus.Pour ce faire, vous devez:
/sys/devices/system/cpu/cpuX/cpufreq
chacun de vos CPU (remplacez-lecpuX
par chaque CPU).scaling_available_frequencies
pour voir quelles fréquences votre CPU prend en charge.echo 1234567 > scaling_max_freq
Cela empêchera le CPU de dépasser la fréquence spécifiée.
la source