Menü

Schaltsekunden-Bug in Linux verschwendet Strom

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 362 Beiträge
Update
Von

Anstieg der Leistungsaufnahme in einem der Rechnzentren von Hetzner Online (Y-Achse: Watt).

(Bild: Hetzner Online)

Um "etwa ein Megawatt" ist der Stromverbrauch in den Rechenzentren von Hetzner Online in der Nacht des Monatswechsels gestiegen, weil viele Linux-Systeme aufgrund eines Kernel-Fehlers bei der Handhabung der um Mitternacht eingefügten Schaltsekunde den Prozessor voll belasten. Das geht aus einer Mail hervor, in der der Webhoster seine Kunden bittet, die CPU-Auslastung ihrer Systeme zu prüfen und diese gegebenenfalls neu zu starten, um die Prozessornutzung wieder auf ein normales Maß zu reduzieren.

Nicht nur bei Hetzner, sondern auch in vielen anderen Rechenzentren dürften die CPUs einiger Linux-Systeme noch auf Volllast laufen, da der Fehler viele moderne Linux-Systeme betrifft. Schuld ist ein Bug im Kernel-Code für High-Resolution Timer (Hrtimer), der bei den Kerneln vieler moderner Distributionen aktiv ist, weil sie mit der Konfigurationsoption CONFIG_HIGH_RES_TIMERS konfiguriert wurden und die meisten in den letzten Jahren gefertigten Systeme die von diesem Code unterstützten hochpräzisen Zeitgeber (HPET/High Precision Event Timer) mitbringen.

Durch den Kernel-Fehler setzt der Hrtimer-Code die Systemzeit nicht, wenn er die Schaltsekunde einfügt; infolgedessen ist die Hrtimer-Repräsentation der vom Kernel angenommenen Zeit der Systemzeit eine Sekunde voraus. Wenn nun Software eine Kernel-Funktion mit einem Timeout unter einer Sekunde aufruft, nimmt der Kernel direkt nach dem Setzen des Timers an, der Timeout sei abgelaufen, und springt sofort zu dem Code des Programms zurück. Viele Programme wiederholen bei einem Timeout die angeforderte Operation einfach und setzen so sofort einen neuen Timer. Das kann zu einer Endlosschleife führen, die den Prozessor voll auslastet.

John Stultz, der seit vielen Jahren den Timer-Code des Linux-Kernels mitentwickelt, arbeitet seit Sonntagabend an einer Korrektur für das Problem, die mittlerweile in der dritten Inkarnation vorliegt. Er hat sich dafür ausgesprochen, seinen Patch in den Hauptentwicklungszweig des Linux-Kernels zu integrieren, in dem gerade Linux 3.5 vorbereitet wird; anschließend will er Korrekturen für ältere Kernel-Versionen ausarbeiten. Laut Stultz und einem Knowledgebase-Eintrag bei Suse soll ein Setzen der Systemzeit mit einem Befehl wie

date -s "$(LC_ALL=C date)"

reichen, um mit Volllast laufende Systeme ohne Neustart zu heilen. Linux-Rechner, die aufgrund des Schaltsekunden-Bugs unter Volllast laufen, müssen also nicht unbedingt neu gestartet werden.

Schon zum Jahreswechsel 2009 hatte ein Fehler beim Einsetzen einer Schaltsekunde Probleme bei Linux-Systemen ausgelöst. Es handelte sich allerdings um ein anders gelagertes Problem, das damals auch korrigiert wurde. Einige Kernel-Entwickler hatten in den letzten Monaten bereits getestet, ob es auch diesmal Probleme geben könnte; dabei haben sie auch einige gefunden und korrigiert, wie Kernel-Entwickler Dave Jones Mitte Juni in seinem Blog erläuterte.

[Update, 03.07.2012, 17:25] Hetzner Online hat uns freundlicherweise eine Grafik bereitgestellt, die den Anstieg der Leistungsaufnahme in einem der Rechenzentren zeigt.

[Update, 05.07.2012, 8:00] Wir haben die Grafik noch gegen eine andere, ebenfalls von Hetzner Online gestellte ausgetauscht, die den Stromanstieg nicht in Prozent der optimalen Rechenzentrums-Auslastung, sondern in Watt zeigt.

Ferner hat auch Strato seinen Kunden zwischenzeitlich eine ähnliche Mail geschickt wie Hetzner Online zuvor. (thl)