EineEinführungindielock-freeProgrammierung BurakOk 24 ... · [email protected]...

55
Lock-free Datenstrukturen Eine Einführung in die lock-free Programmierung Burak Ok Friedrich-Alexander Universität Erlangen-Nürnberg (FAU) 24. Januar 2017 [email protected] Lock-free Datenstrukturen (24. Januar 2017) 1

Transcript of EineEinführungindielock-freeProgrammierung BurakOk 24 ... · [email protected]...

Page 1: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Lock-free DatenstrukturenEine Einführung in die lock-free Programmierung

Burak Ok

Friedrich-Alexander Universität Erlangen-Nürnberg (FAU)

24. Januar 2017

[email protected] Lock-free Datenstrukturen (24. Januar 2017) 1

Page 2: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Inhaltsverzeichnis

EigenschaftenPrimitivenVorteileNachteile

MS-QueueKorrektheitsbeweis

EvaluationMethodikTestsystem und QueuesOriginale BenchmarkEigene BenchmarksErkenntnisse

Schluss

[email protected] Lock-free Datenstrukturen (24. Januar 2017) 2

Page 3: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Inhaltsverzeichnis

EigenschaftenPrimitivenVorteileNachteile

MS-QueueKorrektheitsbeweis

EvaluationMethodikTestsystem und QueuesOriginale BenchmarkEigene BenchmarksErkenntnisse

Schluss

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften 3

Page 4: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Primitiven

In Hardware und Software [Int][Arm][Cpp]

Memory barriersVerhindert Umordnung von Lade- und Speicherbefehlen

test-and-set (TAS)Setzt ein Bit auf 1, falls es 0 war

fetch-and-add (FAD)Addiert eine ZahlGibt vorherige Zahl zurück

linked-load und store-conditional (LL & SC)LL lädt einen WertSC speichert einen Wert, falls seit LL nichts geändert wurde

compare-and-swap (CAS)Speichert einen Wert, falls Adresse einen bestimmten Wert enthält

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Primitiven 4

Page 5: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Primitiven

In Hardware und Software [Int][Arm][Cpp]

Memory barriersVerhindert Umordnung von Lade- und Speicherbefehlen

test-and-set (TAS)Setzt ein Bit auf 1, falls es 0 war

fetch-and-add (FAD)Addiert eine ZahlGibt vorherige Zahl zurück

linked-load und store-conditional (LL & SC)LL lädt einen WertSC speichert einen Wert, falls seit LL nichts geändert wurde

compare-and-swap (CAS)Speichert einen Wert, falls Adresse einen bestimmten Wert enthält

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Primitiven 4

Page 6: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Primitiven

In Hardware und Software [Int][Arm][Cpp]

Memory barriersVerhindert Umordnung von Lade- und Speicherbefehlen

test-and-set (TAS)Setzt ein Bit auf 1, falls es 0 war

fetch-and-add (FAD)Addiert eine ZahlGibt vorherige Zahl zurück

linked-load und store-conditional (LL & SC)LL lädt einen WertSC speichert einen Wert, falls seit LL nichts geändert wurde

compare-and-swap (CAS)Speichert einen Wert, falls Adresse einen bestimmten Wert enthält

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Primitiven 4

Page 7: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Primitiven

In Hardware und Software [Int][Arm][Cpp]

Memory barriersVerhindert Umordnung von Lade- und Speicherbefehlen

test-and-set (TAS)Setzt ein Bit auf 1, falls es 0 war

fetch-and-add (FAD)Addiert eine ZahlGibt vorherige Zahl zurück

linked-load und store-conditional (LL & SC)LL lädt einen WertSC speichert einen Wert, falls seit LL nichts geändert wurde

compare-and-swap (CAS)Speichert einen Wert, falls Adresse einen bestimmten Wert enthält

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Primitiven 4

Page 8: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Primitiven

In Hardware und Software [Int][Arm][Cpp]

Memory barriersVerhindert Umordnung von Lade- und Speicherbefehlen

test-and-set (TAS)Setzt ein Bit auf 1, falls es 0 war

fetch-and-add (FAD)Addiert eine ZahlGibt vorherige Zahl zurück

linked-load und store-conditional (LL & SC)LL lädt einen WertSC speichert einen Wert, falls seit LL nichts geändert wurde

compare-and-swap (CAS)Speichert einen Wert, falls Adresse einen bestimmten Wert enthält

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Primitiven 4

