Go-Runtime-Bug auf 32-Bit-Systemen: Ein Aliasing-Problem, das nur bei langlaufenden Programmen zuschlägt
Hunting Down a Go Runtime Bug on 32-Bit Embedded Systems

Ein Kunde meldete sporadische Abstürze einer Go-Anwendung auf einem 32-Bit-ARM-Einbettungssystem. Der Fehler 'netpoll: eventfd ready for something unexpected' führte das Team von sigma-star auf eine Spur, die tief in die Go-Runtime führte. Die Ursache: Auf 32-Bit-Little-Endian-Systemen kollidiert die Adresse des internen eventfd mit dem Tag-Zähler für Socket-Objekte. Erst nach Millionen von Zyklen führt das zum Crash. Der Beitrag erklärt die Analyse, einen reproduzierbaren Testfall und den eingereichten Fix, der inzwischen in Go gemerged wurde.
Wir können nur spekulieren, aber das deutet darauf hin, dass Google selbst keine 32-Bit-Go-Programme mehr ausführt – sonst wären sie selbst längst auf den Bug gestoßen.
- dlopes7
Sehr interessanter Artikel – solche Bugs, die erst nach langer Laufzeit in der Produktion auftreten, sind am schwierigsten zu diagnostizieren.
- nasretdinov
Go wurde in der 64-Bit-Ära geboren; ich erinnere mich, dass ich viele mehr Bugs gesehen habe, die nur auf 32-Bit-Systemen auftreten. Ich bin mir ziemlich sicher, dass die Beobachtung im Artikel korrekt ist, dass niemand bei Google Go auf etwas anderem als 64-Bit-ARM/x86-Linux testet.
- ReactiveJelly
Hätte also ein stärkeres Typsystem an der Grenze zwischen Go und Linux das abgefangen?