P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
P4๋Š” ํŒจํ‚ท ๋ผ์šฐํŒ… ๊ทœ์น™์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋„๋ก ์„ค๊ณ„๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. C๋‚˜ Python๊ณผ ๊ฐ™์€ ๋ฒ”์šฉ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ P4๋Š” ๋„คํŠธ์›Œํฌ ๋ผ์šฐํŒ…์— ์ตœ์ ํ™”๋œ ๋‹ค์–‘ํ•œ ์„ค๊ณ„๋ฅผ ๊ฐ–์ถ˜ ๋„๋ฉ”์ธ๋ณ„ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

P4๋Š” P4 ์–ธ์–ด ์ปจ์†Œ์‹œ์—„์ด๋ผ๋Š” ๋น„์˜๋ฆฌ ์กฐ์ง์—์„œ ๋ผ์ด์„ผ์Šค๋ฅผ ๋ฐ›๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋„คํŠธ์›Œํ‚น ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ํฐ ๋‘ ์กฐ์ง์ธ ONF(Open Networking Foundation)์™€ LF(Linux Foundation)์—์„œ๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
์ด ์–ธ์–ด๋Š” ์›๋ž˜ 2013๋…„์— ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ "ํ”„๋กœํ† ์ฝœ ๋…๋ฆฝ์ , ํŒจํ‚ท ๋ผ์šฐํŒ… ํ”„๋กœ์„ธ์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์ด๋ผ๋Š” ์ œ๋ชฉ์˜ 2014 SIGCOMM CCR ๋…ผ๋ฌธ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

P4๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์„ฑ์žฅํ•˜๊ณ  ๋ฐœ์ „ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ, ์Šค์œ„์น˜ ๋ฐ ๋ผ์šฐํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋„คํŠธ์›Œํฌ ์žฅ์น˜์˜ ํŒจํ‚ท ์ „์†ก์„ ์„ค๋ช…ํ•˜๋Š” ํ‘œ์ค€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Open Networking Foundation์˜ ์ „๋ฌด์ด์‚ฌ์ธ Guru Parulkar๋Š” "SDN์€ ๋„คํŠธ์›Œํ‚น ์‚ฐ์—…์„ ๋ณ€ํ™”์‹œ์ผฐ์œผ๋ฉฐ P4๋Š” ๋ผ์šฐํŒ…์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ SDN์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „์‹œ์ผฐ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

P4 ์–ธ์–ด๋Š” ์›๋ž˜ Google, Intel, Microsoft Research, Barefoot, Princeton ๋ฐ Stanford์˜ ์—”์ง€๋‹ˆ์–ด ๋ฐ ์—ฐ๊ตฌ์› ๊ทธ๋ฃน์— ์˜ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋ฃจ ๋งŒ์— ๋ฐฐ์šธ ์ˆ˜ ์žˆ๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํŒจํ‚ท์ด ์ „์†ก๋˜๋Š” ๋ฐฉ์‹์„ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์–ธ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ P4๋Š” ํƒ€๊ฒŸ ๋…๋ฆฝ์ ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, P4๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ASIC, FPGA, CPU, NPU ๋ฐ GPU์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํƒ€๊ฒŸ์—์„œ ์‹คํ–‰๋˜๋„๋ก ๋ณ€๊ฒฝ ์—†์ด ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์–ธ์–ด๋Š” ๋˜ํ•œ ํ”„๋กœํ† ์ฝœ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค(์ฆ‰, P4 ํ”„๋กœ๊ทธ๋žจ์€ ๊ธฐ์กด ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ •์˜ ์ฃผ์†Œ ์ง€์ • ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์—…๊ณ„์—์„œ๋Š” P4๊ฐ€ ์žฅ์น˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ฏธ๋ž˜์—๋Š” ์ธํ„ฐ๋„ท-RFC ๋ฐ IEEE ํ‘œ์ค€์—๋„ P4 ์‚ฌ์–‘์ด ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

P4๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ ์žฅ์น˜์™€ ๊ณ ์ • ๊ธฐ๋Šฅ ์žฅ์น˜ ๋ชจ๋‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜คํ”ˆ ์†Œ์Šค SONiC ์Šค์œ„์น˜ OS์—์„œ ์‚ฌ์šฉํ•˜๋Š” SAI(Switch Abstraction Interface) API์—์„œ ์Šค์œ„์น˜ ํŒŒ์ดํ”„๋ผ์ธ ๋™์ž‘์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. P4๋Š” ONF Stratum ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉ๋˜์–ด ๋‹ค์–‘ํ•œ ๊ณ ์ • ์žฅ์น˜ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ ์žฅ์น˜ ์ „๋ฐ˜์˜ ์Šค์œ„์นญ ๋™์ž‘์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

P4๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์žฅ๋น„ ๊ณต๊ธ‰์—…์ฒด๋Š” ๋ชจ๋“  ์ œํ’ˆ์— ๊ฑธ์ณ ๊ณตํ†ต๋œ ๊ธฐ๋ณธ ๋ผ์šฐํŒ… ๋™์ž‘์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๊ด€๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๋ฉฐ ๊ถ๊ทน์ ์œผ๋กœ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  P4๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ผ์šฐํŒ… ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, P4๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ, ๊ธฐ์—… ๋ฐ ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด ๋„คํŠธ์›Œํฌ์˜ ์›๊ฒฉ ์ธก์ • ๋ฐ ์ธก์ •์— ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ตฌ๊ณ„๋„ ๋‚˜์„ฐ๋‹ค. ๋ช‡๋ช‡ ์„ ๋„์ ์ธ ํ•™์ˆ  ๋„คํŠธ์›Œํ‚น ์—ฐ๊ตฌ ๊ทธ๋ฃน์—์„œ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ํ•ฉ์˜ ํ”„๋กœํ† ์ฝœ ๋ฐ ํ‚ค ๊ฐ’ ์บ์‹ฑ์„ ํฌํ•จํ•˜์—ฌ P4 ํ”„๋กœ๊ทธ๋žจ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํฅ๋ฏธ๋กญ๊ณ  ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋งŒ๋“ค์–ด์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ˜์‹ ์€ ํ•˜๋“œ์›จ์–ด์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์˜ฎ๊ฒจ๊ฐ€๊ณ  ์žˆ์œผ๋ฉฐ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒˆ๋กญ๊ณ  ๋…์ฐฝ์ ์ธ ์•„์ด๋””์–ด๊ฐ€ ๋งŽ์ด ๋“ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ, ํŒŒ์ดํ”„๋ผ์ธ, ๋™์ž‘ ๋ชจ๋ธ, API, ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ์ฝ”๋“œ ๊ฐœ๋ฐœ์— ์ƒ๋‹นํ•œ ๊ธฐ์—ฌ๋ฅผ ํ•ด์™”์Šต๋‹ˆ๋‹ค. Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ๋ฐ ZTE์™€ ๊ฐ™์€ ํšŒ์‚ฌ์—๋Š” ์ „๋‹ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ๋ฐ USI๋ฅผ ํฌํ•จํ•œ ๋Œ€ํ•™ ์ถœ์‹ ; CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ๋ฐ Stratum์„ ํฌํ•จํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” P4๊ฐ€ ๋…๋ฆฝ์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ๋ผ๋Š” ์‚ฌ์‹ค์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

P4 ์–ธ์–ด์šฉ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ผ๋ฐ˜์ ์ธ ์„ธ๋Œ€:

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์‹ ์ฒญ ์ „๋ง

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
์–ธ์–ด๋Š” ๋ผ์šฐํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ ์„ค๊ณ„ ์˜ต์…˜ ๋ชฉ๋ก์€ ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์–ธ์–ด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ชฉํ‘œ ๊ตฌํ˜„์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋…๋ฆฝ์„ฑ
  2. ์‚ฌ์šฉ๋œ ํ”„๋กœํ† ์ฝœ์˜ ๋…๋ฆฝ์„ฑ
  3. ํ˜„์žฅ ์žฌ๊ตฌ์„ฑ.

๋ชฉํ‘œ ๊ตฌํ˜„์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋…๋ฆฝ์„ฑ

P4 ํ”„๋กœ๊ทธ๋žจ์€ ๊ตฌํ˜„ ๋…๋ฆฝ์ ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒ”์šฉ ํ”„๋กœ์„ธ์„œ, FPGA, ์‹œ์Šคํ…œ ์˜จ ์นฉ, ๋„คํŠธ์›Œํฌ ํ”„๋กœ์„ธ์„œ ๋ฐ ASIC๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์‹คํ–‰ ์—”์ง„์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋จธ์‹ ์„ P4 ํƒ€๊ฒŸ์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๊ฐ ํƒ€๊ฒŸ์—๋Š” P4 ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํƒ€๊ฒŸ ์Šค์œ„์น˜ ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋Œ€์ƒ ์žฅ์น˜, ์™ธ๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์— ๋‚ด์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. P4 ํ”„๋กœ๊ทธ๋žจ์˜ ์›๋ž˜ ๋Œ€์ƒ ์ค‘ ๋‹ค์ˆ˜๋Š” ๋‹จ์ˆœํ•œ ํŒจํ‚ท ๊ตํ™˜์„ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— "P4 ๋Œ€์ƒ"์ด ๋” ์ •ํ™•ํ•˜๋”๋ผ๋„ "P4 ์Šค์œ„์น˜"๋ผ๋Š” ์šฉ์–ด๋ฅผ ๋“ฃ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋œ ํ”„๋กœํ† ์ฝœ์˜ ๋…๋ฆฝ์„ฑ

P4๋Š” ํ”„๋กœํ† ์ฝœ์— ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์–ธ์–ด๊ฐ€ IP, ์ด๋”๋„ท, TCP, VxLAN ๋˜๋Š” MPLS์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  P4 ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ์˜ ํ—ค๋” ํ˜•์‹๊ณผ ํ•„๋“œ ์ด๋ฆ„์„ ์„ค๋ช…ํ•˜๋ฉฐ, ์ด๋Š” ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋Œ€์ƒ ์žฅ์น˜์— ์˜ํ•ด ํ•ด์„๋˜๊ณ  ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฅ ์žฌ๊ตฌ์„ฑ์„ฑ

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

ํŠน์ • ํ”„๋กœํ† ์ฝœ ์„ธํŠธ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ์–ธ์–ด์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋Š” ์–ธ์–ด ์ž‘์„ฑ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์œผ๋ฉฐ ๊ถ๊ทน์ ์œผ๋กœ ์‹œ์Šคํ…œ๊ณผ ๋ชฉํ‘œ์˜ ์œ ์—ฐ์„ฑ ๋ฐ ์žฌ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด์˜ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์€ ์ฒ˜์Œ์—๋Š” ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ์—์„œ์˜ ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ์šฉ์— ์ดˆ์ ์„ ๋งž์ถฐ ์ œ์ž‘์ž์— ์˜ํ•ด ๊ทœ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์–ธ์–ด๋Š” ์ด๋ฏธ ๋งŽ์€ ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1) ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ;

์ค‘๊ตญ ํšŒ์‚ฌ Tencent๋Š” ์„ธ๊ณ„ ์ตœ๋Œ€ ํˆฌ์ž ํšŒ์‚ฌ์ด์ž ์ตœ๋Œ€ ๋ฒค์ฒ˜ ์บํ”ผํƒˆ ํšŒ์‚ฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ค‘๊ตญ๊ณผ ์ „ ์„ธ๊ณ„ ๋‹ค๋ฅธ ๊ตญ๊ฐ€์— ์žˆ๋Š” Tencent์˜ ์žํšŒ์‚ฌ๋Š” ๋‹ค์–‘ํ•œ ์ธํ„ฐ๋„ท ์„œ๋น„์Šค, ์ธ๊ณต ์ง€๋Šฅ ๋ฐ ์ „์ž ์—”ํ„ฐํ…Œ์ธ๋จผํŠธ ๋ถ„์•ผ์˜ ๊ฐœ๋ฐœ์„ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ•˜์ดํ…Œํฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์•ผ๋ฅผ ์ „๋ฌธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

P4 ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ ๋ผ์šฐํŒ…์€ ํšŒ์‚ฌ์˜ ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ฒ˜์— ์‚ฌ์šฉ๋˜๋Š” ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

์ฐฝ์‹œ์ž ์ค‘ ํ•˜๋‚˜์ธ Google์€ ๋„คํŠธ์›Œํ‚น ์‚ฐ์—…, ํŠนํžˆ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์—์„œ P4์˜ ๊ธ‰์†ํ•œ ์ฑ„ํƒ์„ ์ž๋ž‘์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

2) ์ƒ์—… ํšŒ์‚ฌ;

Goldman Sachs๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์™€์˜ ํ˜‘๋ ฅ์„ ํ†ตํ•ด ๊ณตํ†ต ํ‘œ์ค€ ๋ฐ ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ๋ฅผ ํ˜์‹ ํ•˜๊ณ  ๊ณ ๊ฐ์—๊ฒŒ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

3) ์ƒ์‚ฐ;

์ „์ฒด ๋„คํŠธ์›Œํ‚น ์‚ฐ์—…์€ ์ „๋‹ฌ ๋™์ž‘์„ ๊ณ ์œ ํ•˜๊ฒŒ ์ •์˜ํ•˜๋Š” P4์™€ ๊ฐ™์€ ์–ธ์–ด์˜ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cisco๋Š” ๋˜ํ•œ ์ด ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ œํ’ˆ ๋ผ์ธ์„ ์ด์ „ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์ฃผ๋‹ˆํผ ๋„คํŠธ์›์Šค๋Š” ๋‹ค์–‘ํ•œ ์ œํ’ˆ์— P4 ๋ฐ P4 ๋Ÿฐํƒ€์ž„์„ ํฌํ•จ์‹œ์ผฐ์œผ๋ฉฐ ์ฃผ๋‹ˆํผ ์ž„๋ฒ ๋””๋“œ ํ”„๋กœ์„ธ์„œ์™€ ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Ruijie Networks๋Š” P4์™€ P4๊ฐ€ ๋„คํŠธ์›Œํฌ์— ์ œ๊ณตํ•˜๋Š” ์ด์ ์„ ๊ฐ•๋ ฅํžˆ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. PXNUMX๋ฅผ ํ†ตํ•ด ํšŒ์‚ฌ๋Š” ๋‹ค์–‘ํ•œ ๊ณ ๊ฐ์—๊ฒŒ ๋™๊ธ‰ ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค๊ณ  ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4) ํ†ต์‹ ์‚ฌ์—…์ž

AT&T๋Š” P4๋ฅผ ์ดˆ๊ธฐ์— ์ฑ„ํƒํ•œ ํšŒ์‚ฌ๋กœ, P4๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ์—์„œ ๋ณด๊ณ ์ž ํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•˜๊ณ  ๋„คํŠธ์›Œํฌ์—์„œ P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ ์ „๋‹ฌ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ดˆ์˜ ํšŒ์‚ฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

Deutsche Telekom์—์„œ ์ด ์–ธ์–ด๋Š” Access 4.0 ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๋กœ ์ฃผ์š” ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ํ”„๋กœํ† ํƒ€์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

5) ๋ฐ˜๋„์ฒด ์‚ฐ์—…;

์ด ์–ธ์–ด๋ฅผ ํ†ตํ•ด Barefoot์€ ๋„คํŠธ์›Œํฌ ๋ผ์šฐํŒ… ํ”Œ๋ ˆ์ธ์— ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Xilinx๋Š” P4.org์˜ ์ฐฝ๋ฆฝ์ž ์ค‘ ํ•˜๋‚˜์˜€์œผ๋ฉฐ P4 ์–ธ์–ด ๊ฐœ๋ฐœ์— ์ ๊ทน์ ์œผ๋กœ ์ฐธ์—ฌํ•˜์—ฌ ์ด๋ฅผ SmartNIC ๋ฐ NFV ํ•˜๋“œ์›จ์–ด์šฉ FPGA ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ ํ”Œ๋žซํผ์— ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ SDNet ์„ค๊ณ„์˜ ์ผ๋ถ€๋กœ ์ตœ์ดˆ์˜ P416 ์ปดํŒŒ์ผ๋Ÿฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

6) ์†Œํ”„ํŠธ์›จ์–ด.

