Awk|Bash – obciążanie procesora dla celów testowych (cpu stress).
Strona główna Ubuntu C++ Hardware HTML i javascript Java Software SQL

Awk|Bash – obciążanie procesora dla celów testowych (cpu stress).

Dodano: 2012-09-28

Obciążając procesor zadaniami możemy sprawdzić jak się zachowuje chłodzenie, czy nie generuje nadmiernego hałasu oraz czy temperatura nie rośnie znacząco. Przydaje się to też w przypadku szybszego dogrzania pasty termo przewodzącej i uzyskania kilku stopniowej poprawy chłodzenia, jak i dotarcia nowego wiatraczka ;)

Poniżej skrypt, który umożliwia uruchomienie w pętli zadań mających tylko na celu wykonywanie w nieskończoność operacji na liczbach w celu obciążenia rdzeni CPU. Jako parametr startowy należy podać ilość rdzeni w procesorze, przykładowo dla czterordzeniowego cpu:

./cpustress.bash 4

Jeżeli chcemy zatrzymać działanie pętli, należy wpisać następującą komendę:

./cpustress.bash -9

W skrypcie użyte zostało słowo kluczowe nohup, które umożliwia uruchomienie w tle operacji i działanie ich nawet po wylogowaniu użytkownika znak na końcu &. W celu zakończenia wszystkich pętli działających w tle użyto słowa kluczowego pkill -f [nameProcess]

#!/bin/bash

if [ "$1" == "" -o "$1" == "--help" ]; then
	echo "";
	echo "The script is designed to hard loading the CPU cores.";
	echo "Necessary start parameter, is the number of cores in the processor.";
	echo "In some cases, you type a value multiplied by two.";
	echo "To kill process stress type as argumnet '-9'";
	echo "";

	exit 0;
fi

if [ "$1" == "-9" ]; then
	ps -aux | grep $0 | awk -vnf=$0 '{
		print $0;
		if ($10 != "0:00"){
			ki="pkill -f "nf;
			print ki;
			system(ki);
		}
	}'
	exit 0;
fi

function isNumber(){
	echo $1 | grep '^[0-9]*$' > NULL
	if [ "$?" -eq "0" ]; then
		echo "1"
	else 
		echo "0"
	fi
}

if [ "`isNumber $1`" = "0"  ]; then
	echo "The parameter must be a number!!!";
	exit 106;
fi

i=0;
temp=0;
while [ $i -ne $1 ]; do
	let temp=i%4;	
	echo "Core of CPU: "$i+1;
	if [ $temp -eq 0 ]; then 
		nohup `a=1; while [ true ]; do let a+=1; if [ $a -eq 1000000000 ]; then a=1; fi; done;` &
	fi
 
	if [ $temp -eq 1 ]; then
		 nohup `a=1000000000; while [ true ]; do let a/=3; if [ $a -le 1 ]; then a=1000000000; fi; done;` &
	fi;

        if [ $temp -eq 2 ]; then
                nohup `a=1; while [ true ]; do let a*=3; if [ $a -ge 1000000000 ]; then a=1; fi;  done;` &
        fi;

	let i+=1;
done;