$30 off During Our Annual Pro Sale. View Details »

Model spójności pamięci w Javie

Model spójności pamięci w Javie

Od odkrycia wąskiego gardła von Neumanna minęło trochę czasu. Dużo czasu. Wrzuciliśmy pamięć do procesora, pogrubiliśmy szyny, przyspieszyliśmy je, jak i pamięć jak i procesor... Ale w świetle słów samego Gordona Moore'a, sprzętowe ulepszenia mają się ku końcowi. Poza tym - nigdy nie były wystarczające. Zatem, co z tym robią języki programowania?

Prezentacja tłumaczy gdzie sięgają korzenie wielowątkowości, mówi o tym, jak działa sprzęt, na którym działają nasze programy, klaruje równoległość i współbieżność, mówi o tym, dlaczego (i kiedy) pamięć może być niespójna i co z tego wynika - wreszcie opisuje jak o taką spójność dba - i dbała na przestrzeni lat - Java.

Tomasz Borek

January 27, 2016
Tweet

More Decks by Tomasz Borek

Other Decks in Technology

Transcript

  1. Model spójności pamięci w Javie
    @LAFK_pl
    Consultant @
    Tomasz Borek

    View Slide

  2. GeeCON 2016 Kraków!
    http://2016.geecon.org/register/
    @LAFK_pl

    View Slide

  3. By udoskonalić tę prezentację potrzebuję
    UWAG od Was o tym co było dobre a czego
    brakło.
    @LAFK_pl, #JMCM
    Lub osobiście
    Lub na kartce i mi zostawić
    Lub gmailem
    @LAFK_pl

    View Slide

  4. Symentis
    @LAFK_pl

    View Slide

  5. Symentis
    @LAFK_pl
    Jarosław Pałka Kuba Marchwicki

    View Slide

  6. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  7. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  8. Ręka w górę kto zdanie rzec umie o:

    Gene Amdahlu?

    Gordonie Moore?

    Leslie Lamport'cie?

    Billu Pughu?

    Sarit'cie Adve?

    Hansie Boehmie?

    Martinie Thompsonie?

    Aleksey'u Shipilevie?
    @LAFK_pl

    View Slide

  9. Ręka w górę, kto

    Koduje wielowątkowo?

    Zna 'prawo' Moore'a?

    Zna prawo Amdahla?

    Odróżni współbieżność od równoległości?

    Koduje z sympatią do metalu ('mechanical
    sympathy')?

    Stara się?

    Wyjaśni termin?
    @LAFK_pl

    View Slide

  10. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Model pamięci w ogóle

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  11. Model spójności pamięci

    Czemu pamięć może być niespójna?

    Co z tego, że jest niespójna?

    Czemu chcemy wątki?

    A co do tego ma współbieżność/równoległość?

    Sympatia do metalu?
    @LAFK_pl

    View Slide

  12. Sarita Adve

    ”Java Memory Model
    is broken”

    Wieeele publikacji w
    temacie

    Najlepsza definicja
    jaką znalazłem
    @LAFK_pl

    View Slide

  13. Sarita Adve: memory consistency
    model
    @LAFK_pl

    View Slide

  14. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Model pamięci w ogóle

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  15. Jak wykonuje się program?
    CPU
    BEGIN
    int a = 0;
    int b = 0;
    readln(”Podaj a: ”, a);
    readln(”Podaj b: ”, b);
    writeln(a+b);
    END.
    @LAFK_pl

    View Slide

  16. Jak wykonuje się program?
    CPU: int a = 0;
    BEGIN
    int a = 0;
    int b = 0;
    readln(”Podaj a: ”, a);
    readln(”Podaj b: ”, b);
    writeln(a+b);
    END.
    @LAFK_pl

    View Slide

  17. Jak wykonuje się program?
    CPU: int b = 0;
    BEGIN
    int a = 0;
    int b = 0;
    readln(”Podaj a: ”, a);
    readln(”Podaj b: ”, b);
    writeln(a+b);
    END.
    Pamięć: a → 0xe13 = 0x00
    @LAFK_pl

    View Slide

  18. Słowo o sprzęcie
    CPU: int b = 0;
    BEGIN
    int a = 0;
    int b = 0;
    readln(”Podaj a: ”, a);
    readln(”Podaj b: ”, b);
    writeln(a+b);
    END.
    SZYNA
    Pamięć: a → 0xe13 = 0x00
    @LAFK_pl

    View Slide

  19. Słowo o sprzęcie
    CPU: wiele komponentów
    Czas dostępu: 1-9ns
    Kolejka instrukcji – rejestr
    Czas dostępu: 1ns
    SZYNA!!!
    Wąskie
    gardło
    Pamięć zdolna do losowego odczytu
    Czas dostępu: ~100ns
    @LAFK_pl

    View Slide

  20. Adres instrukcji?
    @LAFK_pl

    View Slide

  21. RAMie, gdzie dane?
    @LAFK_pl

    View Slide

  22. Instrukcja warunkowa
    @LAFK_pl

    View Slide

  23. Wąskie gardło von Neumanna

    Optymalizacje stricte sprzętowe

    Optymalizacje architekturalne

    Optymalizacje programowe

    Sztuczki i kruczki
    @LAFK_pl

    View Slide

  24. Sprzętowe stricte

    Zwiększanie przepustowości szyny

    Przyspieszanie szyny

    Przyspieszanie pamięci

    Przyspieszanie procesora

    Czytaj: więcej tranzystorów
    @LAFK_pl

    View Slide

  25. Gordon Moore

    Współzałożyciel
    Fairchild Semi-
    conductors

    Współzałożyciel
    Intela

    VP produkcji

    W wywiadzie czyni
    obserwację
    @LAFK_pl

    View Slide

  26. Prawo Moore'a?
    @LAFK_pl

    View Slide

  27. ”Prawo” Moore'a
    I see Moore’s law dying here in the next decade
    or so.
    – Gordon Moore, 2015
    @LAFK_pl

    View Slide

  28. ”Prawo” Moore'a
    I see Moore’s law dying here in the next decade
    or so.
    – Gordon Moore, 2015
    @LAFK_pl

    View Slide

  29. Koniec minimalizacji

    Sprzęt nie przyspieszy bardziej

    Sorry Intel, wiele rdzeni

    Czas na optymalizacje

    Architekturalne

    Programowe
    – Czytaj: sztuczki i kruczki
    @LAFK_pl

    View Slide

  30. Architekturalne

    Osobna szyna dla kodu i danych

    Przerzucanie pamięci do procka

    Wielu wykonawców

    GPU

    Równoległość

    Wiele procesorów (multiple processor array, MIMD,
    SIMD)

    Wielowątkowość
    @LAFK_pl

    View Slide

  31. Osobne szyny
    CPU: wiele komponentów
    Czas dostępu: 1-9ns
    Kolejka instrukcji – rejestr
    Czas dostępu: 1ns
    SZYNA!!!
    Wąskie
    gardło
    Pamięć zdolna do losowego odczytu
    Czas dostępu: ~100ns
    @LAFK_pl

    View Slide

  32. CPU == ?
    @LAFK_pl

    View Slide

  33. Ile masz do danych?

    http://i.imgur.com/k0t1e.png

    View Slide

  34. Współbieżność a Równoległość
    2+ wątki idą do przodu 2+ wątki działają naraz
    @LAFK_pl

    View Slide

  35. Współbieżność a Równoległość
    Więcej czekania
    Zagłodzenie wątku
    Bardziej sekwencyjnie
    Niezależni wykonawcy
    @LAFK_pl

    View Slide

  36. Gene Amdahl

    IBM fellow

    IBM & Amdahl
    mainframes

    Coined law in 1967
    @LAFK_pl

    View Slide

  37. Prawo Amdahla?
    @LAFK_pl

    View Slide

  38. Prawo Amdahla
    @LAFK_pl
    The speedup of a program using multiple
    processors in parallel computing is limited by the
    sequential fraction of the program. For example, if
    95% of the program can be parallelized, the
    theoretical maximum speedup using parallel
    computing would be 20× as shown in the
    diagram, no matter how many processors are
    used.

    View Slide

  39. Rok 1967, Gene Amdahl pisze:
    @LAFK_pl
    For over a decade prophets have voiced the
    contention that the organization of a single
    computer has reached its limits and that truly
    significant advances can be made only by
    interconnection of a multiplicity of computers in
    such a manner as to permit cooperative solution.

    View Slide

  40. Rok 1967, Gene Amdahl pisze:
    @LAFK_pl
    Przez dekadę głoszono, że budowa
    pojedynczego komputera sięgnęła krańca
    możliwości i prawdziwy postęp można
    osiągnąć tylko przez połączenie wielu
    komputerów.

    View Slide

  41. Rok 1967, Gene Amdahl pisze:
    @LAFK_pl
    Przez dekadę głoszono, że budowa
    pojedynczego komputera sięgnęła krańca
    możliwości i prawdziwy postęp można
    osiągnąć tylko przez połączenie wielu
    komputerów.

    View Slide

  42. Więcej, WIĘCEJ, WIĘCEJ!!!
    @LAFK_pl

    View Slide

  43. Programowe

    Wielu wykonawców

    Wielowątkowość

    7 paradygmatów!
    – Model aktorowy (Erlang)
    – Współdzielona pamięć (Clojure)
    – Wątki i semafory (Java)

    Optymalizacje kodu
    @LAFK_pl

    View Slide

  44. Optymalizacje kodu - gdzie?

    Javac / Jython / ...

    JIT

    Sprzęt, no ba!

    Inne ludki!

    View Slide

  45. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Model pamięci w ogóle

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  46. Model spójności pamięci w Javie

    Powtórka:

    Niespójna pamięć i wątki

    Problem architektury CPU

    Wąskie gardło von Neumanna

    Kto tu programuje wielowątkowo?

    A kto używa JBossa, WildFly'a, itp.?

    Sympatia do metalu?

    Czy Java nie jest po to, by odciąć się od 'metalu'?
    @LAFK_pl

    View Slide

  47. Mądrość internetowa...
    @LAFK_pl

    View Slide

  48. Mądrość internetowa...
    @LAFK_pl
    GC

    View Slide

  49. JLS, sekcja 17.4:
    A memory model describes, given a program and
    an execution trace of that program, whether the
    execution trace is a legal execution of the
    program. The Java programming language
    memory model works by examining each read in
    an execution trace and checking that the write
    observed by that read is valid according to certain
    rules.
    @LAFK_pl

    View Slide

  50. JLS, section 17.4:
    A memory model describes, given a program and
    an execution trace of that program, whether the
    execution trace is a legal execution of the
    program. The Java programming language
    memory model works by examining each read in
    an execution trace and checking that the write
    observed by that read is valid according to
    certain rules.
    @LAFK_pl

    View Slide

  51. Aleksey Shipilev:
    @LAFK_pl
    Memory model answers one simple question:
    What values can a particular read in a program
    return?

    View Slide

  52. Bill Pugh, Jeremy Manson:
    What is a memory model, anyway?
    At the processor level, a memory model defines
    necessary and sufficient conditions for knowing
    that writes to memory by other processors are
    visible to the current processor, and writes by the
    current processor are visible to other processors.
    @LAFK_pl

    View Slide

  53. Model spójności pamięci w Javie

    Wbudowany od startu

    Rozwinięty w JSR-133

    Obecny kształt

    W trakcie zmian:

    JEPS-188

    JMM9
    @LAFK_pl

    View Slide

  54. JSR-133

    Final

    Specka nie dla ludzi

    Double-locking

    Volatile

    Implementacje na swoim
    @LAFK_pl

    View Slide

  55. Optymalizowanie kodu

    Inny porządek (prescient store)

    Wycinanki (np. synchronize)

    Wymiana instrukcji / skracanie kodu
    maszynowego

    Analiza osiągalności (escape analisys)

    'Wstawianie' (inlining)

    ...
    @LAFK_pl
    Consultant @

    View Slide

  56. Barriers / fences
    „once memory has been pushed to the cache
    then a protocol of messages will occur to
    ensure all caches are coherent for any shared
    data. The techniques for making memory
    visible from a processor core are known as
    memory barriers or fences.
    – Martin Thompson, Mechanical Sympathy
    per architektury / CPU / typy cache'y!
    @LAFK_pl
    Consultant @

    View Slide

  57. Barriers / Fences

    Instrukcja CPU

    ”opróżnij bufor teraz!”

    CMPXCHG (jak jest!)

    Wymusza aktualizację

    Odpala MESI itp.

    Zapis / Odczyt / Pełna
    @LAFK_pl
    Consultant @

    View Slide

  58. Doug Lea radzi:
    @LAFK_pl
    Consultant @
    The best way is to build up a small repertoire of
    constructions that you know the answers for and
    then never think about the JMM rules again
    unless you are forced to do so! Literally nobody
    likes figuring things out of JMM rules as stated, or
    can even routinely do so correctly. This is one of
    the many reasons we need to overhaul JMM
    someday.

    View Slide

  59. Doug Lea radzi:
    @LAFK_pl
    Consultant @
    The best way is to build up a small repertoire
    of constructions that you know the answers
    for and then never think about the JMM rules
    again unless you are forced to do so! Literally
    nobody likes figuring things out of JMM rules as
    stated, or can even routinely do so correctly. This
    is one of the many reasons we need to overhaul
    JMM someday.

    View Slide

  60. Doug Lea radzi:
    @LAFK_pl
    Consultant @
    miej mały zestaw konstrukcji których
    rezultaty znasz

    View Slide

  61. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Model pamięci w ogóle

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  62. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Model pamięci w ogóle

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  63. Problemy

    Atomowość operacji

    Widzialność rzeczy

    Kolejność instrukcji
    @LAFK_pl

    View Slide

  64. O czym dzisiaj

    Mini-auto-pean i o uwag potrzebie

    Sonda

    Model pamięci w ogóle

    Problem architektury

    Model pamięci (w ogóle i w Javie)

    Wątki i ich wykonawcy

    Jakie to wszystko nasuwa problemy

    Kogo i co czytać by wiedzieć więcej
    @LAFK_pl

    View Slide

  65. Leslie Lamport

    Distributed system
    clocks

    Happens before

    Sequential
    consistency
    @LAFK_pl

    View Slide

  66. Bill Pugh

    FindBugs

    ”Java Memory Model
    is broken”

    Final - Volatile

    Double-checked
    locking

    ”Nowy” JMM
    @LAFK_pl

    View Slide

  67. Martin Thompson

    Mechanical sympathy
    blog & mailing list

    Aeron protocol

    Proponent
    odpowiedniego nurtu
    programowania
    @LAFK_pl

    View Slide

  68. Niemożliwe bez:

    Leslie Lamport'a prac nad rozprochami

    Billa Pugh'a pracy nad JSR-133!
    http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html

    Sarity Adve publikacji, zwłaszcza tej:
    http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-95-7.pdf
    @LAFK_pl

    View Slide

  69. Świetna acz trudna lektura

    Martin Thompson: Mechanical Sympathy (mailing list & blog
    )

    JEPS 188: http://openjdk.java.net/jeps/188

    Goetz et al: "Java Concurrency in Practice"

    Herilhy, Shavit, "The Art of Multiprocessor Programming"

    Adve, "Shared Memory Consistency Models: A Tutorial"

    Manson, "Special PoPL Issue: The Java Memory Model"

    Huisman, Petri, "JMM: A Formal Explanation"

    Aleksey Shipilev blog post: http://shipilev.net/blog/2014/jmm-pragmatics/
    @LAFK_pl

    View Slide

  70. O prawach:

    Moore's ”law”:
    http://www.cs.utexas.edu/~fussell/courses/cs352h/papers/moore.pdf

    Rock's law: http://en.wikipedia.org/wiki/Rock's_law

    Amdahl's law:

    http://en.wikipedia.org/wiki/Amdahl%27s_law

    Validity of the Single-Processor Approach to Achieving Large-Scale Computing
    Capabilities AFIPS Press, 1967

    J.L. Gustafson, “Reevaluating Amdahl’s Law,” Comm. ACM, May 1988

    Pleasantly parallel problems:
    http://en.wikipedia.org/wiki/Embarrassingly_parallel
    @LAFK_pl

    View Slide

  71. O procesorach:

    Procesor Scott'a świetnie objaśniony:
    https://www.youtube.com/watch?v=cNN_tTXABUA

    Szyny:
    http://www.ictcool.com/2011/09/02/address-bus-data-bus-and-control-bus-explained/

    Procesory ogólnie, teoria z diagramami:
    http://www.teach-ict.com/gcse_computing/ocr/212_computing_hardware/cpu/miniweb/pg3.htm

    Podręczna pamięć procesora ma znaczenie:
    http://www.aristeia.com/TalkNotes/codedive-CPUCachesHandouts.pdf
    @LAFK_pl

    View Slide

  72. DOTARLIŚCIE DO KOŃCA! :-)
    proszę o uwagi!
    @LAFK_pl

    View Slide