Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Model spójności pamięci w Javie

Tomasz Borek
January 27, 2016

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. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. Sarita Adve • ”Java Memory Model is broken” • Wieeele

    publikacji w temacie • Najlepsza definicja jaką znalazłem @LAFK_pl
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. Wąskie gardło von Neumanna • Optymalizacje stricte sprzętowe • Optymalizacje

    architekturalne • Optymalizacje programowe • Sztuczki i kruczki @LAFK_pl
  16. Sprzętowe stricte • Zwiększanie przepustowości szyny • Przyspieszanie szyny •

    Przyspieszanie pamięci • Przyspieszanie procesora • Czytaj: więcej tranzystorów @LAFK_pl
  17. ”Prawo” Moore'a I see Moore’s law dying here in the

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

    next decade or so. – Gordon Moore, 2015 @LAFK_pl
  19. Koniec minimalizacji • Sprzęt nie przyspieszy bardziej • Sorry Intel,

    wiele rdzeni • Czas na optymalizacje • Architekturalne • Programowe – Czytaj: sztuczki i kruczki @LAFK_pl
  20. 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
  21. 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
  22. 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.
  23. 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.
  24. 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.
  25. 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.
  26. 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
  27. Optymalizacje kodu - gdzie? • Javac / Jython / ...

    • JIT • Sprzęt, no ba! • Inne ludki!
  28. 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
  29. 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
  30. 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
  31. 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
  32. Aleksey Shipilev: @LAFK_pl Memory model answers one simple question: What

    values can a particular read in a program return?
  33. 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
  34. 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
  35. JSR-133 • Final • Specka nie dla ludzi • Double-locking

    • Volatile • Implementacje na swoim @LAFK_pl
  36. 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 @
  37. 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 @
  38. Barriers / Fences • Instrukcja CPU • ”opróżnij bufor teraz!”

    • CMPXCHG (jak jest!) • Wymusza aktualizację • Odpala MESI itp. • Zapis / Odczyt / Pełna @LAFK_pl Consultant @
  39. 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.
  40. 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.
  41. 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
  42. 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
  43. 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
  44. Bill Pugh • FindBugs • ”Java Memory Model is broken”

    • Final - Volatile • Double-checked locking • ”Nowy” JMM @LAFK_pl
  45. Martin Thompson • Mechanical sympathy blog & mailing list •

    Aeron protocol • Proponent odpowiedniego nurtu programowania @LAFK_pl
  46. 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
  47. Ś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
  48. 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
  49. 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