Hallo allerseits,
GANZ WICHTIG: Disclaimer weiter unten beachten!
Nachdem mein EPIA durch ein sempron-getriebenes ASRock-Board als VDR abgeloest wurde, habe ich sowohl einen stabilen VDR als auch ein EPIA ME6000 zum Basteln und Spielen uebrig. Es ist wieder in dem Playstation 2 Gehaeuse gelandet, das ich urspruenglich mal fuer den VDR gebaut hatte, ehe mir klar wurde, dass es mit nur einer PCI-Karte nicht wirklich Spass macht
Mit dem Epia habe ich jetzt mal ein paar Versuche gemacht, die vielleicht auch fuer andere spannend sein koennen, die sich darueber aergern, dass die Dinger so ewig brauchen, um Videos zu konvertieren oder einen Kern zu uebersetzen.
Das Schlagwort ist Overclocking.
Macht bei so einer lahmen Kiste natuerlich nur beschraenkt Sinn, andererseits ist ein EPIA auf geringen Energieverbrauch ausgelegt und laeuft somit sicher nicht so schnell in eine thermische Wall. Ein bisschen Google zeigt, dass man ein Epia muehelos per Software (WCPUID) durch Aendern des Multiplkikatos uebertakten kann - das BIOS unterstuetzt es ja nicht im geringsten. WCPUID ist Windows und damit nicht spannend. Ich habe allerdings in der Viaarena (genaugenommen in Googles Cache derselben) einen Beitrag gefunden, dass jemand den Kern so gepachted hat, dass es trotzdem geht. Allerdings hat er nicht gesagt, wie.
Also... das perfekte Projekt fuer einen Sonntagvormittag
Wenn man longhaul unter Linux benutzt, um die Taktfrequenz zu aendern, dann tut das ein C3 ueber den Multiplikator. Ein Blick in
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
verraet, welche Frequenzen das sind:
399000 532000 465000 598000
(ME 6000, 600 Mhz). Ein bissel rechnen offenbart, dass wir hier die Multiplikatoren 3 bis 4,5 in 0,5er Schritten haben - FSB ist 133.
Als naechstes kommt dann das File
arch/i386/kernel/cpu/cpufreq/longhaul.c
in den Kernelquellen. Es offenbart in seinen Kommentaren Abgruende ueber Vias Hardwaredokumentation, zeigt aber auch, wie die Multiplikatoren ermittelt werden:
switch (longhaul_version) {
case TYPE_LONGHAUL_V1:
case TYPE_LONGHAUL_V2:
/* Ugh, Longhaul v1 didn't have the min/max MSRs.
Assume min=3.0x & max = whatever we booted at. */
minmult = 30;
mult = maxmult = longhaul_get_cpu_mult();
break;
Tja... Longhaul 1 und 2 machen es uns also GANZ einfach... (alles, was ich hier schreibe, gilt NUR dafuer, also nur fuer Samuel 1 und 2 sowie Ezra, NICHT hingegen fuer Ezra-T und Nehemia - siehe auch Kommentar am Anfang von longhaul.c).
Modifikation:
switch (longhaul_version) {
case TYPE_LONGHAUL_V1:
case TYPE_LONGHAUL_V2:
/* Ugh, Longhaul v1 didn't have the min/max MSRs.
Assume min=3.0x & max = whatever we booted at. */
minmult = 30;
mult = longhaul_get_cpu_mult();
maxmult = mult + 15;
break;
Die Trennung von mult und maxmult laesst die CPU "normal" booten, solange man den Userspace-Governor drin hat, sonst schaltet sie gleich auf Overclock. "+15" erhoeht den Multi um 1,5, in meinem Fall also von 4,5 auf 6. Das ganze am besten als Modul laden... dann kann man besser testen, und dann schauen, was an Frequenzen geht;:
epia ~ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
399000 532000 465000 598000 731000 798000 665000
Also dann...
und
epia ~ # cat /proc/cpuinfo
processor : 0
vendor_id : CentaurHauls
cpu family : 6
model : 7
model name : VIA Samuel 2
stepping : 3
cpu MHz : 798.000
cache size : 64 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu de tsc msr cx8 mtrr pge mmx 3dnow
bogomips : 1602.47
clflush size : 32
Display More
Voila... 800 MHz. 866 (6,5) kann diese CPU auch, gammelt aber augenblicklich ab, wenn man irgendwas damit tut.
Kommt also drauf an, was die individuellen CPUs koennen... das muss man VORSICHTIG austesten (mprime ist dabei ein gutes Mittel)... zum Testen empfiehlt sich ein modularer Kern mit Userspace-Governor, damit man ueberhaupt noch was sieht, ehe der Laden abstuerzt.
Noch zwei Hinweise: minmult hat sich bei mir nicht aendern lassen, es fuehrte zu einer Verschiebung des hoeheren Endes. Ich denke, das haengt mit der Art zusammen, wie der restliche Code die Multiplikatoren setzt... aber ich halte untertakten unter 400 MHz nicht fuer sinnvoll, zumal die Stromaufnahme im Idle schon bei 400 und 600 identisch ist. Ferner muss man nach jeder Aenderung des Bereiches NEU BOOTEN; da entladen/laden des Moduls nicht alle Tabellen neu setzt.
WICHTIG: Zum Schluss der Disclaimer:
- Uebertakten kann Hardware schaedigen
- Uebertakten kann Daten schaedigen
- Uebertakten kann zu unvorhergesehenen Ergebnissen fuehren
- Die Maschine kann ueberhitzen... auf keinen Fall ohne aktive Kuehlung oder staendiges Monitoring testen
- Vor dem Einsatz fuer wichtige Zwecke WENIGSTENS 24 h Burn-in mit mprime oder so
- Alles auf eigene Verantwortung... ich uebernehme keinerlei Verantwortung fuer die Folgen
- Obige Modifikation gilt nur fuer C3/C7 mit den Kernen Samuel 1, 2 und Ezra. Sie funktioniert nicht bei Ezra-T, Nehemia und neueren.
- Wie weit man kommt, haengt extrem von der einzelnen CPU ab. Meine laeuft bei 800 MHz noch stabil... bei 866 hingegen nicht mehr.
EDIT: Was die Performance angeht... beispielsweise kommt mein selbstkompiliertes Linpack statt auf 57 MFlops nun auf deren 76... also quasi lineare Skalierung. Speicherintensive Sache bleiben hingegen unveraendert... wir aendern ja nur den Multiplikator, nicht den FSB und auch nicht den Speichertakt.
EDIT 2: Nach 52 Minuten mprime auf 800 MHz:
FATAL ERROR: Rounding was 0.4962310791, expected less than 0.4
Hardware failure detected, consult stress.txt file.
Torture Test ran 52 minutes - 1 errors, 0 warnings.
Also... runter auf 733 und mprime wieder anwerfen.
Viele Gruesse,
Jan