Twórcy projektu Multikernel, który pozwala na uruchamianie wielu niezależnych instancji jądra na jednym fizycznym komputerze bez hipernadzoru i wirtualizacji, zaprezentowali narzędzie kmorph, które zapewnia środki do szybkiego przywracania po awaryjnym zatrzymaniu jądra Linuxa lub do wymiany jądra w trybie Live bez pełnego restartu. Projekt rozwija Cong Wang, który zarządza podsystemem kontroli ruchu (TC, Traffic Control) w jądrze. Metoda szybkiego restartu opiera się na wstępnym załadowaniu do pamięci zapasowego jądra, które zastępuje główne jądro robocze w przypadku awarii lub przy potrzebie wymiany jądra na nową wersję.
Proponowane podejście umożliwia uniknięcie pełnego restartu i prawie natychmiastowe wznowienie pracy, minimalizując czas przestoju. Obecnie, w przypadku awaryjnego zatrzymania działania jądra, całkowity restart dużych serwerów zajmuje kilka minut z powodu długotrwałych procesów inicjacji sprzętu, ładowania środowiska systemowego oraz zapisywania zrzutu pamięci jądra za pomocą mechanizmu kdump. W zasadzie, korzystając z kdump, wykonuje się dwa restarty jądra — na początku za pomocą kexec ładowany jest oddzielny egzemplarz jądra do zapisywania zrzutu pamięci, po czym następuje załadowanie roboczego jądra i uruchomienie usług systemowych.
W przypadku zastosowania kmorph w powiązaniu z oddzielnym rdzeniem CPU, do pamięci wcześniej załadowane zostaje zapasowe jądro Linuxa oraz minimalne środowisko systemowe, które monitoruje stan głównego jądra. W przypadku zawieszenia się lub wystąpienia stanu panic w głównym jądrze, zapasowe środowisko przejmuje kontrolę, zapisuje zrzut pamięci uszkodzonego jądra, przełącza na siebie rdzenie procesora, pamięć, urządzenia, konfigurację sieciową oraz system plików.
Przełączanie jest koordynowane za pomocą dwóch programów: kmorph — uruchamiany w aktywnym środowisku, tworzy zawartość zapasowego środowiska i synchronizuje w nim stan sieci; kmorphd — uruchamiany w zapasowym środowisku i śledzi stan aktywnego środowiska. Oprócz przełączania w przypadku awarii, kmorph umożliwia aktualizację jądra bez tradycyjnego restartu. Aby przyspieszyć odzyskiwanie w zapasowym środowisku, oprócz jądra i minimalnego zestawu komponentów systemowych, mogą być uruchamiane standardowe usługi, takie jak nginx, w trybie oczekiwania. W takim przypadku w momencie aktywacji zapasowego środowiska usługa nginx będzie już załadowana w pamięci i natychmiast zacznie obsługiwać zapytania po przełączeniu w nowe środowisko karty sieciowej, aktywacji konfiguracji sieci i zmianie głównego systemu plików.
W przeprowadzonych testach serwer z nginx przy użyciu kmorph wznawia pracę w ciągu około 2 sekund po awarii jądra, ale w przyszłości planujemy osiągnąć natychmiastowe przełączenie niezauważalne dla połączonych klientów. W chwili obecnej kmorph obsługuje architektury x86_64 i ARM64, a prace są prowadzone nad obsługą RISC-V. Integracja kmorph w dystrybucjach Linux odbywa się analogicznie do wsparcia kdump, za pomocą standardowych narzędzi dracut, initramfs-tools, kernel-install oraz usługi systemd.
Jądro już zawiera mechanizmy Kexec HandOver (KHO) i Live Update Orchestrator (LUO), które pozwalają uruchomić nowe jądro z starego bez utraty stanu systemu i bez zatrzymywania pracy urządzeń. Jednak nie mogą być stosowane w przypadku awarii jądra, ponieważ wymagają do przechowywania stanu aktywnego jądra. KHO i LUO również są wolniejsze od kmorph pod względem szybkości przełączania, ponieważ w kmorph nowe jądro jest już w pamięci, podczas gdy KHO i LUO wymagają ponownego uruchomienia jądra przez kexec.
Źródło: opennet.ru
