Forum: Mikrocontroller und Digitale Elektronik Kippen Bits in Registern zufällig?


von Timm T. (Gast)


Lesenswert?

Wenn ich eine Anwendung programmiere, die auf der einen Seite 
ununterbrochen laufen könnte, auf der anderen Seite aber bei Bitfehlern 
in Registern / SRAM durchaus unkontrollierbaren Mist bauen könnte, ist 
es dann empfehlenswert, gegen zufälliges Bitkippen Vorkehrungen zu 
treffen? Oder kommt das praktisch auch bei jahrelanger Laufzeit nicht 
vor?

Zum Beispiel:
1
ldi r16, 20; für schnelles Setzen im Interrupt
2
3
main:
4
  ;...
5
rjmp main
6
7
interrupt:
8
  ;...
9
  sts Atimeout, r16 ;spart einen Zyklus für das Setzen der Konstante
10
  ;...
11
reti

Hier könnte ein Bitkippen in r16 für eine falsches Timeout sorgen.

Wäre dann eine Variante, die das Register regelmäßig auffrischt, 
sicherer?
1
ldi r16, 20; für schnelles Setzen im Interrupt
2
3
main:
4
  ;...
5
  ldi r16, 20; Register auffrischen
6
rjmp main
7
8
interrupt:
9
  ;...
10
  sts Atimeout, r16 ;spart einen Zyklus für das Setzen der Konstante
11
  ;...
12
reti

Ist sowas sinnvoll oder kann man davon ausgehen, daß einmal geschriebene 
Register ihren Wert behalten?

Brownout, ordentliche Spannungsversorgung und Watchdog seien mal als 
vorhanden anzusehen.

von TBI (Gast)


Lesenswert?

Die Register werden (zumindest beim M32) im SRAM gespeichert. Sollten 
also unter den gegebenen Umständen unbegrenzt halten. Du hast keine 
Tesla-Spule oder dicke Motoren daneben stehen?

von St. D. (st_d)


Lesenswert?

Stichbegriff SEU (Single Event Upset)

von Gerd E. (robberknight)


Lesenswert?

Viele aktuelle µCs haben ein automatisches Hardware Parity-Checking für 
das SRAM integriert. Wenn da ein Bit kippen sollte, gibt das beim 
nächsten Zugriff einen Fault und du kannst in eine 
Fehlerbehandlungsroutine springen.

von (prx) A. K. (prx)


Lesenswert?

Gerd E. schrieb:
> Viele aktuelle µCs haben ein automatisches Hardware Parity-Checking für
> das SRAM integriert.

Viele Mikrocontroller?

: Bearbeitet durch User
von Purzel H. (hacky)


Lesenswert?

Eine Frage der Anwendung, resp der Umgebung. Hier unten passiert das 
eigentlich nicht. Im Flugzeug auf 10km hoehe schon eher. Auf der ISS 
schon.

Deswegen muss man fuer fuer Spaceanwendungen spezielle chips verwenden.
Aber eben, hier unten geschieht das nicht. Sonst wuerd nichts laufen.

Die EMV muss man natuerlich im Griff haben.

von Anja (Gast)


Lesenswert?

A. K. schrieb:
> Viele Mikrocontroller?

Z.B. die Tricore Aurix-Familie.

Wird aber nur deswegen gemacht weil die Ausbeute ohne automatische 
Fehlerkorrektur bei den Strukturbreiten sonst zu gering wäre.
Im Datenblatt wird das dann als "Sicherheitsfeature" verkauft.

Zur Ursprungsfrage:
Timm T. schrieb:
> ist
> es dann empfehlenswert, gegen zufälliges Bitkippen Vorkehrungen zu
> treffen? Oder kommt das praktisch auch bei jahrelanger Laufzeit nicht
> vor?
Das hängt davon ab wie gut Dein Hardwaredesign (z.B. gegenüber EMV) ist.
Wenn es wirklich sicherheitsrelevant ist solltest Du Maßnahmen 
ergreifen.
Z.B. alle variablen als true und Komplement ablegen und in jedem 
Durchlauf gegeneinander prüfen. Auch ein zyklischer Speichertest wäre 
dann eine sinnvolle Maßnahme.

Allerdings mußt du dir dann auch Gedanken machen was deine Endstufen tun 
wenn z.B. der Spannungsregler "durchlegiert" und mit der ungefilterten 
Rohspannung (24 V) den Prozessor grillt. (Der brown out hilft in dem 
Fall nicht).

Oft reicht ja schon eine einfache Maßnahme (z.B. mechanische 
Übertemperatursicherung) um den GAU zu verhindern.

Gruß Anja

von Jasch (Gast)


Lesenswert?

Siebzehn F. schrieb:
> Eine Frage der Anwendung, resp der Umgebung. Hier unten passiert das
> eigentlich nicht. Im Flugzeug auf 10km hoehe schon eher. Auf der ISS
> schon.
>
> Deswegen muss man fuer fuer Spaceanwendungen spezielle chips verwenden.
> Aber eben, hier unten geschieht das nicht. Sonst wuerd nichts laufen.

Er hat "jahrelange Laufzeit" geschrieben.

Da schlägt die Statistik gnadenlos zu - und natürlich passiert das dann 
auch hier unten mit nicht unbedingt vernachlässigbarer 
Wahrscheinlichkeit. Zumindest für alles 
sicherheits-/überlebens-/massentöt-relevantes sollte man das nicht 
einfach ignorieren.

