[2026-07-18] NetEdit An Orchestration Platform for eBPF Network Functions at Scale

Motivation

๊ธฐ์กด์˜ ํ•œ๊ณ„

๊ธฐ์กด ์šด์˜์ฒด์ œ์˜ ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ ์Šคํƒ์€ ๊ตฌ์กฐ๊ฐ€ ๊ณ ์ •. ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํ‚น ์Šคํƒ ๋ฐ ํ”„๋กœํ† ์ฝœ ์„ค์ •์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ Fine-tuningํ•˜๊ธฐ ์–ด๋ ค์›€

  • Fine-tuning : ๊ฐœ๋ณ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด, Latency ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ ๊ธฐ์ € ํ•˜๋“œ์›จ์–ด ํŠน์„ฑ์— ๋งž๊ฒŒ ๋„คํŠธ์›Œํฌ ๋งค๊ฐœ ๋ณ€์ˆ˜(์ดˆ๊ธฐ cwnd, rwnd, timeout ๋“ฑ)์„ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ณผ์ •
    • ํ•„์š”์„ฑ : ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ๋Š” ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์™€ ์ˆ˜๋งŒ ๊ฐœ์˜ ์„œ๋น„์Šค, ๊ฐ ์„œ๋น„์Šค์˜ ํŠน์„ฑ๊ณผ ํ•˜๋“œ์›จ์–ด ๊ทœ๊ฒฉ ๋“ฑ์ด ์ด์งˆ์ ์ด๋ผ ๋ฒ”์šฉ ์„ค์ •์ด ์•„๋‹Œ ๊ฐ ํŠน์„ฑ์— ๋งž๊ฒŒ fine-tuning์„ ํ•ด์•ผ ํ•จ
  • eBPF
    • ๋„์ž… ๋ฐฐ๊ฒฝ : ์šด์˜์ฒด์ œ ์ปค๋„ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์ฃผ์ž…. ์ธํ”„๋ผ ์†๋„๋‚˜ ์ปค๋„ ์—…๊ทธ๋ ˆ์ด๋“œ ๋Šฅ๋ ฅ์„ ์ €ํ•ด ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜์—ฌ ์œ ์—ฐ์„ฑ๊ณผ ์„ธ๋ฐ€ํ•œ ์ œ์–ด ๊ธฐ๋Šฅ ์ œ๊ณต
    • eBPF์˜ ํ•œ๊ณ„ : eBPF๋Š” ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์€ ์ž‘์—…์— ํ™œ์šฉ๋˜์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„ ๋ฐœ์ƒ
      • ๋‹จ์ผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์–ด ์ˆ˜๋งŽ์€ ์„œ๋น„์Šค์™€ ํ•˜๋“œ์›จ์–ด์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋งž์ถ”์–ด ์ž„์˜์˜ eBPF ์ฝ”๋“œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ต์ฒดํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ์—†์Œ
      • ๋‹ค์ˆ˜ ์„œ๋น„์Šค๊ฐ€ ๊ณต์กดํ•˜๋Š” ๊ณ ๋„์˜ ๋™์  ํ™˜๊ฒฝ์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ(High availability guarantees)๊ณผ ์—„๊ฒฉํ•œ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ(Rigorous testing capabilities)์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ๊ฒฐ์—ฌ
        • ๊ณ ๊ฐ€์šฉ์„ฑ : ์‹œ์Šคํ…œ์˜ ๊ด€๋ฆฌ ๋ฐ ์ œ์–ด ํ”„๋กœ์„ธ์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์žฌ์‹œ์ž‘๋˜๋”๋ผ๋„, ์‹ค์ œ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ ๋ฐ์ดํ„ฐ ํ‰๋ฉด์€ ์ค‘๋‹จ ์—†์ด ๋„คํŠธ์›Œํฌ ์ •์ฑ…(ํŠœ๋‹ ์„ค์ •)์„ ์ง€์† ์ง‘ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์›๋ ฅ. ๊ธฐ์กด ์‹œ์Šคํ…œ์—์„œ eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„(User-space)์˜ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค์— ์˜์กดํ•˜์—ฌ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด, ์ปค๋„์ด ์—ฐ๊ฒฐ๋œ eBPF ๊ฐ์ฒด์™€ ์„ค์ • ์ƒํƒœ๋ฅผ ์ž„์˜๋กœ ์ดˆ๊ธฐํ™” ๋ฐ ์ œ๊ฑฐํ•ด๋ฒ„๋ ค ์ง€์†์ ์ธ ์ •์ฑ… ์ ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ
        • ์—„๊ฒฉํ•œ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ : BPF์˜ ๊ธฐ๋ณธ ๋‚ด์žฅ ๊ฒ€์ฆ๊ธฐ(Verifier)๋Š” ์ฝ”๋“œ๊ฐ€ ์ปค๋„์„ ๋‹ค์šด์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์ตœ์†Œํ•œ์˜ ์•ˆ์ „์„ฑ(๋ฃจํ”„, ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„ ์ œํ•œ)๋งŒ ๊ฒ€์‚ฌํ•  ๋ฟ, ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋žจ์ด ์–ฝํžŒ ๋™์  ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋…ผ๋ฆฌ์  ์ถฉ๋Œ์ด๋‚˜ ๊ต์ฐจ ๊ธฐ๋Šฅ ๊ฐ„์„ญ(Cross-Feature Interactions)์„ ๊ฒ€์ฆํ•  ์ฒด๊ณ„๊ฐ€ ์ง€์› ์•ˆํ•จ
          • ๊ต์ฐจ ๊ธฐ๋Šฅ ๊ฐ„์„ญ : ๋‹ค์ค‘ ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋ฐ ํŒจํ‚ท ์ƒํƒœ์— ๋Œ€ํ•ด ๋ชฉ์ ์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: ๋ฐฉํ™”๋ฒฝ, ๋Œ€์—ญํญ ์ œํ•œ, ํ˜ผ์žก ์ œ์–ด)์ด ๋™์‹œ์— ๋ถ€์ฐฉ๋˜์–ด ์‹คํ–‰. ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„ ์ถฉ๋Œ, ์ œ์–ด ๋กœ์ง ๋ฎ์–ด์“ฐ๊ธฐ, ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(Shared Map) ์˜ค์—ผ ๋“ฑ์˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒ
          • ๋‹ค์ค‘ ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ๊ฒฐํ•จ์€ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„˜์–ด ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ ์ „์ฒด์˜ ์ปค๋„ ํŒจ๋‹‰์ด๋‚˜ ๋งˆ๋น„๋ฅผ ์œ ๋ฐœ

โ†’ ์„œ๋น„์Šค์™€ ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ ๋ณ€ํ™”์— ๋งž์ถฐ ์ž„์˜์˜ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ ์†(High velocity)์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌํ•˜๊ณ , ๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„ ๊ตฐ์— ๊ฑธ์ณ ๋‹ค์ˆ˜ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์„ฑ๊ณผ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ค‘์•™์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์กฐ์œจ(Orchestration)ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ์‹œ์Šคํ…œ์ธ NetEdit์˜ ๊ฐœ๋ฐœ์ด ์š”๊ตฌ

Challenge

  1. C1 (๋‹ค์–‘ํ•˜๊ณ  ๋ณ€ํ™”ํ•˜๋Š” ์ปค๋„ ํ›… ํฌ์ธํŠธ) : ๋‹ค์–‘ํ•œ ์ปค๋„ ๋ฆด๋ฆฌ์Šค์— ๊ฑธ์ณ ๋…ธ์ถœ๋˜๋Š” eBPF ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ธฐ๋Šฅ์€ ๋น ๋ฅด๊ฒŒ ์ง„ํ™”ํ•จ. ๋‹ค์ˆ˜์˜ ์ปค๋„ ํ™˜๊ฒฝ์—์„œ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปค๋„ ํ›… ํฌ์ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋จ. ๋ชจ๋“  eBPF ํ”„๋กœ๊ทธ๋žจ ๋ฐ ์ปค๋„ ๋ฒ„์ „์— ๊ฑธ์ณ ํ†ต์ผ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ž„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•จ
  2. C2 (์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘ ์ค‘๋‹จ) : ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ eBPF ํ”„๋กœ๊ทธ๋žจ์€ ๊ณ„์† ์ž‘๋™ํ•ด์•ผ ํ•จ.
  3. C3 (๋ณต์žกํ•˜๊ณ  ์ ์‘์ ์ธ ๊ตฌ์„ฑ): eBPF ํ”„๋กœ๊ทธ๋žจ์€ ์„œ๋น„์Šค ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋‘˜์€ ๋ชจ๋‘ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”์— ์ ์‘
  4. C4 (๋™์  ์„œ๋น„์Šค ๋ฐฐ์น˜): eBPF ํ”„๋กœ๊ทธ๋žจ์€ ํŠน์ • ์ธํ”„๋ผ์— ๋งž์ถฐ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” eBPF ๊ธฐ๋Šฅ์„ ์ธํ”„๋ผ ํŠน์„ฑ(์˜ˆ: ํ•˜๋“œ์›จ์–ด)๊ณผ ๊ฒฐํ•ฉ์‹œํ‚ด. ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋น„์Šค ๋ฐฐ์น˜๋Š” ๋™์ ์ด๋ฉฐ eBPF ํ”„๋กœ๊ทธ๋žจ ํ˜ธํ™˜์„ฑ๊ณผ๋Š” ๋ฌด๊ด€ํ•จ.
  5. C5 (์ƒ๊ด€๋œ ์ปค๋„ ๋ฒ„๊ทธ): eBPF ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋Š” ๊ฒ€์ฆ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠน์ • ์ปค๋„-eBPF ์ƒํ˜ธ์ž‘์šฉ์—์„œ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ๊ฒฌ๋จ. ์•ˆ์ „์„ฑ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๊ฒฉ๋ฆฌํ•˜์—ฌ eBPF-์ปค๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•จ

Background

eBPF

ํŠน์ • Hook-point์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅ๋˜๋Š” stateless ์ฝ”๋“œ ์กฐ๊ฐ. ์ œํ•œ๋œ ์ฝ”๋“œ ํฌ๊ธฐ์™€ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ ธ ์ปค๋„์ด ๋กœ๋”ฉ ์ „ ์ฝ”๋“œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ํ™•์ธํ•˜๋Š” ๊ธฐ์ˆ 

  • eBPF maps : ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ฐ„ ์ƒํƒœ ์œ ์ง€ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„ ์ƒํƒœ ๊ณต์œ ์˜ ๋ชฉ์ . User-space์—์„œ๋„ ์‹œ์Šคํ…œ ์ฝœ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ฑ„ํƒ ์ด์œ 
    1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ ํˆฌ๋ช…์„ฑ(transparency)์„ ์ œ๊ณต
      • ํˆฌ๋ช…์„ฑ : ์‹œ์Šคํ…œ์˜ ํŠน์ • ๊ธฐ๋Šฅ์ด ํ•˜์œ„ ๊ณ„์ธต์—์„œ ์ž‘๋™ํ•  ๋•Œ, ์ƒ์œ„ ๊ณ„์ธต์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ทธ ์กด์žฌ๋ฅผ ์ธ์ง€ํ•˜๊ฑฐ๋‚˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด ๊ธฐ์กด ์ƒํƒœ ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์„ฑ
    2. ์ปค๋„ ๋ชจ๋“ˆ๊ณผ ๋‹ฌ๋ฆฌ ์ปค๋„ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ์ฝ”๋“œ ์žฌ์ž‘์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„ ์ปค๋„ ์ง„ํ™”์— ๋Œ€ํ•œ ์ ์‘๋ ฅ์ด ๋†’์Œ
      • ์ปค๋„ ๋ชจ๋“ˆ์€ ๋‚ด๋ถ€ API๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์˜์กดํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ๋‚˜์˜ค๋ฉด ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š์•„ ์ฝ”๋“œ๋ฅผ ์žฌ์ž‘์„ฑํ•ด์•ผ ํ•จ
      • eBPF๋Š” ํ—ฌํผ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ปค๋„๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฏ€๋กœ ์ปค๋„ ์—…๊ทธ๋ ˆ์ด๋“œ์— ์ ์‘๋ ฅ์ด ๋†’์•„ ์ฝ”๋“œ๋ฅผ ์žฌ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Œ
        • kprobe๋ฅผ ํ†ตํ•œ ์ž„์˜ ํ•จ์ˆ˜ ํ›„ํ‚น์€ ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋‚ด๋ถ€ ์ปค๋„ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์‹๋ณ„์ž๊ฐ€ ๊ณ ์ •๋˜์–ด ๋ณด์žฅ๋˜๋Š” ์•ˆ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์ธ Tracepoints๋ฅผ ํ™œ์šฉ
        • ๋„คํŠธ์›Œํฌ ํŠœ๋‹ ์˜์—ญ์—์„œ๋Š” ํŒจํ‚ท ์ฒ˜๋ฆฌ ์Šคํƒ์— ํ‘œ์ค€ํ™”๋œ XDP, TC(Traffic Control) ํ›… ํฌ์ธํŠธ๋‚˜, ์ปค๋„ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๊ตฌ์กฐ์ฒด ํ˜•ํƒœ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋Œ€์ฒดํ•˜๋Š” struct_ops ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ปค๋„ ๋‚ด๋ถ€ ํ•จ์ˆ˜์˜ ๋ช…์นญ ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ eBPF ๋กœ์ง์„ ๊ฒฉ๋ฆฌ(Decoupling)
        • BPF CO-RE (Compile Once โ€“ Run Everywhere) ๋ฐ BTF (BPF Type Format) : . CO-RE ๊ธฐ์ˆ ์€ BTF๋ผ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋‹จ์ผ eBPF ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํƒ€๊ฒŸ ์ปค๋„์— ์ ์žฌ(Load)๋  ๋•Œ BPF ๋กœ๋”๊ฐ€ ๋Œ€์ƒ ์ปค๋„์˜ ๋ ˆ์ด์•„์›ƒ ์ฐจ์ด๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ณ€์ˆ˜ ๋ฐ ๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜คํ”„์…‹์„ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์žฌ๋ฐฐ์น˜
    3. ์„ธ๋ฐ€ํ•œ ์ œ์–ด : IPTable์™€ ๊ฐ™์€ ์ง€์› ๋„๊ตฌ๋Š” ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œํ•œ์ . eBPF๋Š” ํฌํŠธ ๋ฒˆํ˜ธ, ํŠน์ • NIC ๋ชจ๋ธ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์ค€์— ๊ธฐ๋ฐ˜ํ•œ ๋งค์นญ์„ ํฌํ•จํ•˜์—ฌ ๊ด‘๋ฒ”์œ„ํ•œ ๋„คํŠธ์›Œํ‚น ๊ธฐ๋Šฅ ์ œ์–ด๋ฅผ ์ œ๊ณต
      • ํŒจํ‚ท์˜ ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ์ง€ ์‹๋ณ„ - ๊ตฌ๊ธ€ ๋“ฑ์€ ์‹œ์šฉ์ž ๊ณต๊ฐ„ ์Šคํƒ(userspace stacks)์„ ๋„์ž…ํ•˜์—ฌ ์œ ์—ฐํ•œ ๋„คํŠธ์›Œํฌ ํŠœ๋‹์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ์ด๋Š” ์ข…์ข… ๋ณต์žกํ•œ ์ปค๋„ ์ตœ์ ํ™”๋‚˜ ํŠน์ˆ˜ ๋„คํŠธ์›Œํฌ ์นด๋“œ๋ฅผ ์š”๊ตฌ
      • ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์Šคํƒ : ํŒจํ‚ท ์ฒ˜๋ฆฌ๋ฅผ ์šด์˜์ฒด์ œ ์ปค๋„์˜ ๊ธฐ๋ณธ ๋„คํŠธ์›Œํ‚น ์Šคํƒ์— ๋งก๊ธฐ์ง€ ์•Š๊ณ  ์ปค๋„์„ ์šฐํšŒ(Kernel Bypass)ํ•˜์—ฌ, ์‚ฌ์šฉ์ž ๊ณต๊ฐ„(User-space) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜

Motivating Example

  • ํ•ต์‹ฌ ๊ฐœ๋… ์ •์˜
    • Migration : ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค, VM ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ˜„์žฌ ๊ตฌ๋™ ์ค‘์ธ ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„๋กœ ์ด๋™์‹œํ‚ค๋Š” ํ”„๋กœ์„ธ์Šค.
    • ํ˜ผ์žก ์ œ์–ด ํŠœ๋‹ (Congestion Control Tuning): ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ ์ƒ์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ ๋ฐ ํŒจํ‚ท ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์†ก์‹  ์ธก์˜ ํ˜ผ์žก ์œˆ๋„์šฐ(cwnd)๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™” ๊ณผ์ •. RTT, ํŒจํ‚ท ์†์‹ค ๋“ฑ์˜ ์ง€ํ‘œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹  ๊ฒฝ๋กœ ์ „์ฒด์˜ ๋Œ€์—ญํญ ํ•œ๊ณ„๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ์ „์—ญ์  ํŠน์„ฑ์„ ์ง€๋‹˜.
      • ์˜ˆ๋ฅผ ๋“ค์–ด, RTT๊ฐ€ ํฐ ๊ฒƒ์„ ๋ณด๊ณ  Cross-region์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ์‹๋ณ„
    • ์ดˆ๊ธฐ ์œˆ๋„์šฐ (Initial Window, IW): TCP ์—ฐ๊ฒฐ์ด ์„ค์ •๋œ ์งํ›„, ์ˆ˜์‹  ์ธก์˜ ํ™•์ธ ์‘๋‹ต(ACK)์„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ์†ก์‹  ์ธก์ด ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ์† ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŒจํ‚ท ํ—ˆ์šฉ๋Ÿ‰.
      • IW๊ฐ€ ํด ๊ฒฝ์šฐ RTT๋ฅผ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ ์‹œ์ž‘ ์ง€์—ฐ ์‹œ๊ฐ„ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ
    • ToR (Top of Rack) ์Šค์œ„์น˜: ๋‹จ์ผ ์„œ๋ฒ„ ๋ž™(Rack) ๋‚ด๋ถ€์— ๋ฐฐ์น˜๋˜์–ด, ํ•ด๋‹น ๋ž™์— ์žฅ์ฐฉ๋œ ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„๋“ค์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ƒํ˜ธ ์—ฐ๊ฒฐํ•˜๊ณ  ์ƒ์œ„ ๊ณ„์ธต ๋„คํŠธ์›Œํฌ๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ฃ์ง€ ์Šค์œ„์น˜ ์žฅ๋น„.
    • ๋ฒ„ํผ ์ถ•์  (Buffer Buildup): ์Šค์œ„์น˜ ๋ฒ„ํผ์— ๋ˆ„์ ๋˜๋Š” ํ˜„์ƒ.
  • Example
    • ์„œ๋น„์Šค A : RTT ๋ฐ ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ rwnd ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜์—ฌ burst๋ฅผ ์™„ํ™”ํ•˜๋Š” ํŠœ๋‹ ๊ธฐ๋Šฅ ์ ์šฉ
      • ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ์„œ๋ฒ„๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ, RTT์™€ ๊ฐ™์€ ๊ฑฐ์‹œ์  ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ™˜๊ฒฝ์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋ฏ€๋กœ ๊ธฐ์กด ํ˜ผ์žก ์ œ์–ด ํŠœ๋‹(์˜ˆ: Cubic ์•Œ๊ณ ๋ฆฌ์ฆ˜)์€ ๋ณ€๊ฒฝ ์—†์ด ์œ ์ง€ ๊ฐ€๋Šฅํ•จ. ๊ทธ๋Ÿฌ๋‚˜ NIC ์†๋„์™€ rwnd์˜ ์ƒ๊ด€๊ด€๊ณ„๋กœ ์ธํ•ด ์œˆ๋„์šฐ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ ์žฌ์กฐ์ •๋˜์–ด์•ผ ํ•จ.
      • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œ, NIC ์†๋„์™€ rwnd์˜ ์ƒ๊ด€๊ด€๊ณ„
        • ๊ณ ์† NIC ํ™˜๊ฒฝ : rwnd๊ฐ€ ์ž‘์„ ์ˆ˜๋ก ๋Œ€์—ญํญ์„ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•จ
        • ์ €์† NIC ํ™˜๊ฒฝ : rwnd๊ฐ€ ํด ์ˆ˜๋ก ํ•˜๋“œ์›จ์–ด ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋ฒ„์ŠคํŠธ ๋ฐœ์ƒํ•˜์—ฌ ToR ์Šค์œ„์น˜์—์„œ ๋ฒ„ํผ ์ถ•์  ๋ฐ ๊ฒฝํ•ฉ์œผ๋กœ ์ธํ•œ ํŒจํ‚ท ๋“œ๋ž ๋ฐœ์ƒ
    • ์„œ๋น„์Šค B : ๋†’์€ RTT๋ฅผ ๊ฐ€์ง€๋Š” cross-region ํ๋ฆ„์—๋งŒ ์ ์šฉ๋˜๋Š” ํŠน์ • ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜(Cubic)์ด ์ ์šฉ
      • A์˜ ๊ธฐ์กด ์„œ๋ฒ„๋ฅผ ์„œ๋น„์Šค B๊ฐ€ ๋Œ€์ฒดํ•  ๋•Œ, ์„œ๋น„์Šค ๊ตฌ๋™์˜ ์‹œ์ž‘ ์ง€์—ฐ ์‹œ๊ฐ„(Startup Latency) ํ–ฅ์ƒ์„ ์œ„ํ•ด ํŠน์ • TCP ์ดˆ๊ธฐ ์œˆ๋„์šฐ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ํŠœ๋‹ ๊ธฐ๋Šฅ ์š”๊ตฌ
    • ์„œ๋น„์Šค A, B ๋ชจ๋‘ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์š”๊ฑด๋“ค๋กœ ํŠธ๋ž˜ํ”ฝ ํ”„๋กœํŒŒ์ผ์ด ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์˜ ๋™์  ํŠน์„ฑ (Dynamism of Configuration Changes)
    • ์œ„์™€ ๊ฐ™์ด, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋‚˜ ํŠธ๋ž˜ํ”ฝ ํ”„๋กœํŒŒ์ผ์˜ ๋ณ€ํ™”๋กœ ๋„คํŠธ์›Œํฌ ์„ค์ • (ํŠœ๋‹ ์ •์ฑ…)์ด ๋ณ€ํ™”๋จ
    • ํŠœ๋‹ ์ •์ฑ…์˜ ์‹œ๊ฐ„์  ๋ณ€๊ฒฝ ๋นˆ๋„ ๋ฐ ๋ณ€๋™ ํญ์„ ์ˆ˜์น˜ํ™”ํ•œ ์ง€ํ‘œ
    • ๋กฑํ…Œ์ผ์  ํŠน์„ฑ: 1๊ฐœ์›”๊ฐ„ ์Šคํ† ๋ฆฌ์ง€(Storage) ๋ฐ ๊ธฐ๊ณ„ ํ•™์Šต(ML) ์„œ๋น„์Šค์— ์‹ค์ œ ์ ์šฉ๋œ ๋„คํŠธ์›Œํฌ ํŠœ๋‹ ์ •์ฑ…(tuningFeatures)์˜ ์ด๊ฐœ์ˆ˜๋ฅผ ์ถ”์ 

      image.png

      • ์ธํ”„๋ผ์˜ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์šด์˜์ฒด์ œ ์ปค๋„์— ๋™์ ์œผ๋กœ ์ฃผ์ž…(Load/Attach) ๋ฐ ์ œ๊ฑฐ(Detach)๋˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ์ˆ˜์™€ ์ข…๋ฅ˜๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฆ๊ฐ
      • ๋Œ€๋ถ€๋ถ„(ํ‰๊ท )์—๋Š” ์†Œ์ˆ˜์˜ ๊ธฐ๋ณธ์ ์ธ ๋„คํŠธ์›Œํฌ ํŠœ๋‹ ์ •์ฑ…(๋ถ„ํฌ์˜ ๋จธ๋ฆฌ, Head)๋งŒ์ด ํ™œ์„ฑํ™”๋˜์ง€๋งŒ, ์ผ์‹œ์ ์ธ ํŠธ๋ž˜ํ”ฝ ๋ฒ„์ŠคํŠธ๋‚˜ ํ•˜๋“œ์›จ์–ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋“ฑ ์˜ˆ์™ธ์ ์ธ ์—ฃ์ง€ ์ผ€์ด์Šค(Edge cases)๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๊ณ ๋„๋กœ ํŠนํ™”๋œ ์ˆ˜๋งŽ์€ ์„ธ๋ถ€ ํŠœ๋‹ ์ •์ฑ…๋“ค(๋ถ„ํฌ์˜ ๊ผฌ๋ฆฌ, Tail)์ด ์‚ฐ๋ฐœ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด p95 ์ˆ˜์น˜๋ฅผ ๊ธ‰๊ฒฉํžˆ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋น„๋Œ€์นญ์  ํ†ต๊ณ„ ๋ถ„ํฌ๋ฅผ ์˜๋ฏธ
      • ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์ „์— ์ •์˜ํ•œ ๋ฒ”์šฉ ํ”„๋กœํ† ์ฝœ ์„ค์ •์ด๋‚˜ ์ •์  ํœด๋ฆฌ์Šคํ‹ฑ๋งŒ์œผ๋กœ๋Š” ๋กฑํ…Œ์ผ์— ์œ„์น˜ํ•œ ์ˆ˜๋งŽ์€ ์˜ˆ์™ธ์  ์—ฃ์ง€ ์ผ€์ด์Šค(Edge cases)์™€ ์„ธ๋ถ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ํฌ๊ด„ํ•  ์ˆ˜ ์—†๋‹ค

