Veröffentlichung von CRIU 4.0, einem System zum Speichern und Wiederherstellen des Zustands von Prozessen in Linux

Die Veröffentlichung des CRIU 4.0-Tools (Checkpoint and Restore In Userspace) ermöglicht die Speicherung und Wiederherstellung von Prozessen im Benutzermodus. Das Tool erlaubt es, den Zustand eines oder mehrerer Prozesse zu speichern und dann die Arbeit an der gespeicherten Position fortzusetzen, auch nach einem Neustart des Systems oder auf einem anderen Server, ohne vorhandene Netzwerkverbindungen zu unterbrechen. Der Projektschlüssel ist in C geschrieben und steht unter der GPLv2-Lizenz. CRIU wird in Container-Verwaltungssystemen wie OpenVZ, LXC/LXD und Docker verwendet. Die erforderlichen Änderungen für die Nutzung von CRIU sind in den Hauptkern von Linux integriert.

Die Anwendungsbereiche der CRIU-Technologie umfassen die Gewährleistung von Betriebssystem-Neustarts, ohne die Kontinuität langlaufender Prozesse zu stören, die Live-Migration isolierter Container, die Beschleunigung des Starts langsamer Prozesse (man kann die Arbeit von einem nach der Initialisierung gespeicherten Zustand beginnen), Durchführung von Kernel-Updates ohne Neustart der Dienste, das regelmäßige Speichern des Zustands langwieriger Rechenaufgaben zur Wiederaufnahme der Arbeit im Falle eines Absturzes, Lastenausgleich auf Knoten in Clustern, das Duplizieren von Prozessen auf ein anderes Gerät (fork auf ein entferntes System) und die Erstellung von Snapshots von Benutzeranwendungen während des Betriebs zur Analyse auf einem anderen System oder für den Fall, dass weitere Maßnahmen im Programm rückgängig gemacht werden müssen.

In der neuen Version:

  • Ein CUDA-Plugin wurde hinzugefügt, das die Speicherung und Wiederherstellung des Zustands von Anwendungen auf Basis der NVIDIA CUDA-Technologie ermöglicht.
  • Unterstützung des Shadow Stack-Mechanismus, der seit dem Linux-Kernel 6.6 unterstützt wird und die Ausführung vieler Exploits blockiert, indem er die Hardware-Funktionen von Intel-Prozessoren nutzt (nach der Übergabe der Kontrolle werden Rückgabewerte von Funktionen nicht nur im regulären Stack, sondern auch in einem separaten "Shadow-Stack" gespeichert, der nicht direkt verändert werden kann; vor dem Verlassen der Funktion wird der Rückgabewert aus dem Shadow-Stack extrahiert und mit dem Rückgabewert aus dem regulären Stack verglichen).
  • Die Unterstützung für den ioctl-Befehl PAGEMAP_SCAN wurde hinzugefügt, um Informationen über den Inhalt der Speichertabellen abzurufen, was unter anderem in Verbindung mit userfaultfd() die Möglichkeit bietet, Schreibvorgänge in einem bestimmten Speicherbereich zu erkennen.
  • Es wurde die Möglichkeit implementiert, den Stream korrekt in cgroup v1 wiederherzustellen.

    Quelle: opennet.ru
60GB SSD 8Gb DDR4