von Timm T. (Gast)


Lesenswert?

Anja schrieb:
> Allerdings mußt du dir dann auch Gedanken machen was deine Endstufen tun
> wenn z.B. der Spannungsregler "durchlegiert"

Ich sag mal: Keine Medizinprodukte, keine AKW, keine Raumstation.

Legiert der Spannungsregler durch, geht es kaputt und ich bekomme es 
mit.
Haut ein Blitz die Elektronik weg, geht es kaputt und ich bekomme es 
mit.
Ändert sich ein Wert in einem Register oder SRAM, läuft der AVR weiter, 
regelt falsch oder liefert falsche Werte, und ich bekomme es unter 
Umständen über Monate weg nicht mit.

Darum geht es mir.

Es sind ATmega / ATtiny AVR unter normalen Bedingungen. Kein Automotive, 
keine gemeinen Umgebungsbedingungen, eventuell Metallgehäuse.

von P. M. (o-o)


Lesenswert?

Register können nicht in dem Sinne kippen. Was passieren könnte 
(unwahrscheinlich) ist irgend eine Störung auf einer Leitung, welche die 
Leitung zum "kippen" bringt. Das kann in der Alu genau so passieren wie 
in den SRAM-Registern. Deshalb sind Register nicht gefährdeter für eine 
Fehlfunktion als irgend ein anderer Teil des uCs.

Sollte eine solche Fehlfunktion auftreten, so kann ein einzelnes 
Register verfälscht werden, es kann aber gerade so gut die Steuerlogik 
(Program counter, Stack pointer, usw.) betroffen sein, so dass der uC 
Amok läuft.

Aus diesem Grund sind Überprüfungen von einzelnen Registern nicht 
sinnvoll. Wenn du gegen Störungen gesichert sein willst, dann musst du 
die gesamte Funktion des uCs überwachen, z.B. mit Watchdog und weiteren 
Ideen.

von S. R. (svenska)


Lesenswert?

Timm T. schrieb:
> Ändert sich ein Wert in einem Register oder SRAM, läuft der AVR weiter,
> regelt falsch oder liefert falsche Werte, und ich bekomme es unter
> Umständen über Monate weg nicht mit.

Ein einzelnes Bauteil kann sich nicht vollständig selbst überwachen, 
denn dazu muss es zu einem gewissen Grad korrekt funktionieren, was im 
abzufangenden Fehlerfall gerade nicht gegeben ist. Damit ist die Theorie 
für dein Problem abgehandelt, fertig.

Die Wahrscheinlichkeit, dass du in den Self-Check-Code Fehler einbaust, 
ist vermutlich höher als die eines Bitkippers, und optimierende Compiler 
kannst du gleich vergessen. Außerdem kann dir ein Bitkipper im uC egal 
sein, solange die Ausgaben (Reaktionen) des Systems stimmen. Um dich 
dagegen abzusichern, hilft am einfachsten Redundanz: 3 Systeme, wenn 
mind. 2 gleicher Meinung sind ist alles prima.

Oder du verabschiedest dich von der Unendlichkeit und planst einfach 
einen regelmäßigen (monatlich, jährlich) Reset ein, der vermutlich 
ohnehin auftritt (Stromausfall, Verschleiß/Reparatur des restlichen 
Systems, ...).

von R. R. (elec-lisper)


Lesenswert?

Oder du setzt zwei uCs ein, deren Entscheidung dann nochmal abgeglichen 
wird. Aber das verlagert das Problem evtl. nur.

von Timm T. (Gast)


Lesenswert?

S. R. schrieb:
> Außerdem kann dir ein Bitkipper im uC egal
> sein, solange die Ausgaben (Reaktionen) des Systems stimmen.

Deswegen die obigen Beispiele.

Flash dürfte gegen Einflüße deutlich resistenter sein als SRAM.

Stackfehler oder Pointerfehler führen zu Programmfehler, WDR, Überlauf 
und damit zu Neustart. Damit habe ich wieder definierte Zustände.

SRAM Fehler führen nicht zu Neustart und bleiben eventuell längere Zeit 
im Speicher.

von asdfasd (Gast)


Lesenswert?

Vergiss den Schmarrn.  Du kannst dich darauf verlassen, dass sich der 
Zustand deines Prozessors nicht einfach zufällig ändert.  Ohne dies 
Annahme ist Programmieren unmöglich.  Punkt.

Natürlich gibt es abgefahrene Anwendungen, wo das nicht mehr immer 
zutrifft, aber das sind Spezialbereiche, die dann auch spezielle 
Hardware erfordern.

> Flash dürfte gegen Einflüße deutlich resistenter sein als SRAM.

Soll ich mal lachen?  Ich finde es immer wieder erstaunlich, dass Flashs 
überhaupt Daten ne relevante Zeit halten können.  Bei den TLCs zählen 
sie schon, wieviel Elektronen pro Tag maximal abfließen dürfen, damit 
sie 10 Jahre hinbekommen (war glaub ich 2 Stück).

von Anja (Gast)


Lesenswert?

Timm T. schrieb:
> Ändert sich ein Wert in einem Register oder SRAM, läuft der AVR weiter,
> regelt falsch oder liefert falsche Werte, und ich bekomme es unter
> Umständen über Monate weg nicht mit.

Um das mitzubekommen reicht dann eine einfache Checksumme über die 
kritischen Parameter die zyklisch geprüft wird.
-> du bekommst dann Änderungen mit.

