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 --->

/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

É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...? :)

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

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

erdekes hogy 2001 tol jo sokaig nem adtak ki ujabbat.

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.

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.

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...?

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