Microcode. WTF?

Címkék

Egyes Intel CPU-k (mint a legtöbb hardver és szoftver) rendelkeznek tervezési és/vagy gyártási bugokkal. Szerencsére az architektúrájuk eléggé rugalmas, és lehetővé teszi, hogy ezeket a hibákat kijavítsuk. Na nem kalapáccsal és pontozóval, hanem szoftveresen. A javítás egyik lehetséges módja az, hogy egy darab kódot, ún. microcode-ot töltünk be a processzorba ``on-the-fly'' azaz röptében, az operációs rendszer futása alatt. Ehhez nincs szükség arra, hogy rebootoljuk az operációs rendszert. Azzal, hogy betöltjük a processzorba a microcode-ot, érvényre juttatjuk azokat a javításokat, amelyet az Intel készített el azóta, hogy az adott CPU-t szilíciumba öntötte. A betöltött változtatásokkal a processzort felfrissítettük.

Mivel ez a beavatkozás nem végez fizikai változásokat a processzorban, a rendszer rebootolásával a frissítés eltűnik, így minden egyes boot-kor be kell tölteni a kódot. Természetesen ez azt is jelenti, hogy a microcode feltöltésével nem tudjuk elrontani a processzorunkat.

Nézzük mi kell ahhoz Linux operációs rendszer alatt, hogy kihasználhassuk az Intel microcode frissítések előnyeit:

Az Intel néha kiadja a legfrissebb microcode-okat, de nem ad hozzá változások listáját. Tehát azt, hogy mit változtatnak a processzor működésén, nem igazán lehet tudni. A microcode-dal kapcsolatos Linux dolgokat (microcode kernel driver, betöltő utility) Tigran Aivazian tartja karban.

A legfrissebb microcode-ot az alábbi címen lehet beszerezni:

http://urbanmyth.org/microcode/

A használatához az alábbiakra van szükség:

1.) támogatás a Linux kernelbe

2.) a microcode betöltő utility (microcode_ctl)

3.) a microcode

4.) initscript-ek

A Linux kernelek a 2.2.28-tól, 2.4.0-test1-ac10-től felfele tartalmazzák a microcode drivert. Természetesen a 2.6-os kernelek is.

1.) A kernelbe bele kell fordítani a microcode frissítés támogatást:

Processor type and features --->

M > /dev/cpu/microcode - Intel IA32 CPU microcode support

Célszerű modulba fordítani, mert a microcode feltöltése után a modul eltávolítható (rmmod microcode), és így nem foglal feleslegesen memóriát.

2.) Ha a kernel képes fogadni a microcode frissítést, akkor be kell szereznünk a feltöltő utility-t és a legfrissebb Intel által biztosított microcode-ot.

Ezt megtehetjük a http://urbanmyth.org/microcode/ oldalon.

# wget http://urbanmyth.org/microcode/microcode_ctl-x.xx.tar.gz

3.) Kibontjuk, majd lefordítjuk, és telepítjük (untar, make all, make install). A make install-lal helyére kerül a microcode_ctl bináris, és bemásolódik a /etc könyvtárba microcode.dat néven a microcode file.

Használata:

(1200MHz 55C) root@alderaan:/home/trey $ microcode_ctl -f /etc/microcode.dat

microcode_ctl: writing microcode (length: 208896)

microcode_ctl: microcode successfuly written to /dev/cpu/microcode

Ezzel a microcode_ctl utility dekódolta és feltöltötte az új microcode-ot a processzorba.

4.) A letöltött csomagban találunk initscript mintát, amelyet bemásolva a megfelelő helyre elérhetjük, hogy a microcode minden bootoláskor betöltődjön.

A microcode_ctl utility és a microcode file csak Intel Pentium Pro, PII, PIII, Pentium 4, Celeron, Xeon, stb. processzorokkal (az összes P6 architektúrájú vagy újabb Intel processzorral) használható. Nem használható a klasszikus Pentium processzorokkal. Újabban támogatja a x86_64 architektúrát is. A microcode.dat az összes processzor javítását tartalmazza, az utility automatikusan csak a szükséges részeket tölti fel az egyes processzorokba.

Néhány FAQ:

K: Van valami hátránya a microcode használatának?

V: Nincs. Az új microcode a processzor ismert (de nem közismert) hibáit javítja. Használata ``nem kerül semmibe'' (nincs overhead-je).

K: Van valahol changelog a microcode-hoz?

V: Nincs. Ha az Intel úgy dönt, hogy kiad egy frissítést, akkor azt feltöltik a http://urbanmyth.org/microcode/ oldalra.

K: Van valami errata arról, hogy mit javítanak az egyes microcode-ok?

V: Lásd az előző kérdést.

K: ....AMD vagy más nem-Intel processzorok?

V: Csak Intel processzorok....

A napokban (2004. október 25.) jelent meg a legfrissebb microcode csomag, amely már a 2.6.x kerneleken is támogatja az x86_64 architektúrát.

Bejelentés itt.

Hozzászólások

Amúgy ezt (is) érdemes lenne "bedobni" a Wiki -be... :)

De gondolom egy gyakorlati teljesítményt csak lehet mérni, kb. viszonylatban, hogy ekkora a CPU számítási teljesítménye alapból, és mennyivel tud esetleg többet az új microcode -val....

Szerintetek esetleg milyen program lenne célszerű ennek a mérésére és vizsgálatára...?

Nem. Ugyanis (mint olvastam) az Intel egy szót sem szól arról, hogy mit is csináltak, nincs se changelog, se errata, se semmi. Kb. "nesze szép új microcode, használd". Persze jobb mint a semmi! A titkolózás meg azért (is) vagy szerintem, mert sokat elárulna a CPU belső tervezési elveiről, meg hackelésre is adhatna lehetőséget. Mivel ugye a változtatások nem véglegesek, így eléggé képlékeny, hogy ki és melyik verziójú mikrokódot használ.

Egyebkent a Fedora/Redhat mar regota megcsinalja magatol a microcode frissitest minden bootkor, illetve az UHU dev agban is benne van mar ez 1-2 honapja.

erdekes hogy 2001 tol jo sokaig nem adtak ki ujabbat.

Nekem csak az nem világos, HOVA kerül ez a mikrokód..? A processzorban hova?

És azt lehet tudni, egy ilyen frissítés mennyit növel a rendszer teljesítményén és hatékonyságán, esetleg biztonságán...? :)

A kérdésem az, hogy hibernálás utáni indításnál is betöltődik a mikrokód?
Mert indításkor látszik egy üzenet, hogy betöltötte.
Valamelyik logban (talán syslog?) meg is találtam, viszont a hibernálás utáni induláskor nem láttam logban sem.

Üdv:
LGabor

Szia Trey!

Felfrissíteném a témát. Ezt még ma is használod?

Azt próbáltad, hogy értelmetlen uppolás helyett indítasz egy fórumtémát, amibe beleírod a nyűgöd és linkeled benne ezt a cikket? Vagy ahhoz esetleg komolyabb végzettség szükséges? :)

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

Miért indítsak új fórumtémát, mikor "csak" ennyi kérdésem van. Értelmetlen szemetelni, ha nem muszáj.

Arra nem gondoltál, hogy hagyok időt annak aki ide hozzászólt, h válaszoljon? Mondjuk trey? És ha x idő múlva sem kapok választ létrehozok egy új topicot?
Nem tudom, lehet h 3 diploma kell ehhez