Vad ger processorns mikrokodsfirmware. Korrigering av fel i CPU. Intel processorer

Vi introducerar BioStar A740G M2L+-givare (AMD 740G / SB710) och BioStar A740G M2+-mottagare (AMD 740G / SB700). Moderkortet med bokstaven "L" är nyare och stöder officiellt AM3-processorer, till skillnad från det andra, som endast är begränsat till stöd för AM2 +-processorer. Tigger efter jämförande analys deras bios.
Från kontoret endast laddning av webbplatsen Senaste uppdateringen BIOS firmware för vart och ett av dessa moderkort:
- för A740G M2+ senaste betaversionen A74GM916.BSS för september 2009
- för A740G M2L+ - fil 74GCU511.BSS- maj 2010

Därefter beväpnar vi oss med MMTOOL-verktyget (Jag använde version 3.22, 3.23 och 3.26 - jag hittade inga skillnader i arbetet). För att arbeta med MMTOOL måste filtilläggen för BIOS-firmware bytas till *.rom.

Nu lanserar vi två MMTOOL och laddar in firmwarefiler från två mattor i dem. brädor. Vi uppmärksammar de olika storlekarna i kolumnen "Källstorlek" (och i "Storlek i Rom också, naturligtvis) i modul 11 ​​"P6 Micro Code" i varje firmware.

Gå till avsnittet CPU PATCH för en detaljerad jämförelse:

Givarfilen 74GCU511.rom - cpu_list innehåller 14 rader med stöd för CPURev.ID + 1 tom rad (Fig. 1).

Betaversionen av mottagaren A74GM916.rom - cpu_list innehåller 13 rader med stöd för CPURev.ID + 1 tom (Fig. 2).

Efter att ha analyserat listorna över dessa två BIOS, blir det uppenbart att för ett nyare moderkort använde utvecklarna nyare patchar för AMD-processorer, där mikrokoden för två rader med CPURev.ID 1043 och 1062 korrigeras (daterad 2009/07/31) och en rad med CPURev.ID 10A0 läggs till (daterad 2010/02/17).

Metod nummer 1 - modifiering av distinkta strängar.
Dessa tre distinkta rader extraheras från donatorn 74GCU511.rom - åtgärden "Extrahera en patchdata" + "Apply" + 1 sista tom rad och sparas i separata filer.

Tidigare, i CPU PATCH-delen av mottagarfilen A74GM916.rom, raderas två rader med CPURev.ID-nummer 1043 och 1062 (vars mikrokod är äldre än vi kommer att infoga ytterligare) och den sista tomma raden - åtgärderna "Ta bort en patch Data” + “Apply” (bild 3).

Därefter infogas en nyare mikrokod i tur och ordning från fyra tidigare mottagna patchfiler för CPURev.ID 1043, 1062, 10A0 och en tom sträng (fig. 4).

Var uppmärksam på måtten (“Källstorlek” och “Storlek i Rom”) för modul 11 ​​“P6 Micro Code” före och efter tillämpning av dessa ändringar i mottagarfilen.
Efter applicering kommer dessa dimensioner för mottagaren (Fig. 6) att bli identiska med dimensionerna för samma modul i donatorfilen 74GCU511.rom (Fig. 5).
Det är värt att notera att det är lätt att förstå hur modulstorleken bildas (varje rad i CPU PATCH-sektionen tar 2048 byte).

Det är bättre att spara ändringar under ett nytt filnamn.
Därefter kontrolleras denna fil så att MMTOOL öppnas igen utan fel.

Metod nummer 2 - modifiering genom att ersätta hela modulen.
Egentligen är det han som beskrivs på Internet (till exempel delvis).

I MMTOOL ringar vi in ​​donatorfilen 74GCU511.rom, går till fliken "Extrahera" och letar efter raden "P6 Micro Code". Sedan väljer vi den, i fältet "modulfil" ger vi den namnet ncpucode.bin och kör Extrahera modulen "i okomprimerad form".

Nu i MMTOOL laddar vi mottagarfilen A74GM916.rom, gå till fliken "Ersätt" och leta igen efter raden "P6 Micro Code". Välj den, vänta på Bläddra och välj vår donatormodul ncpucode.bin. Klicka på Replace och acceptera sedan att ersätta den här modulen.

Återigen, var uppmärksam på dimensionerna ("Källstorlek" och "Storlek i Rom") för modul 11 ​​"P6 Micro Code" före och efter att denna modul ersatts i mottagarfilen.
Efter applicering kommer dessa dimensioner för mottagaren (Fig. 7) att bli identiska med dimensionerna för samma modul i donatorfilen 74GCU511.rom (Fig. 5).

Om vi ​​jämför resultaten av båda metoderna (fig. 6 och fig. 7), så finns det en märkbar skillnad på 10 byte i RomLoc-adressen för modulen "Användardefinierad eller reserverad" efter den uppdaterade "P6 Micro Code"-modulen - kanske dessa är funktionerna i MMTOOL...

Slutsats och efterord.
På detta sätt från olika BIOS-firmwares av olika mattor. kort på sockel AM2 + (och även AM3 för jämförelse) kan du hitta de senaste mikrokoderna för varje typ av CPURev.ID, både i Award- och AMI BIOS, och sedan kombinera dem till en enda ncpucode.bin.
Därefter visade det sig för mig med en storlek på 32768 byte på 16 rader (mikrokoder) med de senaste datumen från den studerade firmwaren för olika BIOS:er: från 15:e olika typer processorrevisioner för socket AM2+ (040A, 0413, 0414, 041B, 0433, 0680, 0C1B, 1000, 1020, 1022, 1040, 1041, 1043, 1062, troligtvis 0:e processorn 0:e raden för version 1043, 1062) av processorer som inte beskrivs i andra rader - IMHO, till exempel framtida).