asdfasd schrieb:
> Du kannst dich darauf verlassen, dass sich der
> Zustand deines Prozessors nicht einfach zufällig ändert.  Ohne dies
> Annahme ist Programmieren unmöglich.

Bei genügend großen Stückzahlen kannst du noch nicht einmal garantieren 
daß alle Prozessoren bei einer Multiplikation das gleiche Ergebnis 
liefern weil ein Maskenfehler bei der Produktion bei einem einzelnen 
Chip durchgerutscht ist.
Elektrostatische Entladungen ESD haben genügend Energie um einzelne Bits 
kippen zu lassen.
Und auch die Brown-Out Funktionen des Prozessors haben sicherlich Lücken 
so daß zwar Register bei Netzstörungen verändert werden können aber kein 
ordentlicher Reset ausgelöst wird.

Gruß Anja

von asdfasd (Gast)


Lesenswert?

> Bei genügend großen Stückzahlen kannst du noch nicht einmal garantieren
> [...] Maskenfehler [...] ESD [...] Netzstörungen [...]

Ja, und ein Flugzeug könnte auch auf den Prozessor fallen.  Natürlich 
kann das alles und noch viel mehr passieren, aber das sind keine Sachen, 
die man beim Programmieren berücksichtig!  Wenn die Hardware nicht mehr 
deterministisch arbeitet, hat die Software keine Chance mehr.

von Timm T. (Gast)


Lesenswert?

asdfasd schrieb:
> Wenn die Hardware nicht mehr
> deterministisch arbeitet, hat die Software keine Chance mehr.

Die Software kann doch aber einige Einfallstore durch die Programmierung 
schließen: Sie kann Werte einmalig beim Start aus dem Flash oder Eeprom 
holen, oder sie kann diese Werte regelmäßig holen.

Gibt es denn praktische Erfahrungen mit Bitfehlern bei längerem 
Dauerbetrieb von AVR Controllern (oder anderen)? Ich weiß, sowas ist 
schwer nachzuvollziehen, und beim nächsten Reset ist es eh wieder weg.

von Georg (Gast)


Lesenswert?

Hallo,

an einem einzelnen Punkt anzusetzen wie in dem Fall Register r16 hilft 
nicht wirklich weiter. Es kann was passieren, allerdings sehr selten, 
aber dann an beliebiger Stelle, es ist sehr unwahrscheinlich dass gerade 
das Register r16 getroffen wird. Wenn man also sich dagegen absichern 
wollte wären viel viel umfangreichere Massnahmen notwendig, was man nur 
bei hochsicheren Anwendungen versucht.

Daten, die für unbestimmte Zeit gespeichert werden, z.B. bei mir 
Parametersätze im batteriegestützten RAM, sichere ich i.d.R. per 
Prüfsumme gegen Veränderung. Allerdings bringt das nur was, wenn man 
auch einen Plan B hat, d.h. was ist zu tun wenn ein Fehler vorliegt: 
z.B. eine 2. Kopie verwenden oder auf Notbetrieb mit Standardparametern 
gehen. Und der Fehler muss unbedingt irgendwie gemeldet werden, 
spätestens beim nächsten Kundendienst sofern vorgesehen, oder durch eine 
Fehler-LED.

Du kannst natürlich r16 immer wieder setzen, nicht unbedingt in der ISR, 
sondern in der main-Schleife, aber eine Hochsicherheitsanwendung wird 
dadurch nicht daraus. Du kannst auch r16 und andere kritische Werte auf 
Plausibilität überwachen, aber das führt schnell in eine endlose 
Rekursion - wer überwacht die Überwachung?

Georg

von Paul B. (paul_baumann)


Lesenswert?

Nach der Weihnachtsfeier ein Bit gekippt?
Dann hat es zuviel am Glühwein genippt!
Auf der Straße lag ein betrunkenes Byte
das war völlig dicht und 8 Bittes breit
Entfernt hat es dann der Herr Straßenfeger,
völlig korrekt und äußerst integer

MfG Paul

von Olaf (Gast)


Lesenswert?

> Ändert sich ein Wert in einem Register oder SRAM, läuft der AVR weiter,
> regelt falsch oder liefert falsche Werte, und ich bekomme es unter
> Umständen über Monate weg nicht mit.

Sowas kannst selbstverstaendlich passieren. Gegen solche Probleme hofft 
man mit SIL vorzugehen:

https://en.wikipedia.org/wiki/Safety_integrity_level

Dadurch wird aber sowohl die Hardware, wie auch die Software sehr 
aufwendig.
Das ist nicht gerade das was man in seiner Kaffemaschine einbauen wird. 
Aber der Fuellstandschalter am Oeltanker hat sowas. (und kostet dann 
soviel wie 10 Kaffemaschinen. :-)

Olaf

von Christian J. (Gast)


Lesenswert?

Olaf schrieb:
> https://en.wikipedia.org/wiki/Safety_integrity_level
>
> Dadurch wird aber sowohl die Hardware, wie auch die Software sehr
> aufwendig.

Der Text da oben in Wikipedia ist zu 3/4 von mir in der deutschen 
Ausgabe
https://de.wikipedia.org/wiki/IEC_61508
allerdings nur die Grundlagen. Die neue Ausgabe der 61508 spricht von 
sog. Soft-Errors die berücksichtigt werden müssen bei Designs. Teil 6, 
Software. Eine jahrelange Laufzeit in einer Low-Demand Anwendung die 
auch noch SIL 2-3 erreichen soll ist eine große Herausforderung, die in 
der Praxis mit 2 CPU's gemacht wird und externem Watchddog sowie der 
ganzen Palette an Speichertest und Decodertests, sowie gegenseitiger 
Überwachung. Ohne einen Proof Test wird es nicht gehen, der immer wieder 
zwischendurch gemacht werden muss.

