Obecnie debuguję instalację kaktusów i chcę utworzyć obciążenie procesora, aby debugować moje wykresy wykorzystania procesora.
Próbowałem po prostu uruchomić cat /dev/zero > /dev/null
, co działa świetnie, ale wykorzystuje tylko 1 rdzeń:
Czy istnieje lepsza metoda testowania / maksymalizowania zasobów systemowych pod obciążeniem?
Powiązane: Jak mogę uzyskać duże obciążenie procesora w systemie Windows?
performance
debian
benchmarking
Der Hochstapler
źródło
źródło
cat
jednocześnie?screen
sesje. Ale wolałbym bardziej wyrafinowane rozwiązanie, jeśli to możliwe.cat /dev/random > /dev/null
. Zgadnij/dev/zero
też działa. :-)Odpowiedzi:
Spróbuj
stress
Jest to prawie odpowiednik systemu Windowsconsume.exe
:źródło
sudo apt-get install stress
sudo yum install stress
sudo pacman -S stress
brew install stress
w systemie OS XNie musisz instalować żadnego dodatkowego pakietu, twoja stara dobra powłoka jest w stanie zrobić to sama.
Ten jednowarstwowy załaduje cztery rdzenie 1 na 100%:
Jak to działa, jest dość proste, uruchamia cztery nieskończone pętle. Każdy z nich powtarza instrukcję zerową (
:
). Każda pętla jest w stanie załadować rdzeń procesora na 100%.Jeśli używasz
bash
,ksh93
i inne pociski wspieranie zakresy, (czyli niedash
lub starszyksh
), można użyć tej składni non przenośnym:Zamień
4
na liczbę procesorów, które chcesz załadować, jeśli różnią się od4
.Zakładając, że nie uruchomiłeś już żadnego zadania w tle po uruchomieniu jednej z tych pętli, możesz zatrzymać generowanie obciążenia za pomocą tego polecenia:
Odpowiadając na komentarz @ underscore_d, tutaj jest ulepszona wersja, która znacznie upraszcza zatrzymanie ładowania i która pozwala również określić limit czasu (domyślnie 60 sekund.) A Control- Czabije również wszystkie niekontrolowane pętle. Ta funkcja powłoki działa co najmniej pod
bash
iksh
.1 Należy pamiętać, że w przypadku procesorów obsługujących więcej niż jeden wątek na rdzeń (Hyper-Threading), system operacyjny rozdzieli obciążenie na wszystkie wirtualne procesory. W takim przypadku zachowanie obciążenia zależy od implementacji (każdy wątek może być zgłaszany jako zajęty w 100% lub nie). .
źródło
&
powoduje, że polecenie działa w osobnym wątku lub oddzielnym rdzeniu ? Jestem zdezorientowany.killall bash
- po prostu upewnij się, że nie masz w tym czasie żadnego innego ważnego skryptu.killall bash
. Odpowiedź została edytowana, aby dodać bezpieczniejszą metodę zakończenia generowania obciążenia.Zrobiłem prosty skrypt Pythona, który robi to samo. Możesz kontrolować liczbę rdzeni procesora, które chcesz załadować. Dobrą rzeczą jest to, że nie zużywa żadnych innych zasobów oprócz procesora. (Myślę, że pomysł Marka Johnsona zużyłby dużo zasobów we / wy, co jest tutaj niepożądane).
Po prostu uruchom ten skrypt z terminala
$ python temp1.py
. Po zakończeniu musisz zabić skrypt.Oto moje zużycie mocy procesora, gdy ładuję 3 rdzenie.
źródło
Byłby jeden alternatywny sposób
lub (jeśli nproc jest obecny)
OpenSSL jest prawie zawsze obecny w obecnych dystrybucjach, więc nie są potrzebne żadne dodatkowe pakiety.
źródło
Zacznij dwa
polecenia dla każdego rdzenia w systemie.
Zatrzymać
lub
źródło
Zwykle biorę pakiet cpuburn:
Zamień 4 na liczbę rdzeni / gwintów HT, które masz lub chcesz podkreślić.
Uwaga: Obciąża to jednocześnie jak najwięcej powierzchni chipa, jest zaprogramowane tak, aby generowało maksymalne rozproszenie mocy. Musiałem napisać ten post po raz drugi, jakoś mojej maszynie się to nie podobało :-(
Możesz również wykonać cpuburn w sekwencjach:
A kiedy chcesz je zatrzymać:
Można również pomnożyć,
burnP6 &
aby dopasować liczbę rdzeni procesora w systemie.źródło
Opracowuję stress-ng, zaktualizowane narzędzie do obsługi stresu, które może obciążać wiele różnych aspektów systemu Linux. Aby uzyskać więcej informacji, zobacz http://kernel.ubuntu.com/~cking/stress-ng/
Użycie jest podobne do stresu
Zainstaluj za pomocą
źródło
Możesz uruchomić to polecenie tyle razy, ile chcesz, i za każdym razem zajmie inny rdzeń:
źródło
killall cat
powinien to zrobić.cat
uruchomione inne procesy (zwykle to robię).https://github.com/GaetanoCarlucci/CPULoadGenerator
całkiem proste i naukowe rozwiązanie.
Tutaj możesz zobaczyć przykład dynamiki, w którym 50% obciążenia generowane jest na rdzeniu procesora 0:
Możesz uruchomić proces na innych rdzeniach jednocześnie.
źródło
Połączyłem zarówno + jlliagre i + ecabuk.
źródło
Możesz użyć:
Powtórz
dd if=/dev/zero of=/dev/null
dla rdzeni procesora.Naciśnij dowolny klawisz, aby zatrzymać test.
źródło
pxz
jest równoległą implementacjąxz
.pxz -9e /dev/zero --stdout >/dev/null
powinien załatwić sprawę, ponieważ jest to dość intensywne procesor.Jeśli
/dev/zero
nie jest wystarczająco szybki (zauważysz, żepxz
przepustnica we / wy jest ograniczona), możesz to zrobićpxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null
Nowsze wersje
xz
mają--threads
opcję, która jest zamiennikiempxz
.źródło
Oto sposób, w jaki korzystam i nie trzeba instalować niczego dodatkowego.
Na przykład, aby rozpocząć od 4 procesów,
Możesz zmienić liczbę procesów za pomocą opcji „-P” powyżej.
źródło
Robi to również prosta linia poleceń:
źródło
while : ; do : ; done
for i in 1 2 3; do while : ; do : ; done & ; done
Chciałem dodać to do komentarza @ jlliagre, ale nie mam wystarczającej reputacji. Jeśli zamierzasz używać tego kodu na wielu serwerach, a liczba procesorów będzie się różnić, możesz użyć następującego polecenia:
Spowoduje to wykorzystanie wszystkich rdzeni na serwerze bez względu na ich liczbę. Polecenie
nproc
jest częścią coreutils, więc powinno być w większości instalacji Linuksa.źródło