VMware๋Š” P4๊ฐ€ ๋„คํŠธ์›Œํฌ์—์„œ ์˜๋ฏธ ์žˆ๊ณ  ํ•„์š”ํ•œ ๋ณ€ํ™”๋ฅผ ์ฃผ๋„ํ•˜๋Š” ์—„์ฒญ๋‚œ ์—๋„ˆ์ง€, ํ˜์‹  ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ฐฝ์ถœํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ธํ”„๋ผ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  ์ด๋ฅผ ์ตœ์‹  ์ œํ’ˆ์— ๊ตฌํ˜„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ˜์‹ ์˜ ๋ฌผ๊ฒฐ์ด ์ฃผ๋„๋จ์— ๋”ฐ๋ผ VMware๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๋Ÿฌํ•œ ์—…๊ณ„ ์›€์ง์ž„์˜ ์ผ๋ถ€์˜€์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ P4๋Š” ์—…๊ณ„์™€ ํ•™๊ณ„์—์„œ ํŒจํ‚ท ๋ผ์šฐํŒ… ๋™์ž‘์„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ณ ์œ ํ•˜๊ฒŒ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€์ƒ ๋…๋ฆฝ์ ์ด๊ณ  ํ”„๋กœํ† ์ฝœ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋ฉฐ, ์ด๋Š” ์—ฌ๋Ÿฌ ๋Œ€์ƒ์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋Œ€์ƒ์—๋Š” ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์Šค์œ„์น˜, ํ•˜์ดํผ๋ฐ”์ด์ € ์Šค์œ„์น˜, NPU, GPU, FPGA, SmartNIC ๋ฐ ASIC์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์–ธ์–ด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ํ™•์žฅํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ฒ˜์—์„œ ์‹ ์†ํ•œ ๊ตฌํ˜„์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ

P4๋Š” ๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ์ด๋ฉฐ ๋ชจ๋“  ๊ด€๋ จ ์ •๋ณด๋Š” ์›น์‚ฌ์ดํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค. P4.org

์ €์žฅ์†Œ ๋งํฌ https://github.com/p4lang, ์˜ˆ์ œ ์†Œ์Šค ์ฝ”๋“œ์™€ ํŠœํ† ๋ฆฌ์–ผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ P4๋ฅผ ์ง€์›ํ•˜๋Š” Eclipse์˜ ๊ฒฝ์šฐ ๊ถŒ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. P4 ์ŠคํŠœ๋””์˜ค ๋งจ๋ฐœ์—์„œ.

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์ปค๋„์˜ ์ฃผ์š” ์ถ”์ƒํ™”๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ—ค๋” ์ •์˜ โ€” ๋„์›€์„ ๋ฐ›์•„ ํ”„๋กœํ† ์ฝœ ํ—ค๋”๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

ํ—ค๋” ์ •์˜๋Š” ๋‹ค์Œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ํŒจํ‚ท ํ˜•์‹ ๋ฐ ํ—ค๋” ํ•„๋“œ ์ด๋ฆ„์— ๋Œ€ํ•œ ์„ค๋ช…
  • ๊ณ ์ • ๋ฐ ๊ฐ€๋ณ€ ํ—ˆ์šฉ ํ•„๋“œ

์˜ˆ๋ฅผ ๋“ค๋ฉด

header Ethernet_h{
    bit<48>  dstAddr;
    bit<48>  srcAddr;
    bit<16>  etherType;
}

header IPv4_h{
    bit<4>  version;
    bit<4>  ihl;
    bit<8>  diffserv;
    bit<16>  totalLen;
    bit<16>  identification;
    bit<3>  flags;
    bit<13>  fragOffset;
    bit<8>  ttl;
    bit<8>  protocol;
    bit<16>  hdrChecksum;
    bit<32>  srcAddr;
    bit<32>  dstAddr;
    varbit<320>  options;
}

ํŒŒ์„œ โ€” ๊ทธ๋“ค์˜ ์ž„๋ฌด๋Š” ํ—ค๋“œ๋ผ์ธ์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํŒŒ์„œ ์˜ˆ์ œ๋Š” ๋จธ์‹ ์˜ ์ตœ์ข… ์ƒํƒœ๊ฐ€ ํ•˜๋‚˜์˜ ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ ๋‘ ๊ฐœ์˜ ์ตœ์ข… ์ƒํƒœ ์ค‘ ํ•˜๋‚˜๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒƒ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

parser MyParser(){
 state  start{transition parse_ethernet;}
 state  parse_ethernet{
    packet.extract(hdr.ethernet);
    transition select(hdr.ethernet.etherType){
        TYPE_IPV4: parse_ipv4;
        default: accept;
        }
    }โ€ฆ
}

