Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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