eBPF ๊ณต์ ๋ฌธ์
eBPF๋ ์ด์ ์ฒด์ ์ปค๋๊ณผ ๊ฐ์ ํน๋ณํ ๊ถํ์ด ์๋ ํ๊ฒฝ์์ ์๋๋ฐ์ค ํ๋ก๊ทธ๋จ์ ์คํ์ํฌ ์ ์๋ ๋ฆฌ๋ ์ค ์ปค๋์ ๊ธฐ์ ์์ ๊ธฐ์ํ ํ์ ์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ์ปค๋ ์์ค ์ฝ๋๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์ปค๋ ๋ชจ๋์ ๋ก๋ํ์ง ์๊ณ ๋ ๊ธฐ์กด ์ปค๋์ ๊ธฐ๋ฅ์ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ฅ์ํค๋ ๊ฒ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ค๋ซ๋์ ์ด์ ์ฒด์ ๋ ์ ์ฒด ์์คํ ์ ๊ด์ธกํ๊ณ ์ ์ดํ ์ ์๋ ์ปค๋์ ํน๋ณํ ๊ถํ ๋ฅ๋ ฅ ๋๋ถ์ ๊ด์ธก ๊ฐ๋ฅ์ฑ, ๋ณด์ ๋ฐ ๋คํธ์ํน ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ ์ด์์ ์ธ ๊ณต๊ฐ์ด์์ต๋๋ค. ๋์์, ์ด์ ์ฒด์ ์ปค๋์ ์์ ์ฑ๊ณผ ๋ณด์์ ์ค์ํ ์ญํ ์ ํ๊ธฐ์ ๋น ๋ฅด๊ฒ ์งํํ๊ธฐ๋ ์ด๋ ต๋ค๋ ๋ฌธ์ ์ ์ ๊ฐ์ก์ต๋๋ค. ๋ฐ๋ผ์, ์ด์ ์ฒด์ ์์ค์ ๊ธฐ๋ฅ์ ์ด์ ์ฒด์ ์ธ๋ถ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ ๋ณด๋ค๋ ์๋์ ์ผ๋ก ๋๋๊ฒ ๋ฐ์ ํ์ต๋๋ค.

eBPF๋ ์ด๋ฌํ ํ์์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์์ต๋๋ค. ์๋๋ฐ์ค ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ๋ด๋ถ์์ ์คํํ ์ ์๊ฒ ๋๋ฉด์, ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ค์ eBPF ํ๋ก๊ทธ๋จ์ ํตํด ๋ฐํ์์์ ๊ธฐ์กด์ ์ด์ ์ฒด์ ์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ดํ, ์ด์ ์ฒด์ ๋ JIT ์ปดํ์ผ๋ฌ์ ๊ฒ์ฆ ์์ง์ ๋์์ ํตํด์ ์ถ๊ฐ๋ ํ๋ก๊ทธ๋จ๋ค์ด ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ์ฐจ์ธ๋ ๋คํธ์ํน, ๊ด์ธก ๊ฐ๋ฅ์ฑ ๊ทธ๋ฆฌ๊ณ ๋ณด์ ๊ธฐ๋ฅ๋ค๊ณผ ๊ฐ์ ๋ค์ํ ์ฌ์ฉ ์๋๋ฆฌ์ค๋ฅผ ํฌํจํ๋ ์๋ง์ eBPF ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ค์ด ๋ฑ์ฅํ ์ ์๋ ๋ฐํ์ด ๋์์ต๋๋ค.
์ค๋๋ eBPF๋ ๊ณ ์ฑ๋ฅ ๋คํธ์ํน, ๋ฐ์ดํฐ ์ผํฐ ๋ฐ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ ์ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ์ง๋ ๊ด์ธก ๊ฐ๋ฅ์ฑ ํ๋ณด, ๊ฐ๋ฐ์๋ค์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ถ์ ์ง์, ์ฑ๋ฅ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ์ ๋ณด ์ ๊ณต, ์ปจํ ์ด๋ ๋ฐํ์ ๋ณด์ ๊ฐํ ๋ฑ์ ๋งค์ฐ ๋ค์ํ๊ฒ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ๋ฟ๋ง ์๋๋ผ, ๋ฌดํํ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ eBPF๊ฐ ๋ง๋ค์ด๋ด๋ ํ์ ์ ์์ง๋ ์ด๊ธฐ ๋จ๊ณ์ ๋๋ค.
eBPF.io๋ ๋ชจ๋ eBPF์ ์ฃผ์ ์ ๋ํด ๋ฐฐ์ฐ๊ณ ํ๋ ฅํ ์ ์๋ ๋ชจ๋๋ฅผ ์ํ ๊ณต๊ฐ์ ๋๋ค. eBPF๋ ๊ณต๊ฐ ์ปค๋ฎค๋ํฐ์ด๋ฉฐ ๋ชจ๋ ์ฌ๋๋ค์ด ์ฐธ์ฌํ๊ณ ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ์ด eBPF์ ์ฒซ ์๊ฐ ์๋ฃ๋ฅผ ์ฝ๊ณ ์ถ์ผ์๊ฑฐ๋, ์๋๋ฉด ์ถ๊ฐ์ ์ธ ์๋ฃ๋ฅผ ํ์ธํ๊ณ ์ถ๊ฑฐ๋, ์ฒ์์ผ๋ก ์ฃผ์ eBPF ํ๋ก์ ํธ์ ์ฒ์์ผ๋ก ๊ธฐ์ฌํ๊ณ ์ถ๋ค๋ฉด eBPF.io๊ฐ ์ฌ๋ฌ๋ถ์ ๋์์ค ์ ์์ต๋๋ค.
BPF๋ ์๋ โBerkeley Packet Filterโ๋ฅผ ์๋ฏธํ์ง๋ง, ์ด์ eBPF (extended BPF)๊ฐ ํจํท ํํฐ๋ง ์ด์์ ๋ค์ํ ์์ ์ ํ ์ ์๊ธฐ์, ํด๋น ์ฝ์ด๋ ๋์ด์ ์๋ฏธ๊ฐ ์์ต๋๋ค. eBPF๋ ์ด์ ํน์ ํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๊ฒ์ด ์๋, ๋ ๋ฆฝ์ ์ธ ์ฉ์ด๋ก ๊ฐ์ฃผ๋๊ณ ์์ต๋๋ค. ๋ฆฌ๋ ์ค ์์ค ์ฝ๋์, ํน์ ๋๊ตฌ ๋ฐ ๋ฌธ์์์๋ ์์ง๋ BPF๋ผ๋ ์ฉ์ด๊ฐ ์์ผ๋ฉฐ, BPF ๋ฐ eBPF๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ฐ๊ฟ์ ์ฌ์ฉํด๋ ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋๋ก, ์๋์ BPF๋ eBPF์ ๊ตฌ๋ถ์ ์ํด์ cBPF (classic BPF) ๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค.
๊ฟ๋ฒ ๊ทธ๋ฆผ์ eBPF๋ฅผ ์ํ ๊ณต์ ๋ก๊ณ ์ด๋ฉฐ, Vadim Shchekoldin๊ฐ ๋ง๋ค์์ต๋๋ค. ์ฒซ eBPF Summit์์ ํฌํ๋ฅผ ์งํํ์๊ณ , ๊ฟ๋ฒ์ ์ด๋ฆ์ eBee๋ก ์ด๋ฆ ์ง๊ธฐ๋ก ํ์ต๋๋ค. (๋ก๊ณ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ Linux Foundation ๋ธ๋๋ ๊ฐ์ด๋๋ผ์ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์)
๋ค์ ์ฅ์ eBPF์ ๋ํ ๊ฐ๋จํ ์๊ฐ์ ๋๋ค. eBPF์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด, eBPF & XDP ์ฐธ์กฐ ๊ฐ์ด๋๋ฅผ ํ์ธํด์ฃผ์ธ์. ์ฌ๋ฌ๋ถ์ด eBPF ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ค๋ ๊ฐ๋ฐ์์ด๊ฑฐ๋, eBPF๋ฅผ ์ฌ์ฉํ๋ ์๋ฃจ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ด์ฌ์ด ์๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๊ณผ ์ํคํ ์ฒ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
eBPF ํ๋ก๊ทธ๋จ์ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ณ , ์ปค๋ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ํ ์ง์ ์ ์ง๋๊ฐ ๋ ์คํ๋ฉ๋๋ค. ์ฌ์ ์ ์ ์๋ ํ ๋ค์ ์์คํ ์ฝ, ํจ์ ์ง์ ๋ฐ ์ข ๋ฃ, ์ปค๋ tracepoint, ๋คํธ์ํฌ ์ด๋ฒคํธ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ํฌํจ๋ฉ๋๋ค.

