Cara menghasilkan beban CPU di server Linux

13

Saya ingin menguji beban palsu di server, saya mencari beberapa utilitas baris perintah burn-in atau benchmark yang akan menghasilkan beban CPU pada sistem.

Saya ingin hanya dapat burn-in CPU (tidak ada beban harddisk, jaringan dan co) dan bahwa saya akan dapat mengatur periode di mana beban akan berjalan. Berarti saya menginginkan sesuatu yang dapat dijalankan: CPU load selama 10 menit pada sistem.

Ada ide?

Maxim Veksler
sumber

Jawaban:

6

Saya lebih suka operasi floating point:

for i in `seq 64`; do perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $sqrt = sqrt($j) for (1..9999); }' & done

Waspadai nomor CPU Anda :-)


sumber
bagaimana saya bisa timeini?
Sébastien
2

Ini adalah sesuatu yang sering ingin saya lakukan. Tetapi saya tidak memiliki cara yang baik untuk melakukannya. Saya hanya menulis skrip Perl kecil yang hanya akan mengulang sebanyak yang saya inginkan.

Misalnya (selama 10 menit):

perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $j *= 1.1 for (1..9999); }'

Tentu saja jika Anda memiliki n prosesor, Anda mungkin ingin menambahkan bash loop untuk membuat banyak proses:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait
PP
sumber
4
Poin minor: Bukankah forloop itu menjalankannya secara seri, bukan paralel? Saya pikir (perl -e '...' &)untuk melepaskan mereka dari shell akan melakukan pekerjaan itu.
SmallClanger
Kamu benar. Saya akan memperbaiki posting saya. Terima kasih telah menunjukkannya.
PP.
1

Berikut adalah shell murni (setidaknya bash& ksh) cara yang sudah saya posting sebagai balasan untuk pertanyaan serupa di sini

# 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
  )
}
Jlliagre
sumber