[2026-07-10] CODA Runtime Detection of Application-Layer CPU-Exhaustion DoS Attacks in Containers

Motivation

์—ฐ๊ตฌ ๋ฐฐ๊ฒฝ

  • ์ง€๋Šฅ์ ์ธ ํ‘œ์  ๊ณต๊ฒฉ: ์ตœ๊ทผ์˜ DoS๋Š” ๋‹จ์ˆœํžˆ ๋ฌด์ฐจ๋ณ„์ ์ธ ํŠธ๋ž˜ํ”ฝ์„ ํผ๋ถ“๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์„ ๋„˜์–ด, ํ‘œ์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์‹œ๋งจํ‹ฑ(์˜๋ฏธ๋ก ์  ๊ตฌ์กฐ)์˜ ์•ฝ์ ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ฒจ๋ƒฅ
  • ์ž์› ์†Œ๋ชจ์˜ ๊ทน๋Œ€ํ™”: ๊ณต๊ฒฉ์ž๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๊ฐ€์žฅ ๋งŽ์ด ๋“œ๋Š” ๋น„ํšจ์œจ์ ์ธ ์‹คํ–‰ ๊ฒฝ๋กœ(Execution path)๋ฅผ ์ฐพ์•„๋‚ด์–ด ์•…์„ฑ ์š”์ฒญ์„ ์ฃผ์ž…. ๋‹จ ๋ช‡ ๊ฐœ์˜ ์š”์ฒญ๋งŒ์œผ๋กœ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์˜ CPU ์ž์›์„ ์••๋„ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋งˆ๋น„
  • ํƒ์ง€์˜ ์–ด๋ ค์›€ : ์ •๊ทœํ‘œํ˜„์‹ ์ทจ์•ฝ์ ์„ ๋…ธ๋ฆฐ ReDoS ๊ณต๊ฒฉ์˜ ๊ฒฝ์šฐ, ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์—์„œ๋Š” ์–ด๋– ํ•œ ๋น„์ •์ƒ ํŒจํ„ด์ด๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ์ง•ํ›„๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Œ.

๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ํƒ์ง€ ๊ธฐ๋ฒ•์˜ ํ•œ๊ณ„

  • RAMPART : ์˜ค์ง PHP ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์›น ํ”„๋กœ๊ทธ๋žจ๋งŒ์„ ์ง€์›. ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ๊ตฌ์ถ•๋˜๋Š” ํ˜„๋Œ€ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์— ์ ์šฉํ•  ์ˆ˜ ์—†์Œ
  • FINELAME : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์š”์ฒญ์˜ ์‹œ์ž‘๊ณผ ๋์„ ์•Œ๋ฆฌ๋Š” ์ฃผ์„(Annotation)์„ ์ฝ”๋“œ์— ์ถ”๊ฐ€. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž…์ˆ˜ํ•  ์ˆ˜ ์—†๋Š” Closed-source ๊ธฐ๋ฐ˜์˜ ์„œ๋“œํŒŒํ‹ฐ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๊ฐ€ ๋งŽ์•„ ์ ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ
  • COGO : ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋ณ„๋„์˜ ๊ฐ์‹œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์‹ฌ์–ด์•ผ ํ•จ โ†’ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฉ๋ฆฌ์„ฑ์„ ๊นจ๋œจ๋ฆฌ๊ณ  ๋ณธ๋ž˜์˜ ๋™์ž‘์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ
    • ํƒ์ง€ ์ฃผ๊ธฐ๊ฐ€ ์ดˆ ๋‹จ์œ„๋กœ ๊ตผ๋– ์„œ ์ฆ‰๊ฐ ์ฐจ๋‹จ์ด ์–ด๋ ค์›€

Goal

  • ์–ธ์–ด ๋…๋ฆฝ์ 
  • ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ง€์‹ ์š”๊ตฌ X : closed source ๊ธฐ๋ฐ˜์˜ ์„œ๋“œ ํŒŒํ‹ฐ๋„ ๋ณดํ˜ธ
  • ํˆฌ๋ช…ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง : ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์˜ ๊ฒฉ๋ฆฌ์„ฑ์„ ๋ณด์กด. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋ฅผ ์นจ๋ฒ”ํ•˜์ง€ ์•Š๊ณ  ๋ฐ–์—์„œ ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ฐ์‹œํ•˜์—ฌ ์›๋ž˜ ๋™์ž‘์— ๊ฐ„์„ญ์ด๋‚˜ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ

Contribution

  • ์—ฐ๊ฒฐ์— ์˜ํ•ด ์†Œ๋น„๋œ CPU ์‹œ๊ฐ„์„ ๋ชจ๋ธ๋งํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ CPU ๊ณ ๊ฐˆ DoS ๊ณต๊ฒฉ์„ ํƒ์ง€
  • ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์•Œ์ง€ ๋ชปํ•ด๋„
  • ํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ PID๋ฅผ ์ถ”์ ํ•˜๊ณ  ์ด๋ฅผ ์ „์—ญ PID์™€ ๋งคํ•‘ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์–ด๋– ํ•œ ๊ฐ„์„ญ๋„ ์—†์ด ํˆฌ๋ช…
  • ์‹ค์ œ ํ™˜๊ฒฝ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ณต๊ฒฉ์„ ๋Œ€์ƒ์œผ๋กœ CODA๋ฅผ ํ‰๊ฐ€. ๋‚ฎ์€ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ •ํ™•ํ•œ ํƒ์ง€

Threat Model & Assumptions

Threat Model : ์ปจํ…Œ์ด๋„ˆ์— ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์ ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ณต๊ฒฉ์ž

Scope : ๋‹จ์ผ ๋˜๋Š” ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์ด๋ฉฐ ๋ฐฐ๊ฒฝ ํŠธ๋ž˜ํ”ฝ๊ณผ ๊ฐ™์ด ์ „์†ก. ๊ธฐ์กด ์žฅ๋น„๋กœ ์‰ฝ๊ฒŒ ๋ฐฉ์–ด ๊ฐ€๋Šฅํ•œVolumetric ๊ณต๊ฒฉ์€ ์ œ์™ธ

Assumption : ๊ณต๊ฒฉ์ž๋„ ์‚ฌ์ „ ํƒ์ƒ‰ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ ์งํ›„๋Š” ์ •์ƒ ํŠธ๋ž˜ํ”ฝ๋งŒ ๋ณด์žฅ๋˜๋ฉฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ ํ•™์Šต

CODA Design

Overview

  • Architecture

    image.png

    1. Containers tracing module : ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ(์ธ์ˆ˜ ๋ฐ ๋ฐ˜ํ™˜๊ฐ’ ํฌํ•จ)๋ฅผ ์ถ”์ . ํ•ด๋‹น ํ˜ธ์ถœ์˜ UTS ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„, PID ๋ฐ TID๋„ ํ•จ๊ป˜ ์ถ”์ 
      • UTS ๋„ค์ž„์ŠคํŽ˜์ด์Šค : ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ NIS ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค๊ณผ ์™„์ „ํžˆ ๊ฒฉ๋ฆฌ
        • ํ•ด๋‹น ์ด๋ฆ„์„ ๊ฐ€์ ธ์™€์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„
        • ์›๋ž˜ ์ปค๋„ ์ž์ฒด์—๋Š” ์ปจํ…Œ์ด๋„ˆ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ID๋ผ๋Š” ๊ฐ์ฒด ๊ฐœ๋…์ด ์—†์Œ
      • PID, TID ๋ฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ชจ๋“ˆ๋กœ ์ „๋‹ฌ
    2. CPU time monitoring module : ์ฒ˜๋ฆฌ ์ค‘์ธ ์—ฐ๊ฒฐ์ด ์†Œ๋น„ํ•˜๋Š” CPU ์‹œ๊ฐ„์„ ๋ชจ๋‹ˆํ„ฐ๋ง
    3. Attack detection module : ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์ •์ƒ CPU ์‹œ๊ฐ„ ๋ชจ๋ธ์„ ํ•™์Šตํ•ด ์ž„๊ณ„์น˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์— CPU ์†Œ๋ชจ๋Ÿ‰์ด ์ด๋ฅผ ๋ฒ—์–ด๋‚  ๊ฒฝ์šฐ ๊ณต๊ฒฉ์œผ๋กœ ํŒ๋ณ„
  • ๋™์ž‘ ํ๋ฆ„

    image.png

    1. ํ•™์Šต ๋‹จ๊ณ„ : ์ •์ƒ ์—ฐ๊ฒฐ์ด ์†Œ๋น„ํ•˜๋Š” CPU ์‹œ๊ฐ„ ๋ชจ๋ธ๋ง
    2. ํƒ์ง€ ๋‹จ๊ณ„ : ๊ฐ ์—ฐ๊ฒฐ์ด ์†Œ๋น„ํ•˜๋Š” CPU ์‹œ๊ฐ„์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ›„ ๊ณต๊ฒฉ ํƒ์ง€
      1. ์ปจํ…Œ์ด๋„ˆ๋ฅผ tracing ํ•˜๊ธฐ ์‹œ์ž‘
      2. accept()์ด ํฌ์ฐฉ๋˜๋ฉด CPU ์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ชจ๋“ˆ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ํ•ด๋‹น ์—ฐ๊ฒฐ์ด ์†Œ๋น„ํ•˜๋Š” CPU ์‹œ๊ฐ„์„ ๋ชจ๋‹ˆํ„ฐ๋ง
      3. ๊ณต๊ฒฉ ํƒ์ง€
      4. close()์ด ํฌ์ฐฉ๋˜๋ฉด CPU ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ค‘๋‹จ
  • ๊ตฌ๋™ ํ™˜๊ฒฝ : ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์— ๋ฐฐํฌ. ์ปค๋„ ์ˆ˜์ • ์—†์ด eBPF๋ฅผ ํ†ตํ•ด ์ปค๋„์— ์ฃผ์ž…

Containers Tracing Module

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

  • ์ „ํ†ต์ ์ธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ถ”์  ๋„๊ตฌ(์˜ˆ: strace)๋Š” ํ˜ธ์ถœ๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํผ
    • ๊ธฐ์กด ๋ฐฉ์‹์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จ ํ•œ ํ›„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ.
  • ํ˜ธ์ŠคํŠธ OS ์ž…์žฅ์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ”„๋กœ์„ธ์Šค์™€ ์ผ๋ฐ˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ํž˜๋“ฆ

eBPF ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ ์ถ”์ 

image.png

CODA๋Š” eBPF๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค๋„์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๋„ค์ดํ‹ฐ๋ธŒ ์†๋„๋กœ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ถ”์ ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋…ผ๋ฆฌ๋กœ ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ์„ธ์Šค๋งŒ ์„ ๋ณ„

  • PID ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํŠน์„ฑ ํ™œ์šฉ : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋Š” ์ž์‹ ๋งŒ์˜ ๊ณ ์œ ํ•œ PID ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด๋ถ€์˜ ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ญ์ƒ PID 1์„ ํ• ๋‹น
  • PID ์ถ”์ 
    • eBPF ํ•จ์ˆ˜ bpf_get_current_task()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋””์Šคํฌ๋ฆฝํ„ฐ(task_struct)์— ์ ‘๊ทผ
      • BCC ํˆดํ‚ท์˜ attach_kprobe()์™€ attach_kretprobe() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€
    • task_struct ๋‚ด๋ถ€์˜ nsproxy ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ •๋ณด๋ฅผ ํ™•์ธ. PID๊ฐ€ 1์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํฌ์ฐฉ๋˜๋ฉด ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ํ•ด๋‹น PID ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ์ถ”์ 
      • ํ˜ธ์ŠคํŠธ OS๋„ ์ „์—ญ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ถ”์ 
      • task_struct : ํ”„๋กœ์„ธ์Šค ์ •๋ณด๋ฅผ ์ ์–ด๋‘๋Š” ๋””์Šคํฌ๋Ÿฝํ„ฐ
      • nsproxy : namespace proxy
  • ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ nsproxy ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด TID๋„ ์ถ”์ 
  • ํ›„์— ๋กœ๊น…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๊ตฌ๋ณ„ : ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์–ด๋А ์ปจํ…Œ์ด๋„ˆ์—์„œ ์™”๋Š” ์ง€ ๊ตฌ๋ถ„
    • UTS ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„์„ nsproxy ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ์–ป์–ด๋‚ด๊ณ  ์ปจํ…Œ์ด๋„ˆ ID๋กœ ์„ค์ •.
  • Background: ์ปจํ…Œ์ด๋„ˆ ID vs ๋„ค์ž„์ŠคํŽ˜์ด์Šค
    • ๋„ค์ž„์ŠคํŽ˜์ด์Šค : ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋‚˜ ๊ณ ์œ  ๋ฒˆํ˜ธ. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฉˆ์ท„๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ์ดˆ๊ธฐํ™”
    • ์ปจํ…Œ์ด๋„ˆ ID : User space์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹๋ณ„๊ฐ’. ๋ฉˆ์ท„๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ์œ ์ง€. ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ
    • ์ปค๋„ ๋‹จ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ„๋‹จํ•œ ๋ฒˆํ˜ธ ํ˜•ํƒœ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ตฌ๋ถ„
      • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ผ๋Š” ๋ฐฉ์— ์ปจํ…Œ์ด๋„ˆ ID๋ผ๋Š” ๋ช…ํŒจ๊ฐ€ ๊ฑธ๋ ค ์žˆ์Œ
    • ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์—๋„ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ํ†ตํ•ด ์ž์›์„ ์–ผ๋งˆ๋‚˜ ์ป๋Š” ์ง€ ๊ธฐ๋ก
    • ํƒ์ง€ ๋ชจ๋“ˆ์—์„œ ๊ณต๊ฒฉ์„ ํƒ์ง€ํ–ˆ์„ ๋•Œ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ํ†ตํ•ด์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  ์ •์ง€์‹œํ‚ค๋“  ๊ฐ€ ์กฐ์น˜๋ฅผ ์ทจํ•จ

