Share
Embed
Go GC visualized
Deepu K Sasidharan
February 14, 2020
Transcript
31 slides
-
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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