Pas besoin d'installer un paquet supplémentaire, votre bon vieux shell est capable de le faire seul.
Ce one-liner chargera vos quatre cœurs1 à 100% :
for i in 1 2 3 4; do while : ; do : ; done & done
Comment ça marche est assez simple, il démarre quatre boucles sans fin. Chacune d'entre elles répète l'instruction nulle (:
). Chaque boucle est capable de charger un coeur de CPU à 100%.
Si vous utilisez bash
, ksh93
et d'autres shells supportant des gammes, (c'est-à-dire pas dash
ou plus ancien ksh
), vous pouvez utiliser cette syntaxe non portable :
for i in {1..4}; do ...
Remplacez 4
par le nombre de CPU que vous souhaitez charger s'il est différent de 4
. En supposant que vous n'aviez pas de tâche de fond déjà en cours d'exécution lorsque vous avez lancé une de ces boucles, vous pouvez arrêter la génération de la charge avec cette commande :
for i in 1 2 3 4; do kill %$i; done
En réponse au commentaire de @underscore_d, voici une version améliorée qui simplifie beaucoup l'arrêt de la charge et qui permet également de spécifier un délai d'attente (60 secondes par défaut.) Un Control-C tuera également toutes les boucles qui s'enfuient. Cette fonction shell fonctionne au moins sous bash
et ksh
.
# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
(
pids=""
cpus=${1:-1}
seconds=${2:-60}
echo loading $cpus CPUs for $seconds seconds
trap 'for p in $pids; do kill $p; done' 0
for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
sleep $seconds
)
}
1Notez qu'avec les CPU supportant plus d'un thread par noyau (Hyper-threading), l'OS va distribuer la charge à tous les CPU virtuels. Dans ce cas, le comportement de la charge dépend de l'implémentation (chaque thread peut être signalé comme étant occupé à 100% ou non)…