[Web] ๐Ÿค” V8 ์—”์ง„์ด ๋Œ€์ฒด ๋ญ์•ผ?

Lemonยท2022๋…„ 9์›” 2์ผ
5

CS

๋ชฉ๋ก ๋ณด๊ธฐ
8/17
post-thumbnail

V8 ์—”์ง„์ด๋ž€?

V8 ์—”์ง„์€ Google์ด ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ฐ€์žฅ ๋Œ€์ค‘์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ž…๋‹ˆ๋‹ค.
C++๋กœ ๊ฐœ๋ฐœํ•˜์˜€๊ณ  Node JS ๋Ÿฐํƒ€์ž„ ๋ฐ Chrome ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด๋ž€?

์ปดํ“จํ„ฐ๋Š” 0๊ณผ 1๋ฐ–์— ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ดํ•ดํ•˜๊ณ  ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๊ฐ„์ด ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ผ๋ จ์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋Ÿฌํ•œ ๊ณผ์ •์œผ๋กœ ์ธํ•ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ดํ•ดํ•˜๊ณ  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ

V8์—”์ง„์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์ „, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฒˆ์—ญ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ด…์‹œ๋‹ค.

๐Ÿ—ฃ ์ธํ„ฐํ”„๋ฆฌํ„ฐ
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ํ•ด์„ํ•˜๋ฉด์„œ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „ ์ปดํŒŒ์ผ ๋‹จ๊ณ„๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—ย ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—ฃ ์ปดํŒŒ์ผ๋Ÿฌ
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ํŒŒ์ผ ์ „์ฒด๋ฅผ ์ฝ์€ ๋’ค, ์ด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ธฐ๊ณ„์–ด(Machin Code)๋Š” CPU๋กœ ์ž…๋ ฅ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž‘์—…์„ ๋‹จ์ˆœํ™” ์‹œํ‚ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ํ•จ์ˆ˜๋ฅผ 10์–ต๋ฒˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ˜๋ณตํ•˜๋„๋ก ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ถˆํ•„์š”ํ•œ ๋™์ž‘์„ ์ œ๊ฑฐํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฐฉ์‹์„ ์ตœ์ ํ™”(Optimization)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


V8 ์—”์ง„์ด ๋งŒ๋“ค์–ด์ง„ ์ด์œ 

V8์€ ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆ˜ํ–‰ ์†๋„์˜ ๊ฐœ์„ ์„ ๋ชฉํ‘œ๋กœ ์ฒ˜์Œ ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด์ „์— ์—ฌ๋Ÿฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์›น ํŠน์„ฑ์ƒ ์œ ์ €์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ์ฆ‰์‹œ์„ฑ์ด ์žˆ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ์„ ๋ณด์™„ํ•ด์„œ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด v8์—”์ง„์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  JIT(Just In Time) ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ ์‹คํ–‰ ์‹œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋จธ์‹  ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

์™œ ๋จธ์‹  ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•ด์•ผํ• ๊นŒ?

์‚ฌ์ง„ ์ถœ์ฒ˜ : https://blog.naver.com/tipsware/221041215416

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ ์•ˆ์—๋Š” ๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ๋ผ๋Š” ์ž‘์€ ๊ธฐ๊ณ„๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ CPU์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•œ ์ง‘์  ํšŒ๋กœ(IC)์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์งœ์„œ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๋ ค๋ฉด ๊ฒฐ๊ตญ ์ด ๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ๊ฐ€ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ๋Š” ์ด๊ฒƒ์„ ๋งŒ๋“  ํšŒ์‚ฌ๋‚˜ ๋ฒ„์ „์— ๋”ฐ๋ผ ๊ฐ์ž ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋“ค์€ ํ•˜๋“œ์›จ์–ด์™€ ์ง์ ‘์ ์œผ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋“ค์ด๊ณ  ๊ทธ๋ž˜์„œ ๊ธฐ๊ณ„์–ด, ๋จธ์‹  ์ฝ”๋“œ๋ผ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๊ฒฐ๊ตญ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํšจ์œจ์„ ์œ„ํ•ด ์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๋†’์€ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•˜์ง€๋งŒ ์ด๋Š” ๊ฒฐ๊ตญ ๋จธ์‹  ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์–ด์•ผ๋งŒ CPU๊ฐ€ ์ดํ•ดํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค.


