์ค๋ผํด ํ์ฌ
์ด๋ฏธ DTrace
eBPF๋ ๋คํธ์ํฌ ์์
์ฒ๋ฆฌ๊ธฐ ์์ฑ, ์์คํ
ํ๋ ๋ชจ๋ํฐ๋ง, ์์คํ
ํธ์ถ ๊ฐ๋ก์ฑ๊ธฐ, ์ก์ธ์ค ์ ์ด, ํ์ด๋ฐ ๋ณด์กด(perf_event_open)์ผ๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์์
๋น๋ ๋ฐ ์๊ฐ ๊ณ์ฐ, ์ถ์ ์ํ์ ํ์ฉํ๋ Linux ์ปค๋์ ๋ด์ฅ๋ ๋ฐ์ดํธ์ฝ๋ ํด์๊ธฐ์
๋๋ค. kprobes / uprobes /tracepoints๋ฅผ ์ฌ์ฉํฉ๋๋ค. JIT ์ปดํ์ผ ๋๋ถ์ ๋ฐ์ดํธ์ฝ๋๋ ์ฆ์์์ ๊ธฐ๊ณ ๋ช
๋ น์ด๋ก ๋ณํ๋๊ณ ๋ค์ดํฐ๋ธ ์ฝ๋์ ์ฑ๋ฅ์ผ๋ก ์คํ๋ฉ๋๋ค. DTrace๋ eBPF ์์ ๊ตฌํ๋๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ eBPF ์์ ๊ตฌํ๋ ์ ์์ต๋๋ค.
DTrace ๊ธฐ์ ์ ์์คํ ์ปค๋ ๋ฐ ์ต์ข ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์ ์ถ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Solaris ์ด์ ์ฒด์ ์ฉ์ผ๋ก ๊ฐ๋ฐ๋์ด ์ฌ์ฉ์๊ฐ ์์คํ ๋์์ ์์ธํ ๋ชจ๋ํฐ๋งํ๊ณ ์ค์๊ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ง๋จํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋๋ฒ๊น ํ๋ ๋์ DTrace๋ ์ฐ๊ตฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ ์ด๋ค ์์ผ๋ก๋ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฏ๋ก ์คํ ์ค์ธ ์์คํ ์ ๋ถ์์ ์ฆ์์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. DTrace์ ๊ฐ์ ์ค AWK์ ์ ์ฌํ ๊ณ ์์ค D ์ธ์ด๊ฐ ์ฃผ๋ชฉ๋๋๋ฐ, C, Python, Lua์์ eBPF์ฉ์ผ๋ก ์ ๊ณต๋๋ ํธ๋ค๋ฌ ์์ฑ ๋๊ตฌ๋ฅผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ถ์ ์คํฌ๋ฆฝํธ ์์ฑ์ด ํจ์ฌ ์ฝ๋ค๋ ์ ์ด๋ค. .
Oracle ์์ง๋์ด๋ ๋ํ GCC๋ฅผ ์ํ eBPF ๋ฐฑ์๋๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ๋
ธ๋ ฅํ๊ณ ์์ผ๋ฉฐ ์ด๋ฏธ ๊ฒ์ํ์ต๋๋ค.
๋ฐ์ดํธ์ฝ๋ ์์ฑ์ ์ํ ๋ฐฑ์๋ ์ธ์๋ GCC์ ์ ์๋ ํจ์น์๋ eBPF์ฉ libgcc ํฌํธ์ ELF ํ์ผ ์์ฑ ๋๊ตฌ๊ฐ ํฌํจ๋์ด ์์ด ์ปค๋ ์ ๊ณต ๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ eBPF ๊ฐ์ ๋จธ์ ์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ํ์ฌ๋ C ์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ ์ ์์ง๋ง(๋ชจ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋) ํฅํ ์ฌ์ฉํ ์ ์๋ C ์ธ์ด ๊ธฐ๋ฅ์ ํ์ฅํ๊ณ , ๋ค๋ฅธ ์ธ์ด์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ณ , ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๋ง๋ค๊ณ , GCC ์ง์์ ์ถ๊ฐํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์ปค๋์ ๋ก๋ํ์ง ์๊ณ eBPF ํ๋ก๊ทธ๋จ์ ๋๋ฒ๊น ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
์ถ์ฒ : opennet.ru