Maszyny też się mylą. Przykładowe błędy hardware.

Na stronach niebezpiecznika oraz zaufanej trzeciej strony pojawiły się ostatnio artykuły o nowej podatności komputerowego hardware na atak – i jej wykorzystaniu. Podatność ta z grubsza polega na tym,że odpowiednio często nadpisywana komórka pamięci dzięki wyciekowi ładunku elektrycznego może oddziaływać na komórkę sąsiednią – i jeśli jest w niej coś ważnego dla bezpieczeństwa systemu, to może być nieciekawie. Atak jest możliwy dzięki temu,że możliwe jest określenie krytycznego obszaru pamięci i wykonanie z poziomu zwykłego użytkownika ataku na ten obszar.

Jak widać: polegamy na elektronice,ale niektórzy zapominają,że błędy się zdarzają.

Tego typu wymuszony błąd – wynikający ze struktury elektroniki nie jest jedynym błędem. Wcześniej niebezpiecznik wspominał o bitsquattingu i problemie oddziaływania promieniowania kosmicznego na pamięci komputerowe. O tych błędach można sobie spokojnie poczytać w tych serwisach. A tu podam inne przykłady.

W początkach lat 90-tych (dokładnie około 1994 roku) użytkownicy komputerów zostali zapoznani z przerażającym odkryciem. Ich procesory ówczesne procesory o częstotliwościach 60-100 Mhz źle wykonywały operację dzielenia. I nie była to oczywiście jakaś prosta operacja.

Przykładową operacją testową było wykonać następujące obliczenie:

962 306 957 033 / 11 010 046 = 87402,6282027341 (wynik poprawny)

962 306 957 033 / 11 010 046 = 87399,5805831329 (wynik błędny)

Był to tak zwany bug FDIV.

Jak pisał Scott Mueller swego czasu w staszych wydaniach swojej książki „Rozbudowa i naprawa komputerów” – w reakcji na to wydarzenie firma Intel zdecydowała się wymienić błędnie działające procesory. Inny, przykładowym problemem była awaria funkcji oszczędzania energii w procesorach EPA Energy Star skutkująca zawieszeniem komputera.

Kolejny przykład, który przestawię jest dużo bliższy współczesności. W serwisie stackexchange dyskutowano nad problemem błędów związanych z obliczeniami procesora. Jak  w trakcie dyskusji jeden z użytkowników zwrócił uwagę,że wyniki obliczeń zmiennoprzecinkowych w układach: Intel i7-3610QM i Nvidia GeForce GTX 660 nieco się różnią. Na przykład otrzymane wyniki:
-1.4906010142701069 Procesor
-1.4906010142701074 Karta graficzna
-1.4906010142701069 Procesor
-1.4906010142701074 Karta graficzna
Błąd wynika głównie z tego,że układy te najprawdopodobniej w różny sposób zaokrąglają. Różnice co gorsza mogą się kumulować… 4,01*10-14 % wartości to może mało,ale wystarczająco dużo obliczeń (zwłaszcza iloczynów) może doprowadzić do wystarczającego błędu by miało to znaczenie.Co z tym można zrobić – niewiele albo nic,bo sprawa jest kwestią zaokrągleń i rozmiaru pamięci.

Kolejny błąd tego typu to klasyczne,dobrze znane programistom przepełnienie bufora. Bo co się stanie,gdy maszynie każe się dodać dwie ośmiobitowe (już od dawna za proste – teraz są 32-64 bity) cyfry:
11111111 i 00000001 dwójkowo to by było 100000000 a w praktyce wynik bez nadmiarowego bitu będzie ośmiobitowa cyfra 00000000. A gdzie powędrowało 1 (nadmiarowy bit) z samego początku ?
Zostało zgubione albo co gorsza – trafiło w inne miejsce pamięci.

Warto tutaj wspomnieć,że rejestry pamięci cache procesora czy karty graficznej mogą być różnie zbudowane.