Page 9: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Primitiven

In Hardware und Software [Int][Arm][Cpp]

Memory barriersVerhindert Umordnung von Lade- und Speicherbefehlen

test-and-set (TAS)Setzt ein Bit auf 1, falls es 0 war

fetch-and-add (FAD)Addiert eine ZahlGibt vorherige Zahl zurück

linked-load und store-conditional (LL & SC)LL lädt einen WertSC speichert einen Wert, falls seit LL nichts geändert wurde

compare-and-swap (CAS)Speichert einen Wert, falls Adresse einen bestimmten Wert enthält

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Primitiven 4

Page 10: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Vorteile

Höherer Durchsatz

Keine Deadlocks

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Vorteile 5

Page 11: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Vorteile

Höherer Durchsatz

Keine Deadlocks

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Vorteile 5

Page 12: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 13: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 14: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 15: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 16: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 17: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 18: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 19: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 20: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 21: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 22: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 23: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementieren

It’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 24: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Nachteile

Nicht wait-free

ABA Problem bei CAS

Schwer richtig zuimplementierenIt’s easy to write lock-freecode that appears towork, but it’s very difficultto write lock-free codethat is correct andperforms well.

[Her]

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Eigenschaften –Nachteile 6

Page 25: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Inhaltsverzeichnis

EigenschaftenPrimitivenVorteileNachteile

MS-QueueKorrektheitsbeweis

EvaluationMethodikTestsystem und QueuesOriginale BenchmarkEigene BenchmarksErkenntnisse

Schluss

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue 7

Page 26: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Korrektheitsbeweis

1. LinearisierbarkeitÄnderungen scheinen nach “aussen” atomar

2. SicherheitQueue bleibt immer eine Queue

3. LebendigkeitOperationen erfolgen irgendwann

Lock-free: In fester Zeit, falls kein Wettstreit

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 8

Page 27: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Korrektheitsbeweis

1. LinearisierbarkeitÄnderungen scheinen nach “aussen” atomar

2. SicherheitQueue bleibt immer eine Queue

3. LebendigkeitOperationen erfolgen irgendwann

Lock-free: In fester Zeit, falls kein Wettstreit

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 8

Page 28: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Korrektheitsbeweis

1. LinearisierbarkeitÄnderungen scheinen nach “aussen” atomar

2. SicherheitQueue bleibt immer eine Queue

3. LebendigkeitOperationen erfolgen irgendwann

Lock-free: In fester Zeit, falls kein Wettstreit

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 8

Page 29: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Korrektheitsbeweis

1. LinearisierbarkeitÄnderungen scheinen nach “aussen” atomar

2. SicherheitQueue bleibt immer eine Queue

3. LebendigkeitOperationen erfolgen irgendwann

Lock-free: In fester Zeit, falls kein Wettstreit

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 8

Page 30: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Definitionen und Initialisierung

Verkette Liste

Mindestens einen Knoten

Modifikationszähler im pointer_t

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 9

Page 31: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Definitionen und Initialisierung

Verkette Liste

Mindestens einen Knoten

Modifikationszähler im pointer_t

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 9

Page 32: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Definitionen und Initialisierung

Verkette Liste

Mindestens einen Knoten

Modifikationszähler im pointer_t

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 9

Page 33: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Definitionen und Initialisierung

Verkette Liste

Mindestens einen Knoten

Modifikationszähler im pointer_t

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 9

Page 34: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 35: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 36: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 37: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 38: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 39: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 40: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 41: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 42: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Beispiel eines Dequeues

[email protected] Lock-free Datenstrukturen (24. Januar 2017) MS-Queue –Korrektheitsbeweis 10

Page 43: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Inhaltsverzeichnis

EigenschaftenPrimitivenVorteileNachteile

MS-QueueKorrektheitsbeweis

EvaluationMethodikTestsystem und QueuesOriginale BenchmarkEigene BenchmarksErkenntnisse

Schluss

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation 11

Page 44: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Methodik

20.000.000 Elemente

Thread führt folgendes num_items/thread_count mal aus:1 enqueue“andere” Arbeit1 dequeue“andere” Arbeit

“andere” Arbeit ist eine leere Schleife

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation –Methodik 12

Page 45: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Testsystem und Queues

Testsystem:Ubuntu 16.10Intel R© Xeon R© E3-1230 v2g++ 6.2 (-03)

