Oracle์€ eBPF๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์šฉ DTrace๋ฅผ ์žฌ์„ค๊ณ„ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์˜ค๋ผํด ํšŒ์‚ฌ ๋ณด๊ณ  DTrace ๊ด€๋ จ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ์ „์†กํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ํ‘œ์ค€ Linux ์ปค๋„ ์ธํ”„๋ผ, ์ฆ‰ eBPF์™€ ๊ฐ™์€ ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ DTrace ๋™์  ๋””๋ฒ„๊น… ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” Linux์—์„œ DTrace๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” ๋ผ์ด์„ ์Šค ์ˆ˜์ค€ ๋น„ํ˜ธํ™˜์„ฑ์ด์—ˆ์ง€๋งŒ 2018๋…„ Oracle ์žฌํ—ˆ๊ฐ€ GPLv2์˜ DTrace ์ฝ”๋“œ.

์ด๋ฏธ DTrace ์žฅ๊ธฐ Oracle Linux ๋ฐฐํฌ์šฉ ํ™•์žฅ ์ปค๋„์˜ ์ผ๋ถ€๋กœ ์ œ๊ณต๋˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฐํฌํŒ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์ปค๋„ ํŒจ์น˜๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์ด ๊ธฐ์ˆ ์˜ ์‚ฌ์šฉ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜ค๋ผํด ์ค€๋น„๋œ Fedora Linux์—์„œ DTrace๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ž์„ธํ•œ ์ง€์นจ. ์„ค์น˜์— ํ•„์š”ํ•œ ์กฐ๋ฆฝ ๋„๊ตฌ ์—์„œ ์žฌ๊ตฌ์ถ•๋œ Linux ์ปค๋„ ์‚ฌ์šฉ ํŒจ์น˜. Oracle ๋ฐ Fedora ํŒจ์น˜๋กœ ์ปค๋„ ์–ด์…ˆ๋ธ”๋ฆฌ ์‹คํ–‰์„ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ.

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 ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฏธ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒจ์น˜ ์„ธํŠธ eBPF ์ง€์›์„ GCC์— ํ†ตํ•ฉํ•˜๊ณ  ๋‹ฌ์„ฑํ–ˆ๋‹ค GNU binutils์—์„œ eBPF๋ฅผ ์ง€์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์— eBPF ์ง€์›์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๋Š” LLVM ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ Oracle์€ eBPF์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋Š” ์ผ๋ฐ˜ ๊ธฐ๋Šฅ์ด GCC์— ๋“ฑ์žฅํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Linux ์ปค๋„ ๋นŒ๋“œ์™€ eBPF์šฉ ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ ๋ชจ๋‘์— ํ•˜๋‚˜์˜ ํˆดํ‚ท์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์™ธ์—๋„ GCC์— ์ œ์•ˆ๋œ ํŒจ์น˜์—๋Š” eBPF์šฉ libgcc ํฌํŠธ์™€ ELF ํŒŒ์ผ ์ƒ์„ฑ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ปค๋„ ์ œ๊ณต ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ eBPF ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” C ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(๋ชจ๋“  ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹˜) ํ–ฅํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” C ์–ธ์–ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ , ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ , GCC ์ง€์›์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ปค๋„์— ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€