Gruss,
Christian

von (prx) A. K. (prx)


Lesenswert?

Timm T. schrieb:
> Die Software kann doch aber einige Einfallstore durch die Programmierung
> schließen: Sie kann Werte einmalig beim Start aus dem Flash oder Eeprom
> holen, oder sie kann diese Werte regelmäßig holen.

Das dürfte statistisch kaum relevant sein. Wenn der Inhalt futsch ist 
und das Programm spinnt, dann liegt das Kind schon im Brunnen. Sich 
dagegen abzusichern erfordert eine Kontrolle innerhalb der 
Arbeitsprozesse, etwa die erwähnte Parität. Und ggf. ein gründlicher 
Selbsttest beim nachfolgenden Neustart.

Praxisrelevanter scheint mir eine Prüfsumme über das Flash und deren 
Kontrolle mindestens beim Start. Denn dass der Inhalt vom Flash mal 
verschütt gehen kann, das gehört zum Lebensrisiko mit solcher Technik 
arbeitender Systeme. Ebenso bei Konfigurationsdaten im EEPROM, wobei das 
da auch bei jedem einzelnen Zugriff praktikabel sein kann.

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

A. K. schrieb:
> Viele Mikrocontroller?

z.B. STM32F0, STM32F3, STM32L4

Aber das HW-Checksumming betrifft dort nur das SRAM, nicht die Register 
von der Peripherie. Es könnte also sich auch z.B. das Interrupt-Flag 
eines Timers zurücksetzen und dann wird Dein Interrupt nie aufgerufen.

Wirklich absichern wirst Du nicht alle Fälle können, denn wenn eines der 
zentralen Register des Cores (z.B. Stackpointer) sich verändert, hast Du 
keine Kontrolle mehr drüber was Dein Programm gerade macht. Da läuft es 
dann auf die schon angesprochene Lösung mit den 3 µCs raus deren 
Ausgaben verglichen werden.

Da Timm ja explizit von Timeouts sprach, wäre eine Überwachung der Takte 
auch noch etwas an das ich denken würde. Kaputte Quarze hatte ich 
nämlich schon so einige. Also vielleicht 2 Oszillatoren laufen lassen 
(µC-Takt und Uhrenquarz) und gegeneinander prüfen. Das ist nicht 
besonders aufwendig.

von (prx) A. K. (prx)


Lesenswert?

Timm T. schrieb:
> Die Software kann doch aber einige Einfallstore durch die Programmierung
> schließen: Sie kann Werte einmalig beim Start aus dem Flash oder Eeprom
> holen, oder sie kann diese Werte regelmäßig holen.

In vollintegrierten Microcontrollern mit integriertem Flash hat man 
i.d.R. nicht die Ressourcen, um das Flash komplett ins RAM zu kopieren. 
Oder dank Harvard überhaupt nicht die Möglichkeit.

Anders sieht es bei höhergradigen Systemen mit externem RAM fürs 
Programm aus. Dann ist das RAM aber meist DRAM und die Idee von Parität 
oder ECC im RAM sowieso nicht ganz abwegig. Und das Flash ist dann oft 
NAND-Flash mit eigenem ECC.

von Anja (Gast)


Lesenswert?

asdfasd schrieb:
> Ja, und ein Flugzeug könnte auch auf den Prozessor fallen.  Natürlich
> kann das alles und noch viel mehr passieren, aber das sind keine Sachen,
> die man beim Programmieren berücksichtig!

In welcher Spielzeugwelt lebst Du denn?
Früher (TM) als man noch richtige Zündschlösser im Auto hatte, konnte 
man den Motor noch mit dem Zündschloß ausschalten wenn der Gaszug sich 
verklemmt hatte.
Das geht heutzutage nicht mehr wenn man ein Keyless-Go system mit Start 
Stopp betrachtet.
In einem modernen Motorsteuergerät sind etwa 100kB Objectcode die sich 
nur mit dem unwahrscheinlichen Fall von < 1 ppm/Jahr beschäftigen daß 
irgend ein Teil der Prozessorinternen Hardware spinnt. 
(Verkabelungsfehler sind wesentlich häufiger und werden getrennt 
abgehandelt).

Gerd E. schrieb:
> Also vielleicht 2 Oszillatoren laufen lassen
> (µC-Takt und Uhrenquarz) und gegeneinander prüfen. Das ist nicht
> besonders aufwendig.

Auch das wird gemacht wobei meistens unterschiedliche Prinzipien zum 
Einsatz kommmen. Z.B. Quarz für Prozessor, Resonator oder R/C-Oszillator 
für den Challenge Response Window-Watchdog.

Gruß Anja

von Markus F. (mfro)


Lesenswert?

Ich habe in den 90ern mal an der Entwicklung eines Telemetriemoduls 
eines (geostationären) Satelliten mitgearbeitet.

Das Ding hatte (soweit ich mich erinnere) 7 Z80 CPUs mit jeweils eigenem 
SRAM, von denen immer mindestens zwei dasselbe getan haben, während eine 
dritte auf die beiden anderen "aufgepaßt" hat. Bei Diskrepanzen wurde 
das Dreigestirn neu gestartet, solange haben drei andere übernommen.

