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

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.

E72ba25d250c41a7d0716953f8ec3f4b?s=128

Tomasz Borek

January 27, 2016
Tweet

Transcript

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

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

  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
  4. Symentis @LAFK_pl

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

  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
  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
  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
  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
  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
  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
  12. Sarita Adve • ”Java Memory Model is broken” • Wieeele

    publikacji w temacie • Najlepsza definicja jaką znalazłem @LAFK_pl
  13. Sarita Adve: memory consistency model @LAFK_pl

  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
  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
  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
  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
  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
  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
  20. Adres instrukcji? @LAFK_pl

  21. RAMie, gdzie dane? @LAFK_pl

  22. Instrukcja warunkowa @LAFK_pl

  23. Wąskie gardło von Neumanna • Optymalizacje stricte sprzętowe • Optymalizacje

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

    Przyspieszanie pamięci • Przyspieszanie procesora • Czytaj: więcej tranzystorów @LAFK_pl
  25. Gordon Moore • Współzałożyciel Fairchild Semi- conductors • Współzałożyciel Intela

    • VP produkcji • W wywiadzie czyni obserwację @LAFK_pl
  26. Prawo Moore'a? @LAFK_pl

  27. ”Prawo” Moore'a I see Moore’s law dying here in the

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

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

    wiele rdzeni • Czas na optymalizacje • Architekturalne • Programowe – Czytaj: sztuczki i kruczki @LAFK_pl
  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
  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
  32. CPU == ? @LAFK_pl

  33. Ile masz do danych? • http://i.imgur.com/k0t1e.png

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

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

    wykonawcy @LAFK_pl
  36. Gene Amdahl • IBM fellow • IBM & Amdahl mainframes

    • Coined law in 1967 @LAFK_pl
  37. Prawo Amdahla? @LAFK_pl

  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.
  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.
  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.
  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.
  42. Więcej, WIĘCEJ, WIĘCEJ!!! @LAFK_pl

  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
  44. Optymalizacje kodu - gdzie? • Javac / Jython / ...

    • JIT • Sprzęt, no ba! • Inne ludki!
  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
  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
  47. Mądrość internetowa... @LAFK_pl

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

  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
  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
  51. Aleksey Shipilev: @LAFK_pl Memory model answers one simple question: What

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

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

    • CMPXCHG (jak jest!) • Wymusza aktualizację • Odpala MESI itp. • Zapis / Odczyt / Pełna @LAFK_pl Consultant @
  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.
  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.
  60. Doug Lea radzi: @LAFK_pl Consultant @ miej mały zestaw konstrukcji

    których rezultaty znasz
  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
  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
  63. Problemy • Atomowość operacji • Widzialność rzeczy • Kolejność instrukcji

    @LAFK_pl
  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
  65. Leslie Lamport • Distributed system clocks • Happens before •

    Sequential consistency @LAFK_pl
  66. Bill Pugh • FindBugs • ”Java Memory Model is broken”

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

    Aeron protocol • Proponent odpowiedniego nurtu programowania @LAFK_pl
  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
  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
  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
  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
  72. DOTARLIŚCIE DO KOŃCA! :-) proszę o uwagi! @LAFK_pl