JITC ์ปดํŒŒ์ผ๋Ÿฌ

JIT ์ปดํŒŒ์ผ (just-in-time compilation) ๋˜๋Š” ๋™์  ๋ฒˆ์—ญ (dynamic translation)์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹ค์ œ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์— ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ์ปดํŒŒ์ผ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. Just In Time Compiler๋กœ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ†ตํ•ด ์ตœ์ ํ™” ํ•  ์ฝ”๋“œ๋ฅผ ์„ ๋ณ„ํ•œ ํ›„ ํ•ด๋‹น ์ฝ”๋“œ๋“ค๋งŒ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” V8์˜ ์ž‘๋™๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์‚ฌ์ง„ ์ถœ์ฒ˜ : JSConf EU 2017์—์„œ ๋ฐœํ‘œํ•œ Franziska Hinkelmann๋‹˜์˜ ์ž๋ฃŒ


1. Parser

V8 Engine๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œย Parser์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
Parser๋Š” ๋‚ฑ๋ง ๋ถ„์„(Lexical Analysis) ์ด๋ผ๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค.
ex) ar a = 5 โ†’ ['var' , 'a' , '=' , '5']

2. AST (Abstract Syntax Tree)

Parser์—์„œ ๋ถ„ํ•ด๋œ ํ† ํฐ์„ ๋ฐ”ํƒ•์œผ๋กœ AST tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. ย Interpreter Ignition โ†’ Bytecode

AST์—์„œ ๋‚˜์˜จ ์ฝ”๋“œ๊ฐ€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Ignition)์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
๐Ÿ’กvar ํ˜ธ์ด์ŠคํŒ…์€ ์ฐธ๊ณ ๋กœ ์ด๋‹จ๊ณ„์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
์ธํ„ฐํ”„๋ฆฌํ„ฐ์ธ Ignition์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ AST๋ฅผ Bytecode๋กœ '์ค‘๊ฐ„ ๋ฒˆ์—ญ' ํ•˜๊ณ ย ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

Bytecode
๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐ€์ƒ๋จธ์‹ ์ด ํ•œ๊ฒฐ ํŽธํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ํ•œ๋ฒˆ ์ปดํŒŒ์ผ ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
CPU๊ฐ€ ์•„๋‹Œ VM(Virtual Machine, ๊ฐ€์ƒ๋จธ์‹ )์—์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ์ด์ง„ ํ‘œํ˜„๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” 0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ์ด์ง„ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

Ignition์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋ชจ๋“  ์†Œ์Šค๋ฅผ ํ•œ๋ฒˆ์— ํ•ด์„ํ•˜๋Š” ์ปดํŒŒ์ผ ๋ฐฉ์‹์ด ์•„๋‹Œ ํ•œ์ค„์”ฉ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ํ•ด์„ํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ ์„ธ๊ฐ€์ง€ ์ด์ ์„ ๊ฐ€์ ธ๊ฐ€๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š”๊ฒŒ ๋” ํŽธํ•ฉ๋‹ˆ๋‹ค
  2. ํŒŒ์‹ฑ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ
    ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ํŒŒ์‹ฑํ•˜๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์ปดํŒŒ์ผ ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ๋ณต์žก์„ฑ ๊ฐ์†Œ
    Optimizing์ด๋“ ย Deoptimizing์ด๋“  ๋ฐ”์ดํŠธ ์ฝ”๋“œ ํ•˜๋‚˜๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ•ฉ๋‹ˆ๋‹ค.

4. Bytecode ์‹คํ–‰ โ†’ TurboFan โ†’ Optimized

์ฝ”๋“œ๋ฅผ ์ ํ™”ํ•˜์—ฌ Bytecode๋ฅผ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. V8 Engine์€ ๋Ÿฐํƒ€์ž„ ๊ณผ์ • ์ค‘ Profiler์—๊ฒŒ ์ง€์†์ ์ธย ํ”„๋กœํŒŒ์ผ๋ง(ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋“ค์˜ ํ˜ธ์ถœ ๋นˆ๋„์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์œผ๋ผ๊ณ  ์‹œํ‚ต๋‹ˆ๋‹ค)์„ ํ†ตํ•ดย Hot spotย ์ฆ‰ ๋ฐ˜๋ณต๋˜์–ด ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ๋“ฑ ๊ณผ์—ด์ง€์ ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. Bytecode๊ฐ€ ์‹คํ–‰๋  ๋•Œ Profiler๋Š” ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

5. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌ๋ฐ›์€ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰

์ตœ์ ํ™” ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์„ ์ฐพ์œผ๋ฉด Profiler๋Š” ์ด๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์›น์‚ฌ์ดํŠธ๊ฐ€ ๊ตฌ๋™๋˜๋Š” ๋™์•ˆ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ณผ์—ด ์ฝ”๋“œ๋ฅผย TurboFan(์ตœ์ ํ™” ์ปดํŒŒ์ผ๋Ÿฌ)์œผ๋กœ ๋ณด๋‚ดย ์ตœ์ ํ™” ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ๋งŒ์•ฝ ์ตœ์ ํ™” ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ–ˆ๋”๋ผ๋„, ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋ฐ”๋€๋‹ค๋“ ์ง€ ๊ฐ™์€ ๋™์  ํ™˜๊ฒฝ์˜ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ Deoptimizingํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. Deoptimizing๋œ ์ฝ”๋“œ๋„ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์–ผ๋งˆ๋“ ์ง€ ๋‹ค์‹œ ์ตœ์ ํ™” ์ปดํŒŒ์ผ๋ง๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

6. ์ตœ์ ํ™”ํ•œ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ฐจ๋ก€๊ฐ€ ๋˜๋ฉด Bytecode ๋Œ€์‹  Optimized code๊ฐ€ ์‹คํ–‰

์ตœ์ ํ™” ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ฐจ๋ก€๊ฐ€ ๋‹ค๊ฐ€์˜ค๋ฉด, Bytecode ๋Œ€์‹  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณ€ํ™˜ํ•œ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๊ฐ€ ๊ทธ ์ž๋ฆฌ๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ๋Š”ย ํžˆ๋“  ํด๋ž˜์Šค(Hidden Class)๋‚˜ย ์ธ๋ผ์ธ ์บ์‹ฑ(Inline Caching)ย ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํžˆ๋“  ํด๋ž˜์Šค๋Š” ๋น„์Šทํ•œ ๋†ˆ๋“ค๋ผ๋ฆฌ ๋ถ„๋ฅ˜ํ•ด๋†“๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ,ย ์ธ๋ผ์ธ ์บ์‹ฑ์€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŒ์•ฝย hello()์™€ ๊ฐ™์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๋ถ€๋ผ๋ฉด ์ด๊ฑธย function hello () { ... }์™€ ๊ฐ™์ด ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœย ์บ์‹ฑ(Caching)์ž…๋‹ˆ๋‹ค.


https://evan-moon.github.io/2019/06/28/v8-analysis/#v8-์—”์ง„์˜-์ž‘๋™์›๋ฆฌ๋ฅผ-์‚ดํŽด๋ณด์ž
์œ„์˜ ํฌ์ŠคํŒ… ๋‚ด์šฉ์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋“ค์ด ๊ต‰์žฅํžˆ ์žฌ๋ฏธ์žˆ๋Š”๋ฐ,ย V8์€ ์›๋ž˜ 8๊ธฐํ†ต ์—”์ง„์˜ ์ข…๋ฅ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ์ œ๋„ค์‹œ์Šค G90์ด๋‚˜ ๊ธฐ์•„ K9๊ฐ™์€ ์ฐจ์— ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•œ๋‹ค.

(์–ด์ฉ์ง€ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์—”์ง„๋งŒ ๋‚˜์˜ค๋”๋ผโ€ฆ)
๊ทธ๋Ÿผย Ignition์€ ๋ญ๋ƒ๋ฉด ์—”์ง„์— ์‹œ๋™๊ฑธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š”ย ์ ํ™”๊ธฐ์ž…๋‹ˆ๋‹ค. ๋‚ด ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ถ€๋ฆ‰๋ถ€๋ฆ‰ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ํ˜ธ์ถœ๋˜์„œ ๋‚ด ์ฝ”๋“œ๊ฐ€ ๋œจ๊ฑฐ์›Œ์ง€๋ฉดย TurboFan์œผ๋กœ ์ตœ์ ํ™”ํ•ด์„œ ๋„ˆ๋ฌด ๊ณผ์—ด๋˜์ง€ ์•Š๊ฒŒ ์‹ํ˜€์ฃผ๋Š” ๊ทธ๋Ÿฐ ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค. ( ๋ถ„๋ช… ๋…ธ๋ฆฌ๊ณ  ๋„ค์ด๋ฐํ•œ๊ฒƒ๊ฐ™๋‹ค )
V8ย ๋ถ„์„ ํฌ์ŠคํŒ…์—์„œ ์ปดํŒŒ์ผ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๋ช…ํ•  ๋•Œ ๋น ์ง€์ง€ ์•Š๋˜ย Full-codegen๊ณผย Crankshaft๋Š” ์–ด๋””๋กœ ๊ฐ”๋ƒ ํ•˜๋ฉดโ€ฆ

