[Linux] BPF, eBPF
BPF์ eBPF๋ ๋ชจ๋ํฐ๋ง ๊ด๋ จ ๋ถ์ผ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํต์ฌ ๊ธฐ์ ์ค ํ๋๋ค.
๊ฐ๋
์ ๋ฆฌ๋ง ์ข ํด๋๋ค.
BPF?
BPF๋ Berkely Packet Filter์ ์ค๋ง๋ก, ๋คํธ์ํฌ ๋ชจ๋ํฐ๋ง์ ์ํ ๋งค์ปค๋์ฆ์ด๋ค.
1992๋
์ BSD์์ ๋จผ์ ์ ์๋์๊ณ Linux ์ง์์์๋ ์์
ํด์์ ์ ์ฐ๊ณ ์๋ค.
๋ฆฌ๋ ์ค์์๋ ์ง์ง ๊ฐ์๋จธ์ ์ ํ๋ ๋์ฐ๋ ํํ๋ก ์ฌ์ฉ๋๋ค.
https://medium.com/@chivier.humber_15513/ebpf-a-new-swiss-army-knife-in-the-system-2d6421c8d39
๊ทธ๋์ ์์ ์๋ BPF๋ก ํธ๋ ์ด์ฑ์ ํ๋๋ฐ ์ฑ๋ฅ ๋ญ๋น๊ฐ ์ข ์๋ ํธ์ด์๋ค๊ณ ํ๋ค. ์์ฆ์ JIT์ด ๋ค์ด๊ฐ์ ์ข ๋์์ก๋ค๋ ๋ชจ์์ด๋ค.
BPF์ ๋ํ์ ์ธ ์ฌ์ฉ๋ก๋ tcpdump ๊ฐ์ ํจํท ์บก์ณ ๋๊ตฌ๋ค.
๋ด๋ถ์ ์ผ๋ก BPF๋ฅผ ํ์ฉํด์ ๊ฐ๋ก์ฑ๊ธฐ๋ฅผ ๊ตฌํํ๋ค.
๊ทผ๋ฐ ์ด๋ฐ ๊ฒ ์ ๋๊ฐ ์ผ๋ฐ์ ์ธ BPF ์์ฉ์ ํ๊ณ๋ค. BPF์ ๋งค์ปค๋์ฆ์ ์ปค๋ ๋ฆฌ์์ค ์ ๋ฐ์ ์์ด์ ์ ์ฉํ๊ณ ์ ๋ํ๋ ๊ฒ์ด eBPF๋ค.
eBPF
eBPF๋ ํ์ฅ๋ BPF(Extended Berkeley Packet Filter)์ ์ค๋ง์ด๋ค.
์์ฆ ๋ณดํต BPF๋ผ๊ณ ํ๋ฉด eBPF๋ฅผ ๋งํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค. ์์ฉํ๋ก๊ทธ๋จ ์์ค์์ ์ฌ์ฉํ ์ผ์ด ๋ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๊ฑด ๋คํธ์ํฌ ์บก์ณ์ ๊ตญํ๋๋๊ฒ ์๋๋ผ, ํ์ผ์์คํ
์ ๊ทผ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ์ค์ผ์ค๋ฌ, ํจ์ ์คํ ์๊ฐ ๋ฑ ํ๋ก๊ทธ๋จ ์ ๋ฐ์ ๋ํ ์ถ์ ์ ๊ฐ๋ฅ์ผ ํ๋ค.
Linux๋ง ์ง์๋๋๊ฒ ์๋๋ผ Windows์๋ ์ด์๋์๋ค. ๋ฉ์ด์ ํ๋ซํผ์์๋ ๋ค ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
ํ์ ๋๋ ์ Linux ์ปค๋ ๋ฒ์ 3.18๋ถํฐ๋ ์์ ๋ฆฌ๋ ์ค ์ปค๋์ eBPF์ฉ ๊ฐ์๋จธ์ ์ด ๋ด์ฅ๋์ด์๋ค. 64๋นํธ ๋ ์ง์คํฐ๊ฐ 10๊ฐ๋ ๋ค์ด์๋ ๊ฐ์๋จธ์ ์ด๋ค.
https://www.iggiewang.cn/2022/12/27/eBPF-Introduction/
https://medium.com/@chivier.humber_15513/ebpf-a-new-swiss-army-knife-in-the-system-2d6421c8d39
์ฑ๋ฅ ๋ถ๋ด๋ ๊ทธ๋ฆฌ ํฌ์ง ์์ ํธ์ด๋ค.
๋ณดํต 1% ์ ๋์ ๋ฆฌ์์ค๋ง์ ์ ์ ํ๋ค๋๊ฒ ํต๋ก ์ธ ๊ฒ ๊ฐ๋ค.
eBPF๋ ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ฌ์ฉ๋๋ค.
-
C๋ฅผ ํ์ฉํด์ BPF ์ ์ด ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
-
LLVM clang ๋ฑ์ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ BPF ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผํ๋ค.
-
BPF ๋ฐ์ดํธ์ฝ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ค.
-
BPF ํ๋ก๊ทธ๋จ์ ์ปค๋์์ ๋ฐ์ํ๋ ์ฌ๋ฌ๊ฐ์ง ์ด๋ฒคํธ๋ค์ ์ ์ก๋ฐ๋๋ค.
Container ํ๊ฒฝ์์
eBPF๊ฐ ํนํ๋ ๋๊ฐ์ ๋ํ๋ด๋ ๋ถ๋ถ์ kubernetes ๊ฐ์ ์ปจํ ์ด๋ ์ธํ๋ผ ํ๊ฒฝ์ด๋ค.
์ปจํ ์ด๋๋ง๋ค bpf๋ฅผ ๊ตฌ์ฑํ๋๊ฑด ์๋๊ณ , HOST์๋ง ์ค์นํด๋๊ณ cgroup-bpf ๊ฐ์ cgroup์ ๊ณต์ ํ๋ฉด์ ์์ฉํ๋ ํํ๊ฐ ๋๋ค.
eBPF๋ฅผ ์ ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋คํธ์ํฌ ์์ค์ ๊ตฌ์ฑ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, CNI๋ ๊ฑฐ๊ธฐ์ ๋ง์ถฐ์ฃผ๋๊ฒ ์ข๋ค.
eBPF๋ฅผ ๊ฐ์ฅ ์ ์ง์ํ๋ k8s CNI๋ ์๋ง Cilium์ธ ๊ฒ ๊ฐ๋ค.
https://cilium.io/
๋ฐ๋์ ์ด๊ฑธ ์จ์ผํ๋๊ฑด ์๋๋ค. calico ๊ฐ์ ๊ธฐ์กด CNI๋ก๋ ์ถฉ๋ถํ ๊ตฌ์ฑ์ ํ ์ ์๋ค.
์ฐธ์กฐ
https://netflixtechblog.com/how-netflix-uses-ebpf-flow-logs-at-scale-for-network-insight-e3ea997dca96
https://hyeyoo.com/133
https://kim-dragon.tistory.com/274
https://en.wikipedia.org/wiki/Berkeley_Packet_Filter
https://stackoverflow.com/questions/72299646/what-is-the-difference-between-bpf-and-ebpf
https://medium.com/@chivier.humber_15513/ebpf-a-new-swiss-army-knife-in-the-system-2d6421c8d39
https://en.wikipedia.org/wiki/EBPF