Requirement

  1. ๊ฐœ๋ฐœ ํˆฌ๋ช…์„ฑ(C1)
    • eBPF ๊ธฐ์ˆ ์€ ๋„คํŠธ์›Œํฌ ์Šคํƒ์˜ ์—ฌ๋Ÿฌ ์ง€์ ์— ํ›… ํฌ์ธํŠธ๋ฅผ ์ œ๊ณต. ํ•˜์ง€๋งŒ ๊ฐ ํ›… ํฌ์ธํŠธ๋งˆ๋‹ค eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์— loadํ•˜๊ณ  ํŠน์ • ์ด๋ฒคํŠธ์— attach/detach ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ปค๋„ API, ์‹œ์Šคํ…œ ์ฝœ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด ๋“ฑ์ด ๋‹ค๋ฆ„
    • ์‹ค์ œ ๊ธฐ๋Šฅ์˜ ๋กœ์ง๋ณด๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ํ›… ํฌ์ธํŠธ ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ๊ฒฉ์„ ๋งž์ถ”๊ณ  ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ glue-code๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋” ๋งŽ์ด ๋น„์šฉ์ด ์†Œ๋ชจ

    โ†’ ๋‹ค์–‘ํ•œ ํ›… ํฌ์ธํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”

  2. ๊ณ ๊ฐ€์šฉ์„ฑ (C2)
    • ์ƒํƒœ ๋ณด์กด ๋ฌธ์ œ
      • ๊ฐ์ฒด ํ• ๋‹น ๋ฐ ์ฐธ์กฐ ์œ ์ง€: ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ eBPF ํ”„๋กœ๊ทธ๋žจ ๋ฐ ๋งต(Map)์„ ์ปค๋„์— ์ ์žฌํ•˜๋ฉด FD๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉฐ, ํ•ด๋‹น FD๊ฐ€ ์œ ์ง€๋˜๋Š” ๋™์•ˆ ์ปค๋„ ๋‚ด eBPF ๊ฐ์ฒด์˜ ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 1 ์ด์ƒ์œผ๋กœ ๋ณด์žฅ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์กด์†
      • ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์™€ ์ž์› ํšŒ์ˆ˜: ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค์˜ ํฌ๋ž˜์‹œ ๋˜๋Š” ์—…๋ฐ์ดํŠธ์— ์˜ํ•œ ์žฌ์‹œ์ž‘์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๋˜ ๋ชจ๋“  FD๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ซ์Œ

        โ†’ FD ํšŒ์ˆ˜ ๊ฒฐ๊ณผ๋กœ eBPF ๋งต์˜ ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 0์œผ๋กœ ํ•˜๋ฝํ•˜๋ฉด, ์ปค๋„์€ ์ด๋ฅผ ๊ณ ์•„ ๊ฐ์ฒด(Orphaned Object)๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ฆ‰๊ฐ ํ• ๋‹น์„ ํ•ด์ œ. ์ด๋กœ ์ธํ•ด ๋งต ๋‚ด๋ถ€์— ์œ ์ง€๋˜๋˜ ๋„คํŠธ์›Œํฌ ์„ธ์…˜ ๋ฐ ํŠœ๋‹ ์ƒํƒœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์†Œ๋ฉธ.

    • ์†Œ๊ธ‰ ์ ์šฉ : ํ”„๋กœ๊ทธ๋žจ์€ ํŒจํ‚ท ์œ ์ž…์ด๋‚˜ ์—ฐ๊ฒฐ ์‹œ์ž‘(SYN)๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋  ๋•Œ ์‹คํ–‰๋จ. ์ด๋ฏธ ํ†ต์‹ ์ด ์ง„ํ–‰๋˜์–ด ํ†ต์‹  ์ค‘์ธ ๊ธฐ์กด์˜ ์žฅ๊ธฐ ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด์„œ๋„ ์ •์ฑ…์„ ๊ฐฑ์‹ ํ•˜์—ฌ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€

    โ†’ ์ปค๋„์˜ ์ž๋™ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  Control Plane์ด ํ˜„์žฌ ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ eBPF ๊ฐ์ฒด์˜ ๋ณด์กด๊ณผ ์ •์ฑ… ๊ฐฑ์‹ (ํŠธ๋ฆฌ๊ฑฐ)์„ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ•„์ˆ˜์ 

  3. ์•ˆ์ „ํ•˜๊ณ  ์ •ํ™•ํ•œ ๋ฐฐํฌ(C5) : ๊ฒ€์ฆ๊ธฐ๊ฐ€ ๋…ผ๋ฆฌ์  ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Œ.
    • ๋Œ€๊ทœ๋ชจ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹จ์ผ ๋ฌผ๋ฆฌ ์„œ๋ฒ„ ๋‚ด์—์„œ ๋™์ผํ•œ ํŒจํ‚ท์ด๋‚˜ ํ†ต์‹  ์—ฐ๊ฒฐ(Connection) ์ƒํƒœ์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ eBPF ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: ๋ฐฉํ™”๋ฒฝ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ, ํ˜ผ์žก ์ œ์–ด ํŠœ๋‹)์ด ๋™์‹œ์— ๊ฐœ์ž…ํ•˜๋Š” ๋ฐ, ์‹คํ–‰ ์ˆœ์„œ ์กฐ์ •์ด๋‚˜ ๋™๊ธฐํ™”๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์œผ๋ฉด race condition์ด ๋ฐœ์ƒ

    โ†’ eBPF ์ปค๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋„์ž…์ด ํ•„์š”

  4. ์ปจํ…์ŠคํŠธ ๋งž์ถคํ˜• ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ (C3/C4) : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์„ฑ, ํŠธ๋ž˜ํ”ฝ ํ”„๋กœํŒŒ์ผ, ํ•˜๋“œ์›จ์–ด ์ƒํƒœ ๋“ฑ ์‹œ์Šคํ…œ์˜ ์‹ค์‹œ๊ฐ„ Context์„ ์ธ์ง€ํ•˜์—ฌ, ๊ทธ์— ๋ถ€ํ•ฉํ•˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ ๋ฐ ๋„คํŠธ์›Œํฌ ํŠœ๋‹ ์ •์ฑ…์„ ์ž๋™์œผ๋กœ ๋ฐฐํฌ, ๊ฐฑ์‹ , ํšŒ์ˆ˜ํ•˜๋Š” ๋™์  ์ž์› ์ œ์–ด ํ”„๋ ˆ์ž„์›Œํฌ
    • ๊ธฐ์กด ๋ฐฉ์‹์˜ ํ•œ๊ณ„: ๋ชจ๋“  ์„œ๋ฒ„์— ์ผ๊ด€๋œ ์ •์ฑ…์„ ๊ฐ•์ œํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌ
    • ์š”๊ตฌ ์‚ฌํ•ญ
      • ์ถ”์ƒํ™” : ์„œ๋น„์Šค์˜ ํ™•์žฅ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋“ฑ์˜ ์ธํ”„๋ผ ๋ณ€๋™ ์ƒํƒœ๋ฅผ ์ƒ์œ„ ๊ณ„์ธต์œผ๋กœ ์€๋‹‰ํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐฐํฌ๋ฅผ ์ž๋™ ์กฐ์ •ํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜
      • ์ •์ฑ… ์–ธ์–ด์˜ ๋ฒ”์šฉ์„ฑ๊ณผ ํŠœ๋‹์˜ ํŠน์ˆ˜์„ฑ : ์ด์งˆ์ ์ธ ๊ธฐ์ € ํ•˜๋“œ์›จ์–ด์™€ ํŠธ๋ž˜ํ”ฝ ํŠน์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ํŠœ๋‹ ์„ค์ •์€ ๊ณ ๋„๋กœ ํŠนํ™”๋˜์–ด์•ผ ํ•˜๋‚˜, ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์˜ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์œ„ ์ œ์–ด ์ธํ„ฐํŽ˜์ด์Šค(์ •์ฑ… ์–ธ์–ด)๋Š” ์ถ”์ƒ์ ์ด๊ณ  ๋ฒ”์šฉ์ ์œผ๋กœ ์„ค๊ณ„
      • ํ”„๋กœ๊ทธ๋žจ ์ƒ๋ช… ์ฃผ๊ธฐ ๋™์  ์ œ์–ด : ์ธํ”„๋ผ ์žฅ์• ๋‚˜ ์„œ๋น„์Šค ๋ณ€๋™๊ณผ ๊ฐ™์€ ๋™์  ํ™˜๊ฒฝ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด, ํ”„๋กœ๊ทธ๋žจ์˜ ์ ์žฌ ๋ฐ ํ•ด์ œ ๊ณผ์ •์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ์†ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ์š”๊ตฌ

COMPARISONOFOPENSOURCE EBPF

ORCHESTRATORS

๋น„๊ต

  • ์„ ๋„์  ๋„์ž… ๋ฐ ๋งž์ถคํ˜• ๋ชฉ์  : NetEdit์€ eBPF๋ฅผ ์กฐ๊ธฐ์— ๋„์ž…. ๋ฒ”์šฉ์  ์ œ์–ด์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ํƒ€ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ ์ž์‚ฌ์˜ ๊ณ ์œ ํ•œ ์„œ๋น„์Šค ํŠน์„ฑ ๋ฐ ๋ฌผ๋ฆฌ์  ์ธํ”„๋ผ ํ™˜๊ฒฝ์— ๊ณ ๋„๋กœ ํŠนํ™”๋œ ๋งž์ถคํ˜• ํŠœ๋‹ ๊ธฐ๋Šฅ ์ œ๊ณต์„ ๋ชฉํ‘œ๋กœ ์„ค๊ณ„๋จ.
  • ์žฅ๊ธฐ ํ”„๋กœ๋•์…˜ ์šด์˜ ๊ฒ€์ฆ: ์ตœ๊ทผ 2~3๋…„ ๋‚ด์— ๊ณต๊ฐœ๋œ ๋ฒ”์šฉ ์˜คํ”ˆ์†Œ์Šค eBPF ๊ด€๋ฆฌ ๋„๊ตฌ๋“ค๊ณผ ๋Œ€๋น„ํ•˜์—ฌ, NetEdit์€ ์ง€๋‚œ 6๋…„๊ฐ„ ์‹ค์ œ ๋Œ€๊ทœ๋ชจ ์ƒ์šฉ(Production) ํ™˜๊ฒฝ์—์„œ ์šด์˜๋˜๋ฉฐ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ๊ณผ ์‹คํšจ์„ฑ์„ ์ž…์ฆ
  • ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์ˆ  ๊ธฐ๋ฐ˜ ์ œ๊ณต: ํ˜„์žฌ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์ˆ˜์˜ ์˜คํ”ˆ์†Œ์Šค eBPF ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋Š” NetEdit ์ธก์ด ๋ฆฌ๋ˆ…์Šค ๋ฉ”์ธ๋ผ์ธ์— ์„ ์ œ์ ์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ(Up-stream)ํ•œ ์ปค๋„ ์ˆ˜์ • ์‚ฌํ•ญ๊ณผ ๊ธฐ์ถœํŒ๋œ ๊ธฐ์ˆ  ๋ฌธ์„œ์— ์ง์ ‘์ ์œผ๋กœ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๊ตฌ์ถ•๋จ
    • ์—…์ŠคํŠธ๋ฆผ(Up-stream): ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์กฐ์ง์ด ์ž์ฒด์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์ด๋ฃฌ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ณต์‹ ๋ฆฌ๋ˆ…์Šค ๋ฉ”์ธ๋ผ์ธ ์ €์žฅ์†Œ์— ์ œ์ถœํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ Merge์‹œํ‚ค๋Š” ๊ธฐ์ˆ ์  ๊ธฐ์—ฌ ๊ณผ์ •์„ ์˜๋ฏธ
  • ๋…ธ๋“œ ์ค‘์‹ฌ ํ†ต์ œ vs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐํƒ€์ž„ ๊ธฐ๋ฐ˜ ์ „์—ญ ์ œ์–ด
    • ๊ธฐ์กด ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋“ค์€ ์ฃผ๋กœ ๋‹จ์ผ ํ˜ธ์ŠคํŠธ ๊ด€๋ฆฌ์— ์ค‘์ 
    • NetEdit์€ ์ˆ˜๋ฐฑ๋งŒ ๋Œ€์˜ ์„œ๋ฒ„ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(์‹œ์ž‘, ์ข…๋ฃŒ, ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™”)๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ธ์ง€ํ•˜์—ฌ, ๊ฐ ํ˜ธ์ŠคํŠธ์— ํ•„์š”ํ•œ eBPF ํŠœ๋‹ ์ •์ฑ…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์— ๋งž์ถฐ ์ „์—ญ์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๊ณ  ์ œ์–ด
  • ๋Œ€๊ทœ๋ชจ ์ธํ”„๋ผ์˜ ์ž์› ๋ฐ ์ •์ฑ… ์ถฉ๋Œ ๋ฐฉ์ง€
    • ์ž์›์„ ์ตœ์ ํ™”ํ•˜๋Š” ์ง€์—ฐ ๋กœ๋”ฉ(Lazy loading)๊ณผ ์ •์ฑ… ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์—„๊ฒฉํžˆ ๊ฒฉ๋ฆฌํ•˜๋Š” ์Šค์ฝ”ํ•‘(Scoping) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ.
    • NetEdit์€ ์ด ๋‘ ๊ฐ€์ง€ ์ถ”์ƒํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ง‰๊ณ , ํŠœ๋‹ ์ •์ฑ…๋“ค์ด ์—‰๋šฑํ•œ ์„œ๋น„์Šค์— ์ ์šฉ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฐจ๋‹จ.
  • ํ†ต์ œ๋œ ํ™˜๊ฒฝ์˜ ํ•œ๊ณ„ ๊ทน๋ณต ๋ฐ ์‹ค์ œ ์šด์˜ ์ปจํ…์ŠคํŠธ(Operational Context)
    • eBPF ๋ฐฐํฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋ ค๋Š” ๊ธฐ์กด์˜ ์—ฐ๊ตฌ๋‚˜ ๋„๊ตฌ๋“ค์€ ํŠน์ • ํ›… ํฌ์ธํŠธ(Attach-points)์— ๊ตญํ•œ๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ์žฅ์• ์™€ ์ด์งˆ์„ฑ์ด ๋‚œ๋ฌดํ•˜๋Š” ์‹ค์ œ ์ธํ”„๋ผ์˜ ๋ณต์žก์„ฑ(Operational Context)์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•จ.
    • NetEdit์€ 6๋…„๊ฐ„ ์‹ค์ œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๊ฒช์€ ํ•œ๊ณ„๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ, ํŠœ๋‹ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ฆฌ๋ฅผ ์‹ค์งˆ์ ์œผ๋กœ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํŠนํ™” ๊ธฐ๋Šฅ๋“ค์„ ๋„์ž….

Design