ํน์ ํ ๋ชฉ์ ์ ํ์ํ ์ฌ์ ์ ์ ์๋ ํ ์ด ์๋ค๋ฉด, ์๋ก์ด ์ปค๋ ํ๋ก๋ธ(kprobe) ๋๋ ์ ์ ํ๋ก๋ธ(uprobe)๋ฅผ ์์ฑํด์ ์ปค๋ ๋๋ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฑฐ์ ๋ชจ๋ ์์์ ์์น์ eBPF ํ๋ก๊ทธ๋จ์ ๋ถ์ฐฉํ ์ ์์ต๋๋ค.

๋ง์ ๊ฒฝ์ฐ์, eBPF๋ ์ง์ ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋ณด๋ค๋, Cilium, bcc, ๋ฐ bpftrace์ ๊ฐ์ด eBPF์ ๋ํ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ํ๋ก์ ํธ๋ค์ ์ฌ์ฉ์์ ์๋์ ๋ฐ๋ผ eBPF ํ๋ก๊ทธ๋จ์ ์๋์ผ๋ก ๊ตฌํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.

๋ง์ผ, ๊ณ ์์ค์ ์ถ์ํ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ, eBPF ํ๋ก๊ทธ๋จ์ ์ง์ ์์ฑ๋์ด์ผํฉ๋๋ค. ๋ฆฌ๋ ์ค ์ปค๋์ eBPF ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํธ ์ฝ๋ ํ์์ผ๋ก ๋ก๋ ๋๋ ๊ฒ์ ์์ํฉ๋๋ค. ๋ฌผ๋ก , ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฌ๋์ด ์ง์ ์์ฑํ ์๋ ์์ง๋ง, LLVM๊ฐ์ ์ปดํ์ผ๋ฌ ๋๊ตฌ๋ค์ ์ฌ์ฉํ์ฌ, C์ ๋น์ทํ ์ฝ๋๋ฅผ eBPF ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ ํ๋ ๊ฒ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ํํ๊ฒ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
ํน์ ํ ์ด ํ์ธ๋๋ฉด, eBPF ํ๋ก๊ทธ๋จ์ bpf ์์คํ ์ฝ์ ํตํด์ ๋ฆฌ๋ ์ค ์ปค๋ ๋ด๋ถ๋ก ๋ก๋๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ฐจ๋ ์ผ๋ฐ์ ์ผ๋ก ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ eBPF ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์งํ๋ฉ๋๋ค. ๋ค์ ์น์ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ฐ ํด์ฒด์ธ์ ๋ํ ์ค๋ช ์ ๋ค๋ฃน๋๋ค.

ํ๋ก๊ทธ๋จ์ด ๋ฆฌ๋ ์ค ์ปค๋์ ๋ก๋ ๋๋ฉด, ์ค์ ๋ก ์์ฒญ๋ ํ ์ ์ฐ๊ฒฐ๋๊ธฐ ์ ๋ ๊ฐ์ง์ ์ ์ฐจ๋ฅผ ์ฌ์ ์ ์งํํ๊ฒ ๋ฉ๋๋ค.
๊ฒ์ฆ ๋จ๊ณ๋ eBPF ํ๋ก๊ทธ๋จ์ด ๋์ํ๊ธฐ์ ์์ ํ์ง๋ฅผ ๊ฒ์ฆํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ eBPF ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฌ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋์ง๋ฅผ ๊ฒ์ฆํ๋๋ฐ, ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:

- eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ๋ ํ๋ก์ธ์ค๋ ํน๋ณํ ๊ถํ์ด ํ์ํฉ๋๋ค. ํน๊ถ์ด ํ์์๋ eBPF๋ฅผ ํ์ฉํ์ง ์๋ ํ, ํน๋ณํ ๊ถํ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ค๋ง eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ ์ ์์ต๋๋ค.
- eBPF ํ๋ก๊ทธ๋จ์ ํฌ๋์๊ฐ ๋๊ฑฐ๋ ์์คํ ์ ์ ์ํฅ์ ๋ผ์น์ง ์์ต๋๋ค.
- eBPF ํ๋ก๊ทธ๋จ์ ํญ์ ์ข ๋ฃํด์ผํฉ๋๋ค (์ฆ, ํ๋ก๊ทธ๋จ์ด ๋ฌดํ ๋ฃจํ๋ฅผ ๋๊ฑฐ๋, ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.)
Just-in-Time (JIT) ์ปดํ์ผ ๋จ๊ณ๋ ํ๋ก๊ทธ๋จ์ ์คํ ์๊ฐ์ ์ต์ ํ ํ๊ธฐ ์ํด์, ํ๋ก๊ทธ๋จ์ ์ผ๋ฐํ๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํน์ ๋จธ์ ์์ ๋์ํ๋ ๋ช ๋ น์ด ์งํฉ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ฅผ ํตํด์ eBPF ํ๋ก๊ทธ๋จ์ ์ฌ์ ์ ์ปดํ์ผ ๋ ์ปค๋ ์ฝ๋ ๋๋ ๋ก๋ ๋ ์ปค๋ ๋ชจ๋๊ณผ ๋น์ทํ๊ฒ ํจ์จ์ ์ผ๋ก ๋์ํ ์ ์์ต๋๋ค.
eBPF ํ๋ก๊ทธ๋จ์ ์ค์ํ ์ธก๋ฉด ์ค ํ๋๋ ์์ง๋ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ณ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฅ๋ ฅ์ ๋๋ค. ์ด๋ฅผ ์ํด์, eBPF ํ๋ก๊ทธ๋จ์ eBPF ๋งต์ ๊ฐ๋ ์ ์ฌ์ฉํด์ ์ ๋ง์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ์ฐพ์์ฌ ์ ์์ต๋๋ค. eBPF ๋งต์ eBPF ํ๋ก๊ทธ๋จ ๋ฟ๋ง ์๋๋ผ ์์คํ ์ฝ์ ์ฌ์ฉํ๋ฉด ์ ์ ๊ณต๊ฐ์์์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.

๋ค์์ ๋ค์ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ eBPF ๋งต ์ ํ์ ์ผ๋ถ ๋ชฉ๋ก์ ๋๋ค. ๋ฟ๋ง ์๋๋ผ, ์ถ๊ฐ์ ์ผ๋ก ํ๋์ CPU ์ฝ์ด ๋๋ ๋ชจ๋ CPU ์ฝ์ด๋ฅผ ๊ฑธ์ณ์ ์ฌ์ฉ๋๋ ๋ค์ํ ๋งต์ ์ข ๋ฅ๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
- ํด์ ํ ์ด๋ธ, ๋ฐฐ์ด
- LRU (Least Recently Used)
- ๋ง ๋ฒํผ
- ์คํ ์ถ์
- LPM (Longest Prefix Match)
- ...
eBPF ํ๋ก๊ทธ๋จ์ ์์์ ์ปค๋ ํจ์๋ฅผ ํธ์ถํ ์๋ ์์ต๋๋ค. ๋ง์ผ ์ด๋ฅผ ํ์ฉํ๋ค๋ฉด, eBPF ํ๋ก๊ทธ๋จ์ ํน์ ์ปค๋ ๋ฒ์ ์์๋ง ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ํธํ์ฑ์ ๋ณต์กํ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค. ๋์ , eBPF ํ๋ก๊ทธ๋จ์ ์ปค๋์ ์ํด ์ ๊ณต๋๋ ์ ์๋ ค์ง๊ณ ์์ ์ ์ธ API ์ธ ์ปค๋ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.

์ฌ์ฉ ๊ฐ๋ฅํ ํฌํผ ํจ์ ํธ์ถ์ ์ง์์ ์ผ๋ก ๋์ด๋๊ณ ์์ต๋๋ค. ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ํฌํผ ํจ์์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋๋ค ์ซ์ ์์ฑํ๊ธฐ
- ํ์ฌ ์๊ฐ ๋ฐ ๋ ์ง ๊ฐ์ ธ์ค๊ธฐ
- eBPF ๋งต ์ ๊ทผํ๊ธฐ
- ํ๋ก์ธ์ค/cgroup ์ปจํ ์คํธ ๊ฐ์ ธ์ค๊ธฐ
- ๋คํธ์ํฌ ํจํท ๋ฐ ์ ๋ฌ ๋ก์ง ์กฐ์ํ๊ธฐ
eBPF ํ๋ก๊ทธ๋จ์ ๊ผฌ๋ฆฌ ์ฌ๊ท(tail call)์ ๊ฐ๋ ๊ณผ ํจ์ ํธ์ถ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํจ์ ํธ์ถ์ eBPF ํ๋ก๊ทธ๋จ ๋ด์์ ํจ์๋ฅผ ์ ์ํ๊ฑฐ๋ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค. ๊ผฌ๋ฆฌ ์ฌ๊ท ํธ์ถ์ ๋ค๋ฅธ eBPF ํ๋ก๊ทธ๋จ์ ์คํํ๊ฑฐ๋, ํ์ฌ ์คํ ์ปจํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฐฉ์์ execve() ์์คํ ์ฝ์ด ์ผ๋ฐ์ ์ธ ํ๋ก์ธ์ค์์ ๋์ํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํฉ๋๋ค.

ํฐ ํ์๋ ๋ฐ๋์ ํฐ ์ฑ ์์ด ๋ฐ๋ฆ ๋๋ค.
eBPF๋ ๊ต์ฅํ ๊ฐ๋ ฅํ ๊ธฐ์ ์ด๋ฉฐ, ํ์ฌ ๋ง์ ์ํํธ์จ์ด ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ํต์ฌ์์ ๋์ํ๊ณ ์์ต๋๋ค. eBPF๋ ๋ฆฌ๋ ์ค ์ปค๋์ ํฌํจ๋๋ ๊ฒ์ผ๋ก ์ฌ๊ฒจ์ง๊ธฐ ๋๋ฌธ์, eBPF ๊ฐ๋ฐ ๊ณผ์ ์์ ์์ ์ ์ต์ฐ์ ์ผ๋ก ๊ณ ๋ ค๋๋ ํญ๋ชฉ์ด์์ต๋๋ค. ์ด๋ฅผ ๋ง์กฑํ๊ณ ์, eBPF ์์ ์ ์ฌ๋ฌ ๊ณ์ธต์ ํตํด์ ๋ณด์ฅ๋ฉ๋๋ค.
ํน๋ณํ ๊ถํ ์๊ตฌ
eBPF๋ฅผ ํน๋ณํ ๊ถํ์ด ์์ด๋ ์คํํ ์ ์๋๋ก ์ค์ ํ์ง ์๋ ํ, ๋ฆฌ๋ ์ค ์ปค๋์ eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ๋ ค๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ ํน๋ณํ ๊ถํ์ ๊ฐ์ง ๋ชจ๋(root)์์ ์คํ๋๊ฑฐ๋, CAP_BPF ๊ถํ์ ํ์๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด์, ์ ๋ขฐํ ์ ์๋ ํ๋ก๊ทธ๋จ์ด eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋ง์ผ ํน๋ณํ ๊ถํ ์์ด๋ eBPF๋ฅผ ์คํํ ์ ์๋๋ก ์ค์ ํ๋ค๋ฉด, ํน๋ณํ ๊ถํ์ด ์๋ ํ๋ก์ธ์ค๋ eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ ์ ์๊ธด ํ์ง๋ง, ์ด๋ ์ปค๋์ ์ ํ์ ์ธ ๊ธฐ๋ฅ๊ณผ ์ ํ์ ์ธ ์ ๊ทผ ๊ถํ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๊ฒ์ฆ ๋๊ตฌ
๋ง์ผ ์ด๋ ํ ํ๋ก์ธ์ค๊ฐ eBPF ํ๋ก๊ทธ๋จ์ ๋ก ๋ํ ์ ์๋ค๊ณ ํด๋, ๋ชจ๋ eBPF ํ๋ก๊ทธ๋จ์ ์ฌ์ ํ eBPF ๊ฒ์ฆ ๋๊ตฌ๋ฅผ ๊ฑฐ์ณ๊ฐ์ผํฉ๋๋ค. eBPF ๊ฒ์ฆ ๋๊ตฌ๋ ๊ทธ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ค์์ ์์์ ๊ฐ์ต๋๋ค:
- eBPF ํ๋ก๊ทธ๋จ์ ํญ์ ์ ์ ์ข ๋ฃ๋๋์ง์ ๋ํด ๊ฒ์ฆ๋ฉ๋๋ค, ์๋ฅผ ๋ค์ด eBPF ํ๋ก๊ทธ๋จ์ด ๋ฃจํ๋ฅผ ๋ฐฉํดํ๊ฑฐ๋(block) ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ์๋ ์๋ฉ๋๋ค. eBPF ํ๋ก๊ทธ๋จ์ ์ผ๋ช โ์ ํ๋ ๋ฃจํโ๋ฅผ ํฌํจํ ์ ์์ผ๋ ์ด๋ ๊ฒ์ฆ ๋๊ตฌ๊ฐ ํด๋น ๋ฃจํ๊ฐ ์ข ๋ฃ ์กฐ๊ฑด์ ๊ฐ์ง๊ฑฐ๋, ์ฐธ์ด ๋๋ ๊ฒ์ด ๋ณด์ฅ ๋์์ ๋๋ง ํ์ฉ๋ฉ๋๋ค.
- eBPF ํ๋ก๊ทธ๋จ์ ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฒ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํด์๋ ์๋ฉ๋๋ค.
- eBPF ํ๋ก๊ทธ๋จ์ ์์คํ ์์ ์๊ตฌ๋๋ ํฌ๊ธฐ๋ฅผ ๋ง์กฑํด์ผํฉ๋๋ค. ์์๋ก ํฐ eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- eBPF ํ๋ก๊ทธ๋จ์ ์ ํํ ๋ณต์ก์ฑ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๊ฒ์ฆ ๋๊ตฌ๋ ๋ชจ๋ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ฅผ ํ์ ํ๋ฉฐ ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ ์ต๋ ๋ณต์ก์ฑ์ ์ด๊ณผํ์ง ์๋์ง์ ๋ํด ๋ถ์ํฉ๋๋ค.
๊ฒ์ฆ ๋๊ตฌ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ์ ์์ ํ์ง์ ๋ํด ํ์ธํ๋ ๋๊ตฌ๋ก, ํด๋น eBPF ํ๋ก๊ทธ๋จ์ด ์ด๋ ํ ํ์๋ฅผ ํ๋์ง์ ๋ํด ๊ฒ์ฌํ๋ ๋๊ตฌ๋ ์๋๋๋ค.
๊ฒฝํ
๊ฒ์ฆ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ง์ณ์ง๋ฉด, eBPF ํ๋ก๊ทธ๋จ์ ๊ฒฝํ(hardening) ๋จ๊ณ๋ฅผ ํตํด์ ํด๋น eBPF ํ๋ก๊ทธ๋จ์ด ํน๋ณํ ๊ถํ์ด ์๋ ํ๋ก์ธ์ค ๋๋ ๊ทธ๋ ์ง ์์ ํ๋ก์ธ์ค์์ ๋ก๋ ๋์๋์ง๋ฅผ ํ์ธํฉ๋๋ค. ์ด๋ ๋ค์์ ์ ์ฐจ์ ๊ฐ์ต๋๋ค:
- ํ๋ก๊ทธ๋จ ์คํ ๋ณดํธ: eBPF ํ๋ก๊ทธ๋จ์ ์ ์ฅํ๊ณ ์๋ ์ปค๋ ๋ด๋ถ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ณดํธ๋๋ฉฐ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ปค๋ ๋ฒ๊ทธ ๋ฐ ์ ์์ ์ธ ์กฐ์๊ณผ ๊ฐ์ ์ด๋ ํ ์ด์ ์์๋ผ๋, eBPF ํ๋ก๊ทธ๋จ์ด ๋ณ์กฐ๋๋ ์๋๋ฅผ ๋ฐ๋๋ค๋ฉด, ์ปค๋์ ์์/๋ณ์กฐ๋ eBPF ํ๋ก๊ทธ๋จ์ ์คํํ์ง ์๊ณ ํฌ๋์ํ๊ฒ ๋ฉ๋๋ค.
- Spectre ์ทจ์ฝ์ ์ ๋ํ ๋์ฒ: ์ถ์ธก๊ณผ ๊ฐ์ ๋จ๊ณ์์ CPU๋ ๋ถ๊ธฐ๋ฅผ ์๋ชป ์์ธกํ์ฌ ์ฌ์ด๋ ์ฑ๋ ๊ณต๊ฒฉ์ ํตํ์ฌ ๊ด์ธก ๊ฐ๋ฅํ ๋ถ์์ฉ(side effect)๋ฅผ ๋จ๊ธธ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์์๋ก๋, eBPF ํ๋ก๊ทธ๋จ์ ์ผ์์ ์ธ ๋ช ๋ น์ด๋ฅผ ํตํ์ฌ ์ ์ด๋ ์์ญ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ง์คํน์ ํตํ์ฌ ํด๊ฒฐํฉ๋๋ค. ๋ํ ๊ฒ์ฆ ๋๊ตฌ๋ ํด๋น ํ๋ก๊ทธ๋จ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์คํ ๊ฒฝ๋ก๋ค์ ์ถ์ ํ๊ณ , JIT ์ปดํ์ผ๋ฌ๋ ๊ผฌ๋ฆฌ ์ฌ๊ท๊ฐ ์ง์ ์ ์ธ ํจ์ ํธ์ถ๋ก ๋ณ๊ฒฝ๋ ์ ์์ ์ Retpoline์ ์์ฑํฉ๋๋ค.
- ์์ ๊ฐ๋ฆฌ๊ธฐ: ์ฝ๋์ ์กด์ฌํ๋ ๋ชจ๋ ์์๋ JIT ์คํ๋ ์ด ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๊ฐ๋ ค์ง๋๋ค. ์ด๋ ๊ณต๊ฒฉ์๊ฐ ์ปค๋ ๋ฒ๊ทธ๋ฅผ ์ ์ฉํ์ฌ eBPF ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์นจ์ ํ์ฌ ์์๋ก ์์ฅํ ์ฑ๋ก ์นจํฌํ ์ ์ฑ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ถ์ํ๋ ๋ฐํ์ ์ปจํ ์คํธ
eBPF ํ๋ก๊ทธ๋จ์ ์์์ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. eBPF ํ๋ก๊ทธ๋จ์ ์ปจํ ์คํธ ๋ฐ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ ๋๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ eBPF ํฌํผ ํจ์๋ค์ ์ฌ์ฉํด์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด์ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ ํด๋น eBPF ํ๋ก๊ทธ๋จ์ด ์ ๊ทผ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ง ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ผ ํน์ ์๋ฃ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์์ ํ๋ค๊ณ ๋ณด์ฅ ๋์์ ๋๋ง eBPF ํ๋ก๊ทธ๋จ์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ์ฉ๋ฉ๋๋ค. ์ฆ, ์๋ฌด eBPF ํ๋ก๊ทธ๋จ์ด๋ ์ปค๋ ๋ด๋ถ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์์๋ก ์์ ํ ์ ์์ต๋๋ค.
์ ์ฌํ ์์๋ฅผ ํตํด์ ์ดํด๋ด ์๋ค. GeoCities๋ฅผ ๊ธฐ์ตํ์๋์? 20๋ ์ , ์น์ฌ์ดํธ๋ ๊ฑฐ์ ์ ์ ๋งํฌ์ ์ธ์ด(HTML)๋ก ์์ฑ์ด ๋์์ต๋๋ค. ์ฆ, ์น ํ์ด์ง๋ ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ (๋ธ๋ผ์ฐ์ )๊ฐ ํ๋ฉด์ ํ์ํ ์ ์๋ ํ๋์ ๋ฌธ์์์ต๋๋ค. ์ค๋๋ ์ ์น ํ์ด์ง๋ฅผ ๋ณด๋ฉด, ์น ํ์ด์ง๋ ์์ ํ ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ผ๋ฉฐ, ๊ธฐ์กด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ปดํ์ผ์ด ๋์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ถ๋ถ์ ๋์ฒดํ์ต๋๋ค. ์ด๋ฌํ ์งํ๊ฐ ๊ฐ๋ฅํ๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น์?

๊ฐ๋จํ ๋๋ต์, JavaScript์ ๋์ ์ผ๋ก ์๊ฒจ๋ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ์ฑ ๋๋ถ์ ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ค์ ํ๋์ ๋ ๋ฆฝ์ ์ธ ์ด์์ฒด์ ๋งํผ ๋์ํ ์ ์๋ ์์ฒญ๋ ํ๋ช ์ ๊ฐ์ ธ์์ต๋๋ค.
์ด๋ฌํ ํ๋ช ์ด ์ผ์ด๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น์? ํ๋ก๊ทธ๋๋จธ๋ ๋์ด์ ํน์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์๊ฒ ์ ํ๋์ง ์๊ฒ ๋์์ต๋๋ค. ์๋ก์ด HTML ํ๊ทธ๊ฐ ํ์ํ๋ค๊ณ ํ์ค ๊ธฐ๊ด๋ค์ ์ค๋ํ๋ ๋์ ์, ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ธ ๊ตฌ์ฑ ์์๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋์ด์ ํ์ ์ ์๋๊ฐ ๋นจ๋ผ์ก์ต๋๋ค. ๋ฌผ๋ก , HTML์ด ์๊ฐ์ด ์ง๋๋ฉฐ ๋ฐ์ ํ๊ณ , ์ด๋ฌํ ํ์ ์์ HTML์ด ๊ธฐ์ฌํ ๋ถ๋ถ๋ ์๊ธด ํ์ง๋ง, HTML๋ง ์ฌ์ฉํ์๋ค๋ฉด ์ด๋ ์ถฉ๋ถํ์ง ์์์ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ์์๋ฅผ ํตํด์ eBPF์ ์ ์ฉํ๊ธฐ ์ ์, JavaScript๊ฐ ๋์ ๋๋ฉฐ ์๊ฒจ๋ ๋ช๊ฐ์ ์ฃผ์ํ ์ธก๋ฉด์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- ์์ ์ฑ: ์ ๋ขฐํ ์ ์๋ ์ฝ๋๊ฐ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ฉ๋๋ค. ์ด๋ JavaScript ํ๋ก๊ทธ๋จ์ ์๋๋ฐ์คํ ํ๊ณ ๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐฉ์์ ์ถ์ํํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐ๋์์ต๋๋ค.
- ์ง์์ ๋ฐฐํฌ: ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ ์๋ก ๋ฐฐํฌํ์ง ์์๋ ํ๋ก๊ทธ๋จ ๋ก์ง์ด ๋ฐ์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ ์์์ ํ๋ก๊ทธ๋จ ๋ก์ง์ ์ง์ํ ์ ์๊ฒํ๋ ์ ๋นํ ์์ ์ ์์ค์ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ํด๊ฒฐ๋์์ต๋๋ค.
- ์ฑ๋ฅ: ์ต์ํ์ ์ค๋ฒํค๋๋ฅผ ๊ฐ์ง๊ณ ํ๋ก๊ทธ๋ฐ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ด๋ Just-in-Time(JIT) ์ปดํ์ผ๋ฌ์ ๋์ ์ผ๋ก ํด๊ฒฐ๋์์ต๋๋ค. ์ด์ ๊ฐ์ด, ์ ํํ ๋๊ฐ์ด ์์ํ๋ ๋ด์ฉ์ด eBPF์๋ ๊ฐ์ ์ด์ ๋ฅผ ๊ฐ์ง๊ณ ์กด์ฌํฉ๋๋ค.
eBPF๋ก ๋ค์ ๋์๊ฐ๋ด ์๋ค. eBPF๊ฐ ๋ฆฌ๋ ์ค ์ปค๋์ ๋ฏธ์น๋ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ์ฑ์ ์ํฅ์ ์ดํดํ๊ธฐ ์ํด์๋, ๋ฆฌ๋ ์ค ์ปค๋์ ๊ณ ์์ค ์ํคํ ์ณ์ ์ปค๋์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ํ๋์จ์ด ์ฌ์ด์์ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง์ ๋ํด ์ดํดํด์ผ ํฉ๋๋ค.

