.NET JIT๊ฐ ๊ณ์ธตํ๋์ง ์์ ์ด์ ๋ ๋ฌด์์ ๋๊น?
JIT์๋ ๋น ๋ฅธ ์์ ์๊ฐ๊ณผ ๋์ ์ ์ ์ํ ์ฒ๋ฆฌ๋์ด๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ค๊ณ ๋ชฉํ๊ฐ ์์ต๋๋ค.
์ฒ์์๋ ์ด๋ฌํ ๋ชฉํ๊ฐ ์๋ก ๋ง์ง ์๊ฒ ๋ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ 2๊ณ์ธต JIT ์ค๊ณ์์๋ ๋ ๋ค ๋ฌ์ฑํ ์ ์์ต๋๋ค.
Main
๋ฐฉ๋ฒ์ ๊ฑฐ์ ํญ์ ์ฐจ๊ฐ๊ณ ์งํ
ํ๋ ๊ฒ์ ์๊ฐ ๋ญ๋น์
๋๋ค.์ด ์ํคํ ์ฒ์ ๋๋ฌํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ค์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
JIT ํ์์ ์ด ์์ด๋์ด๋ฅผ ์ถ๊ตฌํ๊ณ ์์ต๋๊น?
.NET์ ์์ต ๋์ ์๋ฒ์์ ์คํ๋ฉ๋๋ค. ์ต์ ํ๋์ง ์์ ์ฝ๋ ์์ฑ์ผ๋ก ์ธํด ๋ง์ ์ฑ๋ฅ์ด ํ ์ด๋ธ์ ๋จ์ ์๊ณ ์๋ฐฑ๋ง ๋์ ์๋ฒ๊ฐ ๊ณ ๊ฐ์ ์ํด ๋ญ๋น๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
๋ฒ์ฃผ:์ฒ๋ฆฌ๋
ํ
๋ง: ํฐ ๋ฒ ํ
๊ธฐ์ ์์ค:์ ๋ฌธ๊ฐ
๋น์ฉ:์ด๋ํ
@GSPP ๊ณ์ธตํ๋ ๊ณํ ๋ํ์์ ๋์์๋ ์ฃผ์ ์ ๋๋ค. ๋ด ์ธ์์ ๊ทธ๊ฒ์ด ์ด๋ค ์์์ ์ ๊ณตํ๋ค๋ฉด _if_๊ฐ ์๋๋ผ _์ธ์ _์ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ์์ง ์กด์ฌํ์ง ์๋ _์ด์ _์ ๊ดํด์๋, ์ญ์ฌ์ ์ผ๋ก ์ธ์ง๋ ์ ์ฌ์ ์ด๋์ด ๋ค์ค codegen ๋ชจ๋์ ์ฆ๊ฐ๋ ๋ณต์ก์ฑ๊ณผ ์ํ์ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ ๊ฐ๋ฐ ์์์ ์ ๋นํํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ฌธ๊ฐ๋ค์ด ์ด์ ๋ํด ์ด์ผ๊ธฐํ๋๋ก ํด์ผ ํ๋ฏ๋ก ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
/cc @dotnet/jit-contrib @russellhadley
์ด์จ๋ ์ด๊ฒ์ด crossgen/ngen, Ready to Run ๋ฐ corert์ ์ธ๊ณ์์ ์ฌ์ ํ ๊ด๋ จ์ฑ์ด ์๋์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
์ด๋ค ์ค ์ด๋ ๊ฒ๋ ํ์ฌ ๋๋ถ๋ถ์ ์น ์ฑ์ ์ค์ํ ๋์ ์์ ์ ์ธ ์ํ ์ฒ๋ฆฌ๋์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ง์ฝ ๊ทธ๋ค์ด ๊ทธ๋ ๊ฒ ํ๋ค๋ฉด ๋๋ ๊ฐ์ธ์ ์ผ๋ก ์์ ์๊ฐ์ ์ ๊ฒฝ ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ๋ง์กฑํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง .NET์ฉ ๋ชจ๋ ์ฝ๋ ์์ฑ๊ธฐ๋ ๋ ๋ชฉํ ์ฌ์ด์์ ๋ถ๊ฐ๋ฅํ ๊ท ํ์ ์ด๋ฃจ๋ ค๊ณ ์๋ํ์ง๋ง ๋ ๋ค ์ ์ํ๋์ง ์์์ต๋๋ค. ์ต์ ํ๋ฅผ 11๋ก ์ค์ ํ ์ ์๋๋ก ๊ท ํ ์กฐ์ ์ ์ ๊ฑฐํฉ์๋ค.
๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง .NET์ฉ ๋ชจ๋ ์ฝ๋ ์์ฑ๊ธฐ๋ ๋ ๋ชฉํ ์ฌ์ด์์ ๋ถ๊ฐ๋ฅํ ๊ท ํ์ ์ด๋ฃจ๋ ค๊ณ ์๋ํ์ง๋ง ๋ ๋ค ์ ์ํ๋์ง ์์์ต๋๋ค. ์ต์ ํ๋ฅผ 11๋ก ์ค์ ํ ์ ์๋๋ก ๊ท ํ ์กฐ์ ์ ์ ๊ฑฐํฉ์๋ค.
๋์ํ์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํต์ญ์ฌ ๊ฐ์ ๊ฒ์ ํ์ํ์ง ์์ต๋๋ค. ๋ ๋์ RyuJIT ๋๋ LLILC๊ฐ ๋ ์ ์๋ ์ข์ ํฌ๋ก์ค์ ์ปดํ์ผ๋ฌ์ผ ๋ฟ์ ๋๋ค.
๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ฐํ์์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋์ ์ธ์ด์ ์๋ฒ ์ปจํ ์ด๋๊ฐ ํฌํจ๋ฉ๋๋ค.
๋์ ์ผ๋ก ์์ฑ๋ ์ฝ๋๊ฐ ํ๋์ ๋๊ธฐ์ธ ๊ฒ์ ์ฌ์ค์ด์ง๋ง ์ ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฐํ์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์ ๋ณด์ ์ก์ธ์คํ ์ ์๋ค๋ ๊ฒ๋ ์ฌ์ค์ ๋๋ค. ๋ฟ๋ง ์๋๋ผ(์: ํ๋กํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก) ์ถ์ธกํ๋ ๊ฒฝ์ฐ์๋ ์ ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ฌ ๋๋ ์ธ๋ถ ์ปจํ ์คํธ ์ข ์ ๋์์ด ์๋ ๊ฒฝ์ฐ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค.
์น ์ฑ์ ngen ์คํ์ผ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์์ผ ํฉ๋๋ค. ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์ ๋ง์ง ์์ต๋๋ค. ํฐ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค(๊ฑฐ์ ๋ชจ๋ ์ฝ๋๊ฐ ๋์ ์ผ๋ก ์ฃฝ๊ฑฐ๋ ์ฐจ๊ฐ๋๋ผ๋).
๋ํ ์น ์ฑ์ ๋๋ฒ๊น ํ๊ณ ํ ์คํธํ ๋ ์ค์ ์ฑ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ngen์ ์์กดํ ์ ์์ต๋๋ค.
๋ํ, ๋๋ ์บ๋กค์ ๋์ ์ ๋ณด ์ฌ์ฉ์ 2๋ฒ์งธ ํฌ์ธํธ์ ๋๋ค. ํด์ ๊ณ์ธต์ ์ฝ๋(๋ถ๊ธฐ, ๋ฃจํ ํธ๋ฆฝ ํ์, ๋์ ๋์คํจ์น ๋์)๋ฅผ ํ๋กํ์ผ๋งํ ์ ์์ต๋๋ค. ์๋ฒฝํ ์ผ์น์ ๋๋ค! ๋จผ์ ํ๋กํ์ ์์งํ ๋ค์ ์ต์ ํํฉ๋๋ค.
๊ณ์ธตํ๋ ๋ชจ๋ ์๋๋ฆฌ์ค์ ๋ชจ๋ ๊ฒ์ ์์ํ ํด๊ฒฐํฉ๋๋ค. ๋๋ต์ ์ผ๋ก ๋งํ์๋ฉด :) ์ด๊ฒ์ ์ค์ ๋ก JIT์ ์ฝ์์ ๋๋ฌํ ์ ์์ต๋๋ค.
ํ์ฌ์ RyuJIT ๊ตฌํ์ Tier 1์ ์ถฉ๋ถํฉ๋๋ค... ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฌ์ค ์ดํ์ ์คํํ ์ ์๋ ํซ ๊ฒฝ๋ก์ ๋ํด Tier 2 ๊ทนํ ์ต์ ํ JIT๋ฅผ ๊ฐ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น? ๋ณธ์ง์ ์ผ๋ก ๋ฌด์ธ๊ฐ๊ฐ ๋จ๊ฒ๋ค๋ ๊ฒ์ ์๊ธฐ์ ์ถฉ๋ถํ ๋ฐํ์ ์ ๋ณด๊ฐ ๊ฐ์ง๋๊ฑฐ๋ ์์ ๋ ๋๋ ์ฒ์๋ถํฐ ์ด๋ฅผ ๋์ ์ฌ์ฉํ๋๋ก ์์ฒญํ ๋.
RyuJIT๋ ํฐ์ด 1์ ์ถฉ๋ถํ ์ ํฉํฉ๋๋ค. ๋ฌธ์ ๋ ์ธํฐํ๋ฆฌํฐ๊ฐ (๋ด ์ถ์ ์ผ๋ก๋) _ํจ์ฌ_ ๋น ๋ฅธ ์์ ์๊ฐ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ ๋ฒ์งธ ๋ฌธ์ ๋ Tier 2๋ก ์งํํ๊ธฐ ์ํด Tier 1 ์ฝ๋๋ฅผ ์คํํ๋ ๋ก์ปฌ ์ํ๊ฐ ์๋ก์ด Tier 2 ์ฝ๋(OSR)๋ก ์ด์ ๋ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. RyuJIT ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค. ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋์์ ๋ ๋์ ์์ ๋๊ธฐ ์๊ฐ์ ์ ๊ณตํ๋ ๋ ์ ๋ ดํ ๊ฒฝ๋ก๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ ์ ๋ ดํ ๋ณํ์ ์คํ ์ค์ธ ์ฝ๋๋ฅผ Tier 2 ์ฝ๋๋ก ๊ต์ฒดํ์ง ์๋ ๊ฒ์ ๋๋ค. ๋์ Tier 1 ์ฝ๋๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ฐํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ธ์. ์ฝ๋๊ฐ ์ฅ๊ธฐ ์คํ ํซ ๋ฃจํ์ ๋ค์ด๊ฐ๋ฉด ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ์์ผ๋ก Tier 2 ์ฑ๋ฅ์ ๋๋ฌํ์ง ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋๋ฌด ๋์์ง ์๊ณ v1 ์ ๋ต์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฉ์๋๋ฅผ ํซ์ผ๋ก ํ์ํ๋ ์์ฑ๊ณผ ๊ฐ์ ์ํ ์์ด๋์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค(์ด๋ ํ์ฌ JIT ์ ๋ต์์๋ ์ด์จ๋ ์กด์ฌํด์ผ ํจ).
@GSPP ๊ทธ๊ฒ์ ์ฌ์ค์ด์ง๋ง ์ด๊ฒ์ด ๋ค์ ์คํ์์ ๊ทธ๊ฒ์ ์์ง ๋ชปํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ต๋๋ค. Jitted ์ฝ๋ ๋ฐ ๊ณ์ธก์ด ์ง์๋๋ฉด ๋ ๋ฒ์งธ ์คํ์ ์ฌ์ ํ โโTier 2 ์ฝ๋(์ผ๋ถ ์์ ์๊ฐ์ ํฌ์ํ์ฌ)๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
ํต์ญ์ฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ JIT์ ๋นํด ์ ๋ ดํด ๋ณด์ ๋๋ค.
์๋ก์ด ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ฑํ๋ ๋์ ์ต์ ํ๋ฅผ ๋นํ์ฑํํ ์ํ์์ RyuJIT๋ฅผ ์คํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๊น? ์์ ์๊ฐ์ ์ถฉ๋ถํ ๊ฐ์ ํ ์ ์์ต๋๊น?
๊ณ ํ์ง ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ VC๊ฐ ๋ ์ ์์ต๋๋ค.
Visual C++ ๋ฐฑ์๋์ธ C2๋ฅผ ๋ง์ํ์๋ ๊ฑด๊ฐ์? ๊ทธ๊ฒ์ ํฌ๋ก์ค ํ๋ซํผ์ด ์๋๋ฉฐ ์คํ ์์ค๊ฐ ์๋๋๋ค. ๋๋ ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ์์ ํ๋ ๊ฒ์ด ์กฐ๋ง๊ฐ ์ผ์ด๋ ๊ฒ์ด๋ผ๊ณ ์์ฌํฉ๋๋ค.
์ต์ ํ๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ OSR ๋ฌธ์ ๋ ์ฌ์ ํ ๋จ์ ์์ต๋๋ค. ๋ฐํ์์ด ์์ ํ ์ง์ ์์ ๋ฐํ์ ์ IL ์ํคํ ์ฒ ์ํ(๋ก์ปฌ ๋ฐ ์คํ)๋ฅผ ํ์ํ๋๋ก ํ์ฉํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๊ณ์ธต 2 jitted ์ฝ๋์ ๋ณต์ฌํ๊ณ ๊ธฐ๋ฅ ์ค๊ฐ์ ๊ณ์ธต 2 ์คํ์ ์ฌ๊ฐํ ์ ์๋๋ก ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. JVM์ด ๊ทธ๊ฒ์ ์ํํ์ง๋ง ๊ทธ๊ฒ์ ๊ตฌํํ๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ๋์ง ๋๊ฐ ์๋๊น?
์, C2์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์์ต๋๋ค. Desktop JIT ์ค ์ ์ด๋ ํ๋๋ C2 ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค. CoreCLR์์๋ ์๋ํ์ง ์์ง๋ง ๋ฐ์คํฌํ์์๋ ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ํ์ ํฉ๋๋ค. LLVM์ ํ๋ฅญํ ์ ํ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ ์ฌ๋ฌ ์ธ์ด๊ฐ LLVM์ด GC ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ฐํ์๊ณผ ํจ๊ป ์๋ํ๋๋ก ํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
LLVM์ ํ๋ฅญํ ์ ํ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ ์ฌ๋ฌ ์ธ์ด๊ฐ LLVM์ด GC ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ๋ฐํ์๊ณผ ํจ๊ป ์๋ํ๋๋ก ํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ์ฃผ์ ์ ๋ํ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ฌ: Apple์ ์ต๊ทผ JavaScript JIT์ ์ต์ข ๊ณ์ธต์ LLVM( https://webkit.org/blog/5852/introducing-the-b3-jit-compiler/ )์์ ๋ฉ๋ฆฌ ์ฎ๊ฒผ์ต๋๋ค. ๋๋ฆฐ ์ปดํ์ผ ์๊ฐ๊ณผ LLVM์ ์์ค ์ธ์ด ์ง์ ๋ถ์กฑ๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
RyuJIT๋ณด๋ค 10๋ฐฐ ๋๋ฆฐ 2๊ณ์ธต์์๋ ์์ ํ ํ์ฉ๋ฉ๋๋ค.
๋๋ ์์ค ์ธ์ด์ ๋ํ ์ง์ ๋ถ์กฑ(์ง์ ํ ๊ด์ฌ์ฌ)์ด LLVM ์ํคํ ์ฒ์ ๋ด์ฌ๋์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฌ๋ฌ ํ์ด LLVM์ ์์ค ์ธ์ด ์ง์์ ๋ ์ฝ๊ฒ ํ์ฉํ ์ ์๋ ์ํ๋ก ์ฎ๊ธฐ๋๋ผ ๋ฐ์๋ค๊ณ ์๊ฐํฉ๋๋ค. _All_ C๊ฐ ์๋ ๊ณ ๊ธ ์ธ์ด๋ LLVM์์ ์ปดํ์ผํ ๋ ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
WebKIT FTL/B3 ํ๋ก์ ํธ๋ .NET๋ณด๋ค ์ฑ๊ณตํ๊ธฐ ์ด๋ ค์ด ์์น์ ์์ต๋๋ค. _์ ์ฒด์ ์ผ๋ก_ ์๋ฐฑ ๋ฐ๋ฆฌ์ด์ ์๊ฐ์ ์๋นํ ๋ค์ ์ข ๋ฃ๋๋ ์ฝ๋๋ฅผ ์คํํ ๋ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๊ฒ์ด ์น ํ์ด์ง๋ฅผ ๊ตฌ๋ํ๋ JavaScript ์ํฌ๋ก๋์ ํน์ฑ์ ๋๋ค. .NET์ ๊ทธ ์๋ฆฌ์ ์์ต๋๋ค.
@GSPP ์๋ง๋ LLILC ์ ๋ํด ์๊ณ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ดํด๋ณด์ญ์์ค.
์ฐ๋ฆฌ๋ CLR ๊ฐ๋ ์ ๋ํ LLVM ์ง์์ ๋ํด ํ๋์ ์์ ํด ์์ผ๋ฉฐ EH ๋ฐ GC ๊ฐ์ ์ ํฌ์ํ์ต๋๋ค. ์์ง ๋ ๋ค ํ ์ผ์ด ๊ฝค ๋ง์ต๋๋ค. ๊ทธ ์ธ์๋ GC๊ฐ ์๋ ์ํ์์ ์ต์ ํ๊ฐ ์ ๋๋ก ์๋ํ๋์ง ์ ์ ์๋ ์์ ๋์ด ์์ต๋๋ค.
LLILC๊ฐ ๋ฉ์ถ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ ์ต๋๊น?
2016๋
4์ 18์ผ ์คํ 7์ 32๋ถ์ "Andy Ayers" [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@GSPP https://github.com/GSPP ์๋ง๋ LLILC์ ๋ํด ์๊ณ ์์ ๊ฒ์ ๋๋ค
https://github.com/dotnet/lllc. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ดํด๋ณด์ญ์์ค.์ฐ๋ฆฌ๋ CLR ๊ฐ๋ ์ ๋ํ LLVM ์ง์์ ๋ํด ํ๋์ ์์ ํด ์์ผ๋ฉฐ
EH ๋ฐ GC ๊ฐ์ ์ ํฌ์ํ์ต๋๋ค. ์์ง ํ ์ผ์ด ๊ฝค ๋ง๋ค
๋ ๋ค. ๊ทธ ์ธ์๋ ์ ์ ์๋ ์์ ๋์ด ์์ต๋๋ค.
GC๊ฐ ์๋ ์ํ์์ ์ ๋๋ก ์๋ํฉ๋๋ค.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/coreclr/issues/4331#issuecomment -211630483
@drbo - LLILC๋ ํ์ฌ ๋ฐฑ ๋ฒ๋์ ์์ต๋๋ค. MS ํ์ RyuJIT์์ ๋ ๋ง์ ๋์์ ๊ฐ์ ธ์ค๊ณ CoreCLR ๋๋ผ์ด๋ธ๋ฅผ ์ถ์ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์์ ํ๋ ๋ฐ ์ง์คํ๊ณ ์์ผ๋ฉฐ ์ด๋ ๊ฑฐ์ ๋ชจ๋ ์๊ฐ์ด ์์๋ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ (ํ์ฌ) LLILC๋ฅผ ์ผ๋ง๋ ๋ง์ด ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ๊ตํ์ ์ป์ ๊ฒ์๋ฌผ์ ์์ฑํ๋ ๊ฒ์ด ๋ด TODO ๋ชฉ๋ก(๋ง์ ์์ ์๊ฐ์)์ ์์ง๋ง ์์ง ๋๋ฌํ์ง ๋ชปํ์ต๋๋ค.
๊ณ์ธตํ์์ ์ด ์ฃผ์ ๋ ์๋
๋์ ๋ง์ ํ ๋ก ์ ๋ถ๋ฌ์ผ์ผ์ผฐ์ต๋๋ค. ๋ช ๊ฐ์ง ์๋ก์ด ์ํฌ๋ก๋์ ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ค๋น๊ฐ ๋ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์๋ก ์ถ๊ฐ๋ ์ ์ ๊ฐ์ํ ๋ ๊ณ์ธตํ ๋ฐฉ๋ฒ๊ณผ ์์น๋ฅผ ์๋กญ๊ฒ ์ดํด๋ณผ ๊ฒ์
๋๋ค.
@russellhadley ๊ธ์ ์ธ ์๊ฐ์ด ์์ผ์ จ๋์?
๋๋ ์น๊ฒฉ๋์ง ์์ ์คํ ์ฌ๋กฏ๊ณผ gcroots๊ฐ ์ต์ ํ๋ฅผ ๊นจ๊ณ ์งํ ์๊ฐ์ด ๋๋ ค์ง๋ค๋ ๊ฐ์ ํ์... ํ๋ก์ ํธ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
๋ํ SelectionDAG๋ก ์ง์ ์ด๋ํ์ฌ LLVM ๋ฐฑ์๋์ ์ผ๋ถ๋ฅผ ์ํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ณ ์์ต์ฑ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ต์ํ ์ผ๋ถ ์ฟ๋ณด๊ธฐ ๋ฐ ๋ณต์ฌ ์ ํ ... ์๋ฅผ ๋ค์ด ๋ ์ง์คํฐ์ ๋ํ gcroot ์น๊ฒฉ์ด LLILC์์ ์ง์๋๋ ๊ฒฝ์ฐ
ํ์ฌ ๋ณ๋ชฉ ํ์์ ํฌํจํ์ฌ LLILC์ ์ํ์ RyuJIT์ ๋ํด ์ด๋ป๊ฒ ๋์ฒํ๊ณ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ณธ๊ฒฉ์ ์ธ "์ฐ์ ์ฉ" ์ปดํ์ผ๋ฌ์ธ LLVM์ OSS์์ ์ฌ์ฉํ ์ ์๋ ์ต์ ํ๊ฐ ๋งค์ฐ ํ๋ถํด์ผ ํฉ๋๋ค. ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์์ ๋นํธ์ฝ๋ ํ์์ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ ์ง๋ ฌํ/์ญ์ง๋ ฌํ์ ๋ํ ๋ ผ์๊ฐ ์์์ต๋๋ค. ์ด๊ฒ์ด LLILC์ ์ ์ฉํ ๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
์ด์ ๋ํ ์๊ฐ์ด ๋ ์ด์ ์์์ต๋๊น? @russellhadley CoreCLR์ด ์ถ์๋์๊ณ RyuJIT๊ฐ (์ต์ํ) x86์ผ๋ก ์ด์๋์์ต๋๋ค. ๋ก๋๋งต์ ๋ค์ ๋จ๊ณ๋ ๋ฌด์์ ๋๊น?
์ด์ ๋ํ ์์ ์์์ dotnet/coreclr#10478์ ์ฐธ์กฐํ์ธ์.
๋ํ dotnet/coreclr#12193
@noahfalk , ๋ฐํ์์ ๊ด๋ฆฌ ์ฝ๋ ์์ฒด์์ ์ฆ์ Tier 2 ์ปดํ์ผ์ ๊ฐ์ ์คํํ๋๋ก ์ง์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ณ์ธตํ ์ปดํ์ผ์ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์์ ๋งค์ฐ ์ข์ ์์ด๋์ด์ด์ง๋ง ์์ ์๊ฐ์ ๊ด๋ จ์ด ์์ง๋ง ์ฒ๋ฆฌ๋ ๊ณผ ์์ ์ ์ธ ๋๊ธฐ ์๊ฐ์ด ํ์์ ์ธ ํ๋ก์ ํธ์์ ์์ ํ๊ณ ์์ต๋๋ค.
๋ด ๋จธ๋ฆฌ ๊ผญ๋๊ธฐ์์ ์ด๊ฒ์ ๋ค์ ์ค ํ๋ ์ผ ์ ์์ต๋๋ค.
<gcServer enabled="true" />
์ ๊ฐ์ ์ค์์นRuntimeHelpers.PrepareMethod
์ ๊ฐ์ด ํซ ๊ฒฝ๋ก์ ์ผ๋ถ์ธ ๋ชจ๋ ๋ฉ์๋์ ์ฝ๋์ ์ํด ํธ์ถ๋ฉ๋๋ค(์์ ์ ์ฝ๋๋ฅผ ์ฌ์ JITํ๋ ๋ฐ ์ด๊ฒ์ ์ฌ์ฉํฉ๋๋ค). ์ด๊ฒ์ ํซ ํจ์ค๊ฐ ๋ฌด์์ธ์ง ์์์ผ ํ๋ ๊ฐ๋ฐ์์๊ฒ ๋ ํฐ ์์ ๋๋ฅผ ์ ๊ณตํ๋ ์ด์ ์ด ์์ต๋๋ค. ์ด ๋ฉ์๋์ ์ถ๊ฐ ์ค๋ฒ๋ก๋๋ ๊ด์ฐฎ์ต๋๋ค.๋ฌผ๋ก , ์ด๋ก๋ถํฐ ํํ์ ๋ฐ๋ ํ๋ก์ ํธ๋ ๊ฑฐ์ ์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ํ๋ฅผ ๊ฑด๋๋ฐ๋ JIT ์ ๋ํด ๊ฑฑ์ ์ด ๋ฉ๋๋ค.
๋๋ ๋น์ ์ด ๋์์ธ ๋ฌธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๊ด๋ฆฌ ์ฝ๋ API์์ ์ก์ธ์คํ ์ ์๋ ์ ๋น๋ ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ฌ ์์ฒด ์์ ์ฝ๋๋ฅผ ์ํํฉ๋๋ค.
๋งค์ฐ ํฅ๋ฏธ๋กญ๊ฒ ๋ค๋ฆฝ๋๋ค ๐ ํ์ง๋ง ์ฌ๊ธฐ์์ ๋ด๊ฐ ๋ฌป๋ ๋ด์ฉ์ด ์ฌ๊ธฐ์ ํฌํจ๋๋์ง ํ์ ํ ์ ์์ต๋๋ค.
๋ํ ๊ด๋ จ ์ง๋ฌธ: ๋ ๋ฒ์งธ JIT ํจ์ค๋ ์ธ์ ์์๋ฉ๋๊น? ๋ฉ์๋๊ฐ n ๋ฒ์งธ๋ก ํธ์ถ๋ ์์ ์ ์ธ์ ์ ๋๊น? ๋ฉ์๋๊ฐ ์คํ๋์ด์ผ ํ๋ ์ค๋ ๋์์ JIT๊ฐ ๋ฐ์ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ๋ฉ์๋ ํธ์ถ ์ ์ ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค. ๋ณด๋ค ์ ๊ทน์ ์ธ ์ต์ ํ๋ฅผ ๊ตฌํํ๋ฉด ์ด ์ง์ฐ์ด ํ์ฌ JIT ์๊ฐ๋ณด๋ค ๊ธธ์ด์ ธ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
๋ฉ์๋๊ฐ ์ถฉ๋ถํ ํธ์ถ๋๊ฑฐ๋ ๋ฃจํ๊ฐ
์ถฉ๋ถํ ๋ฐ๋ณต์ ์คํํฉ๋๋ค(๋จ๊ณ๋ณ ๊ต์ฒด). ๊ทธ๊ฒ์ ์ผ์ด๋์ผ ํ๋ค
๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ๋น๋๊ธฐ์ ์ผ๋ก
2017๋
6์ 29์ผ ์คํ 7์ 1๋ถ, "Lucas Trzesniewski" ์๋ฆผ @github.com
์ผ๋ค:
@noahfalk https://github.com/noahfalk , ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
๋ฐํ์์ ๊ณ์ธต 2 ์ปดํ์ผ์ ๊ฐ์ ๋ก ์คํํ๋๋ก ์ง์ํฉ๋๋ค.
๊ด๋ฆฌ ์ฝ๋ ์์ฒด? ๊ณ์ธตํ ๋ ์ปดํ์ผ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋งค์ฐ ์ข์ ์์ด๋์ด์ ๋๋ค.
์ฌ์ฉ ์ฌ๋ก์ด์ง๋ง ์์ ์๊ฐ์ด ๊ด๋ จ์ด ์๋ ํ๋ก์ ํธ์์ ์์ ์ค์ ๋๋ค.
๊ทธ๋ฌ๋ ์ฒ๋ฆฌ๋ ๊ณผ ์์ ์ ์ธ ๋๊ธฐ ์๊ฐ์ด ํ์์ ์ ๋๋ค.๋ด ๋จธ๋ฆฌ ๊ผญ๋๊ธฐ์์ ์ด๊ฒ์ ๋ค์ ์ค ํ๋ ์ผ ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ ํ์ผ์ ์ ์ค์ , ๋ค์๊ณผ ๊ฐ์ ์ค์์น
enable="true" /> JIT๊ฐ ํญ์ ๊ณ์ธต 1์ ๊ฑด๋๋ฐ๋๋ก ํ๋ ค๋ฉด - ๋๋ RuntimeHelpers.PrepareMethod์ ๊ฐ์ ๊ฒ์ ๋๋ค.
ํซ ๊ฒฝ๋ก์ ์ผ๋ถ์ธ ๋ชจ๋ ๋ฉ์๋์์ ์ฝ๋์ ์ํด ํธ์ถ๋ฉ๋๋ค(์ฐ๋ฆฌ๋
์ด๊ฒ์ ์ฌ์ฉํ์ฌ ์์ ์ ์ฝ๋๋ฅผ ์ฌ์ JITํฉ๋๋ค). ์ด๊ฒ์ ์ฅ์ ์ด ์์ต๋๋ค
๋ฌด์์ ์์์ผ ํ๋ ๊ฐ๋ฐ์์๊ฒ ๋ ๋ง์ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํซํจ์ค๋ค. ์ด ๋ฉ์๋์ ์ถ๊ฐ ์ค๋ฒ๋ก๋๋ ๊ด์ฐฎ์ต๋๋ค.๋ฌผ๋ก ์ด๋ก๋ถํฐ ํํ์ ๋ณผ ์ ์๋ ํ๋ก์ ํธ๋ ๊ฑฐ์ ์์ง๋ง
JIT๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ํ๋ฅผ ๊ฑด๋๋ฐ๊ณ ์ด์ ๋ํด ๋งํ ์ ์์ต๋๋ค.
๋์ ์ฝ๋๋ฅผ ๋ง์ด ์ต์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.๋๋ ๋น์ ์ด ๋์์ธ ๋ฌธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๊ด๋ฆฌ ์ฝ๋ API์์ ์ก์ธ์คํ ์ ์๋ ์ ๋น๋ ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ฌ ์ํ
์์ฒด ์์ ์ฝ๋.์์ฃผ ํฅ๋ฏธ๋กญ๊ฒ ๋ค๋ฆฌ๋ค์ ๐ ํ์ง๋ง ๊ทธ๊ฒ์ด ๋ฌด์์ ๋ค๋ฃจ๊ณ ์๋์ง ํ์คํ์ง ์์ต๋๋ค
์ฌ๊ธฐ์ ๋ฌป์ต๋๋ค.
๋ํ ๊ด๋ จ ์ง๋ฌธ: ๋ ๋ฒ์งธ JIT ํจ์ค๋ ์ธ์ ์์๋ฉ๋๊น? ์ธ์
๋ฉ์๋๊ฐ n ๋ฒ์งธ๋ก ํธ์ถ๋ ์์ ์ ๋๊น? JIT๊ฐ ๋ฐ์ํฉ๋๊น?
๋ฉ์๋๊ฐ ์คํ๋์ด์ผ ํ๋ ์ค๋ ๋? ๊ทธ๋ ๋ค๋ฉด ์๊ฐํ
๋ฉ์๋ ํธ์ถ ์ ์ง์ฐ ๋ ๊ณต๊ฒฉ์ ์ผ๋ก ๊ตฌํํ๋ฉด
์ต์ ํ ์ด ์ง์ฐ์ ํ์ฌ JIT ์๊ฐ๋ณด๋ค ๊ธธ์ด์ง๋๋ค.
๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/coreclr/issues/4331#issuecomment-312130920 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AGGWB2WbZ2qVBjRIQWS86MStTSa1ODfoks5sJCzOgaJpZM4IHWs8
.
@ltrzesniewski - ํผ๋๋ฐฑ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ํ์คํ ๋๋ ๊ณ์ธตํ๋ ์ปดํ์ผ์ด ๋๋ค์์ ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ๋ฅผ ํฌ๋งํ์ง๋ง ํธ๋ ์ด๋์คํ๋ ๋ชจ๋ ํ๋ก์ ํธ์ ์ด์์ ์ด์ง ์์ ์ ์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ณ์ธตํ ์งํ ์ ๋นํ์ฑํํ๊ธฐ ์ํด ํ๊ฒฝ ๋ณ์๋ฅผ ๊ทธ๋๋ก ๋ ๊ฒ์ด๋ผ๊ณ ์ถ์ธกํด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ง๊ธ์ ๋ฐํ์ ๋์์ ๋ ๋์ ํ์ง(๊ทธ๋ฌ๋ ์์ฑ ์๋๋ ๋๋ฆผ) ์งํ ์ผ๋ก ์ ์งํฉ๋๋ค. ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ฑ์์ ์ํํ๊ธฐ์ ํฉ๋นํ ์ผ์ ๋๊น? ๋ค๋ฅธ ์ต์ ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ ๋ ํ๊ฒฝ ๋ณ์๊ฐ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๊ตฌ์ฑ ์ต์ ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ๊ด์ฌ์ ๊ฐ์ต๋๋ค.
๋ํ ๊ด๋ จ ์ง๋ฌธ: ๋ ๋ฒ์งธ JIT ํจ์ค๋ ์ธ์ ์์๋ฉ๋๊น?
์ด๊ฒ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ ์ ์ฑ
์
๋๋ค. ํ์ฌ ํ๋กํ ํ์
๊ตฌํ์ "๋ฉ์๋๊ฐ >= 30๋ฒ ํธ์ถ๋์์ต๋๊น?"๋ผ๋ ๋จ์ํ ์ ์ฑ
์ ์ฌ์ฉํฉ๋๋ค.
https://github.com/dotnet/coreclr/blob/master/src/vm/tieredcompilation.cpp#L89
https://github.com/dotnet/coreclr/blob/master/src/vm/tieredcompilation.cpp#L122
ํธ๋ฆฌํ๊ฒ๋ ์ด ๋งค์ฐ ๊ฐ๋จํ ์ ์ฑ ์ ๊ทธ๊ฒ์ด ๋จ์ง ์ถ์ธก์ผ์ง๋ผ๋ ๋ด ์ปดํจํฐ์์ ํ๋ฅญํ ์ฑ๋ฅ ํฅ์์ ์ ์ํฉ๋๋ค. ๋ ๋์ ์ ์ฑ ์ ๋ง๋ค๋ ค๋ฉด ์ค์ ์ฌ์ฉ์ ๋ํ ํผ๋๋ฐฑ์ ์ป์ด์ผ ํ๋ฉฐ ์ด๋ฌํ ํผ๋๋ฐฑ์ ์ป์ผ๋ ค๋ฉด ํต์ฌ ๋ฉ์ปค๋์ฆ์ด ๋ค์ํ ์๋๋ฆฌ์ค์์ ํฉ๋ฆฌ์ ์ผ๋ก ๊ฐ๋ ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ๋ด ๊ณํ์ ๋จผ์ ๊ฒฌ๊ณ ์ฑ/ํธํ์ฑ์ ๊ฐ์ ํ ๋ค์ ์กฐ์ ์ ์ฑ ์ ๋ํด ๋ ๋ง์ ํ์์ ์ํํ๋ ๊ฒ์ ๋๋ค.
@DemiMarie - ํ์ฌ ์ ์ฑ ์ ์ผ๋ถ๋ก ๋ฃจํ ๋ฐ๋ณต์ ์ถ์ ํ๋ ๊ฒ์ ์์ง๋ง ๋ฏธ๋์ ๋ํ ํฅ๋ฏธ๋ก์ด ์ ๋ง์ ๋๋ค.
ํ๋กํ์ผ๋ง, ์ถ์ธก ์ต์ ํ ๋ฐ
์ต์ ํ ํด์ ? JVM์ ์ด ๋ชจ๋ ์์
์ ์ํํฉ๋๋ค.
2017๋ 6์ 29์ผ ์คํ 8์ 58๋ถ์ "Noah Falk" [email protected] ์ด ์์ฑํ์ต๋๋ค.
@ltrzesniewski https://github.com/ltrzesniewski - ๊ฐ์ฌํฉ๋๋ค
ํผ๋๋ฐฑ! ํ์คํ ๋๋ ๊ณ์ธตํ๋ ์ปดํ์ผ์ด ๊ด๋ํ
๋๋ถ๋ถ์ ํ๋ก์ ํธ์ ์ ์ฉ๋์ง๋ง ์ ์ถฉ์์ ๋ชจ๋ ํ๋ก์ ํธ์ ์ด์์ ์ด์ง ์์ ์ ์์ต๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ทธ๋๋ก ๋ ๊ฒ์ด๋ผ๊ณ ์ถ์ธกํ์ต๋๋ค.
๊ณ์ธตํ ์งํ ์ ๋นํ์ฑํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฐํ์ ๋์์ ์ ์งํฉ๋๋ค.
์ด์ ๋ ๋์ ํ์ง(๊ทธ๋ฌ๋ ์์ฑ ์๋๋ ๋ ๋๋ฆผ)์ ์ ๋ฉด์ ๋ด์ธ์ฐ๊ณ ์์ต๋๋ค. ~์ด๋ค
์ฑ์ด ํ ์ ์๋ ์ ์ ํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์๊ฒ ์ต๋๊น?
๋ค๋ฅธ ์ต์ ๋ ๊ฐ๋ฅํฉ๋๋ค ๊ทธ๋ฅ ํ๊ฒฝ์ ๋๋ฆฝ๋๋ค
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๊ตฌ์ฑ ์ต์ ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.๋ํ ๊ด๋ จ ์ง๋ฌธ: ๋ ๋ฒ์งธ JIT ํจ์ค๋ ์ธ์ ์์๋ฉ๋๊น?
์ด๊ฒ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ์ ํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ ์ ์ฑ ์ ๋๋ค. ํ์ฌ
ํ๋กํ ํ์ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ํ ์ ์ฑ ์ ์ฌ์ฉํฉ๋๋ค.
>= 30๋ฒ ํธ์ถ"
https://github.com/dotnet/coreclr/blob/master/src/vm/
tieredcompilation.cpp#L89
https://github.com/dotnet/coreclr/blob/master/src/vm/
tieredcompilation.cpp#L122ํธ๋ฆฌํ๊ฒ๋ ์ด ๋งค์ฐ ๊ฐ๋จํ ์ ์ฑ ์
๋ด ๊ธฐ๊ณ, ๊ทธ๊ฒ์ด ๋จ์ง ์ถ์ธก์ผ์ง๋ผ๋. ๋ ๋์ ์ ์ฑ ์ ๋ง๋ค๊ธฐ ์ํด
์ฐ๋ฆฌ๋ ์ค์ ์ฌ์ฉ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์์ผ ํ๊ณ ๊ทธ ํผ๋๋ฐฑ์ ๋ฐ์์ผ ํฉ๋๋ค.
ํต์ฌ ์ญํ์ ๋ค์ํ ๋ถ์ผ์์ ํฉ๋ฆฌ์ ์ผ๋ก ๊ฒฌ๊ณ ํด์ผ ํฉ๋๋ค.
์๋๋ฆฌ์ค. ๊ทธ๋์ ๋ด ๊ณํ์ ๋จผ์ ๊ฒฌ๊ณ ์ฑ/ํธํ์ฑ์ ๊ฐ์ ํ ๋ค์
์กฐ์ ์ ์ฑ ์ ๋ํ ๋ ๋ง์ ํ์.@DemiMarie https://github.com/demimarie - ์ฐ๋ฆฌ๋ ์๋ฌด๊ฒ๋ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค
์ง๊ธ์ ์ ์ฑ ์ ์ผ๋ถ๋ก ๋ฃจํ ๋ฐ๋ณต์ ์ถ์ ํ์ง๋ง ํฅ๋ฏธ๋ก์ด
๋ฏธ๋์ ๋ํ ์ ๋ง.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dotnet/coreclr/issues/4331#issuecomment-312146470 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AGGWB5m2qCnOKJsaXFCFigI3J6Ql8PMQks5sJEgZgaJpZM4IHWs8
.
@noahfalk ํ๊ฒฝ ๋ณ์๋ ํ์คํ ์ ํ๋ฆฌ์ผ์ด์ ๋ณ๋ก ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ดํ ์ ์๋ ์๋ฃจ์ ์ด ์๋๋๋ค. ์๋ฒ/์๋น์ค ์ฑ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค(์ฑ๋ฅ์ ํฌ์์ํค๋ฉด์ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค). ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ๊ฐ๋ฐํ ๋ ์ฒ์๋ถํฐ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์๋ํ๊ณ ์ ์ฌ์ ์ธ ์ ๊ท ๊ณ ๊ฐ์ด ์ํํ ์์ธ์ ์ธ ๊ฒฝ๋ก๋ ๋ฒค์น๋งํฌ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ด ํ์ํ๋ค๋ ๊ฒ์ ์ง์ ๋ง์๋๋ฆด ์ ์์ต๋๋ค.
๋ฐ๋ฉด์ ์ผ๋ฐ์ ์ธ ํ๊ฒฝ์์ ๊ฐ๋ ์๊ฐ์ ํ ๋ฒ์ ๋ช ์ฃผ ๋จ์๋ก ์ธก์ ํ ์ ์์ผ๋ฏ๋ก 30์ด๊ฐ ๊ฑธ๋ฆฌ๋๋ผ๋ ์๊ดํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ ๊ฒฝ์ฐ๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ์ผ๋ฐ ์ค์์น(์ ๋ถ ๋๋ ์ ๋ฌด)๋ฅผ ์คํํ๋๋ก ๊ฐ์ ํ๊ฑฐ๋ ์ฌ์ง์ด ์ฌ์ฉ์๊ฐ ์ด์ ๋ํด ์ ๊ฒฝ์ฐ๋๋ก ํ๋ ๊ฒ(์: ๊ตฌ์ฑ ํ์ผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋จ)์ 10๋จ๊ณ ํํดํ๋ค๋ ๊ฒ์ ๋๋ค.
์คํดํ์ง ๋ง์ธ์. JIT ์์ค์์ ์ต์ ํ๋ฅผ ์ํ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ํ์ํ ๋งํผ ๋ง์ ์๊ฐ์ด ์์๋๋ ๊ณ ์ฑ๋ฅ์ ๊ธธ์ ์ด ์ ์๊ธฐ ๋๋ฌธ์ Tiered JIT๋ฅผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค. ๋๋ ์ค๋์ ์ JIT ์์ง๋์ด๋ค๊ณผ์ ๋น๊ณต์์ ์ธ ๋ํ์์ ๋ ์์ ์ ์ ์ํ๊ธฐ๋ ํ๊ณ , ๋น์ ์ ์ด๋ฏธ ๊ทธ๊ฒ์ ์ธ์งํ๊ณ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด(์์คํ ์ ์ฒด๊ฐ ์๋)๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ (์ ์ด๋ ์ฐ๋ฆฌ์๊ฒ๋) ์ด ํน์ ๊ธฐ๋ฅ์ ๋ํ ์ค์ํ ํ์ง ์งํ์ ๋๋ค.
ํธ์ง: ์ผ๋ถ ์คํ์ผ ๋ฌธ์ .
@redknightlois - ํ์ ์กฐ์น์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
ํ๊ฒฝ ๋ณ์๋ ์์ฉ ํ๋ก๊ทธ๋จ๋ณ๋ก ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์ดํ ์ ์๋ ์๋ฃจ์ ์ด ์๋๋๋ค.
์ด ๋ถ๋ถ์์ ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค... ํ๊ฒฝ ๋ณ์์๋ ์์คํ ๋จ์๊ฐ ์๋ ํ๋ก์ธ์ค ๋จ์๊ฐ ์์ต๋๋ค. ์ ์ด๋ ์ ๊ฐ ์๊ณ ์๋ ํ๋ซํผ์์๋ ๊ทธ๋ ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋ ๋ด๊ฐ ์คํํ๋ ๋จ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ ์คํธ๋ฅผ ์ํด ๊ณ์ธตํ๋ ์ปดํ์ผ์ ์ผ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
set COMPLUS_EXPERIMENTAL_TieredCompilation=1
MyApp.exe
set COMPLUS_EXPERIMENTAL_TieredCompilation=0
์ฐ๋ฆฌ๊ฐ ์ ๊ฒฝ ์ฐ๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ... ์ ๊ฒฝ์ฐ๋๋ก ๊ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
์ฑ์ ์คํํ๋ ์ฌ๋์ด ์๋๋ผ ์ฑ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์ ์๋ ๊ตฌ์ฑ ์ค์ ์ ์ํ์ญ๋๊น? env var์ ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ์ฌ์ฉ์๊ฐ coreclr ์ฑ์ ์์ํ๋ ๊ฐ๋จํ ๋ํผ(๋ฐฐ์น ์คํฌ๋ฆฝํธ์ ๊ฐ์)๋ฅผ ์์ํ๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋๋ ๋์์ ์ด๋ ค ์๊ณ ํ๊ฒฝ ๋ณ์์ ์ค์ ๋์ด ์์ง ์์ต๋๋ค. ๊ธฐ๋์น๋ฅผ ์ค์ ํ๊ธฐ ์ํด ์ด๊ฒ์ ๊ฐ๊น์ด ์ฅ๋์ ์ ๊ทน์ ์ธ ๋์์ธ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ผ ์์ญ์ด ์๋์ง๋ง ์ ์ ํ ๊ตฌ์ฑ์ ๊ฐ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๋ํ ์ฃผ์ํ์ญ์์ค. ๊ณ์ธตํ๋ ์ปดํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ ์งํํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๊ณ์ธตํ๋ ์ปดํ์ผ์ ํ์ฑํํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์์์ผ ๋ฟ๋ง ์๋๋ผ ํ์ฌ์ ์ ์ ์ํ ์ฑ๋ฅ์ ๋ฅ๊ฐํ๋ ์ง์ ์ ๋๋ฌํ๋ค๊ณ ์ฝ๊ฒ ์์ํ ์ ์์ต๋๋ค. ์ง๊ธ์ ์์ ์ฑ๋ฅ์ด ๋ชฉํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ํ๊ณ๋ ์๋๋๋ค. :)
ํ๋กํ์ผ๋ง, ์ถ์ธก ์ต์ ํ ๋ฐ
์ต์ ํ ํด์ ?
@DemiMarie - ๊ทธ๋ค์ ํ์คํ ๋ํ์ ๋์๊ณ ๋ง์ ์ฌ๋๋ค์ด ๊ณ์ธตํ๋ ์ปดํ์ผ์ด ์ด๋ฌํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋ค๋ ์ฌ์ค์ ํฅ๋ถํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ์์ ์ ์ํด ๋งํด์, ๋๋ ๋ด ๋ชฉํ๋ฅผ ๋ ๋๊ฒ ์ค์ ํ๊ธฐ ์ ์ ๊ธฐ์ด์ ์ธ ๊ณ์ธตํ๋ ์ปดํ์ผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐ ๊ณ์ ์ง์คํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ ์ปค๋ฎค๋ํฐ์ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋ฏธ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ ๋ฅผ ์์๊ณ ์์ ๊ฒ์ ๋๋ค.
@noahfalk ์, ์ฐ์ํ์ง ์๋ค๋ ๊ฒ์ ์คํํ๋ ์ผ๋ฐ์ ์ธ ํ๋ก์ธ์ค๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ (๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ด ๋์) ๋ณธ์ง์ ์ผ๋ก ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ํ๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ ๋์์ app.config
ํญ๋ชฉ๊ณผ ํจ๊ป ์๋ฒ GC๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๊ตฌ์ฑํ ์ ์๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ณ์ธตํ๋ ์ปดํ์ผ์์๋ ๋์ผํ ์์
์ ์ํํ ์ ์๋ค๋ ๊ฒ์
๋๋ค(์ ์ด๋ Tiered๋ ์ง์์ ์ผ๋ก ์ ์ ์ํ ์ฑ๋ฅ์ ๋ฅ๊ฐํ ์ ์์ต๋๋ค). JIT์ด๊ธฐ ๋๋ฌธ์ assembly.config
๋ฅผ ์ฌ์ฉํ์ฌ ์ด์
๋ธ๋ฆฌ๋ณ๋ก ์ด๋ฅผ ์ํํ ์๋ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋
ธ๋ธ๋ ๊ทธ๋ฐ ๋ฐฉ์์ผ๋ก ์ ํํ ์ ์๋ ๊ฒฝ์ฐ ํ์ฌ ์กด์ฌํ์ง ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
ํ๊ฒฝ ๋ณ์๋ ์ฌ์ฉ์ ๋๋ ์์คํ ๋ณ๋ก ์ค์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ ๋ฐํ์์ ์ฌ๋ฌ ๋ฒ์ ์์ ์ด๋ฌํ ๋ชจ๋ ํ๋ก์ธ์ค์ ์ ์ฌ์ ์ผ๋ก ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ฑ๋ณ ๊ตฌ์ฑ ํ์ผ์ ํจ์ฌ ๋ ๋์ ์๋ฃจ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค(์ฌ์ฉ์๋ณ/์์คํ ๋ณ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ผ๋) -- app.config์์ ์ค์ ํ ์ ์๋ ๋ฐ์คํฌํ ๊ตฌ์ฑ ๊ฐ๊ณผ ๊ฐ์ง๋ง env vars ๋๋ ๋ ์ง์คํธ๋ฆฌ๋ ์ฌ์ฉ .
๋๋ ์ฐ๋ฆฌ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ ๋น ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ฒฝ๋ก๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์คํ ์ ์ฒด ์ค์ ๋ ์ ์ฉํ ์ ์์ง๋ง ๊ธฐ๋ฅ์ด ๊ตฌํ๋๊ธฐ ์ ์ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ช ๊ฐ์ง ์์ด๋์ด๊ฐ ์์ง๋ง ์ต์ ํ๋ฅผ ์ํด ๋ ๋ฒ์งธ ๊ณ์ธต ์งํธ๊ฐ ์ํํด์ผ ํ๋ ์์ ์ ๋ํด ์์ธํ ์์๋ณด์ง ๋ชปํ์ต๋๋ค. ์ค๋๋ jit๊ฐ ํ๋ ์ผ์ ํ ์๋ ์์ง๋ง ๋ ๋ง์ ์ผ์ ํ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
๊ทธ๋์ ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ํฉ๋ณ์ฆ์ ์ง์ ํ๊ฒ ์ต๋๋ค....
๋ ๋ฒ์งธ ๊ณ์ธต ์งํธ๋ ์ฒซ ๋ฒ์งธ ๊ณ์ธต์ ์ํด ์์ฑ๋ ์ฝ๋์ ๋์์ ๋ํ ๊ด์ฐฐ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฒด์ ์ผ๋ก ๋ถํธ์คํธ๋ฉ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ๊ณ์ธต์ ๊ฑด๋๋ฐ๊ณ ๋ ๋ฒ์งธ ๊ณ์ธต์ ์ง์ ์์ฒญํ๋ ๊ฒ์ ๊ณ์ธตํ ๊ณผ์ ์ ๊ทธ๋๋ก ๋๋ ๊ฒ์ฒ๋ผ ์ ํ ์๋ํ์ง ์๊ฑฐ๋ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค. "๊ณ์ธตํ ์ฐํ" ์ต์ ์ด ๊ตฌํ๋๋๋ผ๋ ๊ฒฐ๊ตญ 2์ฐจ ๊ณ์ธต jit๊ฐ ์์ฑํ ์ ์๋ ์ฝ๋๊ฐ ์๋๋ผ jit์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑํ๋ ์ฝ๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ ๊ณตํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋ ๋ฒ์งธ ๊ณ์ธต jit๋ ๋ง์ ๋ฐฉ๋ฒ ์งํฉ์์ ์คํํ๋ฉด ์๋์ ์ผ๋ก ๋๋ฆฐ jit ์๊ฐ์ด ๋ฐ์ํ๋ ๋ฐฉ์์ผ๋ก ์กฐ์ ๋ ์ ์์ต๋๋ค. ๋ ๋ฒ์งธ ๊ณ์ธต ์งํธ๊ฐ ๋ ์ฒ ์ ํ ์ต์ ํ๋ฅผ ์ํํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ง ์ฌ๊ธฐ์ ์ ์ ํ ์ ์ถฉ์์ ์์ง ๋ชปํฉ๋๋ค.
๊ทธ๋ง์ด...
"๊ณต๊ฒฉ์ ์ต์ ํ" ๋ฉ์๋ ์์ฑ์ด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. jit์ด ํน์ ๋ฉ์๋์ ๋ํด ๋์ํ ์ ์๋ ๋ ๋ฒ์งธ ๊ณ์ธต jit์ฒ๋ผ ๋ค์ ๋์ํ๋๋ก ์์ฒญํ๊ณ prejitting ์ค์ ์ด๋ฌํ ๋ฉ์๋๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค(prejitted ์ฝ๋๊ฐ jitted ์ฝ๋๋ณด๋ค ๋๋ฆฌ๊ฒ ์คํ๋๊ธฐ ๋๋ฌธ์ ํนํ R2R์ ๊ฒฝ์ฐ). ๊ทธ๋ฌ๋ ์ด ๊ฐ๋ ์ ์ ์ฒด ์ด์ ๋ธ๋ฆฌ ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์ด์ ๋ธ๋ฆฌ์ ์ ์ฉํ๋ ๊ฒ์ ๊ทธ๋ค์ง ๋งค๋ ฅ์ ์ด์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์ดํฐ๋ธ ์ปดํ์ผ๋ฌ์์ ์ผ์ด๋๋ ์ผ์ ์ ์ ํ ๋น์ ๋ก ์๊ฐํ๋ฉด ์ฑ๋ฅ ๋ ์ปดํ์ผ ์๊ฐ/์ฝ๋ ํฌ๊ธฐ ํธ๋ ์ด๋์คํ๊ฐ ๋ ๋์ ์ต์ ํ ์์ค์์ ์๋นํ ๋๋น ์ง ์ ์์ต๋๋ค. ํผ์ฆ์ ํต์ฌ์ ์ด๋ค ๋ฐฉ๋ฒ์ด ์ค์ํ์ง ์๋ ๊ฒ์ด๋ฉฐ ์ด๋ฅผ ์ํํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์๊ฑฐ๋ ์์คํ ์ด ์ค์ค๋ก ์์๋ด๋ ๊ฒ์ ๋๋ค.
@AndyAyersMS ๋๋ ๋น์ ์ด ๊ฑฐ๊ธฐ์ ๋ชป์ ๋ฐ์๋ค๊ณ ์๊ฐํฉ๋๋ค. "์ ๊ทน์ ์ต์ ํ" ์์ฑ์ ์ฒ๋ฆฌํ๋ JIT๋ ์ฒซ ๋ฒ์งธ ๊ณ์ธต ์งํธ๊ฐ ํด๋น ํผ๋๋ฐฑ์ ์ ๊ณตํ ์๊ฐ์ด ์๋ ์ํ์์ ๊ฒฉ๋ฆฌ์์ ๋ ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฌธ์ ์ ๋๋ถ๋ถ์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
@redknightlois ์์ฑ์ ๋ ๋ง์ ๊ณ์ธตํ๋ฅผ ์ํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. - T3 JIT, T4 JIT, ... ๋ ์์ค์ด ์ถฉ๋ถํ์ง ์์์ง ํ์คํ์ง ์์ง๋ง ์ ์ด๋ ์ด ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
MPGO ์ ์ ์ฌํ ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ ๋ฒ์งธ ๊ณ์ธต jitted ์ฝ๋๋ก ์คํ์ ์์ํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ณ์ธต์ ์์ ํ ์ฐํํ๋ ๋์ ๋นจ๋ฆฌ ๊ฐ๊ธฐ.
@AndyAyersMS , Azul์ด LLVM์ ์ฌ์ฉํ์ฌ JVM์ฉ ๊ด๋ฆฌ JIT๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ CLR์ LLVM์ ๋ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๊น? ๋ถ๋ช ํ ๋ณ๊ฒฝ ์ฌํญ์ ํ๋ก์ธ์ค์์ LLVM์ผ๋ก ์ ์คํธ๋ฆผ์ผ๋ก ํธ์๋์์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋ ๋ช ๊ฐ์ง ํน์ ์์ ์ ์ํด ๋ช ๊ฐ์ง ์์ ํญ๋ชฉ์ ๋ง๋ค์์ต๋๋ค(#12609, dotnet/coreclr#12610, dotnet/coreclr#12611, dotnet/coreclr#12612, dotnet/coreclr #12617). ๊ทํ์ ๊ด์ฌ์ด ๊ทธ ์ค ํ๋์ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ ์์ ๋กญ๊ฒ ์๊ฒฌ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ฃผ์ ์ ๋ํด์๋ ํ ๋ก ์ด ์ฌ๊ธฐ์์ ๊ณ์๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ๋๋ ํน์ ํ์ ์ฃผ์ ์ ๋ํ ๊ด์ฌ์ด ์ถฉ๋ถํ๋ค๋ฉด ๋ ์์ ์ผ๋ก ํน์ ํ์ ์ฃผ์ ์ ๋ํ ๋ฌธ์ ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
@MendelMonteiro ์งํ ํ ๋ MPGO ์คํ์ผ ํผ๋๋ฐฑ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ ํ์คํ ์ต์ ์ ๋๋ค(ํ์ฌ๋ ์ฌ์ ์งํ ํ ๋๋ง ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ์ ์ ์์). ๊ณ์ธกํ ์ ์๋ ํญ๋ชฉ์๋ ๋ค์ํ ์ ํ์ด ์์ผ๋ฏ๋ก ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ด ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ ์๋๋ฉฐ ์ดํด๋ด์ผ ํ๋ ๋ค๋ฅธ ์ ํ ์ฌํญ(์: ์ธ๋ผ์ธ์ ๋ํด ํผ๋๋ฐฑ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์), ์์ฑํ๋ ๋ฐ ํ์ํ ๊ณ์ธก ๋ฐ ๊ต์ก ์คํ์ด ์์ต๋๋ค. MPGO ๋ฐ์ดํฐ๋ ๋ง์ ์ฌ์ฉ์์๊ฒ ์ฅ๋ฒฝ์ด๋ฉฐ MPGO ๋ฐ์ดํฐ๋ ์ฒซ ๋ฒ์งธ ๊ณ์ธต์์ ๋ถํธ์คํธ๋ฉํ ๋ ๊ฐ์ง ๊ฒ๊ณผ ์ผ์นํ๊ฑฐ๋ ์ผ์นํ์ง ์์ ์ ์์ง๋ง ์์ด๋์ด๋ ํ์คํ ์ฅ์ ์ด ์์ต๋๋ค.
LLVM ๊ธฐ๋ฐ ์์ ๊ณ์ธต์ด ์งํ๋๋ ํ -- ๋ถ๋ช ํ ์ฐ๋ฆฌ๋ LLILC๋ก ์ด ๋ฌธ์ ๋ฅผ ์ด๋ ์ ๋ ์กฐ์ฌํ์ผ๋ฉฐ ๋น์ Azul ์ฌ๋๋ค๊ณผ ์์ฃผ ์ ์ดํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ค์ด ํ๊ณ ์๋ ๋ง์ ์ผ์ ์ต์ํฉ๋๋ค. LLVM์ ์ฌ์ฉํ๋ฉด ์ ํํ GC๋ก ์ธ์ด๋ฅผ ์ปดํ์ผํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
CLR์ ํ์ํ LLVM ์ง์๊ณผ GC ๋ฐ EH ๋ชจ๋์์ Java์ ํ์ํ ์ง์ ๋ฐ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์ ์ฉํด์ผ ํ๋ ์ ํ์ ์๋นํ ์ฐจ์ด๊ฐ ์์์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ์์ ์ ์์). ํ ๊ฐ์ง ์๋ฅผ ๋ค์๋ฉด CLR GC๋ ํ์ฌ ๊ฐ์ฒด ๋์ ๊ฐ๋ฆฌํค๋ ๊ด๋ฆฌ ํฌ์ธํฐ๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค. Java๋ ๊ธฐ๋ณธ/ํ์ ์์ ์ด๋ฃจ๋ ๋ณด๊ณ ๋ฉ์ปค๋์ฆ์ ํตํด ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ข ๋ฅ์ ์์ ์ด๋ฃจ๋ ๋ณด๊ณ ์ ๋ํ ์ง์์ CLR๋ก ์ฐ๊ฒฐํ๊ฑฐ๋ LLVM์ ์ตํฐ๋ง์ด์ ํจ์ค๋ฅผ ์ ํํ์ฌ ์ด๋ฌํ ์ข ๋ฅ์ ํฌ์ธํฐ๋ฅผ ์์ฑํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. ๊ฒ๋ค๊ฐ LLILC jit์ ๋๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก ์ด๋ค ์ข ๋ฅ์ ์ฝ๋ ํ์ง์ ์์ฑํ ์ง ํ์ ํ ์ ์์์ต๋๋ค.
๋ฐ๋ผ์ LLILC๊ฐ ์์ง ์กด์ฌํ์ง ์๋ ์ ์ฌ์ ์ธ ๋ค์ค ๊ณ์ธต ์ ๊ทผ ๋ฐฉ์์ ์ด๋ป๊ฒ ์ ํฉํ ์ ์๋์ง ํ์ ํ๋ ๊ฒ์ ์๊ธฐ์์กฐ์ฒ๋ผ ๋ณด์์ต๋๋ค. ์ง๊ธ ์์ด๋์ด๋ ํ๋ ์์ํฌ์ ๊ณ์ธตํํ๊ณ ๋ ๋ฒ์งธ ๊ณ์ธต ์งํธ์ RyuJit์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ ๋ง์ด ๋ฐฐ์ฐ๋ฉด ์ค์ ๋ก ๋ ๋์ ๊ณ์ธต์ ์งํธ๋ฅผ ์ํ ์ฌ์ง๊ฐ ์์์ ๋ฐ๊ฒฌํ๊ฑฐ๋ ์ ์ด๋ ๊ทธ๋ฌํ ์ผ์ด ์ดํด๋๊ธฐ ์ ์ ํด์ผ ํ ๋ค๋ฅธ ์์ ์ ๋ ์ ์ดํดํ ์ ์์ต๋๋ค.
@AndyAyersMS LLVM์ ์ ํ ์ฌํญ์ ํด๊ฒฐํ๋ ๊ฒ๋ณด๋ค ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋์ ํ ์๋ ์์ต๋๋ค.
Multicore JIT ๋ฐ ํด๋น ํ๋กํ ์ต์ ํ๊ฐ coreclr๊ณผ ํจ๊ป ์๋ํฉ๋๊น?
@benaadams - ๋ค, ๋ฉํฐ์ฝ์ด JIT๊ฐ ์๋ํฉ๋๋ค. ์ด๋ค ์๋๋ฆฌ์ค(์๋ ๊ฒฝ์ฐ)๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๋์ง ๊ธฐ์ต๋์ง ์์ง๋ง ๊ตฌ์ฑ์ ํตํด ์ค์ ํ ์ ์์ต๋๋ค. https://github.com/dotnet/coreclr/blob/master/src/inc/clrconfigvalues.h# L548
๋๋ ๋ฐ์ชฝ์ง๋ฆฌ ์ปดํ์ผ๋ฌ๋ฅผ ์์ฑํ๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ๋ ํํ ์ต์ ํ๊ฐ ๋์ผํ ์ธํ๋ผ์์ ์๋นํ ๊ด์ฐฎ๊ฒ ์ํ๋ ์ ์์ผ๋ฉฐ ์์ ๊ณ์ธต ์ต์ ํ ํ๋ก๊ทธ๋จ์์ ์ํํ ์ ์๋ ์์ ์ ๊ฑฐ์ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
๋ด ๋ง์: ํจ์๊ฐ ์ฌ๋ฌ ๋ฒ ์ ์ค๋๋ฉด ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๊ฒ์ ๋ํ ๋งค์ฐ ์ข์ ๊ฒ์ด์ง๋ง ์๋ง๋ ์ด๊ฒ์ CompilerServices๊ฐ ์ฝ๋๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๋๋ก ๋ ธ์ถ๋๋ "๊ณ ๊ธ ์ปดํ์ผ๋ฌ"๋ฅผ ์ ๊ณตํ์ฌ ๊ฒ์์ด๋ ๊ฑฐ๋ ํ๋ซํผ๊ณผ ๊ฐ์ ์ฅ์์์ "๋ ๊น์ด ์ปดํ์ผ"ํ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ฏธ๋ฆฌ ์ปดํ์ผํฉ๋๋ค. ์ด๊ฒ์ NGen์ ์๋์ง๋ง ๊ณ์ธตํ๋์ง ์์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฐ๋์ ๊ฐ๋ฅํ์ง ์์ ๊ฒฝ์ฐ(๋ฐ๋์งํ ๊ฒฝ์ฐ) ์ต์ํ ์ด ์ถ๊ฐ ์ฑ๋ฅ์ด ํ์ํ ์ค์ํ ๋ถ๋ถ์ ๋ ๋ฌด๊ฑฐ์ด ์ต์ ํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ฌผ๋ก ํ๋ซํผ์ด ๋ฌด๊ฑฐ์ด ์ต์ ํ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค๋ฉด(Mono๋ผ๊ณ ๊ฐ์ ํด ๋ด ์๋ค) API ํธ์ถ์ ๊ธฐ๋ณธ์ ์ผ๋ก NO-OP๊ฐ ๋ ๊ฒ์ ๋๋ค.
@noahfalk , @kouvel ๋ฑ์ ๋ ธ๋ ฅ ๋๋ถ์ ์ด์ ๊ณ์ธตํ๋ฅผ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ด ๋ง๋ จ๋์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ "๊ณ์ธตํ ์งํ ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ" ๋ฌธ์ ๋ฅผ ์ฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ํ์ฌ ๊ณ์ธต์ด ํ์ฌ ์ด๋ค ์ํฉ์ธ์ง ์์ด๋์ด๋ฅผ ์ป์ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ข๋ ๋์๋ ์ค์ ํ๋์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ๊ณ ์ถ์ต๋๋ค.
ํ์ฌ ๋์์ด ์ด๋๊ฐ์ ์ค๋ช ๋์ด ์์ต๋๊น? ๋๋ ์ด๊ฒ์ ๋ฐ๊ฒฌํ์ง๋ง ๊ตฌ์ฒด์ ์ผ๋ก ๊ณ์ธตํํ๊ธฐ๋ณด๋ค๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ดํ ๊ฒ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์์งํ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๊ณง ์ด๋ค ์ข ๋ฅ์ ์์ฝ ๊ธ์ ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
COMPlus_TieredCompilation=1
๋ฅผ ์ค์ ํ์ฌ 2.1์์ ๊ณ์ธตํ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค. ์๋ํ์๋ฉด ๋ฐ๊ฒฌํ ๋ด์ฉ์ ๋ค์ ์๋ ค์ฃผ์ธ์....
์ต๊ทผ PR(https://github.com/dotnet/coreclr/pull/17840, https://github.com/dotnet/sdk/pull/2201)์ ์ฌ์ฉํ๋ฉด ๊ณ์ธตํ๋ ์ปดํ์ผ์ ๋ฐํ์ ๊ตฌ์ฑ์ผ๋ก ์ง์ ํ ์๋ ์์ต๋๋ค. json ์์ฑ ๋๋ msbuild ํ๋ก์ ํธ ์์ฑ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ต๊ทผ ๋น๋๊ฐ ํ์ํ์ง๋ง ํ๊ฒฝ ๋ณ์๋ ํ๋์ ์ฌ์ฉ๋์์ต๋๋ค.
@jkotas ์์ ์ด์ ์ ๋
ผ์ํ ๊ฒ์ฒ๋ผ ๊ณ์ธตํ JIT๋ ์์ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๋ ์๋ํฉ๋๊น?
Tizen ํด๋์ ํ์์ ์ฌ๋ฌ ์ฑ์ ์ธก์ ํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์คํ
DLL|์ฑ DLL|๊ณ์ธตํ|์๊ฐ, s
-----------|--------|------|--------
R2R |R2R |์๋์ |2.68
R2R |R2R |์ |2.61 (-3%)
R2R |์๋์ |์๋์ |4.40
R2R |์๋์ |์ |3.63 (-17%)
FNV ๋ชจ๋๋ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค๋ง, ์ด๋ฏธ์ง๊ฐ ์์ ๋๋ ์ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
cc @gbalykov @nkaretnikov2
์ฐธ๊ณ ๋ก ๊ณ์ธตํ๋ ์ปดํ์ผ์ ์ด์ .NET Core์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. https://github.com/dotnet/coreclr/pull/19525
@alpencolt , R2R๊ณผ ๊ฐ์ AOT ์ปดํ์ผ์ ์ฌ์ฉํ ๋ ์์ ์๊ฐ ๊ฐ์ ์ด ๋ํ ์ ์์ต๋๋ค. ์์ ์๊ฐ ๊ฐ์ ์ ํ์ฌ ๋ ์ ์ ์์ ์ต์ ํ๋ก ๋ ๋น ๋ฅด๊ฒ ์งํ ํ๋ ๋ฐ์ ๋น๋กฏ๋๋ฉฐ, AOT ์ปดํ์ผ์ ์ฌ์ฉํ ๋ JIT์ ๋ ํ์ํ ๊ฒ์ ๋๋ค. ์ผ๋ถ ์ ๋ค๋ฆญ, IL ์คํ ๋ฐ ๊ธฐํ ๋์ ๋ฉ์๋์ ๊ฐ์ ์ผ๋ถ ๋ฉ์๋๋ ๋ฏธ๋ฆฌ ์์ฑ๋์ง ์์ต๋๋ค. ์ผ๋ถ ์ ๋ค๋ฆญ์ AOT ์ปดํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์์ํ๋ ๋์ ๊ณ์ธตํ์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
@kouvel ์ ์ปค๋ฐ์ ํตํด ์ ๋ชฉ์ ์์ฒญ์ ๋ฌ์ฑํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค. D ์ฌ๋๋ค์ ์์ฒญ๋ ๊ฐ์ ์ฌํญ, ์ง๋ฌธ ๋๋ ํน์ ์กฐ์ฌ. ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ด ์กฐ๊ธฐ์ ๋ซํ๋ค๊ณ ์๊ฐํ๋ค๋ฉด ๋ฌผ๋ก ์ ํฌ์๊ฒ ์๋ ค์ฃผ์ญ์์ค.
@kouvel ๋ง๊ฐ๋ ๋ฌธ์ ์ ๋ํด ๋ ผํ์ ํด์ ์ฃ์กํฉ๋๋ค. crossgen๊ณผ ๊ฐ์ AOT ์ปดํ์ผ์ ์ฌ์ฉํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ ํ ํซ์คํ ์ฝ๋ ๊ฒฝ๋ก์ ๋ํ ๋ ๋ฒ์งธ ๊ณ์ธต ์ปดํ์ผ์ ์ด์ ์ ์ป์ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
@daxian-dbw ๋ค, ๊ทธ๋ ์ต๋๋ค. ๋ฐํ์์ Jit๋ ํฌ๋ก์ค ์ด์
๋ธ๋ฆฌ ์ธ๋ผ์ธ(dll ๊ฐ)์ ์ํํ ์ ์์ต๋๋ค. ๋ฐํ์ ์์์ ๊ธฐ๋ฐํ ๋ถ๊ธฐ ์ ๊ฑฐ( readonly static
); ๋ฑ
@benaadams ๊ทธ๋ฆฌ๊ณ ์ ์ค๊ณ๋ AOT ์ปดํ์ผ๋ฌ๋ ํ ์ ์์์ต๋๊น?
https://blogs.msdn.microsoft.com/dotnet/2018/08/02/tiered-compilation-preview-in-net-core-2-1/ ์์ ์ด์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ์์ต๋๋ค.
๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ด๋ฏธ์ง์๋ ์ผ๋ถ ์ ํ์ ์ต์ ํ๋ฅผ ๊ธ์งํ๋ ๋ฒ์ ์ง์ ์ ์ฝ ์กฐ๊ฑด ๋ฐ CPU ๋ช ๋ น ์ ์ฝ ์กฐ๊ฑด์ด ์์ต๋๋ค. ์์ฃผ Tiered Compilation์ด๋ผ๊ณ ํ๋ ์ด๋ฌํ ์ด๋ฏธ์ง์ ๋ฉ์๋์ ๋ํด JIT๋ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฒ์ ์ ๋์ฒดํ ์ต์ ํ๋ ์ฝ๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์์ฑํ๋๋ก ์์ฒญํฉ๋๋ค.
์, "์ ์ค๊ณ๋ AOT๊ฐ ์๋"์ ์์ ๋๋ค. ๐
๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ด๋ฏธ์ง์๋ ์ผ๋ถ ์ ํ์ ์ต์ ํ๋ฅผ ๊ธ์งํ๋ ๋ฒ์ ์ง์ ์ ์ฝ ์กฐ๊ฑด ๋ฐ CPU ๋ช ๋ น ์ ์ฝ ์กฐ๊ฑด์ด ์์ต๋๋ค.
์ ์ค ํ๋๋ ํ๋์จ์ด ๋ด์ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. AOT ์ปดํ์ผ๋ฌ(crossgen)๋ x86/x64์ codegen ๋์์ผ๋ก SSE2๋ฅผ ๊ฐ์ ํ๋ฏ๋ก ํ๋์จ์ด ๋ด์ฅ์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฉ์๋๋ ๊ธฐ๋ณธ ํ๋์จ์ด ์ ๋ณด๋ฅผ ์๊ณ ์๋ JIT์ ์ํด ํฌ๋ก์ค์ ์ ์ํด ๊ฑฐ๋ถ๋๊ณ ์ปดํ์ผ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ค๊ณ๋ AOT ์ปดํ์ผ๋ฌ๋ ํ ์ ์์ต๋๊น?
AOT ์ปดํ์ผ๋ฌ๋ ๋งํฌ ์๊ฐ ์ต์ ํ(๊ต์ฐจ ์ด์
๋ธ๋ฆฌ ์ธ๋ผ์ด๋์ ๊ฒฝ์ฐ) ๋ฐ ํ๋กํ ๊ธฐ๋ฐ ์ต์ ํ(๋ฐํ์ ์์์ ๊ฒฝ์ฐ)๊ฐ ํ์ํฉ๋๋ค. ํํธ AOT ์ปดํ์ผ๋ฌ๋ SIMD ์ฝ๋๋ฅผ ๋น๋ํ ๋ "์ต์ข
์ " ํ๋์จ์ด ์ ๋ณด(gcc/clang์ -mavx2
์ ๊ฐ์)๊ฐ ํ์ํฉ๋๋ค.
์ ์ค ํ๋๋ ํ๋์จ์ด ๋ด์ฅ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. AOT ์ปดํ์ผ๋ฌ(crossgen)๋ x86/x64์ codegen ๋์์ผ๋ก SSE2๋ฅผ ๊ฐ์ ํ๋ฏ๋ก ํ๋์จ์ด ๋ด์ฅ์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฉ์๋๋ ๊ธฐ๋ณธ ํ๋์จ์ด ์ ๋ณด๋ฅผ ์๊ณ ์๋ JIT์ ์ํด ํฌ๋ก์ค์ ์ ์ํด ๊ฑฐ๋ถ๋๊ณ ์ปดํ์ผ๋ฉ๋๋ค.
๋ฌด์์ ๊ธฐ๋ค๋ฆฝ๋๋ค? ๋๋ ์ฌ๊ธฐ๋ฅผ ์ ๋ฐ๋ฅด์ง ์๋๋ค. AOT ์ปดํ์ผ๋ฌ๊ฐ ๋ด์ฅ ํจ์๋ฅผ ๊ฑฐ๋ถํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๊ทธ๋ฆฌ๊ณ ์ ์ค๊ณ๋ AOT ์ปดํ์ผ๋ฌ๋ ํ ์ ์์ต๋๊น?
AOT ์ปดํ์ผ๋ฌ๋ ๋งํฌ ์๊ฐ ์ต์ ํ(๊ต์ฐจ ์ด์ ๋ธ๋ฆฌ ์ธ๋ผ์ด๋์ ๊ฒฝ์ฐ) ๋ฐ ํ๋กํ ๊ธฐ๋ฐ ์ต์ ํ(๋ฐํ์ ์์์ ๊ฒฝ์ฐ)๊ฐ ํ์ํฉ๋๋ค. ํํธ, AOT ์ปดํ์ผ๋ฌ๋ SIMD ์ฝ๋๋ฅผ ๋น๋ํ ๋ "์ต์ข ์ " ํ๋์จ์ด ์ ๋ณด(์: gcc/clang์ -mavx2)๊ฐ ํ์ํฉ๋๋ค.
๋ค, ์ ๊ฐ ๋งํ๋ฏ์ด "์ ์ค๊ณ๋ AOT ์ปดํ์ผ๋ฌ"์ ๋๋ค. ๐
@masonwheeler ๋ค๋ฅธ ์๋๋ฆฌ์ค; crossgen์ Jit๊ณผ ํจ๊ป ์๋ํ๋ AoT์ด๋ฉฐ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ปดํ์ผ ๋ฐ ์ฌ๋ฐฐํฌ ์์ด dll์ ์๋น์ค/ํจ์นญ์ ํ์ฉํฉ๋๋ค. Tier1๋ณด๋ค ๋ ๋น ๋ฅธ ์์๊ณผ ํจ๊ป Tier0๋ณด๋ค ๋ ๋์ ์ฝ๋ ์์ฑ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ซํผ ์ค๋ฆฝ์ ์ด์ง๋ ์์ต๋๋ค.
Tier0, crossgen ๋ฐ Tier1์ ๋ชจ๋ coreclr
์์ ์์ง๋ ฅ ์๋ ๋ชจ๋ธ๋ก ํจ๊ป ์๋ํฉ๋๋ค.
๊ต์ฐจ ์ด์ ๋ธ๋ฆฌ ์ธ๋ผ์ธ(Jit์ด ์๋)์ ์ํด์๋ ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๋จ์ผ ํ์ผ ์คํ ํ์ผ์ ์ปดํ์ผ์ด ํ์ํ๋ฉฐ ์ฌ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ์นํ๊ณ ํน์ ํ๋ซํผ(์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ SSE, Avx ๋ฑ, ๊ฐ์ฅ ๋ฎ์ ๊ณตํต ๋๋ ๋ชจ๋๋ฅผ ์ํ ์์ฐ ๋ฒ์ ?).
corert
์ ์ด ์คํ์ผ์ ์์ฉ ํ๋ก๊ทธ๋จ์ AoTํฉ๋๋ค.
ํ์ง๋ง; Jit์ด ์ํํ ์ ์๋ ํน์ ์ ํ์ ๋ถ๊ธฐ ์ ๊ฑฐ๋ฅผ ์ํํ๋ฉด ๋์ฒด ๊ฒฝ๋ก์ ๋ํด ๋ง์ ์์ ์ถ๊ฐ asm ์์ฑ์ด ํ์ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ํธ๋ฆฌ์ ๋ฐํ์ ํจ์น
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฝ๋(Tier1 Jit์ ๋ชจ๋ if
s๋ฅผ ์ ๊ฑฐํจ)
readonly static _numProcs = Environment.ProcessorCount;
public void DoThing()
{
if (_numProcs == 1)
{
// Single proc path
}
else if (_numProcs == 2)
{
// Two proc path
}
else
{
// Multi proc path
}
}
@benaadams
๊ต์ฐจ ์ด์ ๋ธ๋ฆฌ ์ธ๋ผ์ธ(Jit์ด ์๋)์ ์ํด์๋ ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๋จ์ผ ํ์ผ ์คํ ํ์ผ์ ์ปดํ์ผ์ด ํ์ํ๋ฉฐ ์ฌ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ์นํ๊ณ ํน์ ํ๋ซํผ(์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ SSE, Avx ๋ฑ, ๊ฐ์ฅ ๋ฎ์ ๊ณตํต ๋๋ ๋ชจ๋๋ฅผ ์ํ ์์ฐ ๋ฒ์ ?).
์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ์ฌ๋ฐฐํฌ๊ฐ ํ์ํ์ง ์์์ผ ํฉ๋๋ค. Android์ ART ์ปดํ์ผ ์์คํ ์ ์ดํด๋ณด์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌ ์ฝ๋(Java์ ๊ฒฝ์ฐ Java, ๋์ผํ ์์น์ด ์ ์ฉ๋จ)๋ก ๋ฐฐํฌํ๊ณ ๋ก์ปฌ ์์คํ ์ ์๋ ์ปดํ์ผ๋ฌ์ธ AOT๋ ๊ด๋ฆฌ ์ฝ๋๋ฅผ ์ต์ ํ๋ ๊ธฐ๋ณธ ์คํ ํ์ผ๋ก ์ปดํ์ผํฉ๋๋ค.
์ฝ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ๊ด๋ฆฌ ์ฝ๋๊ฐ ์ฌ์ ํ ์กด์ฌํ๋ฉฐ ๋ชจ๋ ๊ฒ์ ๋ค์ ๋ฐฐํฌํ ํ์๊ฐ ์์ต๋๋ค. ํจ์น๋ง ์์ผ๋ฉด AOT๋ฅผ ๋ค์ ์คํํ์ฌ ์ ์คํ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. (๋ถ๋ช ํ ์ด๊ฒ์ Android์ APK ์ฑ ๋ฐฐํฌ ๋ชจ๋ธ๋ก ์ธํด Android ๋น์ ๊ฐ ๊นจ์ง๋ ๋ถ๋ถ์ด์ง๋ง ๋ฐ์คํฌํฑ/์๋ฒ ๊ฐ๋ฐ์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.)
๋ก์ปฌ ์์คํ ์ ์๋ ์ปดํ์ผ๋ฌ๋ AOT๊ฐ ๊ด๋ฆฌ ์ฝ๋๋ฅผ ์ปดํ์ผํฉ๋๋ค...
์ด๊ฒ์ ์ ์ฒด ํ๋ ์์ํฌ๊ฐ ์ฌ์ฉํ ์ด์ NGen ๋ชจ๋ธ์ ๋๋ค. ํ๋ ์์ํฌ ์ฝ๋๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ธ๋ผ์ธํ๋ ๋จ์ผ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์์ฑํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๊น? .NET Core 2.1์์ ์คํ๋๋ Bing.com์์ ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฐจ์ด์ ์ด ๊ฐ์กฐ๋์์ต๋๋ค! ๋ธ๋ก๊ทธ ํฌ์คํธ
ReadyToRun ์ด๋ฏธ์ง
๊ด๋ฆฌ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋จผ์ ๋ฉ์๋๋ฅผ ๊ธฐ๊ณ ์ฝ๋๋ก JIT ์ปดํ์ผํด์ผ ํ๋ฏ๋ก ์์ ์ฑ๋ฅ์ด ์ข์ง ์์ ์ ์์ต๋๋ค. .NET Framework์๋ NGEN์ด๋ผ๋ ์ฌ์ ์ปดํ์ผ ๊ธฐ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ NGEN์ ์ฌ์ฉํ๋ ค๋ฉด ์ฝ๋๊ฐ ์คํ๋ ์์คํ ์์ ์ฌ์ ์ปดํ์ผ ๋จ๊ณ๊ฐ ์ํ๋์ด์ผ ํฉ๋๋ค. Bing์ ๊ฒฝ์ฐ ์ด๋ ์์ฒ ๋์ ์ปดํจํฐ์์ NGENing์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๊ณต๊ฒฉ์ ์ธ ๋ฐฐํฌ ์ฃผ๊ธฐ์ ๊ฒฐํฉ๋์ด ์์ฉ ํ๋ก๊ทธ๋จ์ด ์น ์๋น์ค ์์คํ ์์ ์ฌ์ ์ปดํ์ผ๋ ๋ ์๋นํ ์๋น์ค ์ฉ๋ ๊ฐ์๋ฅผ ์ด๋ํฉ๋๋ค. ๋ํ NGEN์ ์คํํ๋ ค๋ฉด ๊ด๋ฆฌ ๊ถํ์ด ํ์ํ๋ฉฐ, ์ด๋ ์ข ์ข ๋ฐ์ดํฐ ์ผํฐ ์ค์ ์์ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ์ฒ ์ ํ ์กฐ์ฌ๋ฉ๋๋ค. .NET Core์์ crossgen ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋ ๋ฉ์์์ ๊ฐ์ด ์ฌ์ ๋ฐฐํฌ ๋จ๊ณ๋ก ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์ปดํ์ผํ ์ ์์ผ๋ฉฐ ํ๋ก๋์ ์ ๋ฐฐํฌ๋ ์ด๋ฏธ์ง๋ ๋ฐ๋ก ์คํํ ์ ์์ต๋๋ค!
@masonwheeler AOT๋ .Net ํ๋ก์ธ์ค์ ๋์ ํน์ฑ์ผ๋ก ์ธํด ์ ์ฒด .Net์์ ์ญํ์ ์ง๋ฉดํด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด .Net์ ๋ฉ์๋ ๋ณธ๋ฌธ์ ์ธ์ ๋ ์ง ํ๋กํ์ผ๋ฌ๋ฅผ ํตํด ์์ ํ ์ ์๊ณ , ํด๋์ค๋ฅผ ๋ก๋ํ๊ฑฐ๋ ๋ฆฌํ๋ ์ ์ ํตํด ๋ง๋ค ์ ์์ผ๋ฉฐ, interop๊ณผ ๊ฐ์ ์์ ์ ํ์ํ ๋๋ก ๋ฐํ์์์ ์ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ์ ์ฐจ ๊ฐ ๋ถ์ ์ ๋ณด๋ ๊ธฐ๊ปํด์ผ ๋ฐ์๋ฉ๋๋ค. ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ผ์์ ์ธ ์ํ์ ๋๋ค. .Net์ ๋ชจ๋ ์ ์ฐจ ๊ฐ ๋ถ์ ๋๋ ์ต์ ํ(์ธ๋ผ์ด๋ ํฌํจ)๋ ๋ฐํ์์ ์คํ ์ทจ์ํ ์ ์์ด์ผ ํฉ๋๋ค.
AOT๋ AOT ์๊ฐ๊ณผ ๋ฐํ์ ์ฌ์ด์ ๋ณ๊ฒฝ๋ ์ ์๋ ํญ๋ชฉ์ ์งํฉ์ด ์๊ณ ์ด๋ฌํ ๋ณ๊ฒฝ์ ์ํฅ์ด ์ง์ญํ๋์ด AOT ์ต์ ํ์ ์ฌ์ฉํ ์ ์๋ ํ์ฅ ๋ฒ์๊ฐ ํญ์ ์ฐธ์ด์ด์ผ ํ๋ ํญ๋ชฉ์ ํฌ๊ฒ ๋ฐ์ํ ๋ ๊ฐ์ฅ ์ ์๋ํฉ๋๋ค. ๋์์ ์).
.Net ํ๋ก์ธ์ค์ ๋์ ํน์ฑ์ ๋์ฒํ๊ฑฐ๋ ์ ํํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ๊ตฌ์ถํ ์ ์๋ค๋ฉด ์์ํ AOT๋ ๊ฝค ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด .Net Native๋ ๋ฐ์ฌ ๋ฐ ์ํธ ์ด์ฉ์ฑ์ ์ํฅ์ ๊ณ ๋ คํ๊ณ ์ด์ ๋ธ๋ฆฌ ๋ก๋ฉ, ๋ฐ์ฌ ๋ฐฉ์ถ ๋ฐ ( ๋๋ ์ถ์ ) ํ๋กํ ์ฒจ๋ถ. ํ์ง๋ง ๊ฐ๋จํ์ง ์์ต๋๋ค.
๋ชจ๋ ํต์ฌ ํ๋ ์์ํฌ(๋๋ ๋ชจ๋ asp.net ์ด์ ๋ธ๋ฆฌ)๋ฅผ ๋ฒ๋ค๋ก AOT ์ปดํ์ผํ ์ ์๋๋ก crossgen์ ๋ฒ์๋ฅผ ์ฌ๋ฌ ์ด์ ๋ธ๋ฆฌ๋ก ํ์ฅํ๋ ์์ ์ด ์งํ ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ ์ํฉ์ด ๋ณ๊ฒฝ๋ ๋ ์ฝ๋ ์์ฑ์ ๋ค์ ์คํํ๊ธฐ ์ํ ํด๋ฐฑ์ผ๋ก jit๊ฐ ์๊ธฐ ๋๋ฌธ์ ์คํ ๊ฐ๋ฅํฉ๋๋ค.
@AndyAyersMS ๋๋ .NET AOT ์๋ฃจ์ ์ด "์์ํ AOT ์ ์ฉ" ์๋ฃจ์ ์ด์ด์ผ ํ๋ค๊ณ ๊ฒฐ์ฝ ๋ฏฟ์ง ์์์ต๋๋ค. ๋ฐ๋ก ์ฌ๊ธฐ์์ ์ค๋ช ํ๋ ์ด์ ๋๋ฌธ์ ๋๋ค. JIT๋ฅผ ์ฌ์ฉํ์ฌ ํ์์ ๋ฐ๋ผ ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ์ํฉ์์ ๋งค์ฐ ๋ง์ด ํ์ํ ์ํฉ์ด๋ฏ๋ก ์ ํ ์์คํ ์ ๋ํ Anders Hejlsberg์ ๊ท์น์ด ์ฌ๊ธฐ์ ์ ์ฉํ๊ฒ ์ ์ฉ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ๋ฅํ๋ฉด ์ ์ , ํ์ํ ๊ฒฝ์ฐ ๋์ .
System.Linq.Expressions์์
๊ณต๊ฐ TDelegate ์ปดํ์ผ(bool ์ฐ์ ํด์);
PreferInterpretation์ด true์ธ ๊ฒฝ์ฐ ๊ณ์ธตํ๋ ์ปดํ์ผ์ด ๊ณ์ ์๋ํฉ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ต๊ทผ PR(https://github.com/dotnet/coreclr/pull/17840, https://github.com/dotnet/sdk/pull/2201)์ ์ฌ์ฉํ๋ฉด ๊ณ์ธตํ๋ ์ปดํ์ผ์ ๋ฐํ์ ๊ตฌ์ฑ์ผ๋ก ์ง์ ํ ์๋ ์์ต๋๋ค. json ์์ฑ ๋๋ msbuild ํ๋ก์ ํธ ์์ฑ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ต๊ทผ ๋น๋๊ฐ ํ์ํ์ง๋ง ํ๊ฒฝ ๋ณ์๋ ํ๋์ ์ฌ์ฉ๋์์ต๋๋ค.