mprime-phc-setup geht nicht, Fehlersuche

Schwartz

Active member
Registriert
15 Aug. 2015
Beiträge
766
Ich komme soweit klar mit PHC, nur gibt es da ein bestimmtes Script welches das finden der sicheren VCores vereinfachen soll. Dieses Script läuft nun nicht korrekt; es läuft nach Fehlern einfach weiter durch und senkt weiter die VCore bis das Gerät zum Absturz kommt. Der Thread dazu ist uralt und ich frage lieber mal hier. Das Script ist dort zu finden: https://bitbucket.org/stqn/shell-tools/raw/master/mprime-phc-setup

Funktioniert hier if (( $? == 0 )) nicht? Es werden Fehler angegeben und die mp_log Datei wird auch beschrieben. Nehme ich an, da nach einem Crash das Script die Logs aufgreifen kann. Aber es checkt einfach nicht, dass es abbrechen soll und die nächsthöhere VCore prüfen.

Relevanter Ausschnitt:

# Pass 1: lowering vid quickly until there is an error

if (( cur_vid*vid_delta < ${vid[f]}*vid_delta && pass2 == 0 )); then
#echo "forcing cur vid to max"
cur_vid=${vid[f]}
fi

cur_vid=$((cur_vid+vid_delta))

for (( ; cur_vid*vid_delta < vid_limit*vid_delta && pass2 == 0; cur_vid+=vid_delta )); do
count=$short_test_length

echo "Trying vid $cur_vid for $count seconds"
save_state

set_vid $f $cur_vid

# It looks like changing the VID also resets the frequency, so set frequency here
set_sys_val scaling_setspeed ${freq[f]}

launch_mprime

if ((debug)); then
sleep 1
debug_info
fi

for (( ; count>0; count-- )); do
sleep 1
echo -n "."
grep FATAL $mp_log &>/dev/null
if (( $? == 0 )); then
kill_mprime
echo ""
echo "Hardware failure detected."
((cur_vid-=vid_delta))
break 2
fi

cur_freq=$(cat $cpuf/scaling_cur_freq)
if (( (cur_freq < ${freq[f]} * (100 - wrong_freq_tolerance) / 100)
|| (cur_freq > ${freq[f]} * (100 + wrong_freq_tolerance) / 100) )); then
echo ""
echo "ERROR: Wrong frequency! (${cur_freq} instead of ${freq[f]})"
debug_info
exit 1
fi
done

echo ""

kill_mprime
done

# Pass 2: stress testing for a longer time and going up in case of an error.

for (( ; cur_vid*vid_delta <= vid_limit && cur_vid*vid_delta > (${vid[f]}+safety_vid_delta*vid_delta)*vid_delta; cur_vid-=vid_delta )); do
count=$long_test_length
echo "Trying vid $cur_vid for $count seconds"
save_state

set_vid $f $cur_vid
set_sys_val scaling_setspeed ${freq[f]}

launch_mprime

if ((debug)); then
debug_info
fi

for (( ; count>0; count-- )); do
sleep 1
echo -n "."
grep FATAL $mp_log &>/dev/null
if (( $? == 0 )); then
echo ""
echo "Hardware failure detected."
break
fi

done

kill_mprime

if (( count == 0 )); then
break
fi
done
 
Moin,

füg mal an die /bin/bash-shebang nen -x. Dann siehst du, wärend du das Script ausführt, via Konsole, den kompletten Output, dann siehst du wo es genau UND vermutlich auch warum es hakt! Wenn aufeinmal in der $? ne 1 steht anstelle von 0, kannst du weiter debuggen.

Grüße
 
Habe versucht das Teil zu debuggen, aber mit meinen mageren Codekenntnissen und der ständigen Gefahr, dass sich das Gerät X Sekunden nach dem ersten Fehler aufhängt, war mir das etwas zu viel James Bond. Ich habe die VIDs schliesslich manuell ertestet. ;)
 
Ich hatte auch noch den Verdacht, dass FATAL gar nicht kommt. Wenn der mprime Output im Terminal identisch ist mit dem mp_log, sehe ich immer nur 'Segmentation fault (Core dumped)'. Da das Script recht alt ist, könnte sich zwischen den Versionen die Syntax geändert haben.

Werde beides demnächst nochmal testen.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben