Czym są i jaką rolę spełniają mikrokody w procesorze

1

Witam

Pytanie chciałbym skierować między innymi do @Gynvael Coldwind gdyż poruszyłeś temat mikrokodów na swojej prelekcji "Programowanie a hacking".

Zainstalowałem sobie GNU/Linux Mint 18 Cinnamon tylko tym razem bez własnościowego oprogramowania.
Zaglądając do menadżera sterowników moim oczom ukazał się taki widok

Zrzut ekranu z 2016-07-05 21-18-34.png

Chce zadać kilka pytań odnośnie tych mikrokodów i dwukrotnie podkreślić że znam bardzo ogólną zasadę działania procesora a asemblera to już w ogóle więc momentami mogę coś chrzanić od rzeczy.

  1. Czym właściwie są mikrokody?

Wikipedia angielska podaje:

the microcode is a layer of hardware-level instructions that implement higher-level machine code instructions or internal state machine sequencing in many digital processing elements.

Jak się domyślam mikrokody to taki firmware dla CPU który w pewnym stopniu modyfikuje zachowanie procesora
Nie wiem czy dobrze rozumiem powyższa definicję.
Mikrokody są zbiorem instrukcji procesora bezpośrednio na niego wpływających a instrukcje maszynowe są jakby zaimplementowane za ich pomocą ?

  1. **Kiedy mikroukłady są "ładowane" ? **

Na zdrowy rozum skoro mogę sobie "nie używać tego urządzenia" to oznacza że instalacja mikrokodów nie wpływa trwale na procesor czyli **mikrokody są ładowane przez jadro systemu operacyjnego podczas uruchamiania komputera **i operacje należy powtarzać po każdym twardym resecie. Dobrze piszę ?

  1. Rola mikrokodów czyli co one właściwie robią ?

Oczywiście wiem że konkretnej odpowiedzi nie uzyskam gdyż mamy wiele producentów, rodzin, architektur i modeli procesorów a (dla bezpieczeństwa ) mikrokody są rozprowadzane w formie nie jawnej poza wszelką kontrolą a ich działanie nie jest udokumentowane w żaden sposób (nie licząc sposobu ich instalacji ) jednak czy rezygnacja z mikrokodów w jakimś stopniu upośledza mój procesor.
Czy to znaczy że cześć zaawansowanych technologi (na przykład Intelowskich) **nie działa **?
Pytam gdyż jak widać na załączonym obrazku nie używam tych mikrokodów a nie zauważyłem (na ten moment) wolniejszego działania komputera.

4)** Czemu układy są tajne ?**

Dlaczego Intel (AMD pewnie też) szyfruje, podpisuje i wyrzuca klucz do tych mikrokodów :)
Domyślam się że jednym z powodów może być to że jest to zabezpieczenie przed niedzielnymi chAKERAMI którzy dobierali by się do nieszyfrowanych mikrokodów i psuli procki - lecz zwróćmy uwagę że tylko do najbliższego restartu - uważam że szyfrowane (o ile nie ma na celu ukrycia tylnych drzwi dla Narodowej Agencji Bezpieczeństwa Stanów Zjednoczonych ) jest niepotrzebne bo i na tych hakerów znalazła by się rada - patrz pytanie następne.

5)** Czy mikroukłady są potrzebne ?**

Zapytam naiwnie - czy mikrokody są naprawdę konieczne - mówiąc inaczej czy jest jakiś konkretny powód żeby aktualizować mikrokody.
Wydaję mi się że jedynym powodem dla którego istnieje możliwość ładowania firmwaru to ten że lepiej (bo taniej i mniej ryzykownie jest) wypuszczać aktualizację mikrokodów niż naprawdę gruntownie i dokładnie przetestować mikroukład pod kątem błędów. Dobrze myślę?
Czy też może istnieje inny powód?

BTW
Zaintrygował mnie ten artykuł a raczej tytuł:* Intel zablokuje możliwość podkręcania układów Haswell na płytach głównych B85, H81 i H87*
http://www.benchmark.pl/aktualnosci/intel-haswell-procesor-mikrokod-podkrecanie-blokada-b85-h81-h87.html
6) Jak to możliwe że Intel blokuje podkręcanie CPU - czy za sprawą tych mikrokodów jest blokowana spec-instrukcja do podkręcania CPU :)

1

O matko,

Strukturalna organizacja systemów komputerowych. Wydanie V
Autor: Andrew S. Tanenbaum

Od deski do deski.

5

@asm master
O, fajna książka, dzięki za polecenie :) (also: wow, $168 na amazon za nowy egzemplarz)

@kacper546
Ogólnie jest sporo niewiadomych jeśli chodzi o to co faktycznie mikrokody implementują, natomiast możemy sobie pogdybać ;)

Ogólnie tak, przy czym z tego co mi wiadomo, mikrokod implementuje tylko co bardziej skomplikowane instrukcje - reszta jest w krzemie.
Np. stawiam, że XOR r32, r32 będzie w krzemie, ale jakieś wynalazki typu PCMPISTRI (http://gynvael.coldwind.pl/?id=386) już niekoniecznie.
Jednym z celów mikrokodu było afair rozbicie instrukcji CISC na szereg instrukcji pseudo-RISCówych, które się łatwiej optymalizuje (można je między sobą przestawiać w niektórych wypadkach, wykonywać równocześnie, etc; CISC też się da, ale jest trudniej).

No i drugą sprawą są niektóre co bardziej skomplikowane zachowania procesora, np. co konkretnie się dzieje w momencie pojawienia się przerwania w konkretnej sytuacji itp. Przykładem może być bug w procesorach AMD znaleziony przez Roberta Święckiego w tym roku, który został poprawiony dokładnie przez tą łatkę, którą masz na screenie :)
http://seclists.org/oss-sec/2016/q1/450
https://lists.debian.org/debian-security/2016/03/msg00084.html

Dokładnie tak jak napisałeś. Mikrokody ładuje częściowo BIOS/UEFI, a częściowo system operacyjny w dowolnym momencie (vide https://wiki.archlinux.org/index.php/microcode).
Technicznie jest to po prostu seria zapisów do rejestrów MSR (patrz np. http://inertiawar.com/microcode/ - sekcja "How does the microcode update mechanism work?")

Zazwyczaj nowe wersje mikrokodu łatają błędy związane ze stabilnością (nieprawidłowym działaniem procesora w niektórych, zazwyczaj bardzo bardzo specyficznych, warunkach) lub bezpieczeństwem (tak jak w przypadku, który Cię zainteresował).

Natomiast co konkretnie jest pozmieniane, to jak piszesz, trudna sprawa i ciężko powiedzieć. Afair nawet zbyt dokładnych "release notes" nie publikują.

I to jest dobre pytanie. Pewnie powodów jest kilka, np.:

  • przewaga nad konkurencją - jeśli w mikrokodzie jest jakaś sprytna optymalizacja, której nie ma konkurencja, to nie ujawnienie jej jest na korzyść danej firmy
  • bezpieczeństwo - gonienie się z malware'em, który wrzuci sobie rootkit w microcode byłoby zdecydowanie nietrywialne; a do szczęścia raczej nikomu nie brakuje AV na tym poziomie
  • żeby ludzie sobie procesorów nie popsuli ;) kto wie czy czasem mikrokod nie może sterować jakimiś procesami, które mogą na stałe uszkodzić procesor (chociaż hmm, wszystkie napięcia i tak są dostępne z płyty głównej więc... ciekawe czy tak naprawdę jest), albo czy Intel nie wrzucił w CPU jakichś flag, które można przestawić tylko raz (i potem np. wyłączają na stałe i na zawsze Nty core CPU)
  • i pewnie żeby ludzie sobie dodatkowych możliwości w CPU nie odblokowywali (np. zablokowanych core'ów) bez płacenia wyższej kwoty za CPU (nie wiem czy tak jest, ale jest taka opcja - w końcu nie raz się zdarzało, że różnice w ficzerach różnych modeli sprzętu sprowadzały się do ustawień w firmwarze)

Tak - patrz wyżej (bezpieczeństwo i stabilność).
Nie jest możliwe wyeliminowanie wszystkich błędów w tak skomplikowanym urządzeniu w momencie jego projektowania czy testowania.

Natomiast przyznaję, że z punktu widzenia bezpieczeństwa i przejrzystości preferowałbym wiedzieć i móc przeanalizować update'y w mikrokodzie, tak, żeby było jasne co konkretnie jest zmieniane #teoriespiskowa #nsa #backdoor :)

Przyznaje, że nie wiem który konkretnie element systemu komputerowego jest używany przy overclockingu. Ale opcje są dwie - ale taka blokada będzie zrobiona na poziomie mikrokodu, albo na poziomie firmware płyty głównej.

Tyle na szybko. Dużo niewiadomych ;)

2

Tak w ogóle to w płyty Intela dla nowych procków wbudowane są... kolejne procki i to mające władzę nad tymi głównymi.

http://www.dobreprogramy.pl/Komputery-z-procesorami-Intela-sa-kontrolowane-przez-Intela,News,60132.html
https://en.wikipedia.org/wiki/Intel_Active_Management_Technology

0

dobry temat. tym bardziej zalecam Arch Linuxa wszystkim, bo można się dowiedzieć co to są te microcodes i co to jest fstrim

0

Ja zapytam gdzie znajduje sie microkod, jest zapisany w procesorze czy jest częścią biosu/uefi albo coś jeszcze innego?

1

Plus minus wygląda to tak: wstępna wersja jest w pamięci ROM w procesorze i przy odpaleniu procesora jest kopiowana do jakiegoś SRAM (to domysły btw).
Aktualizacje do mikrokodu są natomiast w BIOS/UEFI (który je ładuje do procesora podczas wstępnej inicjalizacji komputera), oraz po prostu w systemie operacyjnym (z poziomu jądra można spokojnie wrzucać podpisane aktualizacje mikrokodu; np. [1]).

[1] June 2015 Intel CPU microcode update for Windows

1

Ja po zainstalowaniu pakietu intel-microcode (core i3) nie widzę raczej żadnych zmian w zachowaniu komputera ani w wydajności. Bez tego wszystko działało tak samo.

1

Trzeba się nieźle postarać, żeby te zmiany wykryć czy zauważyć :) One są bardzo subtelne i dotyczą bardzo specyficznych sytuacji.

0

To po c*** to instalować w ogóle

1

Tu wersja do oglądania:

0
Gynvael Coldwind napisał(a):

Plus minus wygląda to tak: wstępna wersja jest w pamięci ROM w procesorze i przy odpaleniu procesora jest kopiowana do jakiegoś SRAM (to domysły btw).
Aktualizacje do mikrokodu są natomiast w BIOS/UEFI (który je ładuje do procesora podczas wstępnej inicjalizacji komputera), oraz po prostu w systemie operacyjnym (z poziomu jądra można spokojnie wrzucać podpisane aktualizacje mikrokodu; np. [1]).

[1] June 2015 Intel CPU microcode update for Windows

Nie do końca rozumiem. W procku na stałe jest wgrany microkod a aktualizacje są zapisane w Biosie/Uefi i za każdym razem gdy uruchamiam komputer te aktualizacje mikcrokodu sa ładowane do procesora, czy tylko raz są załadowane do procka w celu aktualizacji w procesorze. Pytam bo w artykule http://www.benchmark.pl/aktualnosci/intel-haswell-procesor-mikrokod-podkrecanie-blokada-b85-h81-h87.html pisze tak:

Jeszcze w tym tygodniu firma Intel planuje wydać nowe mikrokody do odblokowanych modeli Core i5 4670K i Core i7 4770K, które zablokują możliwość zmiany mnożnika na płytach głównych z chipsetem B85, H81 i H87. .........
Mimo wszystko, zainteresowanym przyspieszaniem układów na tańszych płytach głównych, radzimy się trochę pospieszyć, gdyż wersje dostępne w sklepach powinny jeszcze zawierać stare oprogramowanie.

To co tam pisze to by sugerowało że nastąpiła by aktualizacja mikrokodu w procesorze. Chyba że ja coś źle rozumiem, to proszę wytłumaczyć.

0

Witam. Chciałbym troszke poznać ten temat.Dlatego byłbym wdzięczny gdyby ktoś udzielił odpowiedzi na nurtujące mnie pytania.

0

Temat jest nie za prosty, więc imo lepszej odpowiedzi niż tytuł książki nie dostaniesz.
Jeżeli temat jest dla Ciebie interesujący to niestety, ale musisz sie z nim sam zapoznać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1