์„ค๊ณ„ ์›์น™

  • eBPF๋ฅผ ์ปค๋„ ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ
    • ๊ธฐ์กด์˜ ํ•œ๊ณ„ : eBPF๋Š” ์ปค๋„์ด ๋ฉ”๋ชจ๋ฆฌ๋‚˜ CPU ์ž์›์„ ์ž์ฒด์ ์œผ๋กœ ๋ฐฐ๋ถ„ํ•˜๋Š” ๋ฐฉ์‹(ํœด๋ฆฌ์Šคํ‹ฑ)๊ณผ ๋‚ด๋ถ€ ํ•จ์ˆ˜ ๊ทœ๊ฒฉ(primitives)์— ์ง์ ‘์ ์œผ๋กœ ์ข…์†. ์ด๋Ÿฌํ•œ ๋‚ด๋ถ€ ๊ทœ์น™๋“ค์ด ๋ฒ„์ „์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ ์—†์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด ์ปค๋„ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ฑฐ๋‚˜ ์žฅ์• ๋ฅผ ์œ ๋ฐœ
      • ํœด๋ฆฌ์Šคํ‹ฑ : ์ตœ์ ์˜ ์™„๋ฒฝํ•œ ํ•ด๋‹ต์„ ์ˆ˜ํ•™์ ์œผ๋กœ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์œผ๋‚˜, ์ œํ•œ๋œ ์‹œ๊ฐ„๊ณผ ์ปดํ“จํŒ… ์ž์› ๋‚ด์—์„œ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜๊ณ  ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์˜ ๊ทผ์‚ฌํ•ด๋‚˜ ๊ฒฐ์ •์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ—˜์  ๊ทœ์น™.
        • EX) ์ปค๋„์ด ๋ฏธ๋ž˜์˜ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์„ ์˜ˆ์ธกํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹ , ๊ณผ๊ฑฐ์˜ ์ ‘๊ทผ ๊ธฐ๋ก์„ ๋ฐ”ํƒ•์œผ๋กœ โ€˜์ตœ๊ทผ์— ๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ ํŽ˜์ด์ง€(LRU)โ€™๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ซ“์•„๋‚ด๋Š” ์ž์› ๊ด€๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ์ปค๋„์˜ ์„ธ๋ถ€ ๊ตฌํ˜„๊ณผ eBPF ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์— ํ†ต์ œ๋œ ๋…๋ฆฝ ๊ณ„์ธต์„ ๋‘ 
    • ํšจ๊ณผ : ํ•˜์œ„ ์šด์˜์ฒด์ œ ์ปค๋„์˜ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹์ด๋‚˜ ๋ฒ„์ „ ์ฐจ์ด๋ฅผ ํฌ๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ ๋„, ์ธํ”„๋ผ ์ „์—ญ์—์„œ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฐํฌ ๋ฐ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ–ฅํ›„์˜ ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘
  • ํ†ตํ•ฉ๋œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ (Integrated Lifecycle Management) : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋Ÿฐํƒ€์ž„ ์ƒํƒœ ๋ณ€ํ™”(์ƒ์„ฑ, ์Šค์ผ€์ผ๋ง, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์žฌ๋ถ€ํŒ… ๋“ฑ) ์ด๋ฒคํŠธ๋ฅผ ํ•˜์œ„ ์šด์˜์ฒด์ œ ์ปค๋„ ๊ณ„์ธต์—์„œ ๋™์ž‘ํ•˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ(๋„คํŠธ์›Œํฌ ํŠœ๋‹ ์ •์ฑ…)์˜ ๋ฐฐํฌ ๋ฐ ์ œ์–ด ๊ณผ์ •๊ณผ ๋™์ ์œผ๋กœ ์—ฐ๋™ํ•˜๊ณ  ๋™๊ธฐํ™”ํ•˜๋Š” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฒ•
    • ๊ธฐ์กด์˜ ํ•œ๊ณ„ : eBPF๋Š” ์„œ๋น„์Šค๊ฐ€ Migration ํ•˜๋Š” ์ง€, Scaling ํ•˜๋Š” ์ง€ ๋“ฑ ํด๋Ÿฌ์Šคํ„ฐ ์ฐจ์›์˜ ์ƒ์œ„ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์•ผ๊ฐ€ ์—†์Œ
    • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๋ณ€ํ™” ์ด๋ฒคํŠธ๋ฅผ eBPF ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ „์šฉ API๋ฅผ ๊ฐœ๋ฐœ
    • ํšจ๊ณผ : ์ƒ์œ„ ์„œ๋น„์Šค์˜ lifecycle (์ƒ์„ฑ, ํ™•์žฅ ์†Œ๋ฉธ)์™€ ํ•˜์œ„ ํŠœ๋‹ ๊ธฐ๋Šฅ์˜ lifecycle (์ฃผ์ž…, ๋ณ€๊ฒฝ, ํ•ด์ œ)๊ฐ€ ํ†ตํ•ฉ๋˜์–ด ์กฐ์œจ. ์ฆ‰, ์„œ๋น„์Šค์˜ ์ด๋™์ด๋‚˜ ํ™•์žฅ์— ๋งž์ถฐ ํ•„์š”ํ•œ ์ปค๋„ ๋„คํŠธ์›Œํฌ ํŠœ๋‹ ์ •์ฑ…์ด ์ž๋™์œผ๋กœ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋ฉฐ ์ ์šฉ๋˜๊ฑฐ๋‚˜ ํšŒ์ˆ˜
  • Fail-open
    • ๊ธฐ์กด์˜ ํ•œ๊ณ„ : ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„ , ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ์„ ์œ„ํ•ด NetEdit์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žฌ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ํฌ๋ž˜์‹œ๋‚˜ ์žฌ๋ถ€ํŒ…์ด ๋ฐœ์ƒ
    • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ์ค‘์•™ ์ œ์–ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„, ์ด์ „์— ์šด์˜์ฒด์ œ ์ปค๋„์— ์ฃผ์ž…ํ•ด ๋‘” ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ์ œ์–ด ์ •์ฑ…(eBPF ํŠœ๋‹ ๊ธฐ๋Šฅ)๋“ค์ด ์šด์˜์ฒด์ œ์— ์˜ํ•ด ๊ฐ•์ œ๋กœ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์„ฑ์„ ๋ถ€์—ฌ
    • ํšจ๊ณผ : ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ง€์†์  ๊ฐ€์šฉ์„ฑ์˜ ํ™˜์ƒ์„ ๊ฒฝํ—˜. ๊ฐœ๋ฐœ์ž๋Š” ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•„๋„ eBPF ํ”„๋กœ๊ทธ๋žจ์— ์ ‘๊ทผํ•˜์—ฌ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๊ณ  ๋””๋ฒ„๊น…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ตœ์†Œ ์˜ค๋ฒ„ํ—ค๋“œ : ๋žญํ‚น, ์ถ”์ฒœ ์‹œ์Šคํ…œ, ๋จธ์‹ ๋Ÿฌ๋‹ ์ถ”๋ก  ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋น„์Šค์™€ ๊ฐ™์ด ์ง€์—ฐ ์‹œ๊ฐ„์— ๋ฏผ๊ฐํ•œ ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํšจ์œจ์ ์ธ ์ž์› ์‚ฌ์šฉ์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„

Overview

  • 3๊ฐ€์ง€ ์—ญํ• 
    • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ : ์—ฌ๋Ÿฌ ๋ฌผ๋ฆฌ ์„œ๋ฒ„๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋งํ•˜์—ฌ ๊ทธ ์•ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘์•™์—์„œ ํ†ต์ œ ๋ฐ ๋ฐฐํฌ
    • ๊ฐœ๋ฐœ ํ”Œ๋žซํผ : eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ƒˆ๋กœ ์งœ๋Š” ๋Œ€์‹ , ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ๋ถ€ํ’ˆ(์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ)์„ ์ œ๊ณตํ•˜๊ณ , ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณต
    • ์ •์ฑ… ๊ตฌ์„ฑ ์—”์ง„ : ๋™์ ์ธ ์กฐ๊ฑด ํ•˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒ์œ„ ์„œ๋น„์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •ํ™•ํ•œ ํ•˜์œ„ ๋ฐฐํฌ๋กœ ๋ณ€ํ™˜
  • ์•„ํ‚คํ…์ฒ˜
    • Control plane : ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ด๋ฅผ eBPF๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” primitives๋กœ ๋™์ ์œผ๋กœ ๋ณ€ํ™˜
    • Data plane : ์‹ค์ œ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜์—ญ. ์ปค๋„์„ eBPF ๊ด€๋ฆฌ๋กœ๋ถ€ํ„ฐ decouple ํ•˜์—ฌ ๋ช…๋ น์„ ์ˆ˜ํ–‰
  • ๋™์ž‘ ํ๋ฆ„
    1. ๋ถ€ํŒ… ์‹œ, ์ปค๋„ ๊ณต๊ฐ„(Data plane)์„ ๊ฒ€์‚ฌ. ์ด์ „์— ์‹คํ–‰๋œ ํŠœ๋‹ ๊ธฐ๋Šฅ(eBPF ํ”„๋กœ๊ทธ๋žจ)์˜ ์ž”์—ฌ๋ฌผ์„ ์‚ญ์ œํ•˜์—ฌ ์ถฉ๋Œ์ด ์—†๋Š” ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ํ™•๋ณด
    2. ์„ค์ •์„ ๋ถ„์„ํ•˜์—ฌ loadํ•  ํŠœ๋‹ ๊ธฐ๋Šฅ์˜ ๋ชฉ๋ก์„ ๊ฒฐ์ •ํ•˜๊ณ  BPFAdapter ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ data palne์— attach
    3. ์ƒ์œ„ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ๊ฐ์‹œ : Control plane์ด ์„œ๋ฒ„์—์„œ ์ž‘๋™ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ํ†ต์‹ ๋ง์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ƒˆ๋กœ ์‹คํ–‰ํ–ˆ๋Š” ์ง€ ์ข…๋ฃŒ๋˜์—ˆ๋Š” ์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง
    4. ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ์ด ๊ฐ์ง€๋˜๋ฉด, NetEdit ๋‚ด๋ถ€์˜ ์˜์‚ฌ๊ฒฐ์ • ๋ชจ๋“ˆ์ธ PolicyEngine์ด ํ•ด๋‹น ์„œ๋น„์Šค์˜ ํŠน์„ฑ์— ๋งž๋Š” ๋„คํŠธ์›Œํฌ ์ œ์–ด ์ •์ฑ…์„ ๊ฒฐ์ •. BPFAdapter๋ฅผ ํ†ตํ•ด ์ปค๋„์— ๋™์ ์œผ๋กœ load/attach. ์„œ๋น„์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์„ detach
    5. ํŠธ๋ž˜ํ”ฝ์ด ๋“ค์–ด์˜ค๋ฉด eBPF ํ”„๋กœ๊ทธ๋žจ์ด ํŒจํ‚ท์„ ๊ฒ€์‚ฌํ•˜๊ณ  ConfigStore์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๋น ๋ฅด๊ฒŒ ํ†ต๊ณผ์‹œํ‚ฌ์ง€, ์ฐจ๋‹จํ• ์ง€, ํ˜น์€ ์ตœ์ ํ™”ํ• ์ง€ ํŠœ๋‹์„ ์ˆ˜

NETEDIT DATAPLANE

eBPF๋ฅผ ์ปค๋„๊ณผ decouplingํ•˜์—ฌ ์ œ์–ด๊ถŒ์„ ํš๋“

BPFAdapter์„ ํ†ตํ•œ interface decoupling

image.png

  • ๋ฌธ์ œ ์ƒํ™ฉ : ๋‹ค์–‘ํ•œ ํ›… ํฌ์ธํŠธ๋งˆ๋‹ค ๋ฐฉ๋ฒ•, ๊ทœ์น™, ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋“ฑ์ด ๋‹ค๋ฆ„
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ๋‹ค์–‘ํ•œ ๋ถ€์ฐฉ ๋ฐฉ์‹์˜ ๋ณต์žก์„ฑ์„ ์€๋‹‰ํ•˜๊ธฐ ์œ„ํ•ด BPFAdapter๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฐ์น˜.
    • attach, detach, execute ๋“ฑ์„ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ฆ
  • ํšจ๊ณผ : Control plane์€ ํ›… ํฌ์ธํŠธ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ ํ•„์š”๊ฐ€ ์—†์Œ
  • ๊ธฐ์กด๊ณผ ์ฐจ์ด์ 
    • Lazy loading
      • ๋ฌธ์ œ ์ƒํ™ฉ : ๋ชจ๋“  eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์„œ๋ฒ„๊ฐ€ ์ผœ์งˆ ๋•Œ ์ปค๋„์— loadํ•˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋žจ๊นŒ์ง€ ์ž์› ์ ์œ 
      • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : Active policy์ด ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์ปค๋„์— loadํ•˜๋Š” ๊ฒƒ์„ ๋ฏธ๋ฃธ
        • ์ด๋Š” ์ •์ฑ… ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํŠœ๋‹์„ ์ ์šฉํ•  ๋Œ€์ƒ ์„œ๋น„์Šค๋งŒ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์„œ๋น„์Šค๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท์˜ ํ”„๋กœํ† ์ฝœ, ํ—ค๋” ํŒจํ„ด ๋“ฑ ํŒจํ‚ท ๋ถ„๋ฅ˜ ๊ธฐ์ค€๊ณผ ๋Œ€์ƒ ํŠธ๋ž˜ํ”ฝ ์†์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ
        • ์˜ˆ์‹œ ) {"target_service": "web-frontend", "classifier": {"layer4_protocol": "TCP", "dst_port": 443, "tcp_flag": "SYN"}}
    • ๋ช…์‹œ์  ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ (Explicit Storage Management)
      • ๋ฌธ์ œ ์ƒํ™ฉ : ์ปค๋„์ด Map์„ ์ž„์˜๋กœ ๊ด€๋ฆฌํ•˜์—ฌ Map์„ ์ž„์˜๋กœ ์ง€์šฐ๊ฑฐ๋‚˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ. ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋‚˜์˜ Map์„ ๊ณต์œ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด๋‚˜ ์‹œ์Šคํ…œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
      • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ์ปค๋„์ด ์ž๋™ ๊ด€๋ฆฌ(์•”๋ฌต์ )ํ•˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”๊ณ  NetEdit์ด ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌ

๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•œ Heuristics Decoupling

๋ช…์‹œ์  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

image.png

  • ๋ฌธ์ œ ์ƒํ™ฉ : ์ปค๋„์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ฐธ์กฐ ์นด์šดํŒ… ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ. ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ์นด์šดํŠธ๊ฐ€ 0์œผ๋กœ ๋–จ์–ด์ ธ eBPF ํ”„๋กœ๊ทธ๋žจ๋„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•ด ์‚ญ์ œ. ๋ฐ๋ชฌ ์žฌ์‹œ์ž‘๋˜๋Š” ์‹œ๊ฐ„๋™์•ˆ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์ด ์†์‹ค
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
    • eBPF ์ „์šฉ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ˆ˜ํ–‰ ์‹œ์ ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” primitives ๋„์ž…
    • Pinning ์‚ฌ์šฉ. eBPF ๊ฐ์ฒด(ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ Map)๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—๋งŒ ๋‘๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปค๋„ ๋‚ด๋ถ€์˜ ํŠน์ˆ˜ํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ(pin-fs)์— ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋งˆ์šดํŠธ. ์ปค๋„ ์ž…์žฅ์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๊ณ ์ •๋œ ๊ฐ์ฒด๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋ฏ€๋กœ ๊ฐ•์ œ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ•˜์ง€ ์•Š์Œ
      • Map ์—ญ์‹œ Pinning์„ ํ•˜์—ฌ ์ƒํƒœ ์ •๋ณด๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ง‰๊ณ  ์žฌ๋ถ€ํŒ… ์ „ํ›„ Context๋ฅผ ๋™๊ธฐํ™”

์†Œ๊ธ‰์  ์ •์ฑ… ์ง‘ํ–‰

  • ๋ฌธ์ œ ์ƒํ™ฉ : Event-driven ๊ตฌ์กฐ์˜ eBPF ํ”„๋กœ๊ทธ๋žจ์€ ์žฌ๋ถ€ํŒ… ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
    • ํ”„๋กœ๊ทธ๋žจ์ด ๊บผ์ง„ ์ฐฐ๋‚˜์— ์ƒˆ๋กœ ๋งบ์–ด์ง„ ์—ฐ๊ฒฐ
    • ํ”„๋กœ๊ทธ๋žจ์ด ๋„๊ธฐ ์ „์— ๋งบ์–ด์ง„ ์žฅ๊ธฐ ์ง€์† ์—ฐ๊ฒฐ
    • ์œ„ ๋‘ ์—ฐ๊ฒฐ์€ ๋‹ค์‹œ ์ผœ์ง„ ์ดํ›„์— ์—ฐ๊ฒฐ ์ƒ์„ฑ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ์—ฐ๊ฒฐ ์ƒ์„ฑ ์ด๋ฒคํŠธ์— ํŠธ๋ฆฌ๊ฑฐ ๋˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ๋˜์ง€ ์•Š์Œ. ์ƒˆ๋กœ์šด ๊ทœ์น™์ด๋‚˜ ์ •์ฑ…์ด ์ ์šฉ๋˜์ง€ ์•Š์Œ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : NetEdit์ด ๋Šฅ๋™์ ์œผ๋กœ eBPF๋ฅผ ํŠธ๋ฆฌ๊ฑฐ

    image.png

    • ๋ฉฑ๋“ฑ์„ฑ์ด๋ผ๋Š” ์กฐ๊ฑด์ด ํ•„์š” : ๋™์ผํ•œ ์ •์ฑ…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ์šฉํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•จ
    • bpf-iter๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ด์šฉํ•ด, ์ œ์–ด ์‹œ์Šคํ…œ์ด ์ง์ ‘ ํ˜„์žฌ ์œ ์ง€๋˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์—ฐ๊ฒฐ ๋ชฉ๋ก์„ ์ˆœํšŒํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ eBPF ์ •์ฑ…์„ ์ผ๊ด„์ ์œผ๋กœ ๊ฐ•์ œ ์ฃผ์ž…
    • ์œ„์˜ ๊ทธ๋ฆผ ์„ค๋ช…
      • (a) : NetEdit์ด ๋‹ค์šด๋˜๋ฉด eBPF ํ”„๋กœ๊ทธ๋žจ๋„ ์ •์ง€๋˜๊ฑฐ๋‚˜ ํšŒ์ˆ˜.
        • ๋นจ๊ฐ„ ๋ง‰๋Œ€ ๋ถ€๋ถ„, ์‹œ์Šคํ…œ์ด ์žฌ๋ถ€ํŒ…๋˜์–ด ์ƒˆ๋กœ์šด eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ปค๋„์— ๋ถ€์ฐฉํ•˜๋Š” ์ˆœ๊ฐ„๊นŒ์ง€ ์ •์ฑ… ๊ณต๋ฐฑ์ด ๋ฐœ์ƒ
      • (b) : ๋‹ค์šด๋˜๋”๋ผ๋„ ์—ฌ์ „ํžˆ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด(Fail-open) ์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด detachํ•˜๊ณ  ๋‹ค์Œ attach๊นŒ์ง€ ๊ณต๋ฐฑ์ด ๋ฐœ์ƒ
        • bpf_iter์ด ํŠธ๋ฆฌ๊ฑฐ ๋˜์–ด ํ™œ์„ฑํ™”๋œ ๋„คํŠธ์›Œํฌ ์„ธ์…˜์„ ์ˆœํšŒํ•˜์—ฌ ์ •์ฑ…์„ ์†Œ๊ธ‰ํ•˜์—ฌ ์ง‘ํ–‰

