My presentation about Mark Compact GC in MRI for GitHub Constellation Tokyo
How people build software!"Mark Compact GC in MRI
View Slide
How people build software!͜Μʹͪʂʂʂ2
How people build software!ࣗݾհ3
How people build software!ΞʔϩϯͰ͢ɻ!4
How people build software!ˏtenderlove5
How people build software!!ˏtenderlove6
How people build software!ఱက͕େ͖Ͱɺ7ఱကϥϒΛݺΜͰ͍͍Ͱ͢
How people build software!Ruby Core TeamRails Core Team8
How people build software!ຊޠೳྗࢼݧ9
How people build software!ೣɺೋඖ10
How people build software! 11SEATAC Airport Facebook YouTube
How people build software! 12
How people build software! 13Gorbachev Puff Puff ThunderhorseΰϒͪΌΜ
How people build software!GitHub ͷࣾһ14
How people build software!Ruby & Rails Developer15
How people build software!GitHub & OSS16
How people build software!!GitHub Core Values17• Collaboration• Empathy• Quality• Positive Impact• Shipping
How people build software!Collaboration18!
How people build software!Empathy19!
How people build software!Quality20!
How people build software!Positive Impact21!
How people build software!Shipping22!
How people build software!GitHub ❤ OSS23!
How people build software!GitHub & OSS24!
How people build software!Mark / Compact GC25
How people build software!Mark / Compact GC26
How people build software!!Roadmap27ΞϩέʔγϣϯίϨΫγϣϯίϯύΫτ
How people build software!Ξϩέʔγϣϯ28
How people build software!!Ξϩέʔγϣϯ29def hogeloop doObject.newendendhoge
How people build software!ΞϩέʔγϣϯGCͷ30
How people build software!`rb_newobj` in gc.c31
How people build software!!ϝϞϦྖҬͷϨΠΞτ32ώʔϓྖҬϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObjObj Obj
How people build software!Free Space = "Fast Path"33
How people build software!New Page = "Slow Path"34
How people build software!!ϖʔδͷϨΠΞτ35ϖʔδFREEFREEFREEFREEFREEFREEFREEFREEFREEFREESLOTSObjObjObjObjObjObjObjObjObjObj
How people build software!!ϖʔδͷϨΠΞτ36ϖʔδFREEFREEFREEFREEFREEFREEFREEFREEFREEFREESLOTSObjObjObjObjObjObjObjObjObjObj
How people build software!ཁ37
How people build software!heap has_many :pages38
How people build software!page has_many :slots39
How people build software!slot.is_a?(Empty) ||slot.is_a?(Object)40
How people build software!ίϨΫγϣϯ41
How people build software!ϚʔΫεΠʔϓ GCMark Sweep GC42!
How people build software!ϚʔΫεΠʔϓͷΞϧΰϦζϜ43
How people build software!!Tree of Objects44RootABC Da = [{ c: 'd' }]RubyArrayHashStringSymbol
How people build software!!Tree of Objects45RootABC Da = [{ c: 'd' }]a = nilRuby
How people build software!ϚʔΫɹεΠʔϓ46͔ͩΒʮϚʔΫεΠʔϓʯɹtenderlove
How people build software!!Mark Phase47RootDABCFEHG
How people build software!!Mark Phase48RootDABCFEHG
How people build software!!Mark Phase49RootDABCFEHG
How people build software!!Mark Phase50RootDABCFEHG
How people build software!Incremental / Lazy51
How people build software!ίϯύΫγϣϯͷؔ52
How people build software!!Free Space53ϖʔδFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObjϖʔδFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObjϖʔδFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObj
How people build software!!Free Space54FREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObjFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObjFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObj
How people build software!!Free Space55FREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjFREEFREEFREEFREEFREEFREEFREEFREEFREEFREEObjObjObjObjObjObjObjObjObjObjObjObjObjObj
How people build software!ΦϒδΣΫτҠಈग़དྷͳ͍56
How people build software!ίϯύΫγϣϯͱ57
How people build software!github.com/github/ruby/tree/gc-compact58
How people build software!ίϯύΫγϣϯͷΞϧΰϦζϜ59
How people build software!"2 Finger Compaction"60☝ ☝
How people build software!!Compaction Steps61ΦϒδΣΫτͷҠಈϦϑΝϨϯεͷߋ৽
How people build software!!ΦϒδΣΫτͷҠಈ621 2 3 4 5 6 7 8 9 a bFree Free Free Obj Free Obj Obj Obj Free Free Obj☝ ☝Free Pointer Scan Pointer1235Done!AddressHeap
How people build software!!ΦϒδΣΫτҠಈͷલ631 2 3 4 5 6 7 8 9 a bFree Free Free Obj Free Obj Obj Obj Free Free ObjAddressHeapa = { c: 'd' }Ruby{} :c 'd'
How people build software!!ΦϒδΣΫτҠಈͷޙ641 2 3 4 5 6 7 8 9 a bObj FreeObjObjObj Free FreeObjAddressHeapa = { c: 'd' }Ruby{} :c'd'1235
How people build software!!ϦϑΝϨϯεͷߋ৽651 2 3 4 5 6 7 8 9 a bObj ObjObjObj Free FreeObjAddressHeapa = { c: 'd' }Ruby{} :c'd'1235☝Done!
How people build software!!ϦϑΝϨϯεͷߋ৽661 2 3 4 5 6 7 8 9 a bObj ObjObjObj Free FreeObjAddressHeapa = { c: 'd' }Ruby{} :c'd'1235 FreeFreeFreeFree
How people build software!ίϯύΫτྃʂʂ67
How people build software!ίϯύΫγϣϯͷ68
How people build software!!ී௨ͷϦϑΝϨϯε69HashSymbolStringC code
How people build software!!C֦ுͷϦϑΝϨϯε70HashSymbolStringC coderb_gc_markෆҠಈҠಈҠಈ
How people build software!άϩόϧม71
How people build software!!file.c in MRI72separator = rb_obj_freeze(rb_usascii_str_new2("/"));/* separates directory parts in path */rb_define_const(rb_cFile, "Separator", separator);rb_define_const(rb_cFile, "SEPARATOR", separator);static VALUErb_file_s_join(VALUE klass, VALUE args){return rb_file_join(args, separator);}άϩόϧม
How people build software!!άϩόϧม - SEGV73$ ruby -e'File::Separator = File::SEPARATOR = nil; GC.start;File.join("a", "b")' # BOOM$ jruby -e'File::Separator = File::SEPARATOR = nil; GC.start;File.join("a", "b")'
How people build software!General Problem74
How people build software!݁Ռ75
How people build software!Rails Heap76
How people build software!!Compaction Code77GC.startFile.open("pre_compact.json", "wb") { |f|ObjectSpace.dump_all(output: f)}GC.startp GC.compactGC.startFile.open("post_compact.json", "wb") { |f|ObjectSpace.dump_all(output: f)}$ ruby bin/rails r script.rb
ίϯύΫτͷલFUPPagesNumber of slots0 100 200 300 400
ίϯύΫτͷޙFUPPagesNumber of slots0 100 200 300 400
How people build software!ίϯύΫτͷલ:528 / 55280
How people build software!ίϯύΫτͷޙ:167 / 55281
How people build software!ͰɺվળͰ͖·͢82
How people build software!GitHub Heap Graphs83
How people build software!·ͱΊ85!
How people build software!Why Compact?86!
How people build software!OSS Softwarehttps://github.com/github/ruby/tree/gc-compact87!
How people build software!͋Γ͕ͱ͏͍͟͝·͢ʂ88
How people build software!"