Wie oft der Mechanismus im Flug tatsächlich ansprach, kann ich leider 
nicht sagen, wohl aber daß die Programmierung ein ziemlicher Krampf war.

von Karl H. (kbuchegg)


Lesenswert?

Timm T. schrieb:

> Stackfehler oder Pointerfehler führen zu Programmfehler, WDR, Überlauf
> und damit zu Neustart. Damit habe ich wieder definierte Zustände.

Sehr optimistisch.
Wenn dir dein Prozessor den Brutschrank 3 Tage auf 320 Grad aufheizt, 
anstatt auf 32, dann kriegt das kein Mensch mit.

Die von dir genannten Probleme können zu einem so schwerwiegenden 
Fehler führen. Aber sie müssen es nicht. Gerade auf einem AVR ist es dem 
Prozessor piepschnurzegal, von wo er sich werte holt (Pointerfehler). 
Der liest einfach vom Bus und gut ists. Und nicht jeder Schreibzugriff 
"in den Wald" führt auch zu einem Programmabsturz. Ganz im Gegenteil, 
die wenigsten tun das. Meistens wird dann einfach nur mit falschen 
Werten weiter gerechnet.

Ja man kann fehlertolerante Systeme in dem Sinne bauen, die auch gegen 
solchen Unbill gefeit sind. Aber der Aufwand ist extrem hoch, damit das 
vernünftig wird. Und alles andere als vernünftig willst du nicht, denn 
dann ist der Aufwand immer noch extrem hoch, du hast aber nichts davon. 
Für ein Gewächshaus ist das alles Overkill. Sieh lieber zu, dass du 
möglichst alle Programmfehler aus dem Programm rauskriegst. Das bringt 
viel mehr als sich gegen den unwahrscheinlichen Fall zu wappnen.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Markus F. schrieb:
> Das Ding hatte (soweit ich mich erinnere) 7 Z80 CPUs mit jeweils eigenem
> SRAM, von denen immer mindestens zwei dasselbe getan haben, während eine
> dritte auf die beiden anderen "aufgepaßt" hat. Bei Diskrepanzen wurde
> das Dreigestirn neu gestartet, solange haben drei andere übernommen.

Das war wohl die Billiglösung. Wenn man es wirklich ernst meint, dann 
verwendet man verschiedene Prozessoren in verschiedener Schaltung, die 
von verschiedenen Teams entwickelt werden. ;-)

... und bevor man fertig ist, ist das Projekt aufgrund Zeit- oder 
Geldmangels verschieden.

: Bearbeitet durch User
von Marian (phiarc) Benutzerseite


Lesenswert?

Anja schrieb:
> In einem modernen Motorsteuergerät sind etwa 100kB Objectcode die sich
> nur mit dem unwahrscheinlichen Fall von < 1 ppm/Jahr beschäftigen daß
> irgend ein Teil der Prozessorinternen Hardware spinnt.

Außer bei Toyota/Denso. Da gibt es dann zwar auch ein paar Zeilen zu, 
aber die machen nix :-)

von Ulrich F. (Gast)


Lesenswert?

Karl H. schrieb:
> Sieh lieber zu, dass du
> möglichst alle Programmfehler aus dem Programm rauskriegst.
Löblich, aber ....


> Das bringt
> viel mehr als sich gegen den unwahrscheinlichen Fall zu wappnen.
Doch, genau der Zustand will erkannt werden.


> Kippen Bits in Registern zufällig?
Eher nicht, ist aber nicht 100% ausgeschlossen.


Um Strategien gegen den "Schlimmsten Fall" zu entwickeln, müsste man 
wohl die konkrete Anlage/Aufgabe kennen.

von Markus F. (mfro)


Lesenswert?

A. K. schrieb:
> Das war wohl die Billiglösung. Wenn man es wirklich ernst meint, dann
> verwendet man verschiedene Prozessoren in verschiedener Schaltung, die
> von verschiedenen Teams entwickelt werden. ;-)

Mit dieser Art von Redundanz versucht man sich vor Programm- und 
Designfehlern zu schützen (und die haben wir damals einfach nicht 
gemacht). So gesehen ist das die Billiglösung, wenn man sich's nicht 
leisten kann, es einfach richtig zu machen ;).

Die Z80-Redundanz war zum Schutz vor Bitkippern durch harte Strahlung.

Strahlung ist nichtdeterministisch. Die Wahrscheinlichkeit, daß es einem 
in zwei unterschiedlichen Prozessoren und unterschiedlichen Schaltungen 
die logisch gleichen Bits umhaut ist darum genau gleich groß wie in zwei 
identischen.

von (prx) A. K. (prx)


Lesenswert?

Markus F. schrieb:
> (und die haben wir damals einfach nicht gemacht).

Das ist immer die beste Lösung. ;-)

von Karl H. (kbuchegg)


Lesenswert?

Ulrich F. schrieb:
> Karl H. schrieb:
>> Sieh lieber zu, dass du
>> möglichst alle Programmfehler aus dem Programm rauskriegst.
> Löblich, aber ....
>
>
>> Das bringt
>> viel mehr als sich gegen den unwahrscheinlichen Fall zu wappnen.
> Doch, genau der Zustand will erkannt werden.

