2012-07-05: Dodatkowa sekunda spowodowała problemy na Linuksie
Kilka dni temu dodatkowa sekunda zwana sekundą przestępną spowodowała problemy na systemach operacyjnych Linux. Dodana została ona w nocy z 30 czerwca 2012 na 1 lipca 2012 roku. Ta jedna sekunda więcej spowodowała na niektórych systemach znaczący wzrost użycia procesora, a w najgorszych przypadkach zawieszanie się całego systemu. Czy ten błąd był do przewidzenia? Czy można go było uniknąć? Czy się powtórzy?
Sekunda przestępna
edytujRaz na kilka lat Międzynarodowa Służba Ruchu Obrotowego Ziemi i Systemów Odniesienia (ang. International Earth Rotation and Reference Systems Service, w skr. IERS), ogłasza konieczność zsynchronizowania czasu słonecznego z uniwersalnym czasem koordynowanym (UTC). Dodawana lub odejmowana jest wtedy jedna sekunda. Pierwsza taka synchronizacja miała miejsce 30 czerwca 1972.
Systemy informatyczne, operacyjne i różnego rodzaju oprogramowanie (np. NTP) zazwyczaj przewidują możliwość występowania sekundy przestępnej.
Problemy na Linuksie
edytuj30 czerwca 2012 roku o godzinie 23:59:60, duża część systemów operacyjnych Linux działających pod kontrolą jądra od wersji 2.6.26 oraz jądro 3.3, powodowała zwiększenie użycia procesora lub zawieszenie się. Jak się okazuje problem ten występował wcześniej. Podobną awarię odnotowano 31 grudnia 2008 roku.
W dystrybucji Debian Squeeze problem objawił się brakiem odpowiedzi na pakiety ICMP oraz pustym czarnym ekranem po dodaniu dodatkowej sekundy.
Jak zauważyła Mozilla Foundation, problemy pojawiły się również w serwerze MySQL oraz oprogramowaniu Java.
Źródłem problemu okazało się samo jądro systemu, jak wyjaśnia John Stultz (Upstream Kernel Engineer, IBM), w dwóch poprawkach: PATCH 1, PATCH 2. Podsystem NTP, który wykorzystywał funkcję hrtimer, do wprowadzania sekund przestępnych, mógł wprowadzić system operacyjny w Livelock.
Zwiększone zużycie prądu
edytujCiekawe informacje opublikowało również data center Hetzner Online. W nocy z 30 czerwca na 1 lipca wzrosło zużycie prądu do około 1 megawata. Było to spowodowane 100% zużyciem procesora na wielu serwerach.
Rozwiązanie problemu
edytujJak zauważyli administratorzy i programiści, rozwiązanie problemu z wysokim obciążeniem procesora jest bardzo proste. Pomaga restart całej maszyny lub ponowne ustawienie daty za pomocą polecenia:
- date -s "$(LC_ALL=C date)"
Część administratorów na ten dzień wyłączyło demona NTP oraz uruchomiło specjalny skrypt napisany w Perlu, który resetuje przestępną sekundę.
Inne problemy z datą
edytujTo nie jedyne problemy związane z datą jakie wystąpiły w świecie IT. Jednym z najbardziej znanych przypadków była tzw. pluskwa milenijna określana problemem roku 2000.
Innym uniedogodnieniem okazał się błąd Y2K1 w projekcie SpamAssasin. Wywołał on niemiłą niespodziankę, kiedy zaczął traktować jako SPAM wszystkie maile z roku 2010.
Kolejny problem jaki nas czeka to rok 2038. Dokładnie to 19 stycznia 2038 o godzinie 3:14:07, systemy Unix oraz Linux mogą przestawić się na datę 13 grudnia 1901, godzina 20:45:52. Dlaczego? Należy pamiętać, że w systemach Uniksowych czas jest liczony jako sekundy, które upłynęły od daty zerowej, czyli 1 stycznia 1970 godz 0:00:00. Czas ten trzymany jest w 32 bitowej zmiennej, która może przyjąć największą wartość 2 147 483 647.
Zatem po upływie kolejnej sekundy powinien nastąpić przeskok do liczby -2 147 483 648, co właśnie wskazuje datę 13 grudnia 1901, godzina 20:45:52.
Zapobiec problemowi można przechodząc na 64-bitową reprezentację czasu (typ time_t). Jest to tylko obejście problemu, gdyż wystąpi on w roku 9223372034708485227, czyli za około 292 miliardy lat.
Źródła
edytuj- Artykuł wykorzystuje materiał pochodzący z tekstu „TDodatkowa sekunda spowodowała problemy na Linuksie”, którego autorem jest Kamil Porembiński, opublikowanego w serwisie OSWorld (więcej informacji).