๋คํธ์ํฌ ํจํท์ฉ Netfilter ํํฐ๋ง ๋ฐ ์์ ํ์ ์์คํ
๊ฐ๋ฐ์ ์ถํํ๋ค ์๋ธ๋ท, ๋คํธ์ํฌ ํฌํธ, ํ๋กํ ์ฝ ๋ฐ MAC ์ฃผ์์ ์กฐํฉ์ ํ์ธํด์ผ ํ๋ ๋๊ท๋ชจ ์ผ์น ๋ชฉ๋ก(nftables ์ธํธ)์ ์ฒ๋ฆฌ ์๋๋ฅผ ํฌ๊ฒ ๋์ด๋ ํจ์น ์ธํธ์
๋๋ค. ํจ์น๊ฐ ์ด๋ฏธ ๋ธ๋์น์ ์น์ธ๋์์ต๋๋ค. nf-๋ค์, Linux 5.7 ์ปค๋์ ํฌํจ๋๋๋ก ์ ์๋ ์์ ์
๋๋ค. ๊ฐ์ฅ ๋์ ๋๋ ๊ฐ์์ ๋ค์ ๋๋ถ์ ๋ฌ์ฑ๋์์ต๋๋ค. ๋งค๋ ฅ์ ์ธ AVX2 ๋ช
๋ น์ด(ํฅํ ARM์ฉ NEON ๋ช
๋ น์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฌํ ์ต์ ํ๋ฅผ ๊ฒ์ํ ๊ณํ์
๋๋ค).
๋ชจ๋์ ํฌํจ๋ ์ต์ ํ nft_set_pipapo (PIle PAcket POlicies)๋ ํจํท์ ๋ด์ฉ์ IP ๋ฐ ๋คํธ์ํฌ ํฌํธ ๋ฒ์์ ๊ฐ์ ํํฐ๋ง ๊ท์น์ ์ฌ์ฉ๋๋ ์์์ ํ๋ ์ํ ๋ฒ์์ ์ผ์น์ํค๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค(nft_set_rbtree ๋ฐ nft_set_hash๋ ๊ฐ๊ฒฉ ์ผ์น ๋ฐ ๊ฐ์ ์ง์ ๋ฐ์์ ์กฐ์ํฉ๋๋ค). AMD Epyc 256 ํ๋ก์ธ์๊ฐ ์ฅ์ฐฉ๋ ์์คํ
์์ 2๋นํธ AVX7402 ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ฒกํฐํ๋ pipapo ๋ฒ์ ์ ํฌํธ ํ๋กํ ์ฝ ์กฐํฉ์ ํฌํจํ์ฌ 420๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ 30%์ ์ฑ๋ฅ ํฅ์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. 1000๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋ถ์ํ ๋ ์๋ธ๋ท๊ณผ ํฌํธ ๋ฒํธ์ ์กฐํฉ์ ๋น๊ตํ์ ๋ ์ฆ๊ฐ์จ์ IPv87์ ๊ฒฝ์ฐ 4%, IPv128์ ๊ฒฝ์ฐ 6%์์ต๋๋ค.
8๋นํธ ๋์ 4๋นํธ ์ผ์น ๊ทธ๋ฃน์ ์ฌ์ฉํ๋๋ก ํ์ฉํ๋ ๋ ๋ค๋ฅธ ์ต์ ํ์์๋ ์๋นํ ์ฑ๋ฅ ํฅ์์ด ๋ํ๋ฌ์ต๋๋ค. ์ฆ, 66๋ง ๊ฐ์ ํฌํธ ํ๋กํ ์ฝ ํญ๋ชฉ์ ๊ตฌ๋ฌธ ๋ถ์ํ ๋ 30%, subnet_IPv43-port์ ๊ฒฝ์ฐ 4%, subnet_IPv61-port์ ๊ฒฝ์ฐ 6%์
๋๋ค. ์ ์ฒด์ ์ผ๋ก AVX2 ์ต์ ํ๋ฅผ ๊ณ ๋ คํ๋ฉด ์ด ํ
์คํธ์์ pipapo์ ์ฑ๋ฅ์ด ๊ฐ๊ฐ 766%, 168%, 269% ์ฆ๊ฐํ์ต๋๋ค. ๋ณต์กํ ๋น๊ต๋ฅผ ์ํด ์ป์ ํน์ฑ์ ๋จ์ผ ํ๋ ๊ฒ์ฌ๋ณด๋ค ์์ ์์ต๋๋ค. rbtree (ํฌํธ+ํ๋กํ ์ฝ ํ
์คํธ ์ ์ธ) ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง๋ ๋ค์์ ์ฌ์ฉํ ์ง์ ํ์ธ๋ณด๋ค ๋ค์ฒ์ ธ ์์ต๋๋ค. ํด์ netdev๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋๋กญ ํธ๋ค๋ฌ.
์ถ์ฒ : opennet.ru