[V8 Study] 00-introduction
[!] ์ฐ์ ์ ์ผ๋ก ํ๊ธ๋ก ์์ฑํ์ฌ ์ถํ ๋ฒ์ญํ ์์ .
Summary
์ฐ๋ฆฌ๊ฐ ๋์ค์ ์ผ๋ก ์ฌ์ฉํ๋ Google Chrome browser์๋ ์นํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์คํ์ํค๊ธฐ ์ํด javascript๊ฐ ๊ตฌ๋๋ ์ ์๋๋ก ์ง์ํ๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด, JS๋ฅผ ์ํํ๊ฒ ์คํํ๊ณ ์ปดํ์ผํ๋ ์ญํ ์ ์ด๋ค ๊ฒ์ด ๋งก๊ณ ์์๊น? ์ด ์ฑํฐ์์๋ ๋ด๊ฐ ๊ณต๋ถํ๋ chromium javascript engine์ธ V8์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค.
V8์ ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ๋์ด ์์๊น?
V8๊ฐ์ ๊ฒฝ์ฐ Chrome ๊ตฌ๋ ์ ํ๋์ ํ๋ก์ธ์ค๋ก ์คํ๋์ด heap ๋ฐ stack ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ด๋ฆฌํ๋ฉด์ Javascript์ ๊ฐ์ข ๋ณ์์ ๋ฉ์๋๋ฅผ ์คํํ๋ ๊ฐ์ฅ ํต์ฌ์ ์ธ execution file๋ก ๋์ํ๋ค. ์ด์ธ์ Task/Callback queue, Microtask queue, WebAPI ๋ฑ ๋ค์ํ ์์๊ฐ Chromium browser๋ฅผ ๊ตฌ์ฑํ๊ณ ๋์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
๊ฐ์ฅ ๋ํ์ ์ธ ์ญํ ์ javascript ์ฝ๋๋ฅผ ์ปดํ์ผ๋ ์ปดํจํฐ์ ์ต์ ํ๋ ์ฝ๋๋ก ๋ณํ์์ผ ์ ๋ฌํ๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค. ์ด๋ JIT(Just-In-Time) Compiler
๋ผ๋ ๋
์ฐฝ์ ์ธ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ค.
V8๋ง์ ํน์ง์ ๋ฌด์์ด ์์๊น?
์ฐ์ ์ธํฐํ๋ฆฌํฐ์ ์ปดํ์ผ๋ฌ์ ๋ํด ์์์ผ ํ ๊ฒ์ด๋ค.
- ์ธํฐํ๋ฆฌํฐ
- ์ฅ์ : ํ ์ค ํ ์ค ๋ณํํ๊ธฐ ๋๋ฌธ์ ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ๋จ์ : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ๋ณต์กํด์ง์๋ก ์ ์ ์๋๊ฐ ๋๋ ค์ง๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ๋ฌ์ฐจ๋ก ๋ฐ๋ณตํ๋ ๋ฐ๋ณต๋ฌธ์ ๊ฒฝ์ฐ, ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์์๋ ๋ถ๊ตฌํ๊ณ ์ฝ๋๋ฅผ ํ ์ค ํ ์ค ์ฝ๋ ๋ฐฉ์์ ์ํด ๊ทธ๋๊ทธ๋ ์คํ๋๋ค.
- ์ปดํ์ผ๋ฌ
- ์ฅ์ : ํ์ผ ์ ์ฒด๋ฅผ ํ๋ฒ์ ์ฝ์ด์ ์ปดํ์ผ๋ฌ๋ ์์
์ ๋จ์ํ์ํจ๋ค. ์๋ฅผ ๋ค์ด ํน์ ํจ์๋ฅผ 10์ต๋ฒ ๋ฐ๋ณตํด์ผ ํ ๊ฒฝ์ฐ, ์ปดํ์ผ ๊ณผ์ ์์ ํจ์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์๋๋ผ ํจ์์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐ๋ณตํ๋๋ก ์ปดํ์ผ ํ๋ค. ์ด์ฒ๋ผ ๋ถํ์ํ ๋์์ ์ ๊ฑฐํ๋ ์ปดํ์ผ๋ฌ์ ๋ฐฉ์์ ์ต์ ํ,
optimization
์ด๋ผ๊ณ ํ๋ค.
(์ธํฐํ๋ฆฌํฐ๋ optimizeํ์ง ์๋๋ค ) - ๋จ์ : ์ฝ๋๋ฅผ ๋ฐ๋ก ์คํํ์ง ์๊ณ , ์ฝ๋ ์คํ ์ ์ ์ฒด๋ฅผ ์ปดํ์ผ ํ๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ์ ์๋๊ฐ ๋๋ฆด ์ ๋ฐ์ ์๋ค.
- ์ฅ์ : ํ์ผ ์ ์ฒด๋ฅผ ํ๋ฒ์ ์ฝ์ด์ ์ปดํ์ผ๋ฌ๋ ์์
์ ๋จ์ํ์ํจ๋ค. ์๋ฅผ ๋ค์ด ํน์ ํจ์๋ฅผ 10์ต๋ฒ ๋ฐ๋ณตํด์ผ ํ ๊ฒฝ์ฐ, ์ปดํ์ผ ๊ณผ์ ์์ ํจ์๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์๋๋ผ ํจ์์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฐ๋ณตํ๋๋ก ์ปดํ์ผ ํ๋ค. ์ด์ฒ๋ผ ๋ถํ์ํ ๋์์ ์ ๊ฑฐํ๋ ์ปดํ์ผ๋ฌ์ ๋ฐฉ์์ ์ต์ ํ,
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ด๋ถ๋ฅผ ๊ณต๋ถํ๋ค๊ฐ ์ ์ ์ธํฐํ๋ฆฌํฐ์ ์ปดํ์ผ๋ฌ์ ๊ฐ๋จํ ๊ฐ๋ ๊ณผ ์ฅ๋จ์ ์ ์ง์ด๋ดค๋ค. ๊ทธ๋ฌ๋ฉด ๊ณผ์ฐ V8 ์์ง์ ์ด๋ค ๋ฐฉ์์ ์ทจํ๊ธธ๋ ๋ค๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๋ช ๋ น์ ์ํํ ์ ์์๊น? ๋ฐ๋ก ์ฌ๊ธฐ์์ V8 ์์ง์ ๋ ํนํ ์ธ์ด ๋ณํ ๋๊ตฌ์ธ JIT Compiler๊ฐ ๋ค์ด์จ๋ค. JIT์ Just In Time์ ์ฝ์์ด๋ค.
JIT Compiler์ ๊ตฌ์กฐ
V8 ์์ง์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค.
Parser
: ์ฝ๋๋ฅผ Lexical Analysis๋ผ๋ ๊ณผ์ ์ ํตํด ํ ํฐ์ผ๋ก ๋ถํดํ๋ค.AST(Abstract Syntax Tree)
: Parser์์ ๋ถํด๋ ํ ํฐ์ ๋ฐํ์ผ๋ก ์ถ์์ ์ธ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.Ignition
: AST์์ ๋์จ ํธ๋ฆฌ๋ฅผ V8์ ์ธํฐํ๋ฆฌํฐ์ธ ignition์๊ฒ ์ ๋ฌํ๊ณ ์ด๊ฒ์ ์ธํฐํ๋ฆฌํฐ๋ bytecode๋ก ๋ณํ์ํจ๋ค. (High-level Lang to Low-level Lang)TurboFan
,Profiler
: bytecode๋ฅผ ์คํํ์ฌ Human-readable Lang์ ์คํ์ํค๊ณ , ๊ทธ์ค ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋๋ผ๊ณ ํ๋ณ๋ ์ฝ๋ ์กฐ๊ฐ์TurboFan
์ผ๋ก ๋ณด๋ด์ ธ ์ต์ ํ๋ฅผ ์ํํ์ฌ ์๋ก์ด ์ปดํ์ผ๋ ์ฝ๋๋ก ์ฌ๊ตฌ์ฑ๋๋ค. (์ด๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋๋ผ๋ ๋ง์ด ๋งค์ฐ ์ถ์์ ์ด๋ฏ๋กProfiler
๋ผ๋ ์น๊ตฌํํ ์ฌ์ฉ ๋น๋ ์ ๋ฑ์ ์์งํ๊ฒ๋ ์ญํ ์ ๋ถ์ฌํ๊ณ , ๋ชจ์ธ ๋ฐ์ดํฐ๋ฅผ ํตํด Turbofan์ ์๊ณ ๋ฆฌ์ฆ๋๋ก ์ต์ ํ๋ฅผ ํ๋ค)
Turbofan์ ์ด๋ค ์กฐ๊ฑด์ผ๋ก ์ต์ ํํ๋ ๊ฑธ๊น?
-
์ฝ๋๊ฐ ๋จ๊ฒ๊ณ ์์ ์ ์ธ ๊ฒ, ์ฝ๊ฒ ๋งํ๋ฉด ์์ฃผ ํธ์ถ๋๊ณ (๋จ๊ฒ๊ณ ) ์ฝ๋๊ฐ ์ ๋ณํจ(์์ ์ )์ด๋ผ๋ ๊ฒ์ด๋ค. ๋งค๋ฒ ๊ฐ์ ํ๋์ ์ํํ๋ ๋ฐ๋ณต๋ฌธ ๋ด์ ์๋ ์ฝ๋ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์ฌ๊ธฐ์ ํด๋นํ๊ธฐ ์ฝ๋ค.
-
์ธํฐํ๋ฆฌํ ๋ ๋ฐ์ดํธ ์ฝ๋์ ๊ธธ์ด๋ฅผ ๋ณด๊ณ ํน์ ์๊ณ์ ์ ๋๊ธฐ์ง ์์ผ๋ฉด ์์ ํจ์๋ผ๊ณ ํ๋จํด์ ์ต์ ํ๋ฅผ ์งํํ๋ ๊ฒ์ด๋ค. ์๊ณ ๋จ์ํ ํจ์๋ ํฌ๊ณ ๋ณต์กํ ํจ์๋ณด๋ค ๋์์ด ๋งค์ฐ ์ถ์์ ์ด๊ฑฐ๋ ์ ํ์ ์ธ ํ๋ฅ ์ด ๋๊ธฐ ๋๋ฌธ์ ์์ ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
[!] ๊ทธ๋ฌ๋, ์ปดํ์ผ๋ฌ๋ 100% ์๋ฒฝํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์๋์ ๋ค๋ฅด๊ฒ ๋ฐ์ ํ(deoptimization)๊ฐ ์ผ์ด๋ ์๋ ์๋ค.
Next Topic
๋ค์์๋ V8์์ ์๋ฃํ์ด๋ JS์ ๋ค์ํ ๋ฉ์๋๊ฐ ์ด๋ค ์์ผ๋ก ์ ์ฅ์ด ๋๊ณ ๋ถ๋ฌ์ฌ ์ ์๋์ง๋ฅผ ์์๋ณด๊ณ ์ ํ๋ค.