När du kombinerar din egen ncpucode.bin genom att importera nödvändiga patchar (mikrokoder) för varje nödvändig processorrevision, kan du använda absolut vilken AMI BIOS-firmware som helst med P6 Micro Code-modulen som en laboratorieversion.

Men när du sparade firmware-filen märktes en obehaglig egenskap hos MMTOOL - av någon anledning lade verktyget till 8 noll byte i slutet av P6 Micro Code-modulen - det visade sig vara 32776 byte i storlek. När samma MMTOOL extraherades från laboratoriets firmware blev filen ncpucode.bin också 32776 byte stor.
Du kan redigera detta med enkla redigerare som är tillgängliga för alla. Men jag upptäckte också (av misstag). alternativt sätt: vid extrahering universell nytta BIOS_EXT.EXE av alla moduler från laboratoriefirmware, ncpucode.bin-filen visade sig redan ha rätt storlek på 32768 byte - BIOS_EXT.EXE-verktyget självt bestämde korrekt slutet av "P6 Micro Code"-modulen när den sparades till en fil.

Om chipsetet och LGA 775-moderkortet teoretiskt sett kan stödja XEON 771, men det inbyggda BIOS stöder det inte, och det inte finns någon modifierad, kan du modifiera BIOS själv.

VIKTIG

1. Du gör alla ändringar i BIOS-firmware (.ROM-fil vanligtvis) på egen risk och risk. I händelse av ett fel erhålls en garanterad "kloss" från moderkortet
2. Filstorleken på den ursprungliga firmware och den modifierade versionen måste matcha upp till en byte.

3. Firmware ändrad BIOS-fil tillbaka till mikrokretsen utförs endast med hjälp av ett proprietärt verktyg från moderkortsutvecklaren (som kan laddas ner från tillverkarens webbplats).
4. I toppen moderkort ah, BIOS själv har en inbyggd firmwareuppdateringsmodul (till exempel EZ Flash 2-verktyget för ASUS P5Q i avsnittet Verktyg) - det bästa alternativet.

Hur man gör det bättre:
1. Söker du fortfarande på Internet efter en färdig version med XEON-stöd?
2. Ladda ner från den officiella webbplatsen senaste versionen firmware och lägga till mikrokoder?

Som du kan se är det andra alternativet säkrare; i alla fall laddar du ner den ursprungliga firmware från moderkortstillverkarens webbplats, dvs. den senaste versionen och frånvaron av fel garanteras (mer exakt, korrigering av alla fel som hittats tidigare). När du laddar ner en färdig version från tredjepartsresurser (av uppenbara skäl kommer den inte att finnas på originalsidan) - du kan få en sned version och döda BIOS.