ะขะฐะฑะปะธั†ั‹ โ€” ์‚ฌ์šฉ์ž ํ‚ค๋ฅผ ์ž‘์—…๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ์ปดํ“จํ„ฐ ์ƒํƒœ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํ™œ๋™ โ€” ํŒจํ‚ค์ง€๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์—๋Š” ํŒจํ‚ท ์ „๋‹ฌ์— ๋Œ€ํ•œ ์ƒํƒœ(๊ด€๋ฆฌ ์ˆ˜์ค€์—์„œ ์ •์˜๋จ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ผ์น˜ ์ž‘์—… ๋‹จ์œ„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ท์€ ๋‹ค์Œ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ •ํ™•ํžˆ ์ผ์น˜
  • LPM(์ตœ์žฅ ์ ‘๋‘์‚ฌ ์ผ์น˜)
  • ํŠธ๋ฆฌํ”Œ ๋งค์นญ(๋งˆ์Šคํ‚น)

table ipv4_lpm{
    reads{
        ipv4.dstAddr: lpm;
    } actions {
        forward();
    }
}

๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ž‘์—…์€ ๋ฏธ๋ฆฌ ํ‘œ์— ์ •์˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ก์…˜์€ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ๊ด€๋ฆฌ ์ˆ˜์ค€(์˜ˆ: IP ์ฃผ์†Œ/ํฌํŠธ ๋ฒˆํ˜ธ)์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํŠน์ • ๋ฃจํ”„ ์—†๋Š” ๊ธฐ๋ณธ ์š”์†Œ๋Š” ์ž‘์—…์—์„œ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ช…๋ น ์ˆ˜๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘์—…์—๋Š” ๋ฃจํ”„๋‚˜ ์กฐ๊ฑด๋ฌธ์ด ํฌํ•จ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

action ipv4_forward(macAddr_t dstAddr, egressSpec_t port){
    standard_metadata.egress_spec = port;
    hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
    hdr.ethernet.dstAddr = dstAddr;
    hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}

๋งค์น˜ ์•ก์…˜ ๋ชจ๋“ˆ โ€” ๊ฒ€์ƒ‰ ํ‚ค ์ƒ์„ฑ, ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰, ์ž‘์—… ์ˆ˜ํ–‰์„ ์œ„ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์˜ ์ผ๋ฐ˜์ ์ธ ์˜ˆ๊ฐ€ ๊ทธ๋ฆผ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์ œ์–ด ํ๋ฆ„ โ€” ์ผ์น˜ ์ž‘์—… ๋ชจ๋“ˆ์ด ์‚ฌ์šฉ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒ์œ„ ์ˆ˜์ค€์˜ ๋…ผ๋ฆฌ์™€ ์ผ์น˜ ์ž‘์—… ์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๋Š” ํ•„์ˆ˜ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ œ์–ด ํ๋ฆ„์€ ์ œ์–ด ์ˆ˜์ค€์„ ์ •์˜ํ•˜์—ฌ ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๊ฐœ์ฒด ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ์•„ํ‚คํ…์ฒ˜์™€ API ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํŠน์ • ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒดํฌ์„ฌ ๊ณ„์‚ฐ, ๋ ˆ์ง€์Šคํ„ฐ, ์นด์šดํ„ฐ, ์นด์šดํ„ฐ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

extern register{
    register(bit<32> size);
    void read(out T result, in bit<32> index);
    void write(in bit<32> index, in T value);
}

extern Checksum16{
  Checksum16();    //constructor
  void clear();    //prepare unit for computation
  void update(in T data);    //add data to checksum
  void remove(in T data);  /remove data from existing checksum
  bit<16> get(); //get the checksum for the data added since last clear
}

๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ โ€” ๊ฐ ํŒจํ‚ค์ง€์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋ชจ๋“  ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋นˆ ๊ตฌ์กฐ)
    ์—ฌ๊ธฐ์—๋Š” ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    ํŒŒ์ดํ”„๋ผ์ธ ์ „์ฒด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ์˜ˆ๋ฅผ ๋“ค์–ด ํŒจํ‚ค์ง€ ํ•ด์‹œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋“ฑ ์ž์‹ ๋งŒ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  ๋‚ด๋ถ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ - ์•„ํ‚คํ…์ฒ˜์—์„œ ์ œ๊ณต
    ์ž…๋ ฅ ํฌํŠธ, ์ถœ๋ ฅ ํฌํŠธ๊ฐ€ ์—ฌ๊ธฐ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.
    ํŒจํ‚ท์ด ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋œ ํƒ€์ž„์Šคํƒฌํ”„, ๋Œ€๊ธฐ์—ด ๊นŠ์ด
    ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ํ•ด์‹œ/๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๋Œ€๊ธฐ์—ด
    ํŒจํ‚ค์ง€ ์šฐ์„ ์ˆœ์œ„, ํŒจํ‚ค์ง€ ์ค‘์š”๋„
    ์ถœ๋ ฅ ํฌํŠธ ์‚ฌ์–‘(์˜ˆ: ์ถœ๋ ฅ ๋Œ€๊ธฐ์—ด)

