milyen microcode fut nálam? [Intel CPU]

 ( traktor | 2018. január 16., kedd - 18:39 )

A Spectre/Meltdown kapcsán sokakban merülhet fel, hogy microcode-ot kellene frissíteni, amit sok helyen le is írnak, hogy hogy kell, na de, hogy lehetne egyszerűen csak lekérdezni a jelenleg futó verziót hogy eldönthessük tényleg kell-e frissítenünk? Egy szervernél nem feltétlenül mindegy, hogy megúszunk-e egy rebootot mert a megfelelő microcode van fent. Meglepő módon nekem úgy tűnik, hogy frissíteni egyszerűbb mint lekérdezni a jelenlegi verziót. :)

Sok leírásban szerepel, hogy frissítés után a dmesg-en látod az eredményt. Pl:

# dmesg  | grep microcode
[    0.000000] microcode: microcode updated early to revision 0x3b, date = 2017-11-17
[    9.183970] microcode: sig=0x306f2, pf=0x4, revision=0x3b
[    9.184041] microcode: Microcode Update Driver: v2.2.

Na de mi van ha már régóta fut a rendszer, rég nincs meg a boot-hoz tartozó log. Szerencsére a microcode verzió a /proc/cpuinfo -ban is szerepel, csak sajnos nem ebben a szép dátumos formátumban:

# grep microcode /proc/cpuinfo  | head -1
microcode	: 0x3b

Ezzel sajnos az a baj, hogy az Intel oldalán (pl: Version: 20180108) a dátumos verzió van kiírva, úgyhogy ezt a hexa verziót még fel kell oldanunk. Ehhez fel kell rakni az intel-microcode és az iucode-tool csomagokat (Ubuntu). Az előbbi sajnos(?) mindenképp frissíteni fogja a microcode-ot a következő rebootnál, de ha nagyon bánjuk le is szedhetjük még reboot előtt. Meg amúgy is elég egy gépre feltenni, ott feloldhatjuk a verziókat más gépeinkre is.

sudo apt install intel-microcode iucode-tool

Ha ezek fent vannak akkor már fel tudjuk oldani a hexa microcode verziót egy greppel, pár vezető nulla betoldásával (0x3b -> 0x003b, vagy inkább regexppel: 0x0*3b)

# iucode_tool -l /lib/firmware/intel-ucode/ | grep 'rev 0x0*3b'
  015/001: sig 0x000306f2, pf_mask 0x6f, 2017-11-17, rev 0x003b, size 33792

És már látjuk is a dátumos verziót. Az Intel oldalán pedig kikereshetjük a legfrissebbet:
https://downloadcenter.intel.com/

ui: Mindezt egy hozzászólásban már leírtam, de gondoltam megérdemel egy külön bejegyzést.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ha letöltöd a microcode-YYYYMMDD.tgz fájlt, és a benne lévő intel-ucode fájl tartalmát belapátolod a /lib/firmware/intel-ucode/ könyvtárba (ami CentOS/RHEL vonalon a microcode_ctl csomagból jön, deb alapon passzolom, hogy van-e, és ha igen,akkor honnan), és elolvasod a releasenote fájlt :) kiderül, hogy ez után csak egy echo 1 > /sys/devices/system/cpu/microcode/reload parancsot kell kiadni.
Ez nálam a /proc/cpuinfo szerint egy 0xba -> 0xc2 frissítést hozott.

Nem igazan ertem a gondolatmenetedet. A /proc/cpuinfo tartalmazza azt az infot, hogy milyen microodeod van aktualisan betoltve a prociban. A /lib/firmware/intel-ucode konyvtarban pedig a gepeden talalhato microcodeok vannak, viszont nem biztos, hogy ez van betoltve. Ha azt akarod tudni, hogy van-e elerheto frissites a gepedre (anelkul, hogy megprobalnad frissiteni), akkor eloszor is szukseged van a dmesgben is lathato 'sig' -re, amit ugy lehet a megegyszerubben megkapni (ha mar nincs meg a dmesgben ez), ha kiadod a 'cpuid -r' parancsot es itt a 0x00000001 -hez megnezed az EAX regiszter tartalmat. Ez lesz a 'sig'. Amire meg szukseg van, az a legfrissebb microcode csomag, hogy meg tudd allapitani, van-e elerheto frissites. Ehhez kell az iucode_tool (iucode_tool --list-all microcode.dat), mert ez fogja tudni megmondani, hogy milyen 'sig' eseten mi az aktualis microcode revizio.

---
Apple iMac 27"
áéíóöőúüű

A microcode-ot javasolt lehetőleg a korai boot során frissíteni. Szerver alaplapok esetén a BIOS is tartalmaz microcode-ot - nem tudom laptopok/sima desktop alaplapok esetén mi a helyzet, de gyanítom hogy ott is. Vannak olyan Xeon modellek, amelyekhez direkt nem bocsát ki az Intel publikus microcode-ot, nincs benne a dat fájl-ban. Csak a szerver alaplap gyártók kapják meg. Létezik olyan errata, aminél ha menet közben frissíted a microcode-ot, akkor úgy változik meg a processzor működése, hogy az előtte-utána különbségek miatt instabillá válhat a rendszer. Szóval javasolt a korai boot során szert keríteni rá - mondjuk a kernelbe forgatott microcode-dal, vagy initrd-be pakolni, hogy már az indulás legelején betöltődjön. A disztrók ebbe az irányba terelik legalábbis a felhasználókat.

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Miért nem írják be a friss kódot a cpu-ba? Akkor egyszer lefrissítenéd, és kész.
--
"Sose a gép a hülye."

Azt csinaljak, de nem marad ott. Minden hard reset utan ujra kell tolteni. Gondolom azert csinaljak igy, hogy egy hibas microcode ne vagja haza a CPU-t. Meg amugy is, a CPU-ban nincs flash memoria amin eltarolhatna...

Epp ezert kezdtem utana nezni, hogy hogy lehet megnezni frissites nelkul az eppen futo verziot, hogy pl leellenorizhessem, hogy a BIOS update-elt-e rendesen.