CPU Time Monitoring Module

System Calls for HTTP(S) Requests

HTTP ์š”์ฒญ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ณต๊ฒฉ์œผ๋กœ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•จ.

  • accept() ํ˜ธ์ถœ ์‹œ ์ธก์ • ์‹œ์ž‘. close() ์‹œ ์ธก์ • ์ข…๋ฃŒ
    • HTTP ํ†ต์‹ ์€ TCP ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ TCP๋ฅผ ์ถ”์ ํ•˜์—ฌ ์ธก์ •
    • HTTP ์ž์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ์ด๋ผ ์‹œ์Šคํ…œ ์ฝœ์ด ์—†์–ด ์–ธ์ œ ์‹œ์ž‘๋˜๊ณ  ๋๋‚˜๋Š” ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— TCP ๋‹จ์—์„œ ํ•จ
  • ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์–ด์™€ ์ƒ๊ด€ ์—†๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋จ

PID/TID Mapping

  • ์ธก์ •ํ•˜๋Š” PID/TID๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๋กœ์ปฌ ๋ฒˆํ˜ธ์ด๋ฏ€๋กœ ์ด๋ฅผ global PID/TID๋กœ ๋งคํ•‘
    • ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ CPU ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธ
  • ์šฉ์–ด ์ฐจ์ด
    • User space : ํ”„๋กœ์„ธ์Šค ๋ฒˆํ˜ธ๋Š” PID, ์Šค๋ ˆ๋“œ ๋ฒˆํ˜ธ๋Š” TID
    • Kernel Space : ํ”„๋กœ์„ธ์Šค ๋ฒˆํ˜ธ๋Š” TGID(Thread Group ID), ์Šค๋ ˆ๋“œ ๋ฒˆํ˜ธ๋Š” PID. ๋…ผ๋ฌธ์—์„œ๋Š” k-PID๋ผ๊ณ  ๋ช…๋ช…
  • ๋™์ž‘ ํ๋ฆ„
    1. accept() ํ˜ธ์ถœ์ด ํŠธ๋ฆฌ๊ฑฐ๋  ๋•Œ, bpf_get_current_pid_tgid()๋ผ๋Š” eBPF ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
    2. accept()๊ฐ€ TGID์™€ k-PID๋ฅผ ๋ฆฌํ„ด
    3. Containers Tracing Module์ด ์ฃผ๋Š” PID์™€ TID๋ฅผ TGID์™€ k-PID๋ฅผ ๋งคํ•‘

