325 votes

Comment créer un pic de processeur avec une commande bash

Je veux créer une charge proche de 100% sur une machine Linux. C'est le système quad core et je veux que tous les cœurs soient à pleine vitesse. Idéalement, la charge du processeur devrait durer une durée déterminée, puis s’arrêter. J'espère qu'il y aura un tour dans le bash. Je pense à une sorte de boucle infinie.

409voto

David Points 596

J'utilise le stress pour ce genre de chose, vous pouvez lui dire combien de cœurs à optimiser. Cela permet aussi de mettre l'accent sur la mémoire et le disque.

Exemple pour stresser 2 coeurs pendant 60 secondes

stress --cpu 2 --timeout 60

319voto

dimba Points 5389

Vous pouvez aussi faire

 dd if=/dev/zero of=/dev/null
 

Pour en exécuter davantage, mettez-en sur d'autres cœurs, essayez de le faire:

 fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd
 

Répétez la commande dans les accolades autant de fois que le nombre de threads que vous souhaitez produire (ici 4 threads). Un simple clic sur le bouton va l'arrêter (assurez-vous simplement qu'aucun autre dd ne s'exécute sur cet utilisateur ou que vous le tuez aussi).

157voto

user1147015 Points 141

Je pense que c'est plus simple. Ouvrir un Terminal et tapez la commande suivante et appuyez sur Entrée.

yes > /dev/null &

Pour utiliser pleinement les Processeurs modernes, une ligne n'est pas suffisant, vous devrez peut-être répéter la commande pour épuiser toute la puissance du PROCESSEUR.

Pour mettre fin à tout cela, il suffit de mettre

killall yes

L'idée a été à l'origine trouvé ici, bien qu'il ait été prévu pour les utilisateurs de Mac, mais cela devrait fonctionner pour *nix.

32voto

Un noyau (n'invoque pas de processus externe):

 while true; do true; done
 

Deux noyaux:

 while true; do /bin/true; done
 

Ce dernier ne fait que les deux aller à ~ 50% si ...

Celui-ci fera les deux aller à 100%:

 while true; do echo; done
 

11voto

Fred Points 3147

Je diviserais la chose en 2 scripts:

infinite_loop.bash:

 #!/bin/bash
while [ 1 ] ; do
    # Force some computation even if it is useless to actually work the CPU
    echo $((13**99)) 1>/dev/null 2>&1
done
 

cpu_spike.bash:

 #!/bin/bash
# Either use environment variables for NUM_CPU and DURATION, or define them here
for i in `seq ${NUM_CPU}` : do
    # Put an infinite loop on each CPU
    infinite_loop.bash &
done

# Wait DURATION seconds then stop the loops and quit
sleep ${DURATION}
killall infinite_loop.bash
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X