Darf ich sagen, was ich denke?
Ich denke, wir haben es wieder mal mit jemanden zu tun, der 
Programmfehler auf 'zufällig beim letzten Sonnensturm gekippte Bits' 
schieben will. Alles schon dagewesen.
Das man in sicherheitskritischen Systemen und/oder in der Raumfahrt mit 
ganz anderen Redundanzen operieren muss, als in der 08/15 
Gewächshaussteuerung, ist klar und auch logisch. Überhaupt dann, wenn 
ein Fehler fatal wäre oder man nicht mehr so einfach an den Computer 
herankommt. Das sind aber die Ausnahmen. Die überwältigende Mehrheit 
aller Computer (und nein, das sind nicht PC - das sind kleine µC wie sie 
in fast jeder Kaffeemaschine oder Waschmaschine verbaut sind) benötigt 
das alles nicht und geht von der Annahme aus, dass der Speicher seinen 
Wert behält, komme was da wolle  - und wenn nicht, dann ist die Hardware 
ganz einfach schlecht designed.
Wer derartige Sicherheitsanforderungen erfüllen muss, der ist allerdings 
so weit und so gut, dass er sicher nicht in mikrocontroller.de 
nachfragen muss.

: Bearbeitet durch User
von Malte _. (malte) Benutzerseite


Lesenswert?

Vielleicht interessiert dich ja:
https://www.altera.com/en_US/pdfs/literature/wp/wp-01179-ecc-embedded.pdf
kurz Zusammenfassung: Ein einzelnes Bit wird wahrscheinlich in deiner 
Lebzeit nie kippen. Wenn man aber zig milliarden Bits hat (4GB -> 32 
milliarden Bits), kommt man plötzlich in den Bereich von Monaten, bis 
mal eins kippt. Und spätestens wenn der normale PC > 128GB RAM hat, 
sollte ECC auch für Privatanwender interessant werden um Abstürze 
vorzubeugen.

: Bearbeitet durch User
von Ulrich F. (Gast)


Lesenswert?

Karl H. schrieb:
> Darf ich sagen, was ich denke?
Meinen Segen hast du! ;-)

Karl H. schrieb:
> Kaffeemaschine
Da reicht es sicherlich, im Fehlerfall, mit irgendwelchen 
Sicherheitseinrichtungen die Stromversorgung abzutrennen.
Temperaturschalter, Feuchtesensor, Fi usw. um das inhumieren einer 
Kantinenbelegschaft zu vermeiden.

Egal ob die Störung durch Sonnenflecken oder einen Programmierfehler 
ausgelöst wird.

Karl H. schrieb:
> Wer derartige Sicherheitsanforderungen erfüllen muss, der ist allerdings
> so weit und so gut, dass er sicher nicht in mikrocontroller.de
> nachfragen muss.
TÜV, und vergleichbare Organisationen, haben schon gewisse Vorstellungen 
davon wie Sicherheitsmaßnahmen auszusehen haben. Ob die immer 
ausreichend sind, steht auf einem anderen Blatt. Aber als 
Mindestanforderung sollte/muss man sie akzeptieren.

von Anja (Gast)


Lesenswert?

Karl H. schrieb:
> und geht von der Annahme aus, dass der Speicher seinen
> Wert behält, komme was da wolle  - und wenn nicht,

Dann verhindert die Thermosicherung daß die Bude abfackelt.
Alle anderen Fehlfunktionen haben begrenzte Auswirkung.
(nach 2 Litern Wasser ist der Tank leer).

Gruß Anja

von Georg (Gast)


Lesenswert?

Karl H. schrieb:
> als in der 08/15
> Gewächshaussteuerung

In sowas im Kleinen - eine Bakterien-Wachstumskammer - habe ich in der 
Zuleitung der elektrischen Heizung einen Bimetallschalter für 65 Grad 
eingebaut. So kann der Prozessor spinnen wie er will, das Gerät kann 
sich nicht durch Schmelzen des Gehäuses selber vernichten. Kosten waren 
etwa 1 Euro, der Konstruktionsaufwand war auch deutlich geringer als bei 
3fach redundanten Prozessoren.

Georg

von Timm T. (Gast)


Lesenswert?

Anja schrieb:
> Früher (TM) als man noch richtige Zündschlösser im Auto hatte, konnte
> man den Motor noch mit dem Zündschloß ausschalten wenn der Gaszug sich
> verklemmt hatte.
> Das geht heutzutage nicht mehr wenn man ein Keyless-Go system mit Start
> Stopp betrachtet.

Dochdoch: Du mußt die Schlüsselkarte ziehen und aus dem Fenster werfen. 
Dann hält das Auto an. Wenn der Schlüssel Dein Handy ist - dann mußt Du 
halt Prioritäten setzen. ;-)

Karl H. schrieb:
> Darf ich sagen, was ich denke?

Die Gedanken sind frei, mach mal.

> Ich denke, wir haben es wieder mal mit jemanden zu tun, der
> Programmfehler auf 'zufällig beim letzten Sonnensturm gekippte Bits'
> schieben will. Alles schon dagewesen.

Es ist eine rein hypothetische Frage, die mir beim Programmieren eines 
TWI-Slaves aufgefallen ist. Dort soll ein Timeout ein dauerhaftes 
Blockieren des Busses durch den Slave aus welchen Gründen auch immer 
verhindern. Hier ist das nicht kritisch, ein verändertes Timeout würde 
einfach nur den Bus solange blockieren, bis der Zähler übergelaufen ist.