P4 ์ปดํŒŒ์ผ๋Ÿฌ

P4 ์ปดํŒŒ์ผ๋Ÿฌ(P4C)๋Š” ๋‹ค์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ ๋Ÿฐํƒ€์ž„
  2. ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ์—์„œ ๋จธ์‹  ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ API

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

P4 ์–ธ์–ด์˜ ์†Œํ”„ํŠธ์›จ์–ด ์Šค์œ„์น˜ ์˜ˆ

์†Œ์Šค์ฝ”๋“œ๋Š” ์ €์žฅ์†Œ์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

p4lang/p4c-bm: bmv2์— ๋Œ€ํ•œ JSON ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
p4lang/bmv2: bmv2 ๋ฒ„์ „ JSON ๊ตฌ์„ฑ์„ ์ดํ•ดํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์Šค์œ„์น˜

๊ทธ๋ฆผ์€ ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

ํ…Œ์ด๋ธ”, ํŒ๋… ๋ ˆ์ง€์Šคํ„ฐ, ์นด์šดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ์ž‘:

  • table_set_default <table name> <action name> <action parameters>
  • table_add <table name> <action name> <match fields> => <action
    parameters> [priority]
  • table_delete <table name> <entry handle>


์†Œ์Šค ์ฝ”๋“œ์—๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์Šค์œ„์น˜ API๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก simple_switch_CLI ํ”„๋กœ๊ทธ๋žจ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์™€ ๋‹ค๋ฅธ ์˜ˆ์ œ๋ฅผ ์ €์žฅ์†Œ์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

P4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

PS ์˜ฌ ์—ฌ๋ฆ„ ์ดˆ, ์ธํ…”์€ ํ•˜์ดํผ์Šค์ผ€์ผ ํด๋ผ์šฐ๋“œ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์‹ ์†ํ•˜๊ฒŒ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์˜ ์ผํ™˜์œผ๋กœ Barefoot Networks ์ธ์ˆ˜ ๊ณ„์•ฝ์„ ์ฒด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. Navin Shenoy(Intel Corporation์˜ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ทธ๋ฃน ์ˆ˜์„ ๋ถ€์‚ฌ์žฅ ๊ฒธ ์ด๊ด„ ๊ด€๋ฆฌ์ž)๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ์ด๋ฅผ ํ†ตํ•ด Intel์€ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ณ ๊ฐ์—๊ฒŒ ๋” ํฐ ์›Œํฌ๋กœ๋“œ์™€ ๋” ๋งŽ์€ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์œผ๋กœ๋Š” Intel์ด FPGA ์นฉ ์ƒ์‚ฐ์˜ ์„ ๋‘์ฃผ์ž์ด๊ณ  ๋›ฐ์–ด๋‚œ Quartus ํ™˜๊ฒฝ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์žŠ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” Intel์˜ ์ถœ์‹œ๋กœ Barefoot์ด ์ œํ’ˆ ๋ผ์ธ์„ ํ™•์žฅํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Quartus ๋ฐ P4 Studio๋„ Toffino ๋ฐ Toffino 2 ๋ผ์ธ์— ๋Œ€ํ•œ ์‹ฌ๊ฐํ•œ ์—…๋ฐ์ดํŠธ ๋ฐ ์ถ”๊ฐ€๋ฅผ ๋ฐ›์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

P4 ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ณต์‹ ํšŒ์› - ํšŒ์‚ฌ ์š”์ธ๊ตฐ.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€