๋ฐ์ดํ„ฐ ์šด๋ช… ๊ณต๋™์ฒด ํ˜„์ƒ ์ œ๊ฑฐ(Eliminate Data Fate-Sharing)

  • ๋ฌธ์ œ ์ƒํ™ฉ : ๊ธฐ์กด์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋“ค์€ Control plane์—์„œ ๊ด€๋ฆฌ ๋ฐ ๊ด€์ธก์„ ํ•˜์—ฌ ๋‹ค์šด๋  ๊ฒฝ์šฐ ๊ด€์ธก์„ ํ•˜์ง€ ๋ชปํ•˜์—ฌ ๊ฐ€์‹œ์„ฑ ์ƒ์‹ค
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค์™€ ๊ด€์ธก ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๋ฆฌ.
    • metrics exporter: ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ DB์— ์ „์†กํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ์—์ด์ „ํŠธ ํ”„๋กœ์„ธ์Šค
  • ํšจ๊ณผ : NetEdit์ด ๋‹ค์šด๋˜๋„ ๋””๋ฒ„๊น… ๋ฐ์ดํ„ฐ๋‚˜ ์„ฑ๋Šฅ ์ง€ํ‘œ๊ฐ€ ์™ธ๋ถ€๋กœ ์ „์†ก ๋ฐ ๊ธฐ๋ก

์ •ํ™•์„ฑ์„ ์œ„ํ•œ eBPF ๊ฐ„ Decoupling

์—ฌ๋Ÿฌ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ํ˜‘๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ (chaining) Map์„ ๊ณต์œ ํ•ด์•ผ ํ•˜์ง€๋งŒ ํ›… ํฌ์ธํŠธ๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ๊ทœ์น™์„ ์ ์šฉ. ์–ด๋–ค ์œ„์น˜์—์„œ๋Š” ๋ช…์‹œ๋œ โ€˜์šฐ์„ ์ˆœ์œ„โ€™์— ๋”ฐ๋ผ ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋˜๊ณ , ๋‹ค๋ฅธ ์œ„์น˜์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ปค๋„์— โ€˜๋ช…๋ น์–ด๊ฐ€ ์ž…๋ ฅ๋œ ์ˆœ์„œ(์‹œ๊ฐ„์ˆœ)โ€™์— ๋”ฐ๋ผ ์ˆœ์„œ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ๊ฒฐ์ •๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

eBPF ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์„ฑ

  • ๋ฌธ์ œ ์ƒํ™ฉ : ํ•˜๋‚˜์˜ ํ›… ํฌ์ธํŠธ์— ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋ถ€์ฐฉ๋  ๋•Œ์—๋Š” ๋ถ€์ฐฉ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋Š” ๋ฐ ๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฌด์ž‘์œ„ ์ˆœ์„œ๋กœ ์„ค์น˜. ์ˆœ์„œ๊ฐ€ ์—‰ํ‚ค๊ฑฐ๋‚˜ ์˜ˆ์ธก ํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ํ•ด๋‹น ํ›… ํฌ์ธํŠธ์˜ ์‹คํ–‰ ๋…ผ๋ฆฌ๋กœ ๋งคํ•‘
    • ๊ฐ ์‹œ์Šคํ…œ์€ ๋ถ€์—ฌ ๋ฐ›์€ ๊ณ ์œ ์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํŠน์ • ์ธ๋ฑ์Šค์— ๋งคํ•‘
    • ๋ถ€์ฐฉ์€ ๋ฌด์ž‘์œ„ ์ˆœ์„œ๋กœ ๋˜์ง€๋งŒ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋จผ์ € ์ฒ˜๋ฆฌํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฉˆ์ถค
      • Index 0: ๋ณด์•ˆ ๋ฐฉํ™”๋ฒฝ (์ตœ์šฐ์„  ์ˆœ์œ„)
      • Index 1: ํŠธ๋ž˜ํ”ฝ ๋Œ€์—ญํญ ์ œํ•œ (QoS)
      • Index 2: ํŒจํ‚ท ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์ตœํ•˜์œ„ ์ˆœ์œ„)
      • ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ๊ทธ๋žจ์ด ๋จผ์ € ์„ค์น˜๋  ์ˆ˜ ์žˆ์ง€๋งŒ Index 2์— ๋งคํ•‘๋˜์–ด Index 0๋ถ€ํ„ฐ ์‹คํ–‰
    • TC ๊ฐ™์€ ํŒจํ‚ท ๋‹จ์œ„ ํ›… ํฌ์ธํŠธ์—์„œ๋Š” Ingress์™€ Egress ๋•Œ ์ ์šฉ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ๊ฐ ๋ฐฐ์—ด์„ ๊ฑฐ์šธ์ƒ์ฒ˜๋Ÿผ ๋ฐ˜๋Œ€๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ ์ œ์–ด ์ˆœ์„œ ๋ณด์žฅ
  • ํšจ๊ณผ : ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ  ์ถฉ๋Œ์„ ๋ง‰์Œ. DevOps (์šด์˜ ๊ฐœ๋ฐœํŒ€)์ด ํŠธ๋ž˜ํ”ฝ์˜ ์ž ์žฌ์  ํ๋ฆ„์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณด์žฅ

Shared Maps

  • ๋ฌธ์ œ ์ƒํ™ฉ : eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— loadํ•  ๋•Œ ๊ฐ ํ”„๋กœ๊ทธ๋žจ๋งŒ์„ ์œ„ํ•œ Map์„ ์ƒ์„ฑ. ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ๊ฐ™์€ ๋งต์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค ์ฝ”๋“œ ์ƒ ๊ฐ™์€ ์ด๋ฆ„์ด๋‚˜ ์†์„ฑ์˜ ๋งต์„ ์„ ์–ธํ•ด๋„ ๋‹จ์ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณต์ œ๊ฐ€ ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ. ์ด๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์™€ ๋ฐ์ดํ„ฐ ํŒŒํŽธํ™” ๋ฌธ์ œ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ : BPFAdapter๊ฐ€ eBPF ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ด€๋ฆฌ์™€ Map ๊ด€๋ฆฌ๋ฅผ decoupling. ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ ์ž์›์˜ ๊ณต์œ  ์ƒํƒœ ํ†ต์ œ
    • ๋™์ž‘ ํ๋ฆ„
      1. BPFAdapter๊ฐ€ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ค ๋งต์„ ๊ณต์œ ํ•˜๋Š” ์ง€ ์ถ”์ 
      2. ํŠน์ • ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์— ๋ช…์‹œ์ ์œผ๋กœ ๊ณต์œ  Map์„ Pinning ์‹œ์ผœ ๋ฌถ์–ด๋‘ 
      3. eBPF ํ”„๋กœ๊ทธ๋žจ๋“ค์ด load ๋  ๋•Œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” Map์„ ์ฐธ์กฐํ•˜๋„๋ก ๋ณด์žฅ
  • ํšจ๊ณผ : ๋ถˆํ•„์š”ํ•œ ๋ณต์ œ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  eBPF ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์ฐธ์กฐ

NETEDIT CONTROLPLANE

  1. ์–ด๋–ค ์„œ๋น„์Šค ๋ฐ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์— ํŠœ๋‹ ์ •์ฑ…์„ ๋งค์นญํ•˜๋Š” ์ž‘์—…
  2. ๊ฐ€์‹œ์„ฑ ํ™•๋ณด๋ฅผ ์œ„ํ•œ ์ธก์ • ๋„๊ตฌ ํ™œ์„ฑํ™”

Policy Store

๊ฐ ํŠœ๋‹ ๊ธฐ๋Šฅ์„ ์„ ํƒ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ •์ฑ…๋“ค์˜ ์ €์žฅ์†Œ

Policy

  • Classifier : ์ •์ฑ…์ด ์ ์šฉ๋  ๋กœ์ปฌ ๋ฐ ์›๊ฒฉ ์—”๋“œ ํฌ์ธํŠธ
    • ๋กœ์ปฌ ์—”๋“œํฌ์ธํŠธ : ์ œ์–ด ๋Œ€์ƒ์„ ๊ณ ์ •๋œ ์„œ๋ฒ„๋‚˜ IP ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ, ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋…ผ๋ฆฌ์  โ€˜์ž‘์—…(Job)โ€™์˜ ๋ฌถ์Œ์œผ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ •์˜
      • ์˜ˆ์‹œ) ๊ฒฐ์ œ ์Šน์ธโ€™ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” 50๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ๋‚ด ์ˆ˜์‹ญ ๋Œ€์˜ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์— ๋ฌด์ž‘์œ„๋กœ ๋ถ„์‚ฐ๋˜์–ด ์‹คํ–‰ ์ค‘์ด๋ฉฐ, ์ˆ˜์‹œ๋กœ ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธํ•˜์—ฌ IP ์ฃผ์†Œ๊ฐ€ ๊ณ„์† ๋ณ€๊ฒฝ
        • IP 10.0.0.1 ~ 10.0.0.50์— ๋ณด์•ˆ ์ •์ฑ… ์ ์šฉโ€์ด๋ผ๊ณ  ์„ค์ •ํ•  ๊ฒฝ์šฐ, IP๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ •์ฑ…์„ ์ƒˆ๋กœ ์ˆ˜์ •ํ•˜๊ณ  ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ๊ทน์‹ฌํ•œ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ
        • ๊ฒฐ์ œ ์Šน์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ ์ž์ฒด๋ฅผ ๋กœ์ปฌ ์—”๋“œํฌ์ธํŠธ๋กœ ์„ ์–ธ. IP์™€ ์ƒ๊ด€ ์—†์ด ์ •์ฑ…์ด ์ฃผ์ž…
    • ์›๊ฒฉ ์—”๋“œํฌ์ธํŠธ : ๋ชฉ์ ์ง€๋ฅผ ํŠน์ • ์„œ๋ธŒ๋„ท์ด๋‚˜ IP ๋Œ€์—ญ์œผ๋กœ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ณ , โ€˜๋™์ผํ•œ ์„œ๋ฒ„ ๋ž™(Rack)โ€™, โ€˜๋™์ผํ•œ ๋ฐ์ดํ„ฐ์„ผํ„ฐโ€™, โ€˜๋™์ผํ•œ ๋Œ€๋ฅ™โ€™๊ณผ ๊ฐ™์ด ์ถœ๋ฐœ์ง€ ๋Œ€๋น„ ๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€ ์ƒ์˜ ์ƒ๋Œ€์ ์ธ ์œ„์น˜ ๋ฐ ๊ฑฐ๋ฆฌ๋กœ ์ง€์ •
  • Config : ํŠœ๋‹ ๊ธฐ๋Šฅ์˜ ์ธ์ˆ˜ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํ•„๋“œ. Key-value ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํŠœ๋‹ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์š”๊ตฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํ˜•ํƒœ๋‚˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ๋„ ์œ ์—ฐํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ์ฃผ์ž… ๊ฐ€๋Šฅํ•จ
  • Disable list : local source endpoint์— ์ ์šฉ๋˜๋Š” matcher. ์ •์ฑ…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ
    • ๋””๋ฒ„๊น… ์‹œ ๋ฌธ์ œ์™€ ๊ด€๋ จ ์—†๋Š” ์ •์ฑ…์„ ๋ฐฐ์ œํ•˜์—ฌ ์šฉ์ดํ•จ.
    • ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์ •์ฑ… ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๋ฉด ํ•ด๋‹น ์ •์ฑ…์ด ์ ์šฉ๋œ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ. ๋˜ ์ˆ˜์ •๋œ ์ •์ฑ…์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ณผ์ •์—์„œ ์ƒํƒœ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ. ์›๋ณธ ์ •์ฑ…์„ ๋ณด์กดํ•œ ์ƒํƒœ์—์„œ ํŠน์ • ์—”๋“œํฌ์ธํŠธ์—์„œ๋งŒ ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ์ข๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

PolicyEngine

image.png

Design : ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ์‹œ ํ˜„์žฌ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๋™์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ์‹์€ ์ด๋ก ์ ์œผ๋กœ๋Š” ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฑฐ๋Œ€ํ•œ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™”๊ฐ€ ์‹œ์Šคํ…œ์˜ ์˜ˆ์ธก์„ฑ์„ ๋–จ์–ด๋œจ๋ ค ์žฅ์•  ๋ฐœ์ƒ์‹œ ์›์ธ ํŒŒ์•…์„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ฌ

โ†’ ๊ด€๋ฆฌ์ž๊ฐ€ ์„ค๊ณ„ํ•œ ํ† ํด๋กœ์ง€์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ผœ๊ณ  ๋„๋Š” ์ •์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฉ์‹ ์‚ฌ

  • ๊ณ„์ธต์  ์ฃผ์†Œ ํ• ๋‹น์„ ํ†ตํ•ด ๋Œ€๋žต์ ์ธ ์œ„์น˜์„ฑ๊ณผ ์–ด๋А ์ •๋„์˜ ํ•˜๋“œ์›จ์–ด ํŠน์„ฑ์„ ์ถ”๋ก  ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋Ÿฌ์Šคํ„ฐ ์ฃผ์†Œ๋Š” ํŠน์ • ์ ‘๋‘์‚ฌ ๋‚ด์— ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๋ž™์˜ ์ฃผ์†Œ๋Š” ํ•˜์œ„ ์ ‘๋‘์‚ฌ๋กœ ํ• ๋‹น

ํ•ต์‹ฌ ๋ชจ๋“ˆ

  • ScopeResolver : ์ €์ˆ˜์ค€์˜ ๋ฐ์ดํ„ฐ์ธ IP ์ฃผ์†Œ ์ ‘๋‘์‚ฌ์„ ์ž…๋ ฅ๋ฐ›์•„ ๊ณ ์ˆ˜์ค€์˜ ๋…ผ๋ฆฌ์  ์ •๋ณด์ธ ๊ฐ™์€ ๋ž™, ๋ฐ์ดํ„ฐ ์„ผํ„ฐ, ๋‹ค๋ฅธ ๋Œ€๋ฅ™ ๋“ฑ ์ƒ๋Œ€์  ๊ฑฐ๋ฆฌ ๊ฐœ๋…์œผ๋กœ ๋ณ€ํ™˜
    • ์ด๋Ÿฐ ๊ฐ„๊ฒฐํ•œ ์ƒ๋Œ€์  ๊ฑฐ๋ฆฌ ํ‘œํ˜„์€ ์ธ์ ‘ํ•œ ๋ ˆํ”Œ๋ฆฌ์นด ์„ ํƒ์— ์œ ์šฉ
      • ์ธ์ ‘ํ•œ ๋ ˆํ”Œ๋ฆฌ์นด : ํŠธ๋ž˜ํ”ฝ ์ง€์—ฐ์„ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ณต์ œ ์„œ๋ฒ„
  • InfraResolver : ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜์—ฌ, ํ˜„์žฌ ์„œ๋ฒ„์—์„œ ์–ด๋–ค ์ž‘์—…(Job/Service)์ด ์‹ค์ œ๋กœ ์‹คํ–‰ ์ค‘์ธ์ง€, ๊ทธ ์ž‘์—…์ด ์–ด๋–ค IP๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ 
    • ๊ธฐ์กด์—๋Š” ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฒ˜์Œ deploy ๋  ๋•Œ์—๋งŒ eBPF ์ •์ฑ…์„ ๋ฐ€์–ด ๋„ฃ์—ˆ๋Š” ๋ฐ NetEdit์€ ๋Š์ž„ ์—†์ด ํ™œ์„ฑํ™”๋œ ์„œ๋น„์Šค๋ฅผ ์ถ”์ ํ•˜์—ฌ ์˜ค๋ž˜๋œ ์ปจํ…Œ์ด๋„ˆ์—๋„ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋™์ ์œผ๋กœ load/unload ๊ฐ€๋Šฅ

The Initializer

๋ชฉ์ 

  • ํŠœ๋‹ ๊ธฐ๋Šฅ์ด ๊ฒฐ์ •๋ก ์  ์ˆœ์„œ๋กœ ์ ์šฉ
    • ์ผ๊ด€๋œ ๋™์ž‘์„ ์œ ์ง€ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ˆœ์„œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์™„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€
  • ํŠœ๋‹ ๊ธฐ๋Šฅ ๊ฐ„์˜ ์ข…์†์„ฑ ์ถฉ์กฑ
  • ์ •์ƒ์ ์ธ ์žฌ์‹œ์ž‘, ์ถฉ๋Œ ํ›„ ์žฌ์‹œ์ž‘, ์ดˆ๊ธฐ ์‹œ์ž‘ ๊ฐ™์€ ์‹œ์Šคํ…œ ์ƒํƒœ ๋™์•ˆ ์ง„ํ–‰ ์ค‘์ธ ์—ฐ๊ฒฐ์— ์ •์ฑ… ์ ์šฉ

image.png

  1. ํ”„๋กœ๊ทธ๋žจ์˜ detaching์„ unpinningํ•˜์—ฌ ์ด์ „ ์ธ์Šคํ„ด์Šค ์ •๋ฆฌ
  2. ์ƒˆ๋กœ์šด ํŠœ๋‹ ๊ธฐ๋Šฅ loadํ•˜๊ณ  pinning
    • bpf-iter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ eBPF ํ”„๋กœ๊ทธ๋žจ์— ํŠน์ • ์ •์ฑ… ์ ์šฉ
    • ์žฌ์‹œ์ž‘ ๋™์•ˆ flow๋“ค๋„ ๋ถ„๋ฅ˜ ๊ฐ€๋Šฅ

MetricExporter ๋ฐ Auditor

MetricExporter

  • ์ปค๋„์—์„œ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘์—…์„ ํ•  ๋•Œ๋งˆ๋‹ค eBPF Map์— ์„ฑ๊ณต ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ์นด์šดํ„ฐ ํ˜•ํƒœ๋กœ ๊ธฐ๋ก
  • ์ด ์ˆซ์ž๋Š” ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด ํ˜•ํƒœ์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ MetricExporter์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฝ์–ด์™€(Polling)ํ•˜์—ฌ ํ•ด์„ํ•˜๊ณ  ๋ณ€ํ™˜
  • NetEdit์ด ์žฌ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ์—๋„ ์ˆ˜์ง‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ NetEdit๊ณผ ๋ถ„๋ฆฌ
    • NetEdit์€ ์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ ํŠœ๋‹ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด, โ€œ์ƒˆ๋กœ์šด BPF ๋งต์ด ์ƒ์„ฑ๋˜์—ˆ์œผ๋‹ˆ ์—ฌ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ผโ€๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ MetricExporter ์ธก์— ์ „๋‹ฌ

Auditor

  • ๋ชฉ์  : eBPF ์ •์ฑ…์ด ์‹ค์ œ๋กœ ์ ์šฉ๋˜์–ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ œ์–ด๋๋Š” ์ง€ ํ™•์ธ
  • โ€˜FBFlow ํ”„๋ ˆ์ž„์›Œํฌ : ํŠธ๋ž˜ํ”ฝ ์ „์ฒด๋ฅผ ๊ฐ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ธฐ์— ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ท ์ƒ˜ํ”Œ๋ง
    • ํŒจํ‚ท ํ—ค๋” ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–‘ ์„œ๋ฒ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด์™€ OS ๋‚ด๋ถ€์˜ ๊ตฌ์ฒด์ ์ธ ์—ฐ๊ฒฐ ์ƒํƒœ(MSS, window ๋“ฑ)์„ ๋ฌถ์–ด์„œ ์ˆ˜์ง‘ํ•˜์—ฌ ์ •์ฑ…์ด ์ž˜ ์ ์šฉ๋๋Š” ์ง€ ํ™•์ธ
    • ์˜ค๋ฒ„ํ—ค๋“œ ๋ฌธ์ œ
      • FBFlow์˜ BPF ๋‚ด์— ์ด๋Ÿฌํ•œ ํ•„๋“œ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จ
      • MSS ๊ฐ’, ์œˆ๋„์šฐ ํฌ๊ธฐ ๊ฐ™์€ ํ•„๋“œ๋“ค์€ ๋‹จ์ˆœํ•˜๊ณ  ๊ทœ์น™์ ์ธ ์ •์ˆ˜์ด๋ฏ€๋กœ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฑฐ์น  ๋•Œ ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„์–ด๋“œ๋Š” ์ €์—”ํŠธ๋กœํ”ผ ํŠน์„ฑ์ด ์žˆ์Œ
  • MetricExporter : eBPF ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋‚˜ ์ถฉ๋Œ ์—†์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋Š”์ง€๋ฅผ ํŒ๋‹จ.
  • Auditor : ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ eBPF ์ฝ”๋“œ๊ฐ€ ๋Œ€์ƒ ํŠธ๋ž˜ํ”ฝ์„ ์˜ฌ๋ฐ”๋ฅธ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ณ€ํ™˜๋๋Š”์ง€๋ฅผ ๊ฒ€์ฆ.

Application

Diversity

image.png

  • 2๊ฐœ ์ œ์™ธํ•˜๊ณ  Transport ๊ณ„์ธต์—์„œ ๋™์ž‘
    • ์ด์œ  : ์„ ํ–‰ ์—ฐ๊ตฌ๋“ค ๋ณด๋ฉด ์ „์†ก ๊ณ„์ธต ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋งŽ์ด ์ผ์–ด๋‚จ
  • ํŠœ๋‹ ๊ธฐ๋Šฅ์˜ ๋‹ค์–‘์„ฑ : ์ „์†ก ๊ณ„์ธต ๋‚ด์—์„œ๋„ ๋‹ค์–‘ํ•œ ํ›… ํฌ์ธํŠธ์— ๋ถ€์ฐฉ
    • 1 ~ 5 : ๊ธฐ์กด ์ปค๋„ ํ†ต์‹  ๊ทœ์น™์„ ์“ฐ์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •
    • 6 ~ 8 : ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑ
      • ์ปค๋„ ๋ชจ๋“ˆ์ด ์•„๋‹Œ eBPF ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž‘์„ฑ. ์ด๋Š”
        • eBPF ์ด์ 
          • ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋„คํŠธ์›Œํ‚น ์Šคํƒ์˜ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  ์žฌ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋Š” ๊ณ ์œ„ํ—˜ ๊ณผ์ •์„ ์ƒ๋žต
          • ๋Ÿฐํƒ€์ž„ ๋™์  loadingํ•˜๋Š” ํŠน์„ฑ์ด ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ—˜, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ์—์„œ ์œ ์—ฐ์„ฑ๊ณผ ์†๋„๋ฅผ ์ œ๊ณต.
          • ๋ฌผ๋ฆฌ์ ์ธ ์ปค๋„ ํŒจ์น˜ ๊ณผ์ •์„ ๋ฐฐ์ œํ•จ์œผ๋กœ์จ ๋‹จ์ผ ํŠœ๋‹ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ์•ˆ์ •ํ™”์— ์†Œ๋ชจ๋˜๋Š” ์‹œ๊ฐ„๊ณผ ์—ฐ๊ตฌ ์ธ๋ ฅ์„ ์ ˆ๊ฐ

TuningFeature Building Blocks

image.png

  • ๊ฐ๊ฐ์˜ ํŠœ๋‹ ๊ธฐ๋Šฅ์„ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ƒˆ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์— ๋ฏธ๋ฆฌ ๊ตฌ์ถ•๋œ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ(๋นŒ๋”ฉ ๋ธ”๋ก)๋“ค์„ ๋ ˆ๊ณ  ๋ธ”๋ก์ฒ˜๋Ÿผ ์กฐ๋ฆฝํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์œ ์—ฐ์„ฑ๊ณผ ๊ฐ•๋ ฅํ•จ์„ ์คŒ
  • ๋นŒ๋”ฉ ๋ธ”๋ก์˜ ๋ถ„๋ฅ˜
    • Core ๊ธฐ๋Šฅ : ๋ชจ๋“  ํŠœ๋‹ ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†Œ๊ทœ๋ชจ ๊ธฐ๋Šฅ ๊ทธ๋ฃน
      • BPFAdapter : eBPF ์ฝ”๋“œ๋ฅผ ์‹œ์Šคํ…œ์— ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค
      • MetricsExporter : ์ž‘๋™ ์ƒํƒœ๋ฅผ ์ˆ˜์น˜ํ™”ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋„๊ตฌ
      • A/B ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ : ์•ˆ์ „ํ•˜๊ฒŒ ์‹ค์ œ ์„œ๋ฒ„์— ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ ค๋ณด๋Š” ํ™˜
    • Transport ๊ธฐ๋Šฅ : Transport ํ”„๋กœํ† ์ฝœ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์„ ํŠœ๋‹ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ
      • ScopeResolver๋Š” RTT ๋ฐ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฐ๊ฒฐ ๋ถ„๋ฅ˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„๋ฅผ ์ œ์–ดํ•˜๋Š” ๋‹ค์ˆ˜์˜ ํŠœ๋‹ ๊ธฐ๋Šฅ์ด ์ด ๋ชจ๋“ˆ์„ ๊ณตํ†ต์œผ๋กœ ํ˜ธ์ถœ
    • ์‹ ํฅ(emerging) ๊ธฐ๋Šฅ
      • SharedMaps : ์„œ๋กœ ๋‹ค๋ฅธ ํŠœ๋‹ ๊ธฐ๋Šฅ๋“ค๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋Šฅ
      • WarmReboots : ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋„คํŠธ์›Œํฌ ํŒจํ‚ท์˜ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฌด์ค‘๋‹จ ์žฌ๋ถ€ํŒ… ๊ธฐ๋Šฅ

Developer Productivity Improvement

Transport ํŠœ๋‹ ๊ธฐ๋Šฅ์— ์ดˆ์ ์„ ๋งž์ถฐ์„œ ์„ธ ๊ฐ€์ง€ ํŠœ๋‹ ๊ธฐ๋Šฅ๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ๊ธฐ์กด ๊ฐœ๋ฐœ ๋ฐฉ์‹๊ณผ NetEdit ๋„์ž… ์ดํ›„์˜ ์†Œ์š” ์‹œ๊ฐ„์„ ์ •๋Ÿ‰ํ™”ํ•˜์—ฌ ๋น„๊ต. 6๊ฐœ์›” โ†’ ๋ช‡ ์ฃผ ์ˆ˜์ค€์œผ๋กœ ๊ฐ์†Œ

  • ์ด์œ 
    • ๋‹จ์ˆœํ•œ ์ถ”์ƒํ™” ๋ฐ ๋Ÿฐํƒ€์ž„ ํ”„๋ ˆ์ž„์›Œํฌ ๋„์ž… : ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์œ„ํ—˜ํ•œ ์ปค๋„ ์ฝ”๋“œ๋‚˜ Low-level ์‹œ์Šคํ…œ ์ œ์–ด ๋ฐฉ์‹์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ
    • ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์žฌ์‚ฌ์šฉ : ํŠธ๋ž˜ํ”ฝ์„ ์‹๋ณ„ํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๋„๊ตฌ(Scope Resolver)์ฒ˜๋Ÿผ ๋ชจ๋“  ํŠœ๋‹ ๊ธฐ๋Šฅ์— ๊ณตํ†ต์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ๋ถ€๊ฐ€์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์–ด ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘
    • ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ๋งค์ปค๋‹ˆ์ฆ˜ : ๋ฐฐํฌ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ณ  ๋” ๋น ๋ฅธ ๋ฐฐํฌ๋ฅผ ๋ณด์žฅ

Design Lessons For Hookpoint Selection

  • Control-Overhead Tradeoff : ํ›… ํฌ์ธํŠธ๊ฐ€ Low-level์ด๋ฉด ๋ชจ๋“  ํŒจํ‚ท์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง. ํ†ต์‹  ์—ฐ๊ฒฐ์ด ๋งบ์–ด์ง€๊ฑฐ๋‚˜ ์„ค์ •์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์‹คํ–‰๋˜๋Š” high-level์— ํ›… ํฌ์ธํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด CPU ๋ถ€ํ•˜๋Š” ์ค„์–ด๋“ค์ง€๋งŒ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์ œํ•œ
  • ์„ฑ๊ณต ์‚ฌ๋ก€
    • BET-tuner : ์Šค์บ๋นˆ์ €(scavenger) ํ˜ผ์žก ์ œ์–ด ๊ตฌํ˜„์„ ์ œ๊ณต.
      • ์ดˆ๊ธฐ์—๋Š” ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด sockops์— ๋ถ€์ฐฉ๋˜๋ฉฐ QoS ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด RTT ์ฝœ๋ฐฑ์— ์˜์กด
        • ๊ธฐ์กด์˜ ๋™์ž‘ ํ๋ฆ„
          1. ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์‹œ eBPF sockops ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœ
          2. eBPF ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ์†Œ์ผ“์— ๋Œ€ํ•ด RTT ๋ณ€๊ฒฝ์‹œ ์ฝœ๋ฐฑ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ์„ค์ •
          3. ACK ์ˆ˜์‹  ์‹œ ๋งˆ๋‹ค RTT ๋‹ค์‹œ ๊ณ„์‚ฐ. eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ
          4. eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์ง€์—ฐ ์‹œ๊ฐ„, ๋Œ€์—ญํญ ์ƒํƒœ๋“ฑ์„ ํ‰๊ฐ€ํ•œ ํ›„ bpf_setsockopt ํ—ฌํผ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์†Œ์ผ“์˜ ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ๊ด€๋ จ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณ€๊ฒฝ
          5. 3-4 ๋ฐ˜๋ณต
      • ์‚ฌ์ „ ๋Œ€์‘์ ์ธ socksetopts๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ˆ˜์ •๋  ๋•Œ๋งŒ ํŠธ๋ฆฌ๊ฑฐ ๋˜์–ด ์ตœ๋Œ€ 200๋ฐฐ ํ˜ธ์ถœ์ด ๊ฐ์†Œ
        • ๋™์ž‘ ํ๋ฆ„
          1. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด QoS๋ฅผ ๋‚ฎ์ถ”๊ฑฐ๋‚˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด setsockopt() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœ
          2. eBPF socksetopts ํ”„๋กœ๊ทธ๋žจ ํŠธ๋ฆฌ๊ฑฐ
          3. eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์š”์ฒญ๋œ ์˜ต์…˜์„ ๋ถ„์„ํ•˜๊ณ , ํŠน์ • ์กฐ๊ฑด(์˜ˆ: ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํŠธ๋ž˜ํ”ฝ)์„ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ ์†Œ์ผ“์˜ ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์Šค์บ๋นˆ์ €(Scavenger) ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ณ€๊ฒฝ
    • ๋ฐฐ๊ฒฝ ์ง€์‹
      • scavenger ํ˜ผ์žก ์ œ์–ด : ๋Œ€์—ญํญ ์ค‘ ์ž‰์—ฌ ๋Œ€์—ญํญ๋งŒ์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ํŠธ๋ž˜ํ”ฝ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š” ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜. ๋Œ€์—ญํญ ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ฆ‰์‹œ ์ „์†ก๋ฅ ์„ ๋‚ฎ์ถค
      • sockops: ์†Œ์ผ“ ์ˆ˜์ค€์˜ ์ด๋ฒคํŠธ. TCP ์ƒํƒœ ๋ณ€ํ™” ๋ฐ ์ฃผ์š” ์ด๋ฒคํŠธ(TCP ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๋ฐ ์ข…๋ฃŒ, ์ƒํƒœ ์ „ํ™˜, ์žฌ์ „์†ก ํƒ€์ž„์•„์›ƒ) ๋ฐœ์ƒ์‹œ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ํ˜ธ์ถœ.
      • RTT ์ฝœ๋ฐฑ : RTT ๊ฐ’์ด ๊ณ„์‚ฐ๋˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ๋  ๋Œ€๋งˆ๋‹ค ํ˜ธ์ถœํ•˜๋„๋ก ์ •์˜๋œ ํ•จ์ˆ˜.
        • sockops ํ™˜๊ฒฝ์—์„œ๋Š” ํŒจํ‚ท์— ๋Œ€ํ•œ ACK์„ ์ˆ˜์‹ ํ•˜๊ณ  RTT๋ฅผ ์‚ฐ์ถœํ•˜๋Š” ๋งค์‹œ์ ๋งˆ๋‹ค ์ฝœ๋ฐฑ
      • socksetopts ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์†Œ์ผ“์˜ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•  ๋•Œ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ํ›…ํฌ์ธํŠธ
  • ์‹คํŒจ ์‚ฌ๋ก€ : RWND ํฌ๊ธฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ณผ์ •
    • ๊ธฐ์กด์—๋Š” TC ํ›… ํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฐœ๋ณ„ ํŒจํ‚ท์— ๋Œ€ํ•ด eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์—ฌ ํŒจํ‚ท๋งˆ๋‹ค RWND๋ฅผ ์žฌ์ž‘์„ฑ โ†’ CPU ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
    • sockops๋กœ ์ „ํ™˜ (์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ, ์ƒํƒœ ๋ณ€๊ฒฝ ๋“ฑ)์—์„œ๋งŒ ํŠธ๋ฆฌ๊ฑฐ
      • sockops ํŠธ๋ฆฌ๊ฑฐ๋กœ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜์–ด RWND๋ฅผ ์ž‘์„ฑํ•ด๋„ ๊ทธ ์ดํ›„์— tcp_select_window()์™€ ๊ฐ™์€ ์ปค๋„ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด RWND ๊ฐ’์„ ์žฌ์ž‘์„ฑ.
      • ์ด๋ฅผ ๋ง‰์œผ๋ ค๋ฉด ์ปค๋„์˜ ํ•ต์‹ฌ TCP ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฐ ์ปค๋„ ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋ ค๋Š” eBPF์˜ ์กด์žฌ ์˜๋ฏธ๋ฅผ ๋ถ€์ •
      • TC(Traffic Control) ํ›… ํฌ์ธํŠธ๋Š” ํŒจํ‚ท์ด ์™„์„ฑ๋˜์–ด ๋„คํŠธ์›Œํฌ ์นด๋“œ(NIC)๋กœ ๋‚ด๋ ค๊ฐ€๊ธฐ ์ง์ „(qdisc)์— ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— tcp_select_window() ํ›„์— ๋ฎ์–ด์”Œ์šธ ์ˆ˜ ๋ฐ–์— ์—†์Œ
  • ๊ตํ›ˆ
    1. ์š”๊ตฌ๋˜๋Š” ์ •ํ™•์„ฑ์„ ๋งŒ์กฑํ•˜๊ณ  ํ•„์š”ํ•œ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋Š” ์ง€
    2. ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ธก์ •
    3. eBPF ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋„ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”
      • 1๋ฒˆ์€ ๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์žˆ๊ณ  2๋ฒˆ์€ ๊ด€์ธก ๋„๊ตฌ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ์ปค๋„ ๋‚ด๋ถ€ ์˜ํ–ฅ์€ ๋ฉ”๋‰ด์–ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ์ด ์ดํ•ดํ•ด์•ผ ํ•จ

Evaluation

Deployment Characterization

  • ์ธํ”„๋ผ ๋ฐฐํฌ ํ˜„ํ™ฉ : ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์„œ๋ฒ„์˜ ์•ฝ 98.4%์— NetEdit์ด ์„ค์น˜๋จ.
    • ํŠน์ • ์ปค๋„ ํŒจ์น˜์— ๋”ฐ๋ฅธ ๋ฒ„์ „ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด 100% ๋ฐฐํฌ์—๋Š” ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•จ.
  • ํŠœ๋‹ ๊ธฐ๋Šฅ ๋ถ„๋ฅ˜
    • ์ „์ฒด ์ ์šฉ ๊ทธ๋ฃน (100%): NetEdit์ด ํ™œ์„ฑํ™”๋œ ๋ชจ๋“  ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•„์ˆ˜ ์ „์†ก ๊ธฐ๋Šฅ (์˜ˆ: InitCWND, BET).
    • ์นด๋‚˜๋ฆฌ(Canary) ๊ฒ€์ฆ ๊ทธ๋ฃน (10%): ์ƒˆ๋กœ์šด NetEdit ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์†Œ๊ทœ๋ชจ ์„œ๋ฒ„์—๋งŒ ํ™œ์„ฑํ™”๋˜๋Š” ๋‹จ์ผ ํŠน์ˆ˜ ๊ธฐ๋Šฅ (Touchstone)
    • ํŠน์ˆ˜ ๋ชฉ์  ๊ทธ๋ฃน (2% ๋ฏธ๋งŒ): ํŠน์ • ์„œ๋น„์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ๊ทน์†Œ์ˆ˜์˜ ์„œ๋ฒ„์—๋งŒ ์ œํ•œ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ํ‹ˆ์ƒˆ ๊ธฐ๋Šฅ (์˜ˆ: MSS Tuner).

Performance Benefits of tuningFeatures

  • NetEdit ํ™œ์„ฑํ™”์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ์ด์ 
    • ์ง€์—ฐ ์‹œ๊ฐ„ ๊ฐœ์„ : ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์œˆ๋„์šฐ ํฌ๊ธฐ, ํŒจํ‚ท ํฌ๊ธฐ ์กฐ์ •์„ ํ†ตํ•ด ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ๊ด‘๊ณ  ์„œ๋น„์Šค ๋“ฑ์˜ ๊ผฌ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„(Tail latency) ์ตœ์ ํ™”.
    • ์ธํ”„๋ผ ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”: ๋„คํŠธ์›Œํฌ ๋ฒ„์ŠคํŠธ ๋ณ‘๋ชฉ ์—†์ด ํŠน์ • ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„์˜ ์ ์žฌ๋Ÿ‰(Load)์„ 2๋ฐฐ ์ฆ๊ฐ€์‹œํ‚ด. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๋ฆฌ์ „ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ•๋“ฑ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋น„์šฉ ์ ˆ๊ฐ ๋‹ฌ์„ฑ.
    • ์šด์˜ ์•ˆ์ •์„ฑ: ๋„คํŠธ์›Œํฌ ํŒจํ‚ท ์žฌ์ „์†ก์˜ ์œ ์˜๋ฏธํ•œ ๊ฐ์†Œ๋ฅผ ํ†ตํ•ด ์ž์› ํ™œ์šฉ๋„๋ฅผ ๋†’์ด๊ณ , ์šด์˜ ๊ฒฝ๊ณ (Alarm) ๋…ธ์ด์ฆˆ๋ฅผ ์ค„์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐ(Troubleshooting) ํšจ์œจ์„ฑ ์ฆ๋Œ€.
  • NetEdit ๋น„ํ™œ์„ฑํ™” ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๊ณ„์ธต๋ณ„ ์„ฑ๋Šฅ ์ €ํ•˜
    • ์„œ๋น„์Šค ๊ณ„์ธต (Service Layer):
      • ML ์ถ”๋ก  : ํ‰๊ท  QPS(์ดˆ๋‹น ์ฟผ๋ฆฌ ์ˆ˜) 29% ํ•˜๋ฝ, 99๋ถ„์œ„(Tail) ์ง€ํ‘œ์—์„œ 59.21% ๊ธ‰๊ฐ.
      • ์Šคํ† ๋ฆฌ์ง€ : ํ‰๊ท  ๋ธ”๋ก ์ฝ๊ธฐ ์„ฑ๋Šฅ 37.14% ์•…ํ™”, 99๋ถ„์œ„ ์ง€ํ‘œ์—์„œ 65.85%์˜ ์น˜๋ช…์  ์„ฑ๋Šฅ ํ•˜๋ฝ.
    • ํ˜ธ์ŠคํŠธ ๊ณ„์ธต
      • ์ „์ฒด ํŠธ๋ž˜ํ”ฝ ์žฌ์ „์†ก ๋ฐœ์ƒ 4.5๋ฐฐ ์ฆ๊ฐ€.
      • ํƒ€์ž„์•„์›ƒ(Timeout)์œผ๋กœ ์ด‰๋ฐœ๋œ ์น˜๋ช…์  ์žฌ์ „์†ก 29๋ฐฐ ํญ๋“ฑ.
      • ์—…/๋‹ค์šด๋งํฌ ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput) 10% ๊ฐ์†Œ.
    • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต
      • ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ToR(Top-of-Rack) ์Šค์œ„์น˜ ๋‹ค์šด๋งํฌ์—์„œ ํ˜ผ์žก์œผ๋กœ ์ธํ•œ ํŒจํ‚ท ํ๊ธฐ(Congestion discards)๊ฐ€ 363.7% ํญ์ฆ.

Overhead

  • Control Plane
    • ์ž์› ์ ์œ ์œจ: CPU ํ‰๊ท  0.00023% (95๋ฐฑ๋ถ„์œ„์ˆ˜ 0.00026%), ๋ฉ”๋ชจ๋ฆฌ ํ‰๊ท  26MB (95๋ฐฑ๋ถ„์œ„์ˆ˜ 60.5MB)
    • ํŠน์ง•: ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ์ง€์›์„ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋งŒ์„ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„(userspace)์—์„œ ๊ทน๋„๋กœ ๋‚ฎ์€ ๋ฆฌ์†Œ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ์ง€ํ•จ.
  • Data Plane
    • ํ’‹ํ”„๋ฆฐํŠธ ์ตœ์†Œํ™”: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์ œ์•ฝ์— ๋งž์ถ”์–ด eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๋ฅผ ์˜๋„์ ์œผ๋กœ ๊ฒฝ๋Ÿ‰ํ™”.
      • ํ’‹ ํ”„๋ฆฐํŠธ : ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹ค์ œ๋กœ ์šด์˜๋˜๋Š” ๊ณผ์ •์—์„œ ์ ์œ ํ•˜๋Š” ์ž์›์˜ ์ด๋Ÿ‰ (๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„, ์ „๊ธฐ, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„, ๋””์Šคํฌ ๊ณต๊ฐ„, CPU ๋“ฑ๋“ฑ)
    • ์ตœ์ ํ™” ๊ธฐ๋ฒ•: Shared maps ๋ฐ Lazy loading์„ ์ ์šฉํ•˜์—ฌ ๋งต์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์ค‘๋ณต ๊ธฐ๋Šฅ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ๋งค์นญ๋˜๋Š” ์ •์ฑ…์ด ์กด์žฌํ•  ๋•Œ๊นŒ์ง€ ๋กœ๋”ฉ์„ ์—ฐ๊ธฐํ•˜์—ฌ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ์†Œ์‹œํ‚ด.
  • Lazy Loading ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ
    • ํšจ์œจ์„ฑ ์ฆ๋ช…: ์š”๊ตฌ๋˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ๋งŒ ์‹œ์Šคํ…œ์— Attachํ•˜๋Š” ์ง€์—ฐ ๋กœ๋”ฉ ๊ธฐ์ˆ ์˜ ์„ฑ๋Šฅ ์ด์ ์„ ๊ต์ฐจ ๊ฒ€์ฆํ•จ.
    • ์„ฑ๋Šฅ ์ง€ํ‘œ: 10๊ฐœ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๊ฑธ์นœ ์‹คํ—˜ ๊ฒฐ๊ณผ, ์ง€์—ฐ ๋กœ๋”ฉ์ด ์ ์šฉ๋œ eBPF ํ”„๋กœ๊ทธ๋žจ์€ ๋ฏธ์ ์šฉ ํ”„๋กœ๊ทธ๋žจ ๋Œ€๋น„ ํ‰๊ท  14% (99๋ฐฑ๋ถ„์œ„์ˆ˜ ๊ธฐ์ค€ 27%)์˜ CPU๋งŒ์„ ์†Œ๋น„ํ•˜์—ฌ ๊ด„๋ชฉํ•  ๋งŒํ•œ ์ž์› ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ•จ.

EXPERIENCES,OUTAGES,ANDOPEN

SOURCE

Deployment Experiences

๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ์˜ eBPF ํ”„๋กœ๊ทธ๋žจ ๋ฐฐํฌ ๊ฒฝํ—˜

  • ๋ฌธ์ œ ์ƒํ™ฉ
    • ๊ฒ€์ฆ๊ธฐ๊ฐ€ ์ปค๋„ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ๋ณด์žฅํ•ด๋„ ๊ธฐ์ € ์ปค๋„ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋•์…˜ ์žฅ์• ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Œ
      • ๊ธฐ์ € ์ปค๋„ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฒ„๊ทธ : logic error, race condition ๊ฐ™์€ ํ˜„์ƒ
      • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ํ†ตํ•ฉํ•˜๊ณ ์ž ํ•จ
        • eBPF์™€ ์ปค๋„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ๊ธฐ์กด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋ก (A/B ํ…Œ์ŠคํŠธ, cgroups ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ๊ฒฉ๋ฆฌ)์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
    • BPP-TCP-CCA์™€ ๊ฐ™์€ ํŠน์ • ์ปค๋„ ๊ณ„์ธต์—์„œ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ eBPF ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ๊ฒฉ๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•จ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
    • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
      1. ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์ œ๋กœ ๋กœ๋“œ๋˜๋Š” ์ง€ ํ™•์ธ. packetdrill์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€์งœ ํŒจํ‚ท์„ ์˜์•„๋ณด๋ฉฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜. ์นด์šดํ„ฐ ๋ฐ ์—ฐ๊ฒฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ™์€ eBPF ์ธก์ •๊ฐ’ ๋ถ„์„์„ ํ†ตํ•ด ๋กœ๋“œ ๋ฐ ๋™์ž‘์˜ ์œ ํšจ์„ฑ์„ 1์ฐจ ๊ฒ€์ฆํ•จ.
      2. ๋‹ค์–‘ํ•œ ํ”„๋กœ๋•์…˜ ์ž‘์—… ๋ถ€ํ•˜์™€ ํ•จ๊ป˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ.
        • ๊ธฐ์กด ๋ฐฉ์‹ : cgroups์™€ ๊ฐ™์€ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๋™์ผํ•œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฒฉ๋ฆฌ
          • ์ด์œ 
            • ๋™์ผํ•œ ์„œ๋น„์Šค์—์„œ ์•ˆ์ •๋œ ๊ธฐ์กด ๋ฒ„์ „๊ณผ ์‹ ๊ทœ ๋ฒ„์ „์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋ฉด์„œ ๋น„๊ต ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅ
            • ๊ฒฉ๋ฆฌ๋ฅผ ํ•ด๋†“์œผ๋ฉด ํฌ๋ž˜์‹œ, ๋ฌดํ•œ ๋ฃจํ”„ ๋“ฑ์ด ๋ฐœ์ƒํ•ด๋„ ํ˜ธ์ŠคํŠธ ์ „์ฒด๋กœ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จ
              • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ ธ ํ•ด๋‹น CPU ์ ์œ ์œจ์„ ๋…์ ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ํ• ๋‹น๋œ ์‚ฌ์šฉ๋Ÿ‰์ด ์ •์˜๋˜์–ด ์žˆ์–ด ํ˜ธ์ŠคํŠธ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ
            • ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ตœ์†Œํ™”
          • ํ•œ๊ณ„ : ๋™์ผํ•œ eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๊ฒฉ๋ฆฌ ๋ฐ ๊ฐ€์ƒํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ
            • ์˜ˆ์‹œ : BPF-TCP-CCA ๋ถ€์ฐฉ ์ง€์ ์—์„œ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ (TC, XDP๋Š” ์ง€์›)
        • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ
          • ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ํ…Œ์ŠคํŠธ์šฉ๊ณผ ์šด์˜์šฉ eBPF ํ”„๋กœ๊ทธ๋žจ์„ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋”๋ฏธ cgroups์„ ์‚ฌ์šฉ
            • ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ์‹คํ–‰ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜์—ฌ ์šด์˜ ํŠธ๋ž˜ํ”ฝ์ด ์œ ์ž…๋˜์ง€ ์•Š๋Š” ๋”๋ฏธ ๊ทธ๋ฃน์„ ๋งŒ๋“ฆ
            • ํ…Œ์ŠคํŠธ์šฉ eBPF๋Š” ์ด ๋”๋ฏธ ๊ทธ๋ฃน์—๋งŒ attach
          • ๊ฒฉ๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ›… ํฌ์ธํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” ๋กœ๋“œ ์‹œ ์šด์˜ ๋ฒ„์ „๊ณผ์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ์šฉ eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ์ด๋ฆ„์„ ์žฌ์ž‘์„ฑ(Rewrite)ํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ
            • ์ปค๋„ global ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ทธ๋ฃน ๋‹จ์œ„ ๋ถ„ํ• ์ด ๋ถˆ๊ฐ€๋Šฅ
            • ์ปค๋„์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜๋Š” eBPF ํ”„๋กœ๊ทธ๋žจ์„ โ€˜์ด๋ฆ„โ€™์œผ๋กœ ์‹๋ณ„. ์šด์˜ ๋ฒ„์ „๊ณผ ํ…Œ์ŠคํŠธ ๋ฒ„์ „์ด ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๋ฉด ์ปค๋„์ด ์ค‘๋ณต ๋“ฑ๋ก์„ ๊ฑฐ๋ถ€
            • eBPF ํ”„๋กœ๊ทธ๋žจ์„ ์ปค๋„์— ๋กœ๋“œํ•˜๊ธฐ ์ง์ „, ๋‚ด๋ถ€ ์‹๋ณ„์ž ์ด๋ฆ„์„ ๊ฐ•์ œ๋กœ ๋ณ€ํ™˜(์˜ˆ: bbr โ†’ bbr_test)ํ•˜์—ฌ ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

โ†’ ์ œ์•ˆ๋œ ๋™์  ํ”„๋กœ๊ทธ๋žจ ๋ณ€๊ฒฝ ๋ฐ ๊ฒฉ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ˆ˜์ • ์—†์ด ๊ธฐ์กด NetEdit์˜ A/B ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ๋ฅผ ์˜จ์ „ํžˆ ํ™œ์šฉ. ํ”„๋กœ๋•์…˜ ์›Œํฌ๋กœ๋“œ์™€ ๋ณ‘๋ ฌ๋กœ ์•ˆ์ „ํ•œ eBPF ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•

Production Outages

image.png

Failure Classification

  • ์ปค๋„/์ธํ”„๋ผ ๋ฒ„๊ทธ
    1. ์ปค๋„-eBPF ์ธํ„ฐํŽ˜์ด์Šค ๋ฒ„๊ทธ : ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„(์˜ˆ: ๋ฌดํ•œ ๋ฐ˜๋ณต ํ˜ธ์ถœ)์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ปค๋„์ด ์˜ค์ž‘๋™ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ ๊ฐˆ๋˜๊ณ  ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ
    2. ์ปค๋„ ์ด์‹์„ฑ ๋ฒ„๊ทธ : ์šด์˜์ฒด์ œ(๋ฆฌ๋ˆ…์Šค ์ปค๋„)์˜ ๋ฒ„์ „์— ๋”ฐ๋ผ eBPF๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ฌ๋ผ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ. ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ์–ด๋–ค ๋ฒ„์ „์—์„œ๋Š” ์ •์ƒ ์ž‘๋™ํ•˜๊ณ , ์–ด๋–ค ๋ฒ„์ „์—์„œ๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ๋‹ค์šด(์ปค๋„ ํŒจ๋‹‰)๋˜๋Š” ํ˜„์ƒ
    3. ๊ธฐ๋Šฅ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ๋ฒ„๊ทธ : ๋™์ผํ•œ ์‹คํ–‰ ์ง€์ (ํ›… ํฌ์ธํŠธ)์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ์—ฐ๊ฒฐ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ A์—์„œ ๋ฐœ์ƒํ•œ ์‚ฌ์†Œํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ”„๋กœ๊ทธ๋žจ B์˜ ์‹คํ–‰ ์ž์ฒด๋ฅผ ๊ฐ€๋กœ๋ง‰์•„ ์—ฐ์‡„์ ์ธ ์žฅ์• ๋ฅผ ์ผ์œผํ‚ค๋Š” ํ˜„์ƒ
  • ๊ธฐํƒ€ ์ธํ”„๋ผ ์ข…์†์„ฑ : eBPF ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, ์ด๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ์ฃผ๋ณ€ ํ™˜๊ฒฝ(์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ, ๊ธฐ์กด ์„ค์ •, ํŠธ๋ž˜ํ”ฝ ํ˜•ํƒœ ๋“ฑ)์˜ ๋ณ€ํ™”๋‚˜ ์„ค์ • ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
    • ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด pinned objects๋ฅผ ์œ„ํ•œ eBPF ํŒŒ์ผ ์‹œ์Šคํ…œ(/sys/fs/bpf)์ด ์ด์ค‘ ๋งˆ์šดํŠธ๋˜์–ด, NetEdit์˜ ์ดˆ๊ธฐํ™” ํ”„๋กœ๊ทธ๋žจ์ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด์ „ ๊ฐ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์ด์ „ ๊ฐ์ฒด์˜ ๊ณ ์ •์„ ํ•ด์ œ(unpin)ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๋ฒ„๊ทธ

Lessons & Future Work

  • ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋„์ž…: ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ๊ฒ€์‚ฌ(์œ ๋‹› ํ…Œ์ŠคํŠธ)์™€ ์‹ค์ œ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ(A/B ํ…Œ์ŠคํŠธ) ์‚ฌ์ด์—, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ๋™์‹œ์— ๋™์ž‘ํ•  ๋•Œ ์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€. ์ด๋•Œ ์‹ค์ œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•œ ๊ฐ€์งœ ๋ฐ์ดํ„ฐ(์„€๋„ ํŠธ๋ž˜ํ”ฝ)๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ์—ฐ๊ตฌ
    • ํผ์ง•(Fuzzing) ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ: ์‹œ์Šคํ…œ์— ๋ฌด์ž‘์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ์ฃผ์ž…ํ•˜์—ฌ, ํ‰์†Œ์—๋Š” ๋ฐœ๊ฒฌํ•˜๊ธฐ ํž˜๋“  ๊นŠ์€ ๊ณณ์˜ ์ปค๋„ ๋ฒ„๊ทธ๋ฅผ ๊ฐ•์ œ๋กœ ๋„์ง‘์–ด๋‚ด๋Š” ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๊ฐ€ ํ•„์š”.
    • ๋™์  ๊ณ„์ธก(Dynamic Instrumentation): ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜๊ณ  ์ž๋™์œผ๋กœ ๊ธฐ๋ก(๋กœ๊ทธ)์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ •๋ฐ€ํ•œ ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ํ•„์š”.

Opensource and Community Engagement

NetEdit์˜ ๋ฐ์ดํ„ฐ ํ‰๋ฉด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์— ๊ณต์‹ ํ†ตํ•ฉ(Upstream)ํ•˜๊ณ  ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌ

์ปค๋„ ๊ธฐ๋Šฅ ๋…ธ์ถœ ํ™•๋Œ€ (Exposing more functionality)

  • ์ปค๋„ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด eBPF ๋‚ด์—์„œ TCP ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜(CCA)์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก struct_ops ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž….
  • kfunc(์ปค๋„ ๋™์ž‘ ์žฌ์ •์˜ ๋ฐ ์กฐ์ •) ์ธํ„ฐํŽ˜์ด์Šค์™€ bpf_link(์›์ž์  ์—…๊ทธ๋ ˆ์ด๋“œ ์ง€์›)๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค๋„ ๊ธฐ๋Šฅ์„ ํ™•์žฅ.

โ†’ ์ปค๋„ ์šฐํšŒ(Kernel bypass) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ปค๋„ ๊ณต์‹ ๋ฐฐํฌ ์ผ์ •์— ์ข…์†๋˜์ง€ ์•Š๊ณ ๋„, CCA๋ฅผ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์œ ์—ฐํ•˜๊ณ  ๋ฐ˜๋ณต์ ์ธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ.

์ปค๋„ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ๊ตฌ์กฐ ๊ฐœ์„  (Improve kernel primitives)

  • ์ปค๋„ ๋‚ด ์ฝ”๋“œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ NetEdit์˜ eBPF ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋™๋“ฑํ•œ ๋„คํŠธ์›Œํฌ ์Šคํƒ ์ œ์–ด ๊ถŒํ•œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก bpf_setsockopt() ํ—ฌํผ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํŒฉํ† ๋ง
  • ๋„คํŠธ์›Œํฌ ์ •์ฑ…์˜ ์†Œ๊ธ‰ ์ ์šฉ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด bpf-tcp-iter์— bpf_setsockopt ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋Œ€์—ญ ์™ธ(out-of-band) ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์กด TCP ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„.

Categories:

Updated:

Leave a comment