Preliminärt kan du utvärdera förekomsten av XEON-mikrokoder i BIOS-firmware.

- hämta den aktuella AMI BIOS-bilden via Universal BIOS Backup ToolKit 2.0
- titta på innehållet i den mottagna ROM-filen genom AMIBCP V 3.37

Alternativ för BIOS AMI (American Megatrends Inc.).

1. Ladda ner den senaste versionen BIOS från din moderkortstillverkares webbplats

3. Ladda ner mikrokoder för XEON 771-processorer: lga771_microcodes

4. Ta reda på CPUID för din processor med hjälp av AIDA64 eller ett liknande program (det ser ut som cpu0001067Ah). Om en BIOS kommer att sys upp innan du installerar processorn, då hoppar vi över det här objektet.

5. Packa upp arkiven MMTool och lga771_microcodes och lämna från filer med tillägg .bin endast de filer vars början matchar din dators CPUID (t.ex. cpu0001067a_plat00000044_ver00000a0b_date20100928.bin)

Om vi ​​inte vet vilken kod, då syr vi upp allt.

A. Vi lanserar MMTool. Tryck på knappen (1) Ladda ROM och ladda den senaste BIOS för ditt moderkort i programmet. Om du har den senaste BIOS kan du också slå ihop BIOS-säkerhetskopieringsverktyget från datorn och redigera det.

b. Gå till flik (2) CPU Patch, sedan knapp (3) Bläddra, öppna filen .bin som motsvarar ditt CPUID.

C. Lämna alternativen som standard. "Infoga en patchdata" och tryck på knappen (4) tillämpa.

Efter uppdatering med en modifierad bios måste göra en fabriksåterställning genom återställningsknappen eller byglarna, om moderkortet stöder en sådan återställning, eller genom att dra ut BIOS-batteriet i ett par minuter. Dessutom är processorn redan korrekt uppfattad av datorn och fungerar som den ska.

Basic Input Output System - bassystem I/O, förkortat BIOS. Ett litet chip på moderkortet som är det första som får kontroll när datorn slås på. Försedd: grund inställningar PC kontrollera PC-komponenter vid start...

Det är ingen hemlighet att processorn är en maskin med mikroprogramstyrning. Och någon av dess instruktioner är en uppsättning mikroinstruktioner som flashas in i processorns ROM under tillverkningen. Mikrokodfel och designfel (errata) kan orsaka avvikelser från processorspecifikationer och fel i dess funktion. När en processor släpps publiceras vanligtvis dess specifikation och en lista över upptäckta fel.

Alla Intel P6-processorer, som inkluderar Pentium Pro, Pentium II & III, Celeron, Pentium II & III Xeon och Pentium II Overdrive-familjer, har den anmärkningsvärda "omprogrammerbara mikrokod"-funktionen. I dessa processorer är det möjligt att ändra mikrokoden, d.v.s. det är möjligt att korrigera fel i mjukvaru- och kretsimplementeringen av specifika processorer i P6-familjen och vissa inbyggda fel nästan på hårdvarunivå. Fel kan uppstå vid designstadiet av processorer, och de korrigeras exakt genom att ändra mikrokoden. Var och en av underfamiljerna (PII, Celeron, PPro, Xeon) har en specifikation. Med lanseringen av varje ny processorsteg (inuti den är alla enheter identiska inom ramen för tekniska avvikelser), publicerar Intel en specifikationsuppdatering för den, som indikerar de upptäckta och korrigerade felen (avvikelser från specifikationen).

Dessa misstag kan i princip komplicera livet. programvara, som fungerar på dessa "defekta" processorer (och användaren ;-)) .

Naturligtvis beror allt på de specifika felen. För att bli av med sådana fasor krävs en förändring av processorns mikrokod, vilket gör att felet helt kan elimineras eller konsekvenserna av dess närvaro helt enkelt kan mildras.

Förresten, bios-stöd för nyligen släppta processorer bestäms, särskilt av närvaron av lämplig firmware. Till exempel, när den första Celeron dök upp var det avsaknaden av en lämplig mikrokodversion som hindrade systemet från att starta korrekt med denna processor.

Mikrokoduppdateringarna i sig är 2K-block med data som flashas in i systemets BIOS. Det finns ett sådant block för varje stegning av processorn från P6-familjen. Intel levererar de senaste mikrokodversionerna till ledande BIOS-leverantörer. Uppdateringsdatabasen uppdateras och uppdateras allt eftersom nya modeller och firmwareversioner blir tillgängliga. Intel rekommenderar att du uppdaterar mikrokodversionerna med hjälp av dess verktyg när du installerar en ny processor på moderkortet eller programmerar om flashminnet för att se till att BIOS innehåller färsk version mikrokod. Detta program bestämmer vilken processor som används (med CPUID) och letar efter motsvarande uppdatering i sin databas. Om en ny version av mikrokoden hittas, uppdaterar verktyget lokalt koden i BIOS utan att påverka resten av områdena. Den där. det finns inget behov av att programmera om hela blixten för att stödja den nya CPU:n, vilket var fallet tidigare. Intel publicerar regelbundet databasuppdateringar på sin webbplats.

Den senaste databasen som är tillgänglig för oss har version 5.01 och innehåller följande mikrokodversioner:

processorProcessor SteppingMikrokoduppdatering Rev
Pentium III-processor0x6720x04
Pentium III-processor0x6730x02
Pentium III Xeon-processor0x6720x21
Pentium III Xeon-processor0x6730x22
Pentium II-processor0x6330x34
Pentium II-processor0x6340x35
Pentium II-processor0x6500x32
Pentium II-processor0x6510x30
Pentium II-processor0x6520x14
Pentium II-processor0x6530x01
Pentium II Xeon-processor0x6520x29
Pentium II Xeon-processor0x6530x04
Intel Celeron-processor0x6500x32
Intel Celeron-processor0x6510x30
Intel Celeron-processor0x6600x09
Intel Celeron-processor0x6650x02
Pentium II OverDrive-processorx16320x02
Pentium Pro-processor0x6120xC6
Pentium Pro-processor0x6160xC6
Pentium Pro-processor0x6170xC6
Pentium Pro-processor0x6190xD2

Du kan ladda ner den senaste versionen av mikrokodreparationsverktyget direkt härifrån: pupdt501.exe (115 Kb)

Den gamla databasen (PEP15.PDB) kan laddas ner härifrån: pupdt461.exe (111 Kb)

När verktyget är klart måste du stänga av strömmen till datorn. Uppdateringen laddas ner till processorn under POST vid varje systemstart. Naturligtvis, för att verktyget ska fungera, är det nödvändigt att tillåta flashminnet att skrivas över med en bygel eller i BIOS Setup. Programmet måste köras under den "blotta" DOS.

Detta idealiska scenario kräver dock att BIOS stöder ett speciellt processor-mikrokoduppdaterings-API som tillåter BIOS-uppdateringsverktyget att ladda den nya mikrokoden. Om versionen av system-BIOS som används inte stöder API:t har användaren inget val men för att skaffa en ny version från moderkortstillverkaren.Det händer dock att det inte är så lätt, för att inte säga omöjligt att hitta det.Ofta, efter att tillverkningen av en moderkortsmodell har upphört, slutar tillverkaren att släppa BIOS-uppdateringar för den, men kl. samtidigt kan nya processorer dyka upp till försäljning och användaren kanske vill installera en ny CPU i ditt system.

I det här fallet kan verktyget fortfarande ladda ner tekniska korrigeringar direkt till processorn. I det här fallet anropar verktyget för att ladda operativ system omedelbart efter firmwareuppdateringen. Däremot kommer uppdateringen av den fasta programvaran att gå förlorad vid en mjuk eller hård omstart av systemet.

Frågan uppstår, vad är risken med att själv uppdatera firmwaren? Tja, först och främst måste du först se till att du verkligen behöver det. Om firmwareversionen är gammal och moderkortstillverkaren inte erbjuder nya BIOS-versioner, men viktigast av allt, du står inför en instabil drift av någon applikation, och du förväntar dig att ändra processorns mikrokod kommer att hjälpa dig. Endast i det här fallet är det vettigt att ändra firmware själv. Och om vad den är kantad av – enligt mig inget farligt. Först och främst, glöm inte att att ladda en mikrokoduppdatering i processorn används i alla BIOS på P6-moderkort och har varit det länge (många såg det mystiska alternativet Microcode Update: Enable/Disable i Setup). Och ingenting! Allt fungerar.

Detta understryker återigen behovet av dess användning. Vem vet hur det hade varit utan denna uppdatering! Den enda skillnaden är att mikrokoden tidigare uppdaterades med installationen ny version flash, och nu kan du inte programmera om allt innehåll i BIOS, utan bara en begränsad del.

Min personlig erfarenhet arbetet med detta program har hittills varit begränsat till 7 fall, varav det var möjligt att uppdatera mikrokoden på endast ett moderkort (Abit LX6 med PII 233). I andra fall innehöll BIOS redan uppdaterade versioner av mikrokoden. Dessutom var det inte möjligt att möta ett BIOS som inte stöder mikrokoduppdateringar.

När det gäller den liknande möjligheten att uppdatera mikrokoden i processorer från andra tillverkare (AMD, Cyrix), kunde jag inte hitta någon information om det här problemet. Men jag är ganska säker på att dessa processorer har en liknande förmåga att ändra mikrokoden.

Moderna processorer är komplexa enheter som kan ha buggar. Dessutom, istället för att exekvera x86-instruktioner direkt, innehåller moderna x86-processorer intern kod som implementerar stöd för x86-instruktionsuppsättningen. Den interna koden kallas mikrokod. Mikrokod kan uppdateras för att fixa eller mildra CPU-buggar.

Vissa CPU-buggar kan få Firefox att krascha. Till exempel är Firefox 57 och senare känd för att ibland krascha på Broadwell-U-processorer med gammal mikrokod på ett sätt som inte sett med nyare Broadwell-U-mikrokodversioner.

Mikrokoduppdateringar kan laddas in på CPU:n av firmware (vanligtvis kallad BIOS även på datorer som tekniskt sett har UEFI-firmware istället för gammaldags BIOS) eller av operativsystemet. Mikrokoduppdateringar kvarstår inte vid omstart, så i fallet med ett dubbelstartsystem, om mikrokoduppdateringen inte levereras via BIOS, måste båda operativsystemen tillhandahålla uppdateringen.

På Mac, för att ha ett uppdaterat system, tillämpa alla OS X-systemuppdateringar och Apple firmwareuppdateringar som erbjuds i fönstret Uppdateringar i App Store app.

För att tillåta Windows att ladda uppdaterad mikrokod till processorn, se till Windows uppdateringär aktiverad och inställd på att installera uppdateringar.

För att se processorns mikroarkitektur och vilken mikrokodversion som används, kör kommandoreg-frågan HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 i Windows-kommandotolken. ( Du kanöppna kommandotolken genom att trycka på Windows + R , skriva cmd och trycka på Retur .) Raden märkt "VendorIdentifier" visar CPU-leverantören (GenuineIntel för Intel eller AuthenticAMD för AMD). Raden märkt "Identifier" ger mikroarkitekturen som tre siffror: "Familj", "Model" och "Stepping". Dessa är relevanta för att identifiera om en viss CPU-bugg kan vara relevant för CPU:n i din dator. Raden märkt "Update Revision" visar den aktuella mikrokodsrevisionen (för den specifika mikroarkitekturen) med nollor på båda sidor. Till exempel, Update Revision REG_BINARY 000000001E000000 betyder att revisionen är 1E (hexadecimal). Raden märkt "Previous Update Revision" visar mikrokodsrevisionen som laddats från BIOS.

Om leverantören är GenuineIntel, familjen är 6, modellen är 61 och stepping är 4, för att undvika krascher med Firefox 57 eller senare måste mikrokodsrevisionen vara 1A eller högre.

Huruvida mikrokoduppdateringar används som standard beror på Linux-distributionen och kan skilja sig åt för Intel- och AMD-processorer.

  • På Debian-baserade distributioner, inklusive Ubuntu, tillhandahålls mikrokoduppdateringar för Intel-processorer av intel-microcode-paketet och mikrokoduppdateringar för AMD-processorer tillhandahålls av amd64-microcode-paketet.
  • På Arch installeras AMD-mikrokoduppdateringar som standard, men Intels mikrokoduppdateringar kräver speciella steg .
  • På Fedora är mikrokoduppdateringar installerade som standard.

För att se processorns mikroarkitektur och vilken mikrokodversion som används, kör kommandot less /proc/cpuinfo i terminalen. Raden märkt "vendor_id" visar CPU-leverantören (GenuineIntel för Intel eller AuthenticAMD för AMD). Mikroarkitekturen ges som tre siffror på raderna märkta "cpu-familj", "modell" och "stepping". Dessa är relevanta för att identifiera om en viss CPU-bugg kan vara relevant för CPU:n i din dator. Raden märkt "mikrokod" visar mikrokodens revisionsnummer (för den specifika mikroarkitekturen) i hexadecimal form.

Sedan början av januari var det svårt att missa nyheterna angående Spectre och Meltdown hårdvara sårbarheter - ämnet visade sig vara så allvarligt och omfattande. Även om tillverkarna har varit medvetna om dessa problem sedan i somras, verkar de flesta ha börjat reagera först efter att experter släppt detaljerna. Google Teams Projekt Zero.

Till exempel, redan i januari, släppte Intel, bland andra patchar, mikrokoduppdateringar mot Spectre för sina Broadwell, Haswell, Skylake-processorer, Kaby sjö och kaffe sjö. Men nästan direkt visade det sig att de leder till misslyckanden och. Inledningsvis uppgav Intel att problemet bara påverkar Broadwell- och Haswell-chips, men medgav senare att det förekom fel på datorer med Skylake-, Kaby Lake- och Coffee Lake-processorer och partners och användare att avstå från att installera patchar tills vidare. Slutligen, i början av februari, en korrigerad version av mikrokoden, men bara för mobila och stationära konsumentchips från Skylake-familjen.

Nu, efter en månad av intensiv testning och patchning av Intel och dess partners, har tiden kommit för andra mer eller mindre relevanta processorer: mikrokoduppdateringar har släppts för chips baserade på arkitekturerna Kaby Lake och Coffee Lake, samt Skylake- baserade plattformar opåverkade av den tidigare uppdateringen. Vi pratar om processorer av 6:e, 7:e och 8:e generationen. Intel core i, såväl som de senaste Core X-, Xeon Scalable- och Xeon D-familjerna.

Den nya firmware-varianten kommer i de flesta fall att vara tillgänglig genom OEM-utgåvor av ny firmware för moderkort och laptop. Intel uppmuntrade fortfarande människor att hålla sina system uppdaterade nuvarande versioner, och publicerade också ett dokument , som beskrev statusen för liknande mikrokodfixar för andra av dess produkter, inklusive tidigare chip som börjar med 45nm Core 2. För vissa av dessa chip är det bara planerade patchar, för andra håller de på att tidig testning, för den tredje - finns redan i form av en betaversion. Som regel gäller att ju äldre arkitekturen är, desto senare får den firmware med skydd mot Spectre. Mikrokoduppdateringar för mer eller mindre aktuella Sandy Bridge-, Ivy Bridge-, Haswell- och Broadwell-arkitekturer är dock redan i beta-testning. Dessutom har ett antal Atom-chips och till och med Xeon Phi-acceleratorer redan fått patchar.

Intel påminde om att det finns andra metoder för att bekämpa de upptäckta sårbarheterna i grenförutsägelseblocket i moderna processorer. Till exempel Retpoline, utvecklad av Google mot Spectre CVE-2017-5715 (branch target injection eller target injection into a branch). För dem som är intresserade av att lära sig mer om Retpoline och hur det fungerar har företaget publicerat en särskild vitbok.

Anti-Specter-mikrokoduppdateringar släppta av Intel kommer att börja rullas ut under de kommande dagarna och veckorna i form av färsk BIOS-firmware för olika moderkort. Det är nyfiket om de kommer att ha en ytterligare effekt på försämringen av prestanda hos slutsystem?