[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