Mir ist zum Beispiel aufgefallen, daß der C-Compiler häufig ein Register 
als 0x00 definiert und dieses für Operationen mit 0x00 verwendet. Nun 
kann er das einmal am Programmstart machen und nie wieder anfassen. Oder 
er kann es regelmäßig beim Aufruf einer Subroutine machen (was der 
gängige Fall zu sein scheint).

Anderes und etwas anders geartetes Beispiel: Bei meinem Einstieg in C 
hab ich mich kurz mit Arduino beschäftigt (aber schnell gemerkt, daß das 
zu unflexibel für mein Projekt ist). Da gibt es eine Funktion, die die 
abgelaufenen Millisekunden zurückgibt. Und ein Programmbeispiel, wie man 
diese nutzt.

Bei scharfen Betrachten des Beispiels wird schnell klar, daß das 
innerhalb weniger Tage, wenn der Zähler überläuft, nicht mehr 
funktioniert. Das scheint aber keinen zu interessieren, zumindest wird 
das in den Tuts nirgends erwähnt.

von Ulrich F. (Gast)


Lesenswert?

Timm T. schrieb:
> Bei scharfen Betrachten des Beispiels wird schnell klar, daß das
> innerhalb weniger Tage, wenn der Zähler überläuft, nicht mehr
> funktioniert.
49,7 (?) Tage!
Das ist wohl bekannt, in der Arduino Gemeinde!
Spielt aber keine Rolle, solange die zu bearbeitenden Zeiträume kleiner 
sind.

Hat auch nix mit "versehentlichen" Togglern zu tun.

> Das scheint aber keinen zu interessieren, zumindest wird
> das in den Tuts nirgends erwähnt.
Wenn das nicht erwähnt  wird, dann wird die "richtige" 
Überlaufabhandlung eingesetzt, oder das Tut ist Mist.
Gibt es beides.

von (prx) A. K. (prx)


Lesenswert?

Timm T. schrieb:
> Wenn der Schlüssel Dein Handy ist - dann mußt Du
> halt Prioritäten setzen. ;-)

Du meinst, dass es günstiger sein könnte, seinen alten Kleinwagen an den 
Baum zu setzen als das frische iPhone zu riskieren? Wird ne schwere 
Entscheidung in der kurzen Zeit. ;-)

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Bei Windows (vor NT) war es auch egal. Diese Systeme bleiben nach knapp 
50 Tagen (2^32 ms) schlicht stehen, interessierte niemanden. Wenn dich 
das stört, ist das einfach die falsche Technologie.

Wenn ein Gerät deinen I2C-Bus dauerhaft blockiert, weil es abgestürzt 
ist, dann ist das ein Bug in deinem Code. Andere Geräte am Bus können da 
nichts gegen tun.

Andererseits - und das wurde auch schon geschrieben - sind Bitkipper 
eine statistische Sache. Wenn du eine 4TB-Festplatte ein paarmal 
vollschreibst, hast du mit an Sicherheit grenzender Wahrscheinlichkeit 
ein falsches Bit (nach der Fehlerkorrektur) auf der Platte stehen. Das 
fällt dann auf, wenn das Dateisystem mit Checksummen anfängt. Bei Flash 
ist das noch schlimmer, aber da wird deswegen härtere Fehlerkorrektur 
gefahren.

Warum kümmert es niemanden? Weil es im Normalfall keine Rolle spielt. 
Die Wahrscheinlichkeit, dass auf der Platte ein ungenutztes Bit kippt 
oder dass in irgendeinem Bild oder Video ein paar Pixel kaputtgehen, ist 
gering. Die Wahrscheinlichkeit, dass es dir in einem relevanten Binary 
einen Pointer zerschießt, ist noch viel geringer.

von (prx) A. K. (prx)


Lesenswert?

S. R. schrieb:
> Wenn du eine 4TB-Festplatte ein paarmal
> vollschreibst, hast du mit an Sicherheit grenzender Wahrscheinlichkeit
> ein falsches Bit (nach der Fehlerkorrektur) auf der Platte stehen.

Zumindest streng nach Vorschrift, also gemäss zugesagter Fehlerrate. Die 
Praxis sieht glücklicherweise besser aus, wie reale SATA Speichersysteme 
zeigen. Ausserdem bin ich mir nicht sicher, wie diese Statistik zu lesen 
ist. Also ob es wirklich um 1 Bit geht, oder um den ganzen Sektor und 
das dann auf 1 Bit runtergerechnet wird.

> Das fällt dann auf, wenn das Dateisystem mit Checksummen anfängt.

... und deren routinemässiger Verifizierung. Oder beim regelmässigen 
Scrubbing von RAID-6/DP Systemen. Und genau da ist es mir noch nicht 
gross aufgefallen.

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Ich tippe ja darauf, dass Serverplatten sowohl bessere Hardware als auch 
bessere Firmware benutzen. In großen RAID-Arrays wird man eher keine 
Consumerware verbauen. Von der Hardware bereits korrigierte Fehler sieht 
man im SMART aber öfter.

Google (oder wer anders?) hatte auch mal Statistiken zu Bitkippern in 
(Consumer-?)DRAM, und das sah auch eher traurig aus. Aber dank Flash und 
SD-Karten in Telefonen und Raspberrys wissen wir ja, wie man auf einem 
vollkommen wackeligen Fundament ein stabiles Haus baut...

von (prx) A. K. (prx)


Lesenswert?

S. R. schrieb:
> Ich tippe ja darauf, dass Serverplatten sowohl bessere Hardware als auch
> bessere Firmware benutzen.