Ale mało i tego. Niektórzy „dla zwiększenia wydajności” lubią przetaktować sobie procesor. Oczywiście – można a czasem „trzeba”. Sama produkcja chipów jest taka,że spora część układów z „wafla” krzemowego może pracować zanim pojawią się błędy obliczeniowe ze znacznie większymi częstotliwościami taktowania, niż określa producent. Teoretycznie. W praktyce jednak, oznacza to również przyjęcie,że błędy procesora mogą zdarzać się częściej (mniejsza stabilność pracy), a sam procesor może nawalić szybciej. Plus może powodować różne problemy dopasowaniem częstotliwości pracy pamięci i procesora.Wreszcie – jeśli przesadzi się przy przetaktowaniu procesor może się spalić.  Nawet tak spektakularnie,jak przetaktowany układ raspberry pi:

Oczywiście – nie każdy, kto przetaktuje procesor uzna moją argumentację za słuszną. Wzrost efektywności może być bowiem większy jak przyrost problemów,a same problemy mogą być z pewnego punktu widzenia marginalne – i o tym też należy pamiętać.

Niestety,im mniejsze ścieżki mikroprocesorowe tym większego znaczenia nabiera również fizyczna degradacja układu mikrochipu.

Problem dodatkowo komplikują inne, niż wymienione na samym początku błędy pamięci. Nie tylko sąsiednie komórki pamięci i promieniowanie kosmiczne,nie można zapominać o błędach podczas odczytu. Same te problemy opisuje na przykład artykuł „DRAM errors in the Wild:A Large-Scale Field Study„.

Jak widać błąd procesora czy pamięci można raz na jakiś czas spotkać lub spowodować.

Czy to wszystko na co „stać” komputery ? Ależ nie. „Wąskim gardłem” każdego komputera jest magistrala płyty głównej obsługująca komunikację pomiędzy poszczególnymi układami. W starszych komputerach problemy z magistralą i błędami DMA były częstsze niż dziś,lecz wcale to nie znaczy,że dzisiaj takich błędów nie ma. Wciąż mogą się zdarzyć – choć rzadziej. A jeśli doszło by do „zakleszczenia” się między operacjami – urządzenie się „zawiesi” (utknie przy wykonywaniu instrukcji, która stała się bezsensowna.

Jednak, nie tylko komputery się tak mylą.Cała technika cyfrowa (zwłaszcza : wszystko co ma mikrokontroler) jest w końcu oparta dzisiaj na przepływach prądów, które pełnią rolę zera i jedynki – czyli sygnał i brak sygnału (czyt: odpowiedniego prądu).  Podobne błędy, jak w procesorach (i gorsze) spotkać można w robotach przemysłowych i setkach innych urządzeń Często winne są tu błędy programistyczne. Ale nie zawsze winni są programiści. Czasem winny jest konstruktor urządzenia.

A potem:

Dlaczego w takim razie polegamy na tym „zawodnym” sprzęcie ? Bo w większości przypadków nie dzieje się naprawdę nic złego. Przestawienie w wyniku promieniowania kosmicznego średnio 1 bitu na dzień w komputerze dysponującym 4 Gb zwykłej pamięci raczej zwykle nie powinno wywołać i tak katastrofy – choć może i obniża stabilność długotrwale funkcjonującego systemu.Realnie gdyby 1 osoba na 4 miliony ginęła dziennie pod kołami samochodów to (pomimo ogromu tragedii) jakoś by to nas nie ruszało w codziennym życiu – przynajmniej dopóki nie bylibyśmy to my,lub nasi krewni. Tak szczerze,w Polsce ofiar śmiertelnych wypadków drogowych w 2007 było średnio o prawie 60% więcej.

Z drugiej strony sprawa ewentualnych usterek systemów elektronicznych to wcale nie jest drobiazg. Coraz więcej nowych samochodów wyposażanych jest w nową elektronikę.  I bynajmniej jej awaria nie musi być tak niegroźna,jak na poniższym filmie:

Poważniejsze usterki mogą prowadzić nawet do katastrofy.Dlatego ważne jest zapewnienie nadmiarowości i innych środków bezpieczeństwa wszędzie tam,  gdzie bezpieczeństwo jest wymagane. I unikanie sytuacji,w które elementy systemu od którego wymagana jest poprawna praca ulegają przeciążeniu. Przeciążeniu nie tylko zresztą wynikającemu z warunków powiązanych z elektroniką. Itd.

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s