Rust์—์„œ eBPF ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ Aya ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž…

Aya ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด JIT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜ ๊ฐ€์ƒ ๋จธ์‹ ์˜ Linux ์ปค๋„ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” Rust ์–ธ์–ด๋กœ eBPF ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ eBPF ๊ฐœ๋ฐœ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ Aya๋Š” libbpf ๋ฐ bcc ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  libc ํฌ๋ ˆ์ดํŠธ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋Š” Rust๋กœ ์ž‘์„ฑ๋œ ์ž์ฒด ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Aya๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ์—๋Š” C ์–ธ์–ด ๋„๊ตฌ๋‚˜ ์ปค๋„ ํ—ค๋” ํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋Š” MIT ๋ฐ Apache 2.0 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ :

  • ํ˜„์žฌ ์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” ์œ ํ˜•์— ๋Œ€ํ•œ ์œ ํ˜• ํ™•์ธ ๋ฐ ๋งคํ•‘์„ ์œ„ํ•ด BPF ์˜์‚ฌ ์ฝ”๋“œ๋กœ ์œ ํ˜• ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” BTF(BPF ์œ ํ˜• ํ˜•์‹) ์ง€์›. BTF๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฒ„์ „์˜ Linux ์ปค๋„๊ณผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ eBPF ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • eBPF์˜ ์ž‘์—…์„ ๊ณ ๋ คํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๋Ÿฐํƒ€์ž„์œผ๋กœ aya๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ eBPF์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” "bpf-to-bpf" ํ˜ธ์ถœ, ์ „์—ญ ๋ณ€์ˆ˜ ๋ฐ ์ดˆ๊ธฐํ™” ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ ๋ฐฐ์—ด, ํ•ด์‹œ ๋งต, ์Šคํƒ, ํ, ์Šคํƒ ์ถ”์ ์€ ๋ฌผ๋ก  ์†Œ์ผ“ ๋ฐ ์„ฑ๋Šฅ ์ถ”์  ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์ปค๋„ ์œ ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ ํ•„ํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ, cgroup ํ•ธ๋“ค๋Ÿฌ ๋ฐ ๋‹ค์–‘ํ•œ ์†Œ์ผ“ ์ž‘์—…, XDP ํ”„๋กœ๊ทธ๋žจ์„ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ eBTF ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ.
  • ๋น„์ฐจ๋‹จ ๋ชจ๋“œ tokio ๋ฐ async-std์—์„œ ๋น„๋™๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ”Œ๋žซํผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค๋„ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฐ ์ปค๋„ ํ—ค๋” ํŒŒ์ผ์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ ๋„ ๋น ๋ฅธ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ์ „ํžˆ ์‹คํ—˜์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. API๋Š” ์•„์ง ์•ˆ์ •ํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๊ณ„์† ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ณ„ํš๋œ ๋ชจ๋“  ๊ธฐํšŒ๊ฐ€ ์•„์ง ์‹คํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ์—ฐ๋ง๊นŒ์ง€ Aya์˜ ๊ธฐ๋Šฅ์„ libbpf์™€ ๋™๋“ฑํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  2022๋…„ XNUMX์›”์— ์ฒซ ๋ฒˆ์งธ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Linux ์ปค๋„์šฉ Rust ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ Aya์˜ ์ผ๋ถ€๋ฅผ eBPF ํ”„๋กœ๊ทธ๋žจ ๋กœ๋“œ, ์—ฐ๊ฒฐ ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ์— ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฒฐํ•ฉํ•  ๊ณ„ํš๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

eBPF๋Š” Linux ์ปค๋„์— ๋‚ด์žฅ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ•ด์„๊ธฐ๋กœ์„œ ๋„คํŠธ์›Œํฌ ์ž‘์—… ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑ, ์‹œ์Šคํ…œ ์ž‘์—… ๋ชจ๋‹ˆํ„ฐ๋ง, ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ฐ€๋กœ์ฑ„๊ธฐ, ์•ก์„ธ์Šค ์ œ์–ด, ํƒ€์ด๋ฐ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ์ž‘์—… ๋นˆ๋„ ๋ฐ ์‹œ๊ฐ„ ๊ณ„์‚ฐ, kprobes/uprobes /tracepoints๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. JIT ์ปดํŒŒ์ผ ์‚ฌ์šฉ ๋•๋ถ„์— ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์ฆ‰์‹œ ๊ธฐ๊ณ„ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์„ฑ๋Šฅ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. XDP๋Š” DMA ํŒจํ‚ท ๋ฒ„ํผ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ์ˆ˜์ค€์—์„œ BPF ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ณผ๋„ํ•œ ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜์—์„œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์„ฑ๋Šฅ ํ”„๋กœ์„ธ์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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