[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๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  1. C๋ฅผ ํ™œ์šฉํ•ด์„œ BPF ์ œ์–ด ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค.

  2. LLVM clang ๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ BPF ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.

  3. BPF ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค.

  4. 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