45 - 10.4.4 Kreiseln: Schlossalgorithmen [ID:25764]
50 von 284 angezeigt

Ja schauen wir uns nun mal ein paar einfache Schloss Algorithmen an und greifen die

Implementierungsvariante auf die wir gerade zuvor noch gesehen haben als war dieses Test

ins Set diese diesen TAS Befehl eingeführt haben. Da ist das Eintrittsprotokoll in den

kritischen Abschnitt implementiert in dieser Equire Methode dann wie folgt wir haben eine

einfache Kopfschleife in der würde man die Test in Set Operation aufrufen und wenn Test in Set

true liefert dann heißt es dass man warten muss ja weil nämlich dann letztlich die Sperre immer

noch gesetzt ist wenn Test in Set false liefert dann wissen wir dass die Sperre in dem Moment wo

der Wert gelesen worden ist innerhalb der Test in Set Operation eben nicht erhoben war am Ende von

TAS aber erhoben wurde und wir können demzufolge aus der Equire Operation herausgehen und sind

denn der einzige Prozess der einzige gleichzeitig Prozess der in dem Moment sozusagen den kritischen

Abschnitt der genau durch dieselbe diese Lock variable geschützt ist denn eintreten würde nun

das ist eine naive Lösung mit einer schädlichen Wirkung für den Cache für den Pufferspeicher

denn wie wir ja gesehen haben schreibt diese Test in Set Implementierung grundsätzlich immer

ist ein unbedingtes schreiben und das bedeutet dann letztendlich wenn wir Cache basierte Systeme

haben was heute der Fall ist für gewöhnlich bei den aller allermeisten Prozessoren die man so

verwendet zumindest wenn man so die Standardprozessoren aus dem PC Bereich hat wie in

Intel etwa oder auch die ARM Prozessoren ja dann werden die alle mit Caches ausgestattet sein und

dann wird dann jedes Schreiben in den auf eine Variable dazu führen dass dann praktisch Cache

Zeilen invalidiert werden die müssen dann zurückgeschrieben werden in den Hauptspeicher

letztendlich und das heißt auf der anderen Seite der nächste Prozessor der praktisch auf diese

Variable zugreift wird denn diese Cache Zeile halt wieder erneut einlesen sind dann also mal

teure Lesevorgänge der Cache ist deshalb da damit man einfach mit der Taktgeschwindigkeit der CPU

voranschreiten kann aber nun wären denn praktisch alle diese Prozessoren die denn hier über diese

Equier-Operation mit diesen Schlossalgorithmen miteinander gekoppelt sind letztendlich von der

Speichergeschwindigkeit abhängig weil ja die Cache Zeilen halt immer rausgeschrieben worden

sind und der Cache invalidiert worden ist bezüglich dieser Cache Zeile bei den anderen Prozessoren

also nicht mehr im Cache enthalten ist wenn man sie dann neu eingelesen werden ja das ist das

Problem generiert also enormen Leistungsverlust das ist der eine Punkt der andere Punkt ist dass

eben auch diese Implementierung die wir hier sehen eine unangenehme Auswirkung halt hat auf

kausal unabhängige Prozesse die kausal abhängigen Prozesse wären denn die irgendwie die mit derselben

Lock Variable praktisch an demselben kritischen Abschnitt denn miteinander gekoppelt sind aber

was ist mit den Prozessen die sozusagen überhaupt gar keine Lock-Operationen jetzt zurzeit ausführen

die einfach nur an den Speicher ran wollen auch die werden hier gestört das ist Interferenz was

durch diesen Algorithmus massiv generiert wird denn diese atomare Operation Test and Set ist

deshalb atomar weil der Bus für die Ausführungszeit von Test and Set gesperrt ist. Es ist ein Bus-Lock den

man dort durchführt und damit kommen eben andere Prozessoren nicht über diesen Bus an den Hauptspeicher

ran während einer atomaren Operation im Gange ist und wenn man das jetzt hier einfach in so einer

Schleife haben dann werden also bei einer großen Anzahl von gleichzeitig Prozessen die jetzt hier

alle in dieser Schleife warten natürlich alle diese Test and Set, alle diese Bus-atomaren Operationen

als Sequenz hintereinander aufgeführt ja das heißt also eigentlich die Sperrzeit des Buses

für Prozessoren die nicht über dieses Aquire mit diesem Lock laufen kann sehr groß werden ja und

wenn diese Prozessoren nicht mehr aus ihrem Cash-Einhalten profitieren können dann werden

sie halt sehr sehr lange darauf warten müssen um an den Hauptspeicher ranzukommen obwohl sie mit

diesem kritischen Abschnitt und mit diesem Protokoll überhaupt nichts zu tun haben das ist dann

Enteferenz was für diese Prozessoren denn gilt und sollte man unbedingt vermeiden also in

nicht-funktionaler hinsicht skaliert diese Lösung eigentlich ziemlich schlecht ja und man muss ja

diesen Schlossalgorithmus ein bisschen umschreiben man kann jetzt Lösungen anbieten das schauen wir

uns gleich an in die man den bedingt schreibt oder ein weiterer Schritt ist dann halt in dem man

den kreiselt durch Ablesen einer Schlossvariablen oder man hält sich so ja in gewissen Konflikten

fällen für anläuter Bus atomare operationen entsprechend zurück das sind die wichtigen

Teil eines Kapitels:
10.4 Kreiseln

Zugänglich über

Offener Zugang

Dauer

00:30:58 Min

Aufnahmedatum

2020-12-04

Hochgeladen am

2020-12-05 03:49:30

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen