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

Go GC visualized

Deepu K Sasidharan
February 14, 2020
64k

Go GC visualized

Deepu K Sasidharan

February 14, 2020
Tweet

Transcript

  1. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Mark Setup
    G2
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    = Write barrier on
    = Paused
    = Running

    View Slide

  2. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Mark Setup
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    Goroutine paused

    View Slide

  3. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Mark Setup
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    Write barrier enabled

    View Slide

  4. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    Marking started

    View Slide

  5. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  6. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  7. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  8. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  9. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  10. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  11. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark finished as
    noscan span reached
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  12. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark started for next
    GC root
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  13. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark finished as object
    has no pointer
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  14. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark start for next GC
    root
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  15. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  16. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  17. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  18. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark finished as
    noscan span reached
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  19. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark start for next grey
    object
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  20. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark finished as
    noscan span reached
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  21. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark start for next grey
    object
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  22. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  23. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    No more pointers
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  24. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Write barrier updates a
    pointer change
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  25. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark start for next grey
    object
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  26. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    No more pointers
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  27. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark start for next grey
    object
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  28. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Mark finished as
    noscan span reached
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  29. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Marking
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    All Grey objects are
    scanned and all white
    object can be collected
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  30. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Mark Terminate
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Goroutine paused
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide

  31. P1
    M
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    mheap
    mspan
    mspan
    mspan
    mspan
    mspan
    mspan
    Stack
    = Write barrier on
    = Paused
    = Running
    = noscan mspan
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial
    GC - Mark Terminate
    P1
    M
    G2
    Processor
    Core
    P = Logical Processor per Hardware Thread
    M = Machine per OS Thread
    G = Goroutine (Coroutine)
    mcache
    Stack
    Write barrier
    disabled
    = Write barrier on
    = Paused
    = Running
    = GC Root
    = Alive
    = Unknown/Dead
    = Partial

    View Slide