CPU Time Monitoring

  • PID-TID ์Œ์€ thread์˜ ๊ณ ์œ ์‹๋ณ„๊ฐ’์ด๋ฉฐ ์ด ํ•˜๋‚˜์˜ thread๋Š” ํ•œ ๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌ
  • ๋™์ž‘ ํ๋ฆ„
    1. ์ปค๋„์ด accept() ํ˜ธ์ถœํ•˜๋ฉด accept()๊ฐ€ ํ•ด๋‹น ์†Œ์ผ“์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ์–‘์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฆฌํ„ด
    2. close()ํ•  ๋•Œ, ์†Œ์ผ“ ๋ฒˆํ˜ธ๋ฅผ ์ธ์ž๋กœ ๋„ฃ๊ณ  ์—ฐ๊ฒฐ์„ ๋Š์Œ.

    โ†’ close()์˜ ์ธ์ž๊ฐ’๊ณผ accept()์˜ ๋ฆฌํ„ด๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ค‘๋‹จ

  • ํ˜„๋Œ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ : ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Œ.
    1. ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค/ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ : ์œ„์˜ ๋ฐฉ์‹๋Œ€๋กœ ์ฒ˜๋ฆฌ
    2. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค/ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ : ๊ฐ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์ฒ˜๋ฆฌ. ๋™์‹œ์— ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์–ด๋„ ๊ฒฐ๊ตญ์€ ์—ฐ๊ฒฐ๊ณผ ์Šค๋ ˆ๋“œ๋Š” 1๋Œ€1๋กœ ๋งคํ•‘
    3. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค / ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ์ค‘ ๋ถ€๋ชจ-์ž์‹ ๋ชจ๋ธ
      • ๋™์ž‘ ํ๋ฆ„
        1. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฝ
        2. ๋ถ€๋ชจ process/thread๊ฐ€ sub-process/thread๋ฅผ cloneํ•˜์—ฌ ์ƒ์„ฑ ํ›„ ๋Œ€๊ธฐ๋กœ ๋Œ์•„๊ฐ
          • sub-process/thread๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ PID/TID๋ฅผ ๊ฐ€์ง
        3. sub-process/thread๊ฐ€ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ข…๋ฃŒ
      • CODA๋Š” clone() ์‹œ์Šคํ…œ ์ฝœ์„ ์ถ”์ ํ•˜์—ฌ ํ•˜์œ„ PID/TID๋ฅผ ๊ธฐ๋กํ•˜๊ณ  close() ์ „๊นŒ์ง€ sub-process/thread์˜ ์ž์› ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 
    4. Process Pool/Thread Pool : ์—ฌ๋Ÿฌ ๊ฐœ์˜ thread๋ฅผ ๋ฏธ๋ฆฌ ์œ ์ง€ํ•˜๊ณ  ์—ฐ๊ฒฐ ์ˆ˜๋ฝ ํ›„ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘์—…์„ ํ• ๋‹น
      • thread clone์„ ํ•˜์ง€๋„ ์•Š๊ณ  ์†Œ๋ฉธํ•˜์ง€ ์•Š์•„์„œ TID๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์Œ
      • CODA
        1. Thread Pool์— ์žˆ๋Š” ์ œํ•œ๋œ ์ˆ˜์˜ TID๋ฅผ ๊ธฐ๋ก
        2. accept() ์‹œ ๊ธฐ๋ก๋œ TID๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ Thread Pool ๋‚ด์˜ Thread๋“ค์ด ์†Œ๋น„ํ•˜๋Š” CPU ์‹œ๊ฐ„์„ ๋ชจ๋‹ˆํ„ฐ๋ง
        3. close() ํŠธ๋ฆฌ๊ฑฐ ์‹œ ์ข…๋ฃŒ
          • ๋Œ€๋ถ€๋ถ„ ์ด 4๊ฐ€์ง€์— ์†ํ•˜๋ฉฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์„œ๋ฒ„์— ๋งž๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒ
  • ์‹ค์ œ CPU ์‚ฌ์šฉ ์‹œ๊ฐ„๊ณผ accept-close ์‹œ๊ฐ„์˜ ์ฐจ์ด : ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ๋“ฑ์œผ๋กœ ํ•ญ์ƒ CPU๋ฅผ ์ ์œ ํ•˜์ง€๋Š” ์•Š์Œ.
    • ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ์‹œ ํ˜ธ์ถœ๋˜๋Š” finish_task_switch()์„ ํ†ตํ•ด CPU ์‚ฌ์šฉ ์‹œ๊ฐ„์„ ํ™•์ธ
    • ์œ„ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, bpf_get_current_pid_tgid()๋ฅผ ํ†ตํ•ด ํ˜„์žฌ์˜ k-PID์™€ TGID๋ฅผ ์–ป๊ณ , bpf_ktime_get_ns() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์–ป์–ด ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ผ๋งˆ๋งŒํผ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ํ–ˆ๋Š” ์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ

Attack Detection Module