๋ฆฌ๋ ์ค ์ปค๋์ ์ฃผ์ ๋ชฉ์ ์ ํ๋์จ์ด ๋๋ ๊ฐ์ ํ๋์จ์ด์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๊ณ ์ผ๊ด์ฑ ์๋ API (์์คํ ์ฝ)๋ฅผ ์ ๊ณตํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด ์คํ๋๋ฉฐ ์์์ ๊ณต์ ํ๋ ๊ฒ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด์, ์ปค๋์ ์ฌ๋ฌ ์๋ธ ์์คํ ๊ณผ ๊ณ์ธต์ ์ด๋ฌํ ์ปค๋์ ์ฑ ์์ ๋ถ์ฐํ๋๋ก ์ ์ง๋๊ณ ์์ต๋๋ค. ๊ฐ ์๋ธ ์์คํ ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ๋ค์ํ ์๊ตฌ๋ฅผ ๊ณ ๋ คํ ์ ์๋๋ก ์ด๋์ ๋ ์ค์ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ง์ผ ์ํ๋ ๋์์ด ์ค์ ๋ง์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ์ปค๋์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ ํต์ ์ผ๋ก ํํด์ง๋ ๋ฐฉ๋ฒ์ด์์ผ๋ฉฐ, ์ด๋ ์ฃผ๋ก 2๊ฐ์ง์ ์ต์ ์ผ๋ก ์ด๋ค์ง๋๋ค:
๋ค์ดํฐ๋ธํ ์ง์
- ์ปค๋ ์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๋ฆฌ๋ ์ค ์ปค๋ ์ปค๋ฎค๋ํฐ์ ํด๋น ๋ณ๊ฒฝ์ ์ด ํ์ํ๋ค๊ณ ์ค๋ํฉ๋๋ค.
- ๋ช ๋ ๊ฐ ๊ธฐ๋ค๋ ค์ ์๋ก์ด ์ปค๋ ๋ฒ์ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ปค๋ ๋ชจ๋
- ์ปค๋ ๋ชจ๋์ ์์ฑํฉ๋๋ค.
- ๋งค ์ปค๋์ ๋ฆด๋ฆฌ์ฆ๊ฐ ์ปค๋ ๋ชจ๋์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๊ฒ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ง์์ ์ผ๋ก ์ปค๋ ๋ชจ๋์ ์์ ํฉ๋๋ค.
- ๋ณด์ ๊ฒฝ๊ณ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ์ ๋ฆฌ๋ ์ค ์ปค๋์ ์์์ํฌ ์ ์๋ ๊ฒ์ ๊ฐ์ํด์ผ ํฉ๋๋ค.
eBPF๋ฅผ ์ฌ์ฉํ๋ฉด, ์ปค๋ ์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ปค๋ ๋ชจ๋์ ๋ก๋ํ์ง ์์๋, ๋ฆฌ๋ ์ค ์ปค๋์ ํน์ ํ๋์ ์ฌํ๋ก๊ทธ๋๋ฐํ ์ ์๋ ์๋ก์ด ์ต์ ์ด ์๊น๋๋ค. ์ฌ๋ฌ ์ธก๋ฉด์์, ์ด๋ JavaScript ๋ฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ์ธ์ด๋ค์ด ๊ธฐ์กด์ ๋ณ๊ฒฝ์ด ์ด๋ ต๊ฑฐ๋ ๋ง์ ๋น์ฉ์ด ๋ฐ์ํ๋ ์์คํ ์ ํ์ ์ ์์ํ๋ ๊ฒ๊ณผ ๋งค์ฐ ๋น์ทํฉ๋๋ค.
eBPF์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ๋ฐ ๋๊ตฌ๋ค์ด ์กด์ฌํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ค์ ๋ชจ๋ ์ฌ์ฉ์๋ค์ ์๋ก ๋ค๋ฅธ ์๊ตฌ์ฌํญ์ ํด๊ฒฐํฉ๋๋ค:
bcc
BCC๋ ์ฌ์ฉ์๊ฐ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์๋ค๊ฐ eBPF ํ๋ก๊ทธ๋จ์ ํฌํจํ์ฌ ์์ฑํ ์ ์๋๋ก ํ๋ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ํ๋ ์์ํฌ๋ ์ฃผ๋ก eBPF ํ๋ก๊ทธ๋จ์ ํตํด ํต๊ณ ์ ๋ณด๋ฅผ ์์งํ๊ฑฐ๋, ์ด๋ฒคํธ๋ฅผ ์์ฑํ ํ ์ ์ ๊ณต๊ฐ์์ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ์์คํ ํ๋กํ์ผ๋ง/์ถ์ ํ๋ก๊ทธ๋จ์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์์ฑ๋ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ eBPF ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ปค๋์ ์๋์ผ๋ก ๋ก๋ํฉ๋๋ค.

bpftrace
bpftrace๋ ๋ฆฌ๋ ์ค eBPF๋ฅผ ์ํ ๊ณ ์์ค์ ์ถ์ ์ธ์ด์ด๋ฉฐ ์๋์ ์ผ๋ก ์ต๊ทผ์ ๋ฆฌ๋ ์ค ์ปค๋(4.x) ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. bpftrace๋ LLVM์ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ eBPF ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ๊ณ , BCC๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ ์ค eBPF ์๋ธ ์์คํ ๋ฟ๋ง ์๋๋ผ kprobe, uprobe, tracepoint์ ๊ฐ์ ๊ธฐ์กด์ ์ปค๋ ์ถ์ ๊ธฐ๋ฅ๊ณผ ์ํธ์์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. bpftrace ์ธ์ด๋ awk์ C์ ๊ฐ์ ๊ธฐ๋ฅ๊ณผ DTrace ๋ฐ SystemTap๊ณผ ๊ฐ์ ๊ธฐ์กด์ ์ถ์ ๋๊ตฌ์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค.

