Po 11 miesiącach prac opublikowano wersję narzędzia CRIU 4.3 (Checkpoint and Restore In Userspace), przeznaczonego do zapisywania i przywracania procesów w przestrzeni użytkownika. Narzędzie umożliwia zapisanie stanu jednego lub grupy procesów, a następnie wznowienie pracy z zapisaną pozycją, nawet po ponownym uruchomieniu systemu lub na innym serwerze bez przerywania już nawiązanych połączeń sieciowych. Kod projektu napisany jest w języku C i rozpowszechniany jest na licencji GPLv2. CRIU jest stosowane w systemach zarządzania kontenerami, takich jak OpenVZ, LXC/LXD i Docker. Wymagane zmiany do działania CRIU są zawarte w jądrze Linux.
Z obszarów zastosowania technologii CRIU można wymienić zapewnienie ponownego uruchomienia systemu operacyjnego bez zakłócania ciągłości wykonania długoterminowych procesów, migrację na żywo izolowanych kontenerów, przyspieszenie uruchamiania wolnych procesów (można rozpocząć pracę od stanu zapisanego po inicjalizacji), przeprowadzanie aktualizacji jądra bez restartu usług, okresowe zapisywanie stanu długoterminowych zadań obliczeniowych w celu wznowienia pracy w przypadku awaryjnego zakończenia, równoważenie obciążenia w węzłach klastrów, duplikowanie procesów na inny komputer (fork do zdalnego systemu), tworzenie zrzutów aplikacji użytkowych w trakcie pracy w celu ich analizy w innym systemie lub na wypadek, gdyby konieczne było anulowanie dalszych działań w programie.
W nowym wydaniu:
- Zrealizowano możliwość kompresji bloków i stron pamięci z wykorzystaniem algorytmu LZ4 oraz wielowątkowego dekompresowania.
- Zwiększona wydajność dzięki zastosowaniu asynchronicznego wejścia/wyjścia (AIO) podczas przywracania stron VMA (Virtual Memory Area), nowej metody zatrzymywania zadań bez użycia sprzętowych punktów zatrzymywania oraz równoległemu przywracaniu memfd i anonimowej pamięci współdzielonej.
- Dodano wsparcie dla rozszerzenia ARM64 GCS (Guarded Control Stack), które zapewnia sprzętową ochronę adresów powrotu z funkcji. Po przekazaniu kontroli funkcji, adresy powrotu są zapisywane przez procesor nie tylko w zwykłym stosie, ale także w oddzielnym stosie ukrytym, który nie może być zmieniany bezpośrednio. Przed wyjściem z funkcji adres powrotu jest pobierany z ukrytego stosu i porównywany z adresem powrotu ze stosu głównego.
- Dodano backend do zapisywania stanu API sterownika NVIDIA CUDA.
- Zapewniono przywracanie mapowania GPU.
- Dla sterownika amdgpu zrealizowano zapis i przywracanie stanu buforów subsystemu DRM (Direct Rendering Manager) oraz deskryptorów plików DMA-BUF.
- Dodano komendy do kompresji i dekompresji obrazów pamięci w trybie offline.
- Dodano wsparcie dla zapisywania i przywracania informacji o powiązaniach identyfikatorów UID z gniazdami sieciowymi.
- Dodano opcję „--image-io-mode” do zapisu i odczytu obrazów stron pamięci w trybie O_DIRECT (z pominięciem bufora stron).
Źródło: opennet.ru