V8 v5.9๋ถ€ํ„ฐ ์ฒ˜์Œ์œผ๋กœ Ignition๊ณผ TurboFan์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์œ„ํ•ด ์ „์ฒด์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ V8์˜ v5.9๋ถ€ํ„ฐ V8์„ ์ž˜ ์ง€ํƒฑํ•ด์ค€ ๊ธฐ์ˆ ์ด์—ˆ๋˜ Full-codegen๊ณผ Crankshaft๋Š” ์ƒˆ๋กœ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋Šฅ๊ณผ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์š”๊ตฌํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ๋” ์ด์ƒ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— V8์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ๋“ค์„ ๊ณง ์™„์ „ํžˆ ์ œ๊ฑฐํ•  ๊ณ„ํš์ด๋ฉฐ, ์ด๋Š” V8์ด ์•ž์œผ๋กœ ํ›จ์”ฌ ๋” ๋‹จ์ˆœํ•˜๊ณ  ์œ ์ง€ ๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

V8 teamย Launching Ignition and TurboFan

V8์˜ v5.9๋ถ€ํ„ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!


๋งˆ์น˜๋ฉฐ

V8 ์—”์ง„์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์ƒ๊ฐํ•ด๋ณธ์  ์—†์—ˆ๋Š”๋ฐ, ๊ธฐ์—… ๊ณผ์ œ๋ฅผ ์ค€๋น„ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ์—”์ง„์ด๋‹ค ์ •๋„๋งŒ ์•Œ์•˜์ง€ ์ด ์—”์ง„์ด ๋’ค์— ์ด๋ ‡๊ฒŒ ๋งŽ์€ ์ผ์„ ํ•˜๊ณ  ์žˆ์„ ์ค„์€ ๋ชฐ๋ž์–ด์š”..!
๐Ÿคฉย ๋‹ค์Œ ์ฃผ์ œ๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ตฌ์กฐ์— ๊ด€ํ•œ ๋‚ด์šฉ์ธ๋ฐ ์ด๋ฒˆ์—๋Š” ์–ด๋–ค ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์ด ๋‚˜์˜ฌ์ง€ ๊ธฐ๋Œ€์ค‘์ž…๋‹ˆ๋‹ค!!


๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ
https://velog.io/@hahan/V8-์—”์ง„์ด๋ž€
https://velog.io/@tastestar/V8-์—”์ง„
https://velog.io/@godori/JavaScript-engine-1
https://velog.io/@sapphire317/V8-์—”์ง„-๋ฌด์—‡์ผ๊นŒ
https://engineering.huiseoul.com/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š”-์–ด๋–ป๊ฒŒ-์ž‘๋™ํ•˜๋Š”๊ฐ€-v8-์—”์ง„์˜-๋‚ด๋ถ€-์ตœ์ ํ™”๋œ-์ฝ”๋“œ๋ฅผ-์ž‘์„ฑ์„-์œ„ํ•œ-๋‹ค์„ฏ-๊ฐ€์ง€-ํŒ-6c6f9832c1d9
https://velog.io/@cheal3/JavaScript-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜-์ž‘๋™-์›๋ฆฌ
https://alledy.netlify.app/posts/v8-engine/
https://dkwjdi.tistory.com/194
https://evan-moon.github.io/2019/06/28/v8-analysis/
https://velog.io/@kich555/JIT-Compiler-Chrome-V8-Engine

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ๊ฐ€๋ณด์ž๊ณ ~!!

0๊ฐœ์˜ ๋Œ“๊ธ€