eBPF Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ
eBPF Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ eBPF ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ eBPF ํ๋ก๊ทธ๋จ์ ๋ก๋ ๋ฐ ๊ด๋ฆฌํ๋ ์ ์ฐจ๋ฅผ ๋ชจ๋ํํ ๋ฒ์ฉ eBPF ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. eBPF ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ์์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ํตํ์ฌ ์์ฑ๋๊ณ , clang/LLVM ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ eBPF ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ปดํ์ผ๋ฉ๋๋ค.

libbpf C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
libbpf ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ C/C++์์ ๋์ํ๋ ๋ฒ์ฉ eBPF ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, clang/LLVM ์ปดํ์ผ๋ฌ์์ ์์ฑ๋ eBPF ์ค๋ธ์ ํธ ํ์ผ์ ์ปค๋๋ก ๋ก๋ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๊ธฐ ์ฝ๋๋ก BPF ์์คํ ์ฝ์ ์ถ์ํ ํ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ํํ์ฌ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.

eBPF์ ๋ํด์ ๋ ๋ง์ด ์์๋ณด๊ณ ์ถ๋ค๋ฉด, ๋ค์์ ์ถ๊ฐ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์:
- BPF & XDP Reference Guide, Cilium Documentation, Aug 2020
- BPF Documentation, BPF Documentation in the Linux Kernel
- BPF Design Q&A, FAQ for kernel-related eBPF questions
- Learn eBPF Tracing: Tutorial and Examples, Brendan Gregg's Blog, Jan 2019
- XDP Hands-On Tutorials, Various authors, 2019
- BCC, libbpf and BPF CO-RE Tutorials, Facebook's BPF Blog, 2020
- eBPF Tutorial: Learning eBPF Step by Step with Examples, Various authors, 2024
Generic
- eBPF and Kubernetes: Little Helper Minions for Scaling Microservices (Slides), Daniel Borkmann, KubeCon EU, Aug 2020
- eBPF - Rethinking the Linux Kernel (Slides), Thomas Graf, QCon London, April 2020
- BPF as a revolutionary technology for the container landscape (Slides), Daniel Borkmann, FOSDEM, Feb 2020
- BPF at Facebook, Alexei Starovoitov, Performance Summit, Dec 2019
- BPF: A New Type of Software (Slides), Brendan Gregg, Ubuntu Masters, Oct 2019
- The ubiquity but also the necessity of eBPF as a technology, David S. Miller, Kernel Recipes, Oct 2019
Deep Dives
- BPF and Spectre: Mitigating transient execution attacks (Slides) , Daniel Borkmann, eBPF Summit, Aug 2021
- BPF Internals (Slides), Brendan Gregg, USENIX LISA, Jun 2021
Cilium
- Advanced BPF Kernel Features for the Container Age (Slides), Daniel Borkmann, FOSDEM, Feb 2021
- Kubernetes Service Load-Balancing at Scale with BPF & XDP (Slides), Daniel Borkmann & Martynas Pumputis, Linux Plumbers, Aug 2020
- Liberating Kubernetes from kube-proxy and iptables (Slides), Martynas Pumputis, KubeCon US 2019
- Understanding and Troubleshooting the eBPF Datapath in Cilium (Slides), Nathan Sweet, KubeCon US 2019
- Transparent Chaos Testing with Envoy, Cilium and BPF (Slides), Thomas Graf, KubeCon EU 2019
- Cilium - Bringing the BPF Revolution to Kubernetes Networking and Security (Slides), Thomas Graf, All Systems Go!, Berlin, Sep 2018
- How to Make Linux Microservice-Aware with eBPF (Slides), Thomas Graf, QCon San Francisco, 2018
- Accelerating Envoy with the Linux Kernel, Thomas Graf, KubeCon EU 2018
- Cilium - Network and Application Security with BPF and XDP (Slides), Thomas Graf, DockerCon Austin, Apr 2017
Hubble
- Hubble - eBPF Based Observability for Kubernetes, Sebastian Wicki, KubeCon EU, Aug 2020
- Learning eBPF, Liz Rice, O'Reilly, 2023
- Security Observability with eBPF, Natรกlia Rรฉka Ivรกnkรณ and Jed Salazar, O'Reilly, 2022
- What is eBPF?, Liz Rice, O'Reilly, 2022
- Systems Performance: Enterprise and the Cloud, 2nd Edition, Brendan Gregg, Addison-Wesley Professional Computing Series, 2020
- BPF Performance Tools, Brendan Gregg, Addison-Wesley Professional Computing Series, Dec 2019
- Linux Observability with BPF, David Calavera, Lorenzo Fontana, O'Reilly, Nov 2019
- BPF for security - and chaos - in Kubernetes, Sean Kerner, LWN, Jun 2019
- Linux Technology for the New Year: eBPF, Joab Jackson, Dec 2018
- A thorough introduction to eBPF, Matt Fleming, LWN, Dec 2017
- Cilium, BPF and XDP, Google Open Source Blog, Nov 2016
- Archive of various articles on BPF, LWN, since Apr 2011
- Various articles on BPF by Cloudflare, Cloudflare, since March 2018
- Various articles on BPF by Facebook, Facebook, since August 2018