Virginia Polytechnic Institute and State University zum Austausch zwischen Entwicklern des Linux-Kernels über einen Satz von Patches zur Implementierung eines Systems für die verteilte Ausführung von Threads (Distributed Thread Execution), das die Ausführung von Anwendungen auf mehreren Computern mit Verteilung und transparenter Migration von Threads zwischen Hosts ermöglicht. Mit Popcorn können Anwendungen auf einem Host gestartet und ohne Unterbrechung auf einen anderen Host verschoben werden. In Mehrthread-Anwendungen ist die Migration einzelner Threads auf andere Hosts zulässig.
Im Gegensatz zu dem Projekt , das die Speicherung des Prozessesstatus und die Wiederaufnahme der Ausführung auf einem anderen System ermöglicht, bietet Popcorn eine nahtlose und dynamische Migration zwischen Hosts während der Anwendungsausführung, ohne dass der Benutzer eingreifen muss, und gewährleistet die Konsistenz des virtuellen Speichers auf allen Hosts, auf denen die Threads gleichzeitig ausgeführt werden.
Der Software-Stack von Popcorn besteht aus für den Linux-Kernel und mit Tests, die demonstrieren, wie man Systemaufrufe von Popcorn zur Migration von Threads in verteilten, ausführbaren Anwendungen nutzen kann. Auf Kernel-Ebene werden Erweiterungen des virtuellen Speichersystems angeboten, mit der Implementierung eines verteilten gemeinsamen Speichers (distributed shared memory), der es Prozessen auf verschiedenen Hosts ermöglicht, auf einen gemeinsamen und konsistenten virtuellen Adressraum zuzugreifen. Die Konsistenz der Seiten des virtuellen Speichers wird durch ein Protokoll gewährleistet, das die Seiten im Speicher bei Lesezugriff repliziert und die Seiten beim Schreiben ungültig macht.
Die Interaktion zwischen Hosts erfolgt über einen im Kernel-Level arbeitenden Nachrichten-Handler, der über einen TCP-Socket kommuniziert. Dabei wird festgestellt, dass TCP/IP zur Vereinfachung von Debugging und Tests während der Entwicklung eingesetzt wird. Entwickler sind sich bewusst, dass TCP/IP aus Sicherheits- und Leistungsgründen nicht die beste Methode ist, um Inhalte von Kernel-Strukturen und Speicherseiten zwischen Hosts zu übertragen. Alle Hosts, auf denen verteilte Anwendungen ausgeführt werden, müssen das gleiche Vertrauensniveau aufweisen. Nach der Stabilisierung der Hauptalgorithmen wird eine effektivere Transportmethode angewendet.
Popcorn entwickelt sich seit 2014 als Forschungsprojekt, um die Möglichkeiten der Erstellung verteilter Anwendungen zu erkunden, deren Ströme auf verschiedenen Knoten ausgeführt werden können in Rechnernetzen, in denen Kerne auf der Grundlage verschiedener Befehlssatzarchitekturen (Xeon/Xeon-Phi, ARM/x86, CPU/GPU/FPGA) kombiniert werden können. Das von den Entwicklern des Linux-Kernels angebotene Patch-Set unterstützt lediglich die Ausführung auf Hosts mit x86-CPU, es gibt jedoch auch eine funktionalere Variante, Popcorn Linux, die es ermöglicht, Anwendungen auf Hosts mit unterschiedlichen CPU-Architekturen (x86 und ARM) auszuführen. Um Popcorn in heterogenen Umgebungen zu verwenden, ist ein spezieller basierend auf LLVM erforderlich. Bei der verteilten Ausführung auf Hosts mit einer einzigen Architektur ist eine Neubau mit einem separaten Compiler nicht notwendig.
Darüber hinaus kann die eines ähnlichen Projekts mit der Implementierung eines ersten Prototyps einer API zum Starten von Unterprozessen auf anderen Computern im Cluster (ähnlich wie fork(), aber überträgt den abgezweigten Prozess auf einen anderen Computer).
Der Code ist in Rust geschrieben und ermöglicht derzeit nur das Klonen der einfachsten Prozesse, die keine Systemressourcen wie Dateien verwenden. Bei dem Aufruf von telefork wird der Speicher und die mit dem Prozess verbundenen Strukturen auf einen anderen Host geklont, auf dem der Server-Handler (telepad) ausgeführt wird. Mithilfe von ptrace wird der Speicher des Prozesses serialisiert und zusammen mit dem Zustand des Prozesses und den Registern auf den anderen Host übertragen. Die API ermöglicht es außerdem, den Prozesszustand in einer Datei zu speichern und von dort wiederherzustellen.
Quelle: opennet.ru
