[Go] GC: green tea
green tea GC๋ go 1.25๋ถํฐ ์คํ์ ์ผ๋ก ๋์
๋๊ธฐ ์์ํ GC ๊ฐ์ ๋ฒ์ ์ ์ฝ๋๋ค์์ด๋ค.
ํ์ฌ๋ ๊ฒ์ฆ ๋จ๊ณ์ ์๊ณ , ์ ์ฉ์ฑ์ด ์
์ฆ๋๋ค๋ฉด ์๋ง 1.26๋ ์ดํ์ ๋์ฒด๋ ๊ฒ ๊ฐ๋ค.
๊ธฐ์กด Go GC์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด, ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๊ธธ ๋ฐ๋๋ค.
https://blog.naver.com/sssang97/223576600679
์ฌ์ฉ ๋ฐฉ๋ฒ
ํ ์์ 1.25 ๋ฒ์ ์์ greentea GC๋ฅผ ํ์ฑํํ๋ ค๋ฉด, ํ๊ฒฝ๋ณ์๋ง ํ๋ ์ ๊ณตํ๋ฉด ๋๋ค.
GOEXPERIMENT=greenteagc go run ... # ์คํ
GOEXPERIMENT=greenteagc go build ... # ์ปดํ์ผ
์ด์ธ์ ์ฝ๋์ ์ง์ ์ ์ผ๋ก ์ํญ์ ์ฃผ๋ ๋ถ๋ถ์ ์๋ค.
์ฑ๋ฅ
go ๊ทธ๋ฃน์์ ์ฃผ์ฅํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด, ๊ธฐ์กด ๋๋น CPU ์ฌ์ดํด์ 10~40% ์ ๋๋ฅผ ์ ์ฝํ ์ ์๋ค๊ณ ํ๋ค.
๋ช๋ฐฐ ๋นจ๋ผ์ง๊ณ ๊ทธ๋ฐ ๊ฒ๊น์ง๋ ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฑด ์์ ๊ฐ์ฒด๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ์ข ์ ํจํ ๊ฐ์ ์ด๋ค.
ํ ์์ ์์๋ ์ด๊ฒ ์ฅ์ ๋ง ์๋ ๊ฒ์ธ์ง๋ฅผ ํ์คํ๊ฒ ํ๋จ์ด ๋์ง ์์๋ค. ๊ฐ๋ ๊ธฐ์กด GC ๋๋นํด์ ์ผ์์ ์ง ์๊ฐ์ด ๋ ๊ธธ์ด์ง๋ค๋ ์๊ฒฌ๋ ์๋๋ผ.
๊ธฐ์กด GC์ ๋ฌธ์ : ๋ฎ์ CPU ์บ์์จ
Go์ GC๋ ์๋ ๊ตฌ์กฐ์ ์ธ ๋จ์ ๋ค์ด ์ด๊ฒ์ ๊ฒ ์ข ์๊ธด ํ๋ฐ, ์ต๊ทผ Go ํ์์ ์ค์ ์ ์ผ๋ก ๋ณธ ๋ถ๋ถ์ ์บ์ ํจ์จ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง๋ค๋ ๊ฒ์ด์๋ค.
ํนํ Mark & Sweep์ Mark ๊ณผ์ ์์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ด ๋งค๋ฒ ๋ฌด์์ ์์น๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ CPU ์บ์๋ฅผ ์ ํ ํ์ฉํ์ง ๋ชปํ๋ค๋ ๊ฒ์ด ์ฃผํจํ๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ทธ๋ฅ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ง์ญ์ฑ๊ณผ ๊ด๊ณ์์ด ์๋ก๋ฅผ ์๋ฌด๋ ๊ฒ๋ ์ฐธ์กฐํ ์ ์์๋ ๊ฒ์ด๋ค.
๊ทธ๋์ GC Tree๋ฅผ ์ค์บํ๋ฉด์ ์ด๋ํ ๋๋ง๋ค ์บ์ ๋ฏธ์ค๊ฐ ์ฌ๊ฐํ ์์ค์ผ๋ก ๋ฐ์ํ ์ ์๋ ๊ตฌ์กฐ์๋ค.
๊ฒ๋ค๊ฐ ์บ์ ๋ฏธ์ค๋ ๋จ์ผ์ฝ์ด ์์ญ์๋ง ์ํฅ์ ์ฃผ๋ ๊ฒ์ด ์๋๋ผ, ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์์ ๋ฆฌ์์ค์๋ ๊ฐ์ ์ ์ผ๋ก ๋ณ๋ชฉ์ ๊ฐํ๋ค. CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ์๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ์ก์๋จน๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ํ์ฌ Go์ GC๋ ์ฝ์ด๊ฐ ๋ง์์ง์๋ก ๋นํจ์จ์ ์ผ๋ก ๋์ํ๋ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.
GreenTea๋ ์ด๋ฐ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋์๋ค.
GreenTea GC - Span ๋จ์ ๊ด๋ฆฌ
์, ๊ทธ๋ฌ๋ฉด ์บ์ ํจ์จ์ฑ์ ๋์ด๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ฌ์ค ๋ฐฉ๋ฒ์ ํ๋๋ฐ์ ์๋ค.
๊ฐ์ฒด๋ค์ ๋ฌถ์ด์ ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ , ์ฌ๋งํ๋ฉด ๋ฐฐ์ด ๋จ์๋ก๋ง ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ๋ ์ ๋ํ๋ ๊ฒ์ด๋ค.
GreenTea๋ ๊ทธ๋ฐ ๋ฐฉ์์ ์ทจํ๋ค.
๊ฐ์ฒด๋ค์ "Span"์ด๋ผ๋ ์ผ์ข
์ ํ์ด์ง ๋จ์์ ๋ชจ์๋๊ณ , ํ์ด์ง ๋จ์๋ก๋ง ์ค์บ์ ํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
์ด Span์ ์ด ํฌ๊ธฐ๋ 8KB๊ณ , Span ๋ด ๊ฐ์ฒด์ ์ต๋ ํฌ๊ธฐ๋ 512byte๋ค. ๊ทธ๋ฆฌ๊ณ ํ Span์๋ ๊ฐ์ ํฌ๊ธฐ์ ๊ฐ์ฒด๋ง ๋ค์ด๊ฐ๋ค.
๊ทธ๋์ ์ด๊ฑด ์์ ๊ฐ์ฒด๊ฐ ๋งค์ฐ ๋ง์ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์ธ ์ต์ ํ๋ค.
Mark ๋ฃจํ๋ฅผ ๋๋๋ Span ๋จ์์ ์๋ ๊ฐ์ฒด๋ฅผ ํ๋ฒ์ ์ฝ์ด์ ๊ธฐ์ตํ ๋ค์์ ๋ฃจํ๋ฅผ ๋๋ฆฌ๋ ์์ด๋ค.
mark ๋นํธ๋ ๊ฐ์ฒด ๋จ์๊ฐ ์๋ Span ๋จ์์ ์ ์ฅํ๊ณ , ํ์ํ ๋๋ ๊ฐ์ฒด๋ฅผ ์ฆ์ ์ค์บํ์ง ์๊ณ Span์ ์ผ๋จ Batch Queue์ ์์๋ ๋ค์์ ์ต๋ํ ๋ชจ์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ทจํ๋ค.
๊ทธ๋์ ์ด์ ๋ณด๋ค๋ ์บ์ ํํธ๊ฐ ํ๋ฅ ์ ์ผ๋ก ํจ์ฌ ๋์์ง ์ ์๋ค.
greentea gc์ ๋ํ ์ค์ ๊ตฌํ์ ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋งํฌ์ ๋ค์ด๊ฐ์ ๋ณด๋ฉด ๋๋ค.
https://go-review.googlesource.com/c/go/+/658036/24/src/runtime/mgcmark_greenteagc.go
๊ทธ๋ ๊ฒ ์ฝ๋ ์์ด ๋ง์ง๋ ์๋ค. ๊ถ๊ธํ๋ค๋ฉด ํ๋ฒ ๋ด๋ณด๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
Next Step
Go ํ์์๋ ์ด Green Tea ์์ฒด๋ ์ด๋ ์ ๋ ์์ฑ๋์๋ค๊ณ ํ๋จํ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ ๋ค์์ ์ํํ ๊ฐ์ ์์
์ SIMD๋ฅผ ํ์ฉํ ์ธ์คํธ๋ญ์
์์ค ๋ณ๋ ฌํ๋ผ๊ณ ํ๋ค.
์ฐธ์กฐ
https://go.dev/blog/greenteagc
https://github.com/golang/go/issues/73581