Google hat mit der Implementierung des M:N-Flow-Modells begonnen

Google vorgeschlagen für die Aufnahme in den Linux-Kernel der erste Satz von Patches mit der Implementierung der Komponenten, die erforderlich sind, um die Funktion des M:N-Threading-Modells sicherzustellen. Die Initiative von Google steht im Zusammenhang mit der Öffnung einer API, die hinter verschlossenen Türen entwickelt wurde Wechseln zu für den Linux-Kernel, der ein im User Space implementiertes Multithread-Subsystem bereitstellt, das das M:N-Threading-Modell verwendet. Das Subsystem wird von Google verwendet, um Dienste bereitzustellen, die minimale Verzögerungen erfordern. Die Planung und Verwaltung der Thread-Verteilung erfolgt vollständig im Benutzerbereich, wodurch die Anzahl der Kontextwechsel erheblich reduziert werden kann, indem die Ausführung von Systemaufrufen minimiert wird.

Um den Betrieb dieses Subsystems sicherzustellen, wurde die SwitchTo-API auf Linux-Kernel-Ebene implementiert und bietet drei Grundoperationen: Warten, Fortsetzen und Tauschen (Umschalten). Zur Einbindung in den Kernel wird ergänzend ein Code für eine neue FUTEX_SWAP-Operation vorgeschlagen FUTEX_WAIT und FUTEX_WAKEund bietet ein Framework zum Erstellen von Multithread-Benutzerraumbibliotheken. FUTEX_SWAP kann auch zum Übertragen von Nachrichten zwischen Aufgaben verwendet werden, ähnlich wie RPC. Um beispielsweise eine Nachricht zwischen Aufgaben zu übertragen, sind derzeit mindestens vier Aufrufe von FUTEX_WAIT und FUTEX_WAKE erforderlich, während die Verwendung von FUTEX_SWAP es ermöglicht, einen Vorgang fünf- bis zehnmal schneller abzuschließen.

Google hat mit der Implementierung des M:N-Flow-Modells begonnen

Derzeit werden in der Praxis hauptsächlich die Strömungsmodelle 1:1 und N:1 verwendet. Das 1:1-Modell wird verwendet NPTL (POSIX-Threads) und Linux-Threadsund impliziert eine direkte Zuordnung eines User-Space-Threads zu einem Thread (Unit of Execution Scheduling) auf Kernel-Ebene. Das N:1-Modell ist implementiert in GNU Pth, bringt Thread-Planung in den User-Space und ermöglicht die Bindung von N User-Space-Threads an einen einzelnen Thread im Kernel, ohne dass der Kernel etwas über User-Threads weiß.

Der Hauptnachteil des 1:1-Modells ist der große Aufwand für den Kontextwechsel zwischen Kernel und Benutzerraum. Das N:1-Modell löst dieses Problem, schafft aber ein neues – da ein Thread im Kernel eine unteilbare Einheit der Ausführungsplanung ist, können Benutzer-Threads, die an einen einzelnen Thread im Betriebssystemkernel gebunden sind, nicht über CPU-Kerne hinweg skaliert werden und an diesen gebunden werden ein einzelner CPU-Kern.

Das M:N-Modell ist hybrid und behebt alle oben genannten Nachteile, indem es N Userspace-Threads M Kernel-Threads zuordnet, wodurch sowohl der Kontextwechsel-Overhead als auch die Skalierung über CPU-Kerne hinweg reduziert werden. Der Preis dieser Option ist die große Komplikation der Implementierung des Thread-Schedulers im Benutzerbereich und die Notwendigkeit von Mechanismen zur Koordinierung von Aktionen mit dem Kernel-Scheduler.

Source: opennet.ru

Kommentar hinzufügen