Non c'è bisogno di installare alcun pacchetto extra, il vostro buon vecchio shell è in grado di farlo da solo.
Questo one-liner caricherà i vostri quattro core1 al 100%:
for i in 1 2 3 4; do while : ; do : ; done & done
Come funziona è abbastanza semplice, avvia quattro loop infiniti. Ognuno di essi ripete l'istruzione nulla (:
). Ogni loop è in grado di caricare un core di CPU al 100%.
Se si utilizza bash
, ksh93
e altre shell che supportano le gamme, (cioè non dash
o più vecchie ksh
), è possibile utilizzare questa sintassi non portatile:
for i in {1..4}; do ...
Sostituire 4
con il numero di CPU che si desidera caricare se diverso da 4
.
Supponendo che non aveste un lavoro in background già in esecuzione quando avete lanciato uno di questi loop, potete fermare la generazione del carico con questo comando:
for i in 1 2 3 4; do kill %$i; done
Rispondendo al commento di @underscore_d, ecco una versione migliorata che semplifica molto l'arresto del carico e che permette anche di specificare un timeout (default 60 secondi.) Un Control-C ucciderà anche tutti i loop in runaway. Questa funzione di shell funziona almeno sotto bash
e 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
)
}
``` &001
1Notare che con CPU che supportano più di un thread per core (Hyper-threading), il sistema operativo invierà il carico a tutte le CPU virtuali. In questo caso, il comportamento del carico dipende dall'implementazione (ogni thread potrebbe essere segnalato come occupato al 100% o meno)...