SAS Disks sind bei der zugesicherten Fehlerrate 2 Grössenordnungen 
besser. Aber die meine ich hier nicht.

In meiner persönlichen jüngeren Statistik sind neben einem grösseren 
SATA System, dem ich eine Vorselektion beim Diskhersteller zutraue, auch 
2 ein paar Jahre alte RAID 6 Arrays aus jeweils einem Dutzend 
stinknormaler Hitachi SATAs drin, wie sie sich Privatleute in den PC 
stecken. Keine speziellen RAID Editionen, keine spezielle Firmware und 
ganz gewöhnliche Megaraid-Controller.

Fehler beim Scrubbing hat es gegeben. Aber sehr selten.

> In großen RAID-Arrays wird man eher keine
> Consumerware verbauen.

Kommt drauf an von wem du es kaufst und wieviel zu zahlst. Bei 
EMC/NetApp/... kann das, was da drin steckt, schon customized und 
vorselektiert sein. Vielleicht auch auf 520 statt 512 Bytes formatiert. 
Günstige Noname Storage-Systeme oder grössere Qnap/...Thecus Kisten 
basieren aber auf normalen Standarddisks.

Mein privates btrfs Serverlein hat trotz regelmässiger Bemühungen noch 
nie einen Fehler in den Checksums gefunden.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

A. K. schrieb:
> Kommt drauf an von wem du es kaufst und wieviel zu zahlst. Bei
> EMC/NetApp/... kann das, was da drin steckt, schon customized und
> vorselektiert sein. Vielleicht auch auf 520 statt 512 Bytes formatiert.
> Günstige Noname Storage-Systeme oder grössere Qnap/...Thecus Kisten
> basieren aber auf normalen Standarddisks.

Da stecken ganz normale Platten drin - kannst Du auch bei eBay 
bestellen. Die unterschiedlichen zugesicherten MTBFs zwischen Server- 
(oder Speichersystem-) Platten (SAS) und SATA spielen auch keine Rolle 
mehr.

IBM hat in einem seiner größten (und teuersten) Speichersystem ganz 
normale "Popel-SATA"-Platten drin (wenn's sein muß, 1PB/Rack).

von (prx) A. K. (prx)


Lesenswert?

Markus F. schrieb:
> Da stecken ganz normale Platten drin - kannst Du auch bei eBay
> bestellen.

In einem älteren IBM Speichersystem der Oberklasse steckten Disks, die 
mit 520 Bytes formatiert und mindestens in der ID customized waren. 
Umformatieren auf 512 ging aber. Ist aber schon gut ein Jahrzehnt her, 
kann sein dass man davon abgekommen ist.

Dass du Disks für EMC oder NetApp bei eBay kaufen kannst heisst nur, 
dass es Leute gibt, die alte solche Systeme in Einzelteilen 
verscherbeln. Und ist sehr praktisch, wenn man ein Altsystem hat, das 
wegzuschmeissen zu schade ist.

> Die unterschiedlichen zugesicherten MTBFs zwischen Server-
> (oder Speichersystem-) Platten (SAS) und SATA spielen auch keine Rolle
> mehr.

Nix MTBF. Im Datasheet gibts mitunter eine Angabe der Fehlerrate, 
angegeben in 1 Bit aus 10 hoch soundsoviel. Und da gibts 3 Klassen. 
Normale 3,5er SATAs, 3,5er Nearline SAS mit SATA Kapazität und 2,5er 
SAS. Bei dieser Fehlerrate sind die jeweils um Faktor 10 auseinander.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

A. K. schrieb:
> Nix MTBF. Im Datasheet gibts mitunter eine Angabe der Fehlerrate,
> angegeben in 1 Bit aus 10 hoch soundsoviel. Und da gibts 3 Klassen.
> Normale 3,5er SATAs, 3,5er Nearline SAS mit SATA Kapazität und 2,5er
> SAS. Bei dieser Fehlerrate sind die jeweils um Faktor 10 auseinander.


Das mag ja sein, daß das so im Datenblatt steht. Obwohl ich das bei ganz 
aktuellen Platten fast bezweifeln möchte (hab' grad' keins parat):

im realen RZ-Betrieb gehen SATA-Platten durchaus nicht (mehr) öfter 
kaputt als SAS-Platten. Das war zu Beginn, als die ersten Hersteller 
sich getraut haben, große SATA-Systeme im Petabyte-Bereich anzubieten, 
durchaus noch anders.

von (prx) A. K. (prx)


Lesenswert?

Markus F. schrieb:
> im realen RZ-Betrieb gehen SATA-Platten durchaus nicht (mehr) öfter
> kaputt als SAS-Platten.

Korrekt. Allerdings ging es hier um defekte Daten, nicht um defekte 
Disks. Wobei mir auch da keine hohe Fehlerrate auffiel, wie ich oben 
auch schrieb.

Aus dem Bauch raus würde ich sagen, dass die SAS öfter ausfallen als die 
SATA. Haben aber auch etwas mehr Arbeit.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

A. K. schrieb:
> Allerdings ging es hier um defekte Daten, nicht um defekte
> Disks

Danke, jetzt hab' ich's auch kapiert ;).

von (prx) A. K. (prx)


Lesenswert?

A. K. schrieb:
> In einem älteren IBM Speichersystem der Oberklasse steckten Disks, die
> mit 520 Bytes formatiert und mindestens in der ID customized waren.

Ist bei NetApp auch so. Eigene Hersteller-ID, und 520 Bytes/Sektor für 
eine Checksum.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.