์ •์ƒ CPU ์‹œ๊ฐ„ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์—ฐ๊ฒฐ๋งˆ๋‹ค CPU ์‹œ๊ฐ„์„ ๋น„๊ตํ•จ. ์ž„๊ณ„๊ฐ’ ์ดํ•˜๋ฉด ์ •์ƒ(0), ์ดˆ๊ณผํ•˜๋ฉด ๊ณต๊ฒฉ(1)๋กœ ํŒ๋ณ„

  • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋Š” ๋Œ€์ฒด๋กœ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค
    • ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์†Œ๋ชจํ•˜๋Š” CPU ์‹œ๊ฐ„์€ ๋น„์Šทํ•  ๊ฒƒ
    • ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋งˆ๋‹ค ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ž„๊ณ„๊ฐ’์ด ๋‹ฌ๋ผ์•ผ ํ•จ. ๋‹ค๋ฅธ ๋ชจ๋ธ ์‚ฌ์šฉ
  • ์ž„๊ณ„๊ฐ’๊ณผ ์„ฑ๋Šฅ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ : ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ฏธํƒ์ด ๋†’์•„์ง€๊ณ  ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์˜คํƒ์ด ๋†’์•„์ง
    • ์•…์„ฑ ๊ณต๊ฒฉ์ด ํšจ๊ณผ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„์ฃผ ๋งŽ์€ CPU ์‹œ๊ฐ„์„ ์†Œ๋ชจ์‹œ์ผœ์•ผ ํ•˜๋ฏ€๋กœ ์ž„๊ณ„๊ฐ’์„ ๋†’๊ฒŒ ์„ค์ •
    • ์„ค์ • ๊ณต์‹

      \[P(|t - m| > ks) \le \frac{1}{k^2}\] \[t = \max(t_{max}, m + ks)\]
      • $t_{max}$ : ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹(์ •์ƒ) ์ค‘ ๊ฐ€์žฅ ํฐ ์‹œ๊ฐ„
      • $m, s$ : ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹์˜ ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ๊ณผ ํ‘œ์ค€ ํŽธ์ฐจ
      • ์ฒด๋น„์‡ผํ”„ ๋ถ€๋“ฑ์‹ : ๋ถ„ํฌ๊ฐ€ ์–ด๋–ป๋“  ๋ฌด์กฐ๊ฑด ์„ฑ๋ฆฝํ•˜๋Š” ๋ฒ•์น™
        • ํŠธ๋ž˜ํ”ฝ์˜ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ •ํ•˜์ง€ ์•Š์Œ
        • ๋ฌด์ž‘์œ„ t๊ฐ€ ํ‘œ์ค€ ํŽธ์ฐจ์˜ k๋ฐฐ ๋–จ์–ด์ ธ ์žˆ์„ ํ™•๋ฅ ์€ $\frac{1}{k^2}$
      • $m + ks$ : ํ†ต๊ณ„์  ํ•œ๊ณ„์„ .
      • ๋‘ ๋ฒˆ์งธ ์ˆ˜์‹ : ๋” ํฐ ๊ฐ’์„ ๊ธฐ์ค€์„ ์œผ๋กœ ์“ด ๋‹ค๋Š” ๊ฒƒ โ†’ ์˜คํƒ ๊ฐ์†Œ
  • eBPF ์ œ์•ฝ
    • ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ ์ง€์› X : ์ž„๊ณ„๊ฐ’ $t$์— $10^a$๋ฅผ ๊ณฑํ•˜๊ณ  ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ์ •์ˆ˜๊ฐ’ $tโ€™$๋ฅผ ์–ป์–ด๋ƒ„.

Evaluation

Setup

์„œ๋ฒ„(Intel i7-8700k CPU์™€ 16GB RAM ํ™˜๊ฒฝ)์™€ ํด๋ผ์ด์–ธํŠธ(Intel i5-6200u CPU์™€ 8GB RAM ํ™˜๊ฒฝ)์€ LAN์œผ๋กœ ์—ฐ๊ฒฐ

