Resident Resource Implementation 56d KO - teamswyg/laya-tools GitHub Wiki
์์ฃผ ์์ ์คํ56d ๊ตฌํ๊ณผ ์คํ ๊ฒฝ๊ณ
English ยท ๋ณด์กด๋ ์ฌ์ ์ค๊ณ ยท Go ๊ตฌํ
์ด ๋จ๊ณ๋ ์์ ํํธ ๋๊ตฌ๋ฅผ ํ ๋ฒ ์ผ๊ณ ์ฌ๋ฌ ๋ฒ ์์ฒญํ ๋ ๋๋ ๋น์ฉ์ ์์๋ณด๊ธฐ ์ํ ๊ฒ์ด๋ค. Laya ๋ชจ๋ธ ์ถ๋ก ยทํ์ต ์คํ์ ์๋๋ค. ๊ฐ์ ๊ณต๊ฐ ์์ฒญ์ ๋ฐ๋ณตํ๋ ์์ ์ธก์ ๊ณผ, ์๋ก ๋ค๋ฅธ ์์ฒญ์์ ํํธ๊ฐ ์ ์ฉํ์ง ํ์ธํ๋ ์๋ฏธ ํ๊ฐ๋ฅผ ๋ถ๋ฆฌํ๋ค. ์ด ๋ฌธ์๋ ๊ฒฐ๊ณผ ์์ง ์ ์ ์์ฑํ๋ ๊ตฌํ ์ค๋ช ์ด๋ฉฐ, ์ฑ๊ณต ์์น๋ CI ์๋ฃ๋ฅผ ๋ฏธ๋ฆฌ ์ฃผ์ฅํ์ง ์๋๋ค.
๋ฌด์์ ์คํํ๋๊ฐ
๊ธฐ์กด72๊ฐ ๊ณต๊ฐ ๋ถ๋ชจ์ ์์ฒญ๊ณผ ํ๋ณด ์ค๋ช ๋ง ์ถ์ถํ๋ค. ํ๋ณด๊ฐ ์๋3๊ฐ์ธ ๋ถ๋ชจ๋ง ์ ํํ๊ณ , ํ ์คํธ์ ์ ๊ทํ ํน์ง์ด ๊ฐ์ ํฌ์์ ์ฒซ ์๋ฌธ์ ์ ์งํ๋ค. ์๋ ๋ถ๋ชจยทํ๋ณด ID์ ์ ํ/์ ์ธ ์ด์ ๋ ์ฐ๊ฒฐ ์๋ฃ๋ก ๋ณด์กดํ๋ค. IDยท์ ๋ตยทํ๋ณด ์์ค๋ ์์ ํน์ง์ ๋ฃ์ง ์๋๋ค. ์๋ก ๋ค๋ฅธ ํน์ง์ด2๊ฐ ์ด์์ธ์ง๋ ์ค๋น ๋จ๊ณ์์ ํ์ธํ๋ค.
๋ชจ๋ ์
๋ ฅ์ ์ ํํ compact JSON bytes๋ฅผ base64๋ก ์ ์ฅํ๋ค. ๋ณด๊ธฐ ์ข๊ฒ JSON์ ๋ค์ ์ ์ฅํด๋ ์ค์ ์ ์ก bytes๊ฐ ๋ณํ์ง ์๊ฒ ํ๊ธฐ ์ํด์๋ค. ์คํํ ๋ LF ํ ๊ฐ๋ฅผ ๋ถ์ด๋ฉฐ LF ํฌํจ12KiB ์ ํ์ ์ ์ฉํ๋ค. ์๋ฌธ wire SHA, ์
๋ ฅ digest, ์ ๊ทํ ํน์ง SHA๋ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ด๋ค. ์ ๊ทํ๊ฐ ๋ฌธ์ฅ ๋ถํธ๋ฅผ ์ ๊ฑฐํ๋ฏ๋ก ํน์ง SHA๋ ์๋ฌธ ๋ฌธ๋ฒ์ ๋ณด๋ narrow_rule์ ์์ ํ ์บ์ ํค๊ฐ ์๋๋ค.
์ค์ child๋ riido-shortclaim --stream์ด๋ค. fixed_order, bm25, lexical_ordered, narrow_rule ๋ค ๊ฐ์ง Go ๊ธฐ์ค์ ์ ๊ฐ ์์ฒญ์ ์ค๋นยท๊ฒ์ฆยท์์ยทdigestยท์ถ๋ ฅ์ ๋ค์ ๊ณ์ฐํ๋ค. ๊ธฐ๋ ์๋ต์ ์ค๋น ๋จ๊ณ์์ ๊ฐ์ ๊ณต๊ฐ ๊ตฌํ์ผ๋ก ๋ง๋ ํ๋กํ ์ฝ ๋น๊ต๊ฐ์ด๋ฉฐ ๋
๋ฆฝ์ ์ธ ์ ๋ต ๋ผ๋ฒจ์ด ์๋๋ค. ํ๋ณด๋ ํญ์ ๋ชจ๋ ๋ณด์กดํ๊ณ ์๋ต ์ํ๋ unverified_heuristic์ด๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ ์ ์ ๊ณ ์ ํ๋ ๊ฒ
| ํญ๋ชฉ | ์คํ ์ ์ฑ |
|---|---|
| ํ๋ ฌ | ๊ธฐ์ค์ 4 ร same/distinct2 ร ์ child3 = 24ํ |
| ํ์ ์์ฒญ | ์ฒซ ์์ฒญ1 + ์์ด20 + timed1024 = 1045 |
| ํ ์์ ์์น | ์ฒซ ์์ฒญยท์์ดยทtimed ๊ฐ ๋จ๊ณ์์ ์์น0๋ถํฐ ์์ |
| ์คํ ์์ | ๋ฐ๋ณต1ยท3์ ๊ธฐ์ค์ ์ ๋ฐฉํฅ, ๋ฐ๋ณต2๋ ์ญ๋ฐฉํฅ; workload ์์๋ ๊ต๋ |
| ์ ํ | child15์ด, replay60์ด, ์ ๋ฆฌ ๊ณตํต ์์ฐ1000ms; ์คํจ ์ฒซ ํ์์ ํ์ ํ ์ค๋จ |
| ๋์ ์ฒ๋ฆฌ | child1, ์งํ ์ค ์์ฒญ1, ์๋ ์ฌ์๋0 |
| Go ์ค์ | Go1.27.1, CGO0, trimpath, GOMAXPROCS1, heap soft limit256MiB |
| ์ ๊ท ๊ณต๊ฐ ์๋ฃ | corpusยทplanยทpreparationยทrecipeยทresults JSON ํฉ๊ณ8MiB ์ด๋ด |
์ด25,080ํ์ timed24,576ํ๋ ๋ฐ๋ณต ๊ด์ธก ํ์๋ค. ์๋ก์ด ํ์ต ์์ฒญ์ด๋2400๊ฐ ์ต์ข ํ๊ฐ๋ฅผ ํ๋ณดํ๋ค๋ ๋ป์ด ์๋๋ค. ์ child๋ OS ์บ์๊ฐ ๋น์์ง cold๋ฅผ ๋ปํ์ง ์์ผ๋ฉฐ ์บ์๋ฅผ ๊ฐ์ ๋ก ๋น์ฐ์ง ์๋๋ค. CPU P ์์ heap soft limit์ OS ์ค๋ ๋ยท์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ํ์ด ์๋๋ค.
๋ฐฐํฌํ driver์ ์ค์ ์์ค22๊ฐ๋ ์ปดํ์ผ์ ํฌํจ๋ bytes์ ์ ์ฅ์ bytes๋ฅผ ๋์กฐํ๋ค. ๋ณ๋ child ์์ค๋ฅผ ํฌํจํ runtime ํ์ผ24๊ฐ, module ํ์ผ2๊ฐ, ์์ง ์ ๊ฒ์ฌ5๊ฐ๋ฅผ ํฉ์น31๊ฐ๋ฅผ ๊ณํ์ ํด์๋ก ๊ณ ์ ํ๋ค. ๋ชฉ๋ก ๋ฐ ๊ตฌํ ํ์ผ๋ ๊ฑฐ๋ถํ๋ค. ๋น๋ recipe์ ์ค์ ๋ ๋ฐ์ด๋๋ฆฌ์ SHAยทbuildinfo, ์๋ณธ ์ ๋ ฅ SHA, ํ๋ซํผ๋ณ ํ๋กํ ์ฝ ๊ธฐ๋ bytes,24ํ ์์๋ฅผ ๊ณต์ ์คํ ์ ์ ๋ด์ธํ๋ค.
preparation_source_commit์ CLI์์40์๋ฆฌ ํ์๋ง ํ์ธํ๋ค. ๊ทธ commit์ Git blob31๊ฐ๊ฐ ๊ณํ์ ์์ค ํด์์ ๊ฐ์์ง๋ ๋ณ๋ ๋ด์ธ ์์
์์ ํ์ธํ๊ณ ๊ธฐ๋กํ๋ค. CLI๊ฐ Git ์ด๋ ฅ์ ๊ฒ์ฆํ๋ค๊ณ ํํํ์ง ์๋๋ค. ๊ณํ SHA๋ฅผ ๋ฐ๋ก ๋ฐ์ ๊ฒ์ฆํ๋ฉฐ, ํ ๋ฒ ์ฝ์ด ํด์๋ฅผ ํ์ธํ child bytes๋ฅผ ๋น๊ณต๊ฐ ์์น์ ๋ณต์ฌํด ์คํํ๋ค. ์ค์ ๋ฐ์ด๋๋ฆฌ์ ๋น๊ณต๊ฐ ๊ฒฝ๋ก๋ Git์ ์ฌ๋ฆฌ์ง ์๋๋ค.
CPUยท๋ฉ๋ชจ๋ฆฌยท์๊ฐ์ ์ฝ๋ ๋ฒ
Child ์ข ๋ฃ ๋ค user/system CPU์ lifetime peak RSS๋ฅผ ๊ธฐ๋กํ๋ค. Controller๋ ์๊ธฐ CPU์ replay ๊ตฌ๊ฐ ์ฆ๊ฐ์, ์ค๋น๋ฅผ ํฌํจํ ์ ์ฒด lifetime peak RSS๋ฅผ ๋ณ๋๋ก ๊ธฐ๋กํ๋ค. Child๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ง ์๋๋ค. Go์ ProcessState๋ OS๋ณ ์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ, CPU API๋ ์ข ๋ฃ๋ ํ๋ก์ธ์ค์ ๊ทธ ์์์ ์๊ฐ์ ์ค๋ช ํ๋ค. ์ด๋ฒ ๊ด์ธก ๋ฒ์๋ฅผ ์์์ ์์ ํ๋ก์ธ์ค ํธ๋ฆฌ๋ก ์ผ๋ฐํํ์ง ์๋๋ค.
Linux RSS ์๋จ์๋ getrusage์ KiB์ด๋ค. Darwin์ XNU ์์ ๊ตฌํ์์ resident_size_max๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ๋ ์ ์๋ bytes๋ค. ์๋จ์์ ๋ณํ bytes๋ฅผ ํจ๊ป ๋จ๊ธด๋ค. ๋ ํ๋ก์ธ์ค์ peak๋ฅผ ๋ํด์ ๋์์ ์ฌ์ฉํ ์ด ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅด์ง ์๋๋ค. RSS๋ Go heapยทGPU ๋ฉ๋ชจ๋ฆฌยทํ์ฌ warm ๋ฉ๋ชจ๋ฆฌ๋ ์๋๋ค.
Timed RTT๋ ์ฐ๊ธฐ ์์๋ถํฐ ์์ ํ ์๋ต ์ค ์์ ๊น์ง๋ค. Controller ๊ฒ์ฆ ์๊ฐ์ ์์ ๋ถํฐ ๊ฒ์ฆ ์๋ฃ๊น์ง๋ก, ์ ๋ฌ ๋๊ธฐ์ ์ค์ ๊ฒ์ฆ ์์ ์ ๋ณ๋๋ก ๊ธฐ๋กํ๋ค. ์์ startupยทchild ์ฒ๋ฆฌยทpipe ์๊ฐ์ ๊ด์ธกํ์ง ๋ชปํ๋ค. ๊ฐ ํ์ ๊ธฐ๋ stream ํด์ ์ค๋น ์๊ฐ์ child ์์ ์ ์ด์ง๋ง ์ ์ฒด replay CPUยท์๊ฐ ์์ ํฌํจํ๋ค. ๊ฒน์น๋ ์๊ฐ์ ๋นผ๊ฑฐ๋ ๋ํด ์จ์ ๋น์ฉ์ ์ถ์ ํ์ง ์๋๋ค.
์๋ฃ๋ ํ์ CPU/request ๋ถ๋ชจ๋ ์ฒซ ์์ฒญ๊ณผ ์์ด์ ํฌํจํ1045๋ค. Timed ์ง์ฐ ๋ถ๋ชจ๋1024๋ค. ์คํจํ ํ์ ์ค์ ์๋ยท์ ์กยท์์ ยท๊ฒ์ฆยท์คํจยท๋ฏธ์๋ฃยท๋ฏธ์๋ ์์ ๊ฐ๋ฅํ CPU/RSS๋ฅผ ๋ณด์กดํ๋ฉฐ,1045๊ฐ ์ฑ๊ณต ํ๊ท ์ผ๋ก ์ฑ์ฐ์ง ์๋๋ค. ํ์ ๋ฏธ์์ ํ๋ ์ญ์ ํ์ง ์๋๋ค. ํ๋ก์ธ์ค ์ข ๋ฃ ํ์ธ, stdout/stderr reader, ์ทจ์ watcher๊ฐ ํ ๋ฒ์ ๊ณตํต1000ms ์ ๋ฆฌ ์์ฐ์ ๊ณต์ ํ๋ค. ์ ๋ฆฌ๊ฐ ๋ฆ๊ฑฐ๋60์ด ๊ฒฝ๊ณ๊ฐ ๋์ด๊ฐ๋ฉด ์๋ฐ์ ๋จ๊ธฐ๊ณ ์ฌ์ธก์ ์ผ๋ก ๋ฎ์ง ์๋๋ค.
์ค๋น์ ๊ณต์ ์คํ์ ๊ตฌ๋ถ
--stage prepare๋ ์ ๋๋ ํฐ๋ฆฌ์ corpus.json, preparation.json, build-recipe.json์ ๋ง๋ ๋ค. Child ์์ฒญยท๋ชจ๋ธ ํธ์ถยทfitยท๋ณดํธ๋ ์ต์ข
์๋ฃ ์ฝ๊ธฐ๋0์ด๋ค. ๋จ์ ๊ฒ์ฌ์์ ์ฐ๋ ์์ ๊ฐ์ง ํ๋ก์ธ์คยท์๋ชป๋ ์๋ตยท์๊ฐ ์ด๊ณผ ์ฌ๋ก์ packaged build ๋์กฐ๋ ์์ง๊ธฐ ๊ฒ์ฆ์ด๋ฉฐ ๊ณต์ ์ฑ๋ฅ ํ๋ ฌ์ด ์๋๋ค. ์๋ณธ ์์ค ํจ์์ ์๋ฏธ ์ ๋ต์ ์๋ก ๊ฐ์ฌํ์ง ์๋๋ค.
๊ณต์ --stage replay๋ ๋ด์ธ๋ plan SHAยทcorpusยท์ค์ packaged child๊ฐ ํ์ํ๋ค. ๊ธฐ์กด ์ถ๋ ฅ์ ๋ฎ์ด์ฐ์ง ์์ผ๋ฉฐ, ์ฒซ child ์ ์ ์ results ํ์ผ์ ํ๋ณดํ๋ค. ํ๋กํ ์ฝ ๋ถ์ผ์นยทstderrยท์๊ฐ ์ด๊ณผยท์ข
๋ฃ ์คํจ๋ ๊ณ ์ ์ค๋ฅ ์ด๋ฆ์ผ๋ก ๊ธฐ๋กํ๊ณ ๋น๊ณต๊ฐ ์ธ์๋ stderr ์๋ฌธ์ ๊ฒ์ํ์ง ์๋๋ค. ๊ฒฐ๊ณผ ์์ง ํ์๋ง ์ค์ ๊ด์ธกยทCI ๋งํฌ๋ฅผ ๋ณ๋ ๊ฒฐ๊ณผ ๋ฌธ์์ ๋ถ์ธ๋ค.
์บ์ยทSIMDยทlockยทSoAยทopen-loop ๋์์ฑยทecho ๋์กฐ๋ ์ดํ ๋ ๋ฆฝ ๊ณํ์ผ๋ก ๋จ๊ธด๋ค. ์๋ฏธ ํจ์ฉ๊ณผ ๋๋ฉ์ธ๋ณ ์ต์2400๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ณดํธ๋ ์ต์ข ์์ฒญ ๋ชฉํ๋ ๋ณ๋๋ค. ์ด๋ฒ ๋จ๊ณ์ ํ์ตยท์ ๋ชจ๋ธยท๊ฐ์ค์นยท์ด์ ์๋ ํ์ฑํยทLLM ์ ๊ฐ ์ฃผ์ฅ์0์ด๋ค.