Queues (libcds) [Khi17]:Michael Scott Queue (MSQ)Moir Queue (MOQ)Basket Queue (BAQ)Optimistic Queue (OPQ)Lock based Queue (LBQ)

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation –Testsystem und Queues 13

Page 46: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Originale Benchmark

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation –Originale Benchmark 14

Page 47: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Eigener Benchmark

Figure: iteration_count = 150

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Eigene Benchmarks 15

Page 48: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Eigener Benchmark

Figure: iteration_count = 400

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Eigene Benchmarks 16

Page 49: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Generelle Erkenntnisse

Skalieren anfangs fast perfekt

Lock-free Queues nah beieinander

Je mehr Arbeit, desto wenigerUnterschiede

iteration_count = 150

iteration_count = 400

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Erkenntnisse 17

Page 50: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Queue-spezifische Erkenntnisse

MSQ einer der Schnellsten

MOQ enthält emuliertes LL/SC

BAQVerwaltet Buckets mit ElementenFügt Buckets hinzu im Falle einesWettstreits

OPQFügt vorne hinzu, entfernt hintenDoppelt verkettete Listeprev Pointer wird ohneSynchronisations-Primitive gesetztFalls Pointer inkonsistent→ fixList()

iteration_count = 150

iteration_count = 400

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Erkenntnisse 18

Page 51: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Queue-spezifische Erkenntnisse

MSQ einer der Schnellsten

MOQ enthält emuliertes LL/SC

BAQVerwaltet Buckets mit ElementenFügt Buckets hinzu im Falle einesWettstreits

OPQFügt vorne hinzu, entfernt hintenDoppelt verkettete Listeprev Pointer wird ohneSynchronisations-Primitive gesetztFalls Pointer inkonsistent→ fixList()

iteration_count = 150

iteration_count = 400

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Erkenntnisse 18

Page 52: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Queue-spezifische Erkenntnisse

MSQ einer der Schnellsten

MOQ enthält emuliertes LL/SC

BAQVerwaltet Buckets mit ElementenFügt Buckets hinzu im Falle einesWettstreits

OPQFügt vorne hinzu, entfernt hintenDoppelt verkettete Listeprev Pointer wird ohneSynchronisations-Primitive gesetztFalls Pointer inkonsistent→ fixList()

iteration_count = 150

iteration_count = 400

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Erkenntnisse 18

Page 53: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Queue-spezifische Erkenntnisse

MSQ einer der Schnellsten

MOQ enthält emuliertes LL/SC

BAQVerwaltet Buckets mit ElementenFügt Buckets hinzu im Falle einesWettstreits

OPQFügt vorne hinzu, entfernt hintenDoppelt verkettete Listeprev Pointer wird ohneSynchronisations-Primitive gesetztFalls Pointer inkonsistent→ fixList()

iteration_count = 150

iteration_count = 400

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Evaluation – Erkenntnisse 18

Page 54: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Zusammenfassung

Nicht in jeder Situation ist lock-free nötig

MSQ schnell, angesichts des Alters

Jede Queue hat ihre eigenen Vor- und Nachteile

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Schluss 19

Page 55: EineEinführungindielock-freeProgrammierung BurakOk 24 ... · burak.ok@fau.de Lock-freeDatenstrukturen(24.Januar2017) Eigenschaften–Primitiven4. Primitiven InHardwareundSoftware[Int][Arm][Cpp]

Quellen I

ARM Architecture Reference Manual.https://www.scss.tcd.ie/~waldroj/3d1/arm_arm.pdf. Accessed: 2017-01-16.

C++ International Standard.http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf.Accessed: 2017-01-16.

Lock-Free Code: A False Sense of Security.http://www.drdobbs.com/cpp/lock-free-code-a-false-sense-of-security/210600279. Accessed: 2017-01-09.

Intel R© 64 and IA-32 Architectures Software Developer’s Manual, Volume 2(2A, 2B, 2C & 2D): Instruction Set Reference, A-Z. http://www.intel.de/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf. Accessed: 2017-01-16.

Max Khizhinsky. A C++ library of Concurrent Data Structures. commit-id:03601c4b049873992f30f269b131e0f0f19742e5.https://github.com/khizmax/libcds. 2017.

[email protected] Lock-free Datenstrukturen (24. Januar 2017) Schluss 20