Linux sunucusunda CPU yükü nasıl oluşturulur


13

Sunucuda sahte yükü test etmek istiyorum, sistemde CPU yükü oluşturacak bazı burn-in veya benchmark komut satırı yardımcı programı arıyorum.

Sadece CPU'yu (harddisk yükü, ağ ve işbirliği yok) yazmak ve yükün çalışacağı süreyi ayarlayabilmek istiyorum. Yani çalıştırabilecek bir şey istiyorum: sistemde 10 dakika CPU yükü.

Herhangi bir fikir?

Yanıtlar:



6

Kayan nokta ops tercih ederim:

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

CPU numaranızın farkında olun :-)


bunu nasıl yapabilirim time?
Sébastien

2

Bu sık sık yapmak istediğim bir şey. Ama bunu yapmanın iyi bir yolu yok. Sadece istediğim kadar saniye boyunca döngü yapacak küçük bir Perl betiği yazıyorum.

Ör. (10 dakika boyunca):

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

Elbette n işlemciniz varsa, bu kadar çok işlem oluşturmak için bir bash döngüsü eklemek isteyebilirsiniz:

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait

4
Küçük nokta: Bu fordöngü onları paralel değil, seri halinde çalıştırmaz mı? Bence (perl -e '...' &)onları kabuğundan ayırmak işi yapardı.
SmallClanger

Haklısın. Yazımı düzeltirim. Bunu işaret ettiğiniz için teşekkürler.
PP.



1

İşte saf kabuk (en azından olduğu bashve kshzaten benzer bir soruya cevap olarak yayınlanmıştır bu şekilde) burada

# 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
  )
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.