image.png

  1. ์ปจํ…Œ์ด๋„ˆ 1 : Node.js ์‚ฌ์šฉ. ๋‹จ์ผ thread
    • tough-cookie๋ผ๋Š” ์ฟ ํ‚ค ํŒŒ์„œ๋ฅผ ์‚ฌ์šฉ. ReDoS์— ์ทจ์•ฝ
  2. ์ปจํ…Œ์ด๋„ˆ 2 : Apache. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ
    • WordPress๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•. ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋Œ€ ๊ธธ์ด๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ํ•ด์‹œ ์—ฐ์‚ฐ ์ทจ์•ฝ์ .
      • ๊ธด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CPU ์ž์› ์†Œ์ง„
  3. ์ปจํ…Œ์ด๋„ˆ 3 : Flask. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ํ•˜์œ„ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” multi-thread
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„ ์ธก์ •๊ธฐ์ธ zxcvbn์„ ์‚ฌ์šฉ. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„ ์ทจ์•ฝ
      • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ๋ชจํ˜ธํ•œ ํŠน์ˆ˜ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง‘์–ด๋„ฃ์–ด ๋ง‰๋Œ€ํ•œ CPU ์‹œ๊ฐ„ ์†Œ๋ชจ
  4. ์ปจํ…Œ์ด๋„ˆ 4: Tornado. thread pool์„ ๊ตฌ์ถ•
    • XML ํŒŒ์„œ ์‚ฌ์šฉ. XML Bomb (Billion laughs)์— ์ทจ์•ฝ

Overhead

  • Baseline
    • ํŠธ๋ž˜ํ”ฝ ์ƒ์„ฑ : Siege ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉ
      • ์—ฐ์†๋œ ์—ฐ๊ฒฐ์˜ ๊ฐ„๊ฒฉ์€ 0.1์ดˆ๋กœ ๊ทนํ•œ์˜ ์ƒํ™ฉ๋ณด๋‹ค๋Š” ๋А๋ฆฌ์ง€๋งŒ ์‹ค์ œ ํ™˜๊ฒฝ๋ณด๋‹ค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฆ„
    • ์ปจํ…Œ์ด๋„ˆ์™€ ๋‚ด๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •
      • ์ปจํ…Œ์ด๋„ˆ๋งˆ๋‹ค 5ํšŒ ์‹คํ—˜ ๋ฐ˜๋ณต. 180์ดˆ ๋™์•ˆ ์ง„ํ–‰
    • ์ง€์—ฐ ์‹œ๊ฐ„์˜ ์ค‘์•™๊ฐ’์„ ์„ ํƒํ•˜๊ณ  5๋ฒˆ์˜ ์ค‘์•™๊ฐ’ ํ‰๊ท ์„ baseline์œผ๋กœ ์žก์Œ
    • ๊ฒฐ๊ณผ

      image.png

      • 32๋ช…์„ ๋„˜์ง€ ์•Š์„ ๋•Œ๋Š” ๊ดœ์ฐฎ์•˜์ง€๋งŒ 64๋ช… ์ด์ƒ์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
        • CODA๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜์ธ์ง€ ์„ธ์…˜์ด ๋งŽ์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜์ธ์ง€ ๊ตฌ๋ถ„์ด ์•ˆ๊ฐ
      • ์ดํ›„ ์‹คํ—˜์—์„œ 32๋ช…์˜ ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ์‚ฌ์šฉ
  • CODA

    image.png

    • 0.7 ~5ms ์ •๋„์˜ ์ง€์—ฐ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋จ
      • 1ms ์ •๋„๋Š” ์ธ์ง€ํ•  ์ˆ˜ ์—†์Œ
    • baseline์˜ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์งง์€ ๊ฒฝ์šฐ๋งŒ ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€ ๋น„์œจ์ด ๋†’๊ฒŒ ๋‚˜์˜ด
    • ๋‹ค๋ฅธ ์—ฐ๊ตฌ์™€ ๋น„๊ต : 1 ~ 7ms ์ง€์—ฐ ์‹œ๊ฐ„์ถ”๊ฐ€
      • ์‹คํ—˜ ์„ค์ •๊ณผ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์—„๋ฐ€ํ•œ ๋น„๊ต๋Š” ๋ถˆ๊ฐ€
    • ๊ณต๊ฒฉ ํƒ์ง€์˜ ์˜ค๋ฒ„ํ—ค๋“œ

      image.png

      • ๊ณต๊ฒฉ ํƒ์ง€๋กœ ์ธํ•œ ์ง€์—ฐ ์‹œ๊ฐ„์€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์•˜๊ณ  ๋Œ€์ฒด๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ณผ์ •์—์„œ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐœ์ƒ

Performance

  • Setup
    • ์‹คํ—˜ ์ง„ํ–‰
      • 0 ~ 200์ดˆ : ์ •์ƒ ์š”์ฒญ๋งŒ ์ „์†กํ•˜์—ฌ ๊ณต๊ฒฉ ํƒ์ง€ ๊ธฐ์ค€ ํ•™์Šต
      • 200 ~260์ดˆ : ์ •์ƒ + ์•…์„ฑ ์š”์ฒญ
      • 260 ~300์ดˆ : ์ •์ƒ ์š”์ฒญ
    • QoS๋ฅผ ์ €ํ•˜์‹œํ‚ค๋Š” ์ˆ˜์ค€์œผ๋กœ ์กฐ์ ˆ
    • ์ž„๊ณ„๊ฐ’ k = 4, ์†Œ์ˆ˜์  a = 4๋กœ ์„ค์ •
    • ํƒ์ง€ ์†๋„ ์ธก์ • : ์•…์„ฑ ์—ฐ๊ฒฐ์˜ ์ˆ˜๋ช… ๋Œ€๋น„, ๊ณต๊ฒฉ์ด ํƒ์ง€๋œ ์‹œ์ ๋ถ€ํ„ฐ ํ•ด๋‹น ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‚จ์€ ์‹œ๊ฐ„์˜ ๋น„์œจ

image.png

  • ์ปจํ…Œ์ด๋„ˆ 1 : 32๊ฐœ์˜ ์‚ฌ์šฉ์ž ์„ธ์…˜. ์ดˆ๋‹น 2๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑ. ๊ฐ ์—ฐ๊ฒฐ์€ 10๊ฐœ์˜ ์ •์ƒ ์š”์ฒญ์„ ํฌํ•จํ•˜์—ฌ ์ดˆ๋‹น 640๊ฐœ์˜ ์š”์ฒญ์„ ์ƒ์„ฑ. ๊ทธ ์ค‘ 16๊ฐœ๊ฐ€ ์•…์„ฑ
    • ๊ณต๊ฒฉ์˜ ๊ฐ•๋„๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์„œ๋ฒ„ ๋‹ค์šด์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๊ฒฉ ๋น„์œจ์„ ์ค„์ž„
  • ์ปจํ…Œ์ด๋„ˆ 2, 3, 4 : ์–ด๋–ค ํ™˜๊ฒฝ์ด๋“  ์–ด๋–ค ๊ณต๊ฒฉ์ด๋“  ๋†’์€ ํƒ์ง€์œจ๊ณผ ๋น ๋ฅธ ํƒ์ง€ ์†๋„๋ฅผ ๊ฐ€์ง

Discussion

  • ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ์˜ ํ™•์žฅ : ํ˜„์žฌ๋Š” TCP ๊ธฐ๋ฐ˜์˜ HTTP(S) ๊ธฐ์ค€
    • UDP ๊ธฐ๋ฐ˜์€ recvfrom๊ณผ close ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์ง„์ž…์ ๊ณผ ์ข…๋ฃŒ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ
    • CPU๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ž์›์œผ๋กœ ํ™•์žฅ
      • tcp_sent ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด TCP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ „์†ก๋œ ๋ฐ”์ดํŠธ ์–‘์„ ์•Œ์•„๋ƒ„
  • eBPF์—์„œ kprobes์˜ ํ•œ๊ณ„
    • ๋™์‹œ์— ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ธ์ถœ ํšŸ์ˆ˜์— ์ œํ•œ์ด ์žˆ์Œ
    • ์ผ๋ถ€ ์ถ”์ ์„ ๋†“์น  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ปค๋„๊ณผ ๋„๊ตฌ์˜ ๋ฐœ์ „์œผ๋กœ ๋™์‹œ ์—ฐ๊ฒฐ 1000๊นŒ์ง€ ํ…Œ์ŠคํŠธํ•ด๋ดค์ง€๋งŒ ๋ˆ„๋ฝ์ด ์—†์—ˆ์Œ
  • ์šด์˜์ฒด์ œ์˜ ํ™•์žฅ
  • ํƒ์ง€ ์ดํ›„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค

์ƒ๊ฐ

๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹จ์ผ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฌธ์ œ?

๊ณต๊ฒฉ ์š”์ฒญ์€ ๋‹จ์ผ ๋˜๋Š” ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ

์ •์ƒ ๋•Œ ๋„ˆ๋ฌด ๊ธด ์‹œ๊ฐ„์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด??? โ†’ ์ „์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•˜๋‚˜

Categories:

Updated:

Leave a comment