๋ช ๋
์ ์ฟ ๋ฒ๋คํฐ์ค
๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ต๋ 100ms ์ด์์ ๋ฌด์์ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ ๊ฒฝํํ๋ฏ๋ก ์๊ฐ ์ด๊ณผ ๋๋ ์ฌ์๋๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋น์ค๋ 100ms๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์์ฒญ์ ์๋ตํ ์ ์์ ๊ฒ์ผ๋ก ์์๋์์ต๋๋ค. ํ์ง๋ง ์ฐ๊ฒฐ ์์ฒด์ ๋๋ฌด ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด์ ๋ณ๋๋ก ์ฐ๋ฆฌ๋ ๋ฐ๋ฆฌ์ด๊ฐ ์์๋๋ ๋งค์ฐ ๋น ๋ฅธ MySQL ์ฟผ๋ฆฌ๋ฅผ ๊ด์ฐฐํ์ผ๋ฉฐ MySQL์ ๋ฐ๋ฆฌ์ด ๋ง์ ์๋ฃ๋์์ง๋ง ์์ฒญ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ด์ ์์๋ ์๋ต์ 100ms ์ด์์ด ๊ฑธ๋ ธ์ต๋๋ค.
ํธ์ถ์ด Kubernetes ์ธ๋ถ์์ ์๋๋ผ๋ Kubernetes ๋
ธ๋์ ์ฐ๊ฒฐํ ๋๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด ์ฆ์ ๋ถ๋ช
ํด์ก์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ํ
์คํธ์
๋๋ค.
์คํจ๋ก ์ด์ด์ง๋ ์ฒด์ธ์ ๋ถํ์ํ ๋ณต์ก์ฑ ์ ๊ฑฐ
๋์ผํ ์๋ฅผ ์ฌํํจ์ผ๋ก์จ ๋ฌธ์ ์ ์ด์ ์ ์ขํ๊ณ ๋ถํ์ํ ๋ณต์ก์ฑ ๊ณ์ธต์ ์ ๊ฑฐํ๊ณ ์ถ์์ต๋๋ค. ์ฒ์์๋ Vegeta์ Kubernetes ํฌ๋ ์ฌ์ด์ ํ๋ฆ์ ์์๊ฐ ๋๋ฌด ๋ง์์ต๋๋ค. ๋ ๊น์ ๋คํธ์ํฌ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ค๋ฉด ๊ทธ ์ค ์ผ๋ถ๋ฅผ ๋ฐฐ์ ํด์ผ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ(Vegeta)๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์ TCP ์ฐ๊ฒฐ์ ์์ฑํฉ๋๋ค. Kubernetes๋ ๋ค์์ ์ฌ์ฉํ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ(๊ธฐ์กด ๋ฐ์ดํฐ ์ผํฐ ๋คํธ์ํฌ ์์)๋ก ์๋ํฉ๋๋ค.
๊ณต์ต ์ฌ์
tcpdump
Vegeta ํ
์คํธ์์๋ TCP ํธ๋์
ฐ์ดํฌ(SYN๊ณผ SYN-ACK ๊ฐ) ์ค์ ์ง์ฐ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ถํ์ํ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. hping3
SYN ํจํท์ ์ฌ์ฉํ ๊ฐ๋จํ "ํ"์ฉ์
๋๋ค. ์๋ต ํจํท์ ์ง์ฐ์ด ์๋์ง ํ์ธํ ํ ์ฐ๊ฒฐ์ ์ฌ์ค์ ํฉ๋๋ค. 100ms๋ณด๋ค ํฐ ํจํท๋ง ํฌํจํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๊ณ Vegeta์ ์ ์ฒด ๋คํธ์ํฌ ๊ณ์ธต 7 ํ
์คํธ๋ณด๋ค ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ป์ ์ ์์ต๋๋ค. ๋ค์์ ๊ฐ์ฅ ๋๋ฆฐ ์๋ต์ผ๋ก ํํฐ๋ง๋ 30927ms ๊ฐ๊ฒฉ์ผ๋ก ์๋น์ค "๋
ธ๋ ํฌํธ"(10)์์ TCP SYN/SYN-ACK๋ฅผ ์ฌ์ฉํ๋ Kubernetes ๋
ธ๋ "ping"์
๋๋ค.
theojulienne@shell ~ $ sudo hping3 172.16.47.27 -S -p 30927 -i u10000 | egrep --line-buffered 'rtt=[0-9]{3}.'
len=46 ip=172.16.47.27 ttl=59 DF id=0 sport=30927 flags=SA seq=1485 win=29200 rtt=127.1 ms
len=46 ip=172.16.47.27 ttl=59 DF id=0 sport=30927 flags=SA seq=1486 win=29200 rtt=117.0 ms
len=46 ip=172.16.47.27 ttl=59 DF id=0 sport=30927 flags=SA seq=1487 win=29200 rtt=106.2 ms
len=46 ip=172.16.47.27 ttl=59 DF id=0 sport=30927 flags=SA seq=1488 win=29200 rtt=104.1 ms
len=46 ip=172.16.47.27 ttl=59 DF id=0 sport=30927 flags=SA seq=5024 win=29200 rtt=109.2 ms
len=46 ip=172.16.47.27 ttl=59 DF id=0 sport=30927 flags=SA seq=5231 win=29200 rtt=109.2 ms
์ฆ์ ์ฒซ ๋ฒ์งธ ๊ด์ฐฐ์ ํ ์ ์์ต๋๋ค. ์ํ์ค ๋ฒํธ์ ํ์ด๋ฐ์ผ๋ก ํ๋จํ๋ฉด ์ด๋ ์ผํ์ฑ ์ ์ฒด๊ฐ ์๋์ด ๋ถ๋ช ํฉ๋๋ค. ์ง์ฐ์ ์ข ์ข ๋์ ๋์ด ๊ฒฐ๊ตญ ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋ค์์ผ๋ก, ํผ์ก ๋ฐ์์ ์ด๋ค ๊ตฌ์ฑ ์์๊ฐ ๊ด๋ จ๋ ์ ์๋์ง ์์๋ณด๊ณ ์ถ์ต๋๋ค. ์๋ง๋ ์ด๊ฒ์ด NAT์ ์๋ ์๋ฐฑ ๊ฐ์ iptables ๊ท์น ์ค ์ผ๋ถ์ผ๊น์? ์๋๋ฉด ๋คํธ์ํฌ์ IPIP ํฐ๋๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ์ด๋ฅผ ํ์ธํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์คํ ์ ๊ฐ ๋จ๊ณ๋ฅผ ์ ๊ฑฐํ์ฌ ํ ์คํธํ๋ ๊ฒ์ ๋๋ค. NAT ๋ฐ ๋ฐฉํ๋ฒฝ ๋ ผ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ณ IPIP ๋ถ๋ถ๋ง ๋จ๊ฒจ๋๋ฉด ์ด๋ป๊ฒ ๋๋์?
๋คํ์ค๋ฝ๊ฒ๋ Linux์์๋ ์์คํ
์ด ๋์ผํ ๋คํธ์ํฌ์ ์๋ ๊ฒฝ์ฐ IP ์ค๋ฒ๋ ์ด ๊ณ์ธต์ ์ง์ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์์ต๋๋ค.
theojulienne@kube-node-client ~ $ sudo hping3 10.125.20.64 -S -i u10000 | egrep --line-buffered 'rtt=[0-9]{3}.'
len=40 ip=10.125.20.64 ttl=64 DF id=0 sport=0 flags=RA seq=7346 win=0 rtt=127.3 ms
len=40 ip=10.125.20.64 ttl=64 DF id=0 sport=0 flags=RA seq=7347 win=0 rtt=117.3 ms
len=40 ip=10.125.20.64 ttl=64 DF id=0 sport=0 flags=RA seq=7348 win=0 rtt=107.2 ms
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ฌธ์ ๋ ์ฌ์ ํ ๋จ์์์ต๋๋ค! iptables์ NAT๋ ์ ์ธ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฌธ์ ๋ TCP์ธ๊ฐ? ์ผ๋ฐ ICMP ํ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
theojulienne@kube-node-client ~ $ sudo hping3 10.125.20.64 --icmp -i u10000 | egrep --line-buffered 'rtt=[0-9]{3}.'
len=28 ip=10.125.20.64 ttl=64 id=42594 icmp_seq=104 rtt=110.0 ms
len=28 ip=10.125.20.64 ttl=64 id=49448 icmp_seq=4022 rtt=141.3 ms
len=28 ip=10.125.20.64 ttl=64 id=49449 icmp_seq=4023 rtt=131.3 ms
len=28 ip=10.125.20.64 ttl=64 id=49450 icmp_seq=4024 rtt=121.2 ms
len=28 ip=10.125.20.64 ttl=64 id=49451 icmp_seq=4025 rtt=111.2 ms
len=28 ip=10.125.20.64 ttl=64 id=49452 icmp_seq=4026 rtt=101.1 ms
len=28 ip=10.125.20.64 ttl=64 id=50023 icmp_seq=4343 rtt=126.8 ms
len=28 ip=10.125.20.64 ttl=64 id=50024 icmp_seq=4344 rtt=116.8 ms
len=28 ip=10.125.20.64 ttl=64 id=50025 icmp_seq=4345 rtt=106.8 ms
len=28 ip=10.125.20.64 ttl=64 id=59727 icmp_seq=9836 rtt=106.1 ms
๊ฒฐ๊ณผ๋ ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง์ง ์์์์ ๋ณด์ฌ์ค๋๋ค. ์๋ง๋ ์ด๊ฒ์ IPIP ํฐ๋์ผ๊น์? ํ ์คํธ๋ฅผ ๋์ฑ ๋จ์ํํด ๋ณด๊ฒ ์ต๋๋ค.
์ด ๋ ํธ์คํธ ๊ฐ์ ๋ชจ๋ ํจํท์ด ์ ์ก๋ฉ๋๊น?
theojulienne@kube-node-client ~ $ sudo hping3 172.16.47.27 --icmp -i u10000 | egrep --line-buffered 'rtt=[0-9]{3}.'
len=46 ip=172.16.47.27 ttl=61 id=41127 icmp_seq=12564 rtt=140.9 ms
len=46 ip=172.16.47.27 ttl=61 id=41128 icmp_seq=12565 rtt=130.9 ms
len=46 ip=172.16.47.27 ttl=61 id=41129 icmp_seq=12566 rtt=120.8 ms
len=46 ip=172.16.47.27 ttl=61 id=41130 icmp_seq=12567 rtt=110.8 ms
len=46 ip=172.16.47.27 ttl=61 id=41131 icmp_seq=12568 rtt=100.7 ms
len=46 ip=172.16.47.27 ttl=61 id=9062 icmp_seq=31443 rtt=134.2 ms
len=46 ip=172.16.47.27 ttl=61 id=9063 icmp_seq=31444 rtt=124.2 ms
len=46 ip=172.16.47.27 ttl=61 id=9064 icmp_seq=31445 rtt=114.2 ms
len=46 ip=172.16.47.27 ttl=61 id=9065 icmp_seq=31446 rtt=104.2 ms
๋ ๊ฐ์ Kubernetes ๋ ธ๋๊ฐ ์๋ก ํจํท, ์ฌ์ง์ด ICMP ping์ ๋ณด๋ด๋ ์ํฉ์ ๋จ์ํํ์ต๋๋ค. ๋์ ํธ์คํธ๊ฐ "๋ถ๋"(์ผ๋ถ๋ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ๋ ๋์จ)์ธ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ๋๊ธฐ ์๊ฐ์ด ํ์๋ฉ๋๋ค.
์ด์ ๋ง์ง๋ง ์ง๋ฌธ์ ๋๋ค. ์ ์ง์ฐ์ด kube-node ์๋ฒ์์๋ง ๋ฐ์ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ kube-node๊ฐ ๋ฐ์ ์์ผ ๋๋ ์์ ์์ผ ๋ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์? ์ด ์ข๊ฒ๋ ์ด๋ Kubernetes ์ธ๋ถ์ ํธ์คํธ์์ ๋์ผํ "์๋ ค์ง ๋ถ๋" ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ํจํท์ ๋ณด๋ด๋ฉด ์ฝ๊ฒ ์์๋ผ ์ ์์ต๋๋ค. ๋ณด์๋ค์ํผ ๋ฌธ์ ๋ ์ฌ๋ผ์ง์ง ์์์ต๋๋ค.
theojulienne@shell ~ $ sudo hping3 172.16.47.27 -p 9876 -S -i u10000 | egrep --line-buffered 'rtt=[0-9]{3}.'
len=46 ip=172.16.47.27 ttl=61 DF id=0 sport=9876 flags=RA seq=312 win=0 rtt=108.5 ms
len=46 ip=172.16.47.27 ttl=61 DF id=0 sport=9876 flags=RA seq=5903 win=0 rtt=119.4 ms
len=46 ip=172.16.47.27 ttl=61 DF id=0 sport=9876 flags=RA seq=6227 win=0 rtt=139.9 ms
len=46 ip=172.16.47.27 ttl=61 DF id=0 sport=9876 flags=RA seq=7929 win=0 rtt=131.2 ms
๊ทธ๋ฐ ๋ค์ ์ด์ ์์ค kube-node์์ ์ธ๋ถ ํธ์คํธ๋ก ๋์ผํ ์์ฒญ์ ์คํํฉ๋๋ค(ping์ RX ๋ฐ TX ๊ตฌ์ฑ ์์๊ฐ ๋ชจ๋ ํฌํจ๋๋ฏ๋ก ์์ค ํธ์คํธ๋ ์ ์ธ๋จ).
theojulienne@kube-node-client ~ $ sudo hping3 172.16.33.44 -p 9876 -S -i u10000 | egrep --line-buffered 'rtt=[0-9]{3}.'
^C
--- 172.16.33.44 hping statistic ---
22352 packets transmitted, 22350 packets received, 1% packet loss
round-trip min/avg/max = 0.2/7.6/1010.6 ms
๋๊ธฐ ์๊ฐ ํจํท ์บก์ฒ๋ฅผ ์กฐ์ฌํ์ฌ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ป์์ต๋๋ค. ํนํ ๋ฐ์ ์(ํ๋จ)๋ ์ด ์๊ฐ ์ด๊ณผ๋ฅผ ๋ณผ ์ ์์ง๋ง ์์ ์(์๋จ)๋ ์ด๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๋ธํ ์ด(์ด)์ ์ฐธ์กฐํ์ญ์์ค.
๋ํ ์์ ์ ์ธก์์ TCP์ ICMP ํจํท์ ์์(์ํ์ค ๋ฒํธ ๊ธฐ์ค) ์ฐจ์ด๋ฅผ ์ดํด๋ณด๋ฉด ICMP ํจํท์ ํญ์ ์ ์ก๋ ์์์ ๋์ผํ์ง๋ง ํ์ด๋ฐ์ด ๋ค๋ฅด๊ฒ ๋์ฐฉํฉ๋๋ค. ๋์์ TCP ํจํท์ด ๋๋๋ก ์ธํฐ๋ฆฌ๋ธ๋๊ณ ์ผ๋ถ๋ ์ค๋จ๋ฉ๋๋ค. ํนํ SYN ํจํท์ ํฌํธ๋ฅผ ์ดํด๋ณด๋ฉด ์ก์ ์ ์ธก์์๋ ์์๊ฐ ์์ง๋ง ์์ ์ ์ธก์์๋ ์์๊ฐ ์์ต๋๋ค.
๋ฐฉ๋ฒ์๋ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ต๋๋ค
๋ ๋ค๋ฅธ ์๋ก์ด ๊ด์ฐฐ: ์ด ๊ธฐ๊ฐ ๋์ ๋ ํธ์คํธ ๊ฐ์ ๋ชจ๋ ํต์ ์์ ICMP๊ฐ ์ง์ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ง๋ง TCP๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ด๋ ์์ธ์ด RX ๋๊ธฐ์ด ํด์ฑ๊ณผ ๊ด๋ จ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค. ์ ์ฒด๋ ๊ฑฐ์ ํ์คํ๊ฒ ์๋ต ์ ์ก์ด ์๋๋ผ RX ํจํท ์ฒ๋ฆฌ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฅํ ์์ธ ๋ชฉ๋ก์์ ํจํท ์ ์ก์ด ์ ๊ฑฐ๋ฉ๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ผ๋ถ kube-node ์๋ฒ์ ์์ ์ธก์์ ํจํท ์ฒ๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
Linux ์ปค๋์ ํจํท ์ฒ๋ฆฌ ์ดํด
์ผ๋ถ kube-node ์๋ฒ์ ์์ ์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด Linux ์ปค๋์ด ํจํท์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ๋จ์ํ ๊ธฐ์กด ๊ตฌํ์ผ๋ก ๋์๊ฐ์ ๋คํธ์ํฌ ์นด๋๋ ํจํท์ ์์ ํ๊ณ ์ ์กํฉ๋๋ค.
์ด๋ฌํ ์ปจํ
์คํธ ์ ํ์ ๋๋ฆฝ๋๋ค. 10๋
๋์๋ 90Mbps ๋คํธ์ํฌ ์นด๋์์๋ ๋๊ธฐ ์๊ฐ์ด ๋์ ๋์ง ์์์ ์๋ ์์ง๋ง ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ด 10๋ง ํจํท์ธ ์ต์ 15G ์นด๋์์๋ ์ํ XNUMX์ฝ์ด ์๋ฒ์ ๊ฐ ์ฝ์ด๊ฐ ์๋ฐฑ๋ง ๋ฒ ์ค๋จ๋ ์ ์์ต๋๋ค. ์ด๋น ํ์.
์ง์์ ์ผ๋ก ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ธฐ ์ํด ๋ช ๋
์ ์ Linux์ ์ถ๊ฐ๋์์ต๋๋ค.
์ด๋ ํจ์ฌ ๋น ๋ฅด์ง๋ง ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค. ํจํท์ด ๋๋ฌด ๋ง์ผ๋ฉด ๋คํธ์ํฌ ์นด๋์์ ํจํท์ ์ฒ๋ฆฌํ๋ ๋ฐ ๋ชจ๋ ์๊ฐ์ด ์์๋๊ณ ์ฌ์ฉ์ ๊ณต๊ฐ ํ๋ก์ธ์ค์๋ ์ค์ ๋ก ์ด๋ฌํ ๋๊ธฐ์ด์ ๋น์ธ ์๊ฐ์ด ์์ต๋๋ค(TCP ์ฐ๊ฒฐ์์ ์ฝ๊ธฐ ๋ฑ). ๊ฒฐ๊ตญ ๋๊ธฐ์ด์ด ์ฑ์์ง๊ณ ํจํท ์ญ์ ๊ฐ ์์๋ฉ๋๋ค. ๊ท ํ์ ์ฐพ๊ธฐ ์ํด ์ปค๋์ Softirq ์ปจํ
์คํธ์์ ์ฒ๋ฆฌ๋๋ ์ต๋ ํจํท ์์ ๋ํ ์์ฐ์ ์ค์ ํฉ๋๋ค. ์ด ์์ฐ์ด ์ด๊ณผ๋๋ฉด ๋ณ๋์ ์ค๋ ๋๊ฐ ํ์ฑํ๋ฉ๋๋ค. ksoftirqd
(๊ทธ ์ค ํ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ps
์ฝ์ด๋น) ์ผ๋ฐ์ ์ธ syscall/์ธํฐ๋ฝํธ ๊ฒฝ๋ก ์ธ๋ถ์์ ์ด๋ฌํ Softirq๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ์ค๋ ๋๋ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๊ฒ ํ ๋นํ๋ ค๊ณ ์๋ํ๋ ํ์ค ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฝ๋ฉ๋๋ค.
์ปค๋์ด ํจํท์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌํ ๊ฒฐ๊ณผ ํผ์ก์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์์ ์ ์ ์์ต๋๋ค. Softirq ํธ์ถ์ ์์ ๋น๋๊ฐ ๋ฎ์์ง๋ฉด ํจํท์ ๋คํธ์ํฌ ์นด๋์ RX ๋๊ธฐ์ด์์ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ์ด๋ ์ผ๋ถ ์์
์ด ํ๋ก์ธ์ ์ฝ์ด๋ฅผ ์ฐจ๋จํ๊ฑฐ๋ ๋ค๋ฅธ ์์ธ์ผ๋ก ์ธํด ์ฝ์ด๊ฐ Softirq๋ฅผ ์คํํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
์ฒ๋ฆฌ ๋ฒ์๋ฅผ ํต์ฌ ๋๋ ๋ฐฉ๋ฒ์ผ๋ก ์ขํ๊ธฐ
Softirq ์ง์ฐ์ ํ์ฌ๋ก์๋ ์ถ์ธก์ผ ๋ฟ์ ๋๋ค. ํ์ง๋ง ๊ทธ๊ฒ์ ๋ง์ด ๋๊ณ , ์ฐ๋ฆฌ๋ ๋งค์ฐ ์ ์ฌํ ๊ฒ์ ๋ณด๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์ ๋จ๊ณ๋ ์ด ์ด๋ก ์ ํ์ธํ๋ ๊ฒ์ ๋๋ค. ํ์ธ๋ ๊ฒฝ์ฐ ์ง์ฐ ์ด์ ๋ฅผ ์ฐพ์ผ์ญ์์ค.
๋๋ฆฐ ํจํท์ผ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค.
len=46 ip=172.16.53.32 ttl=61 id=29573 icmp_seq=1953 rtt=99.3 ms
len=46 ip=172.16.53.32 ttl=61 id=29574 icmp_seq=1954 rtt=89.3 ms
len=46 ip=172.16.53.32 ttl=61 id=29575 icmp_seq=1955 rtt=79.2 ms
len=46 ip=172.16.53.32 ttl=61 id=29576 icmp_seq=1956 rtt=69.1 ms
len=46 ip=172.16.53.32 ttl=61 id=29577 icmp_seq=1957 rtt=59.1 ms
len=46 ip=172.16.53.32 ttl=61 id=29790 icmp_seq=2070 rtt=75.7 ms
len=46 ip=172.16.53.32 ttl=61 id=29791 icmp_seq=2071 rtt=65.6 ms
len=46 ip=172.16.53.32 ttl=61 id=29792 icmp_seq=2072 rtt=55.5 ms
์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ์ด๋ฌํ ICMP ํจํท์ ๋จ์ผ RX NIC ๋๊ธฐ์ด๋ก ํด์๋๊ณ ๋จ์ผ CPU ์ฝ์ด์์ ์ฒ๋ฆฌ๋ฉ๋๋ค. Linux ์๋ ๋ฐฉ์์ ์ดํดํ๋ ค๋ฉด ํ๋ก์ธ์ค๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์ด๋ฌํ ํจํค์ง๊ฐ ์ด๋์์(์ด๋ค CPU ์ฝ์ด์์) ์ด๋ป๊ฒ(softirq, ksoftirqd) ์ฒ๋ฆฌ๋๋์ง ์๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค.
์ด์ ์ค์๊ฐ์ผ๋ก Linux ์ปค๋์ ๋ชจ๋ํฐ๋งํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ฐจ๋ก์
๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋
์ฌ๊ธฐ์์ ๊ณํ์ ๊ฐ๋จํฉ๋๋ค. ์ปค๋์ด ์ด๋ฌํ ICMP ํ์ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก ์ปค๋ ๊ธฐ๋ฅ์ ํํฌ๋ฅผ ๊ฒ๋๋ค. hping3
์.
์ํธ icmp_echo
์ ์กํ๋ค struct sk_buff *skb
: "์์ฝ ์์ฒญ"์ด ํฌํจ๋ ํจํท์
๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ถ์ ํ๊ณ ์ํ์ค๋ฅผ ๋ฝ์๋ผ ์ ์์ด์ echo.sequence
(์ด๊ฒ์ icmp_seq
์์ฑ์: hping3 ะฒััะต
), ์ด๋ฅผ ์ฌ์ฉ์ ๊ณต๊ฐ์ผ๋ก ๋ณด๋
๋๋ค. ํ์ฌ ํ๋ก์ธ์ค ์ด๋ฆ/ID๋ฅผ ์บก์ฒํ๋ ๊ฒ๋ ํธ๋ฆฌํฉ๋๋ค. ๋ค์์ ์ปค๋์ด ํจํท์ ์ฒ๋ฆฌํ๋ ๋์ ์ง์ ๋ณผ ์ ์๋ ๊ฒฐ๊ณผ์
๋๋ค.
TGID PID ํ๋ก์ธ์ค ์ด๋ฆ ICMP_SEQ 0 0 swapper/11 770 0 0 swapper/11 771 0 0 swapper/11 772 0 0 swapper/11 773 0 0 swapper/11 774 20041 20086 prometheus 775 0 0 swapper/11 776 0 0 swapper/11 777 0 0 11 ์ค์ํผ/778 4512 4542 779 ์คํฌํฌ-๋ณด๊ณ ์-s XNUMX
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผ ํ ์ ์ ๋ฌธ๋งฅ์ softirq
์์คํ
ํธ์ถ์ ์ํํ ํ๋ก์ธ์ค๋ ์ค์ ๋ก ์ปค๋ ์ปจํ
์คํธ์์ ํจํท์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ์ปค๋์ธ ๊ฒฝ์ฐ "ํ๋ก์ธ์ค"๋ก ํ์๋ฉ๋๋ค.
์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ํ๋ก์ธ์ค๋ฅผ ์ง์ฐ์ ๋ํ๋ด๋ ํน์ ํจํค์ง์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. hping3
. ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด๋ณด์ grep
ํน์ ๊ฐ์ ๋ํ ์ด ์บก์ฒ์ ๋ํด icmp_seq
. ์์ icmp_seq ๊ฐ๊ณผ ์ผ์นํ๋ ํจํท์ ์์์ ๊ด์ฐฐํ RTT์ ํจ๊ป ๊ธฐ๋ก๋์์ต๋๋ค(๊ดํธ ์์ 50ms ๋ฏธ๋ง์ RTT ๊ฐ์ผ๋ก ์ธํด ํํฐ๋งํ ํจํท์ ๋ํ ์์ RTT ๊ฐ์
๋๋ค).
TGID PID ํ๋ก์ธ์ค ์ด๋ฆ ICMP_SEQ ** RTT -- 10137 10436 cadvisor 1951 10137 10436 cadvisor 1952 76 76 ksoftirqd/11 1953 ** 99ms 76 76 ksoftirqd/11 1954 ** 89ms 76 76 ksoftir qd/11 1955 79 ** 76ms 76 11 ksoftirqd/ 1956 69 ** 76ms 76 11 ksoftirqd/1957 59 ** 76ms 76 11 ksoftirqd/1958 49 ** (76ms) 76 11 ksoftirqd/1959 39 ** (76ms) 76 11 ksoftirqd/1960 29 ** (76ms) 76 11 ksoft irqd/ 1961 19 ** (76ms) 76 11 ksoftirqd/1962 9 ** (10137ms) -- 10436 2068 cadvisor 10137 10436 2069 cadvisor 76 76 11 ksoftirqd/2070 75 ** 76ms 76 11 ksoftirqd/2071 65 76 ** 76ms 11 2072 ksoftirqd/55 76 ** 76ms 11 2073 ksoftirqd/45 76 ** (76ms) 11 2074 ksoftirqd/35 76 ** (76ms) 11 2075 ksoftirqd/25 76 ** (76ms) 11 2076 ksoftirqd/15 76 ** (76ms) ) 11 2077 ksoftirqd/5 XNUMX ** (XNUMXms)
๊ฒฐ๊ณผ๋ ์ฐ๋ฆฌ์๊ฒ ๋ช ๊ฐ์ง ์ฌ์ค์ ์๋ ค์ค๋๋ค. ์ฒซ์งธ, ์ด๋ฌํ ๋ชจ๋ ํจํค์ง๋ ์ปจํ
์คํธ์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. ksoftirqd/11
. ์ด๋ ์ด ํน์ ์ปดํจํฐ ์์ ๊ฒฝ์ฐ ICMP ํจํท์ด ์์ ์ธก์ ์ฝ์ด 11๋ก ํด์๋์์์ ์๋ฏธํฉ๋๋ค. ๋ํ ์ผ์ด ๋ฐ์ํ ๋๋ง๋ค ์์คํ
ํธ์ถ์ ๋งฅ๋ฝ์์ ์ฒ๋ฆฌ๋๋ ํจํท์ด ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. cadvisor
. ๊ทธ๋ฐ ๋ค์ ksoftirqd
์์
์ ์ธ๊ณ๋ฐ์ ๋์ ๋ ๋๊ธฐ์ด์ ์ฒ๋ฆฌํฉ๋๋ค. ์ ํํ ๊ทธ ์ดํ์ ๋์ ๋ ํจํท ์์
๋๋ค. cadvisor
.
์ง์ ์ ํญ์ ์๋ํ๋ค๋ ์ฌ์ค cadvisor
, ๋ฌธ์ ์ ๊ทธ๊ฐ ๊ด์ฌํ์์ ์๋ฏธํฉ๋๋ค. ์์ด๋ฌ๋ํ๊ฒ๋ ๊ทธ ๋ชฉ์ ์
์ปจํ ์ด๋์ ๋ค๋ฅธ ์ธก๋ฉด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ค์ ๋ชจ๋ ๊ณ ๋๋ก ๋ฐ์ ๋ ๋๊ตฌ์ด๋ฏ๋ก ์์์น ๋ชปํ ์ํฉ์์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํจํท ๋๊ธฐ์ด ์๋๋ฅผ ๋ฆ์ถ๊ธฐ ์ํด cadvisor๋ ๋ฌด์์ ํฉ๋๊น?
์ด์ ์ฐ๋ฆฌ๋ ์ถฉ๋์ด ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง, ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์ถฉ๋์ ์ผ์ผํค๋์ง, ์ด๋ค CPU์์ ์ถฉ๋์ด ๋ฐ์ํ๋์ง ๊ฝค ์ ์ดํดํ์ต๋๋ค. ํ๋ ๋ธ๋กํน์ผ๋ก ์ธํด Linux ์ปค๋์ด ์์ฝํ ์๊ฐ์ด ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ksoftirqd
. ๊ทธ๋ฆฌ๊ณ ํจํท์ด ์ปจํ
์คํธ์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. cadvisor
. ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ๋ ๊ฒ์ด ๋
ผ๋ฆฌ์ ์ด๋ค. cadvisor
๋๋ฆฐ syscall์ ์คํํ ํ ํด๋น ์๊ฐ์ ๋์ ๋ ๋ชจ๋ ํจํท์ด ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ด๊ฒ์ ์ด๋ก ์ด์ง๋ง ์ด๋ป๊ฒ ํ
์คํธํฉ๋๊น? ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ์ด ํ๋ก์ธ์ค ์ ๋ฐ์ ๊ฑธ์ณ CPU ์ฝ์ด๋ฅผ ์ถ์ ํ๊ณ , ํจํท ์๊ฐ ์์ฐ์ ์ด๊ณผํ๊ณ ksoftirqd๊ฐ ํธ์ถ๋๋ ์ง์ ์ ์ฐพ์ ๋ค์ ์กฐ๊ธ ๋ ๋๋์๊ฐ ๊ทธ ์ง์ ์ง์ ์ CPU ์ฝ์ด์์ ์ ํํ ๋ฌด์์ด ์คํ๋๊ณ ์์๋์ง ํ์ธํ๋ ๊ฒ์
๋๋ค. . ์ด๋ ๋ช ๋ฐ๋ฆฌ์ด๋ง๋ค CPU๋ฅผ ์์ค๋ ์ด๋ก ์ดฌ์ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์
๋๋ค:
ํธ๋ฆฌํ๊ฒ๋ ์ด ๋ชจ๋ ์์
์ ๊ธฐ์กด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ksoftirqd
:
# record 999 times a second, or every 1ms with some offset so not to align exactly with timers
sudo perf record -C 11 -g -F 999
# take that recording and make a simpler stack trace.
sudo perf script 2>/dev/null | ./FlameGraph/stackcollapse-perf-ordered.pl | grep ksoftir -B 100
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(ัะพัะฝะธ ัะปะตะดะพะฒ, ะบะพัะพััะต ะฒัะณะปัะดัั ะฟะพั
ะพะถะธะผะธ)
cadvisor;[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];entry_SYSCALL_64_after_swapgs;do_syscall_64;sys_read;vfs_read;seq_read;memcg_stat_show;mem_cgroup_nr_lru_pages;mem_cgroup_node_nr_lru_pages cadvisor;[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];entry_SYSCALL_64_after_swapgs;do_syscall_64;sys_read;vfs_read;seq_read;memcg_stat_show;mem_cgroup_nr_lru_pages;mem_cgroup_node_nr_lru_pages cadvisor;[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];entry_SYSCALL_64_after_swapgs;do_syscall_64;sys_read;vfs_read;seq_read;memcg_stat_show;mem_cgroup_iter cadvisor;[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];entry_SYSCALL_64_after_swapgs;do_syscall_64;sys_read;vfs_read;seq_read;memcg_stat_show;mem_cgroup_nr_lru_pages;mem_cgroup_node_nr_lru_pages cadvisor;[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];[cadvisor];entry_SYSCALL_64_after_swapgs;do_syscall_64;sys_read;vfs_read;seq_read;memcg_stat_show;mem_cgroup_nr_lru_pages;mem_cgroup_node_nr_lru_pages ksoftirqd/11;ret_from_fork;kthread;kthread;smpboot_thread_fn;smpboot_thread_fn;run_ksoftirqd;__do_softirq;net_rx_action;ixgbe_poll;ixgbe_clean_rx_irq;napi_gro_receive;netif_receive_skb_internal;inet_gro_receive;bond_handle_frame;__netif_receive_skb_core;ip_rcv_finish;ip_rcv;ip_forward_finish;ip_forward;ip_finish_output;nf_iterate;ip_output;ip_finish_output2;__dev_queue_xmit;dev_hard_start_xmit;ipip_tunnel_xmit;ip_tunnel_xmit;iptunnel_xmit;ip_local_out;dst_output;__ip_local_out;nf_hook_slow;nf_iterate;nf_conntrack_in;generic_packet;ipt_do_table;set_match_v4;ip_set_test;hash_net4_kadt;ixgbe_xmit_frame_ring;swiotlb_dma_mapping_error;hash_net4_test ksoftirqd/11;ret_from_fork;kthread;kthread;smpboot_thread_fn;smpboot_thread_fn;run_ksoftirqd;__do_softirq;net_rx_action;gro_cell_poll;napi_gro_receive;netif_receive_skb_internal;inet_gro_receive;__netif_receive_skb_core;ip_rcv_finish;ip_rcv;ip_forward_finish;ip_forward;ip_finish_output;nf_iterate;ip_output;ip_finish_output2;__dev_queue_xmit;dev_hard_start_xmit;dev_queue_xmit_nit;packet_rcv;tpacket_rcv;sch_direct_xmit;validate_xmit_skb_list;validate_xmit_skb;netif_skb_features;ixgbe_xmit_frame_ring;swiotlb_dma_mapping_error;__dev_queue_xmit;dev_hard_start_xmit;__bpf_prog_run;__bpf_prog_run
์ฌ๊ธฐ์๋ ๋ง์ ๊ฒ๋ค์ด ์์ง๋ง ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์์ ICMP ์ถ์ ํ๋ก๊ทธ๋จ์์ ๋ณธ "ksoftirqd ์ด์ ์ cadvisor" ํจํด์ ๋ฐ๊ฒฌํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฌด์จ ๋ป์ด์์?
๊ฐ ๋ผ์ธ์ ํน์ ์์ ์ CPU ์ถ์ ์
๋๋ค. ํ ์ค์ ์คํ ์๋๋ก ํธ์ถ๋๋ ๊ฐ ํธ์ถ์ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ์ค ์ค๊ฐ์ syscall์ด ํธ์ถ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. read(): .... ;do_syscall_64;sys_read; ...
. ๊ทธ๋์ Cadvisor๋ ์์คํ
ํธ์ถ์ ๋ง์ ์๊ฐ์ ์๋นํฉ๋๋ค. read()
๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ mem_cgroup_*
(ํธ์ถ ์คํ์ ๋งจ ์/์ค ๋).
ํธ์ถ ์ถ์ ์์ ์ ํํ ๋ฌด์์ ์ฝ๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ ๋ถํธํ๋ฏ๋ก ๋ค์์ ์คํํด ๋ณด๊ฒ ์ต๋๋ค. strace
cadvisor๊ฐ ์ํํ๋ ์์
์ ์ดํด๋ณด๊ณ 100ms๋ณด๋ค ๊ธด ์์คํ
ํธ์ถ์ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
theojulienne@kube-node-bad ~ $ sudo strace -p 10137 -T -ff 2>&1 | egrep '<0.[1-9]'
[pid 10436] <... futex resumed> ) = 0 <0.156784>
[pid 10432] <... futex resumed> ) = 0 <0.258285>
[pid 10137] <... futex resumed> ) = 0 <0.678382>
[pid 10384] <... futex resumed> ) = 0 <0.762328>
[pid 10436] <... read resumed> "cache 154234880nrss 507904nrss_h"..., 4096) = 658 <0.179438>
[pid 10384] <... futex resumed> ) = 0 <0.104614>
[pid 10436] <... futex resumed> ) = 0 <0.175936>
[pid 10436] <... read resumed> "cache 0nrss 0nrss_huge 0nmapped_"..., 4096) = 577 <0.228091>
[pid 10427] <... read resumed> "cache 0nrss 0nrss_huge 0nmapped_"..., 4096) = 577 <0.207334>
[pid 10411] <... epoll_ctl resumed> ) = 0 <0.118113>
[pid 10382] <... pselect6 resumed> ) = 0 (Timeout) <0.117717>
[pid 10436] <... read resumed> "cache 154234880nrss 507904nrss_h"..., 4096) = 660 <0.159891>
[pid 10417] <... futex resumed> ) = 0 <0.917495>
[pid 10436] <... futex resumed> ) = 0 <0.208172>
[pid 10417] <... futex resumed> ) = 0 <0.190763>
[pid 10417] <... read resumed> "cache 0nrss 0nrss_huge 0nmapped_"..., 4096) = 576 <0.154442>
์์ํ ๋๋ก ์ฌ๊ธฐ์๋ ๋๋ฆฐ ํธ์ถ์ด ํ์๋ฉ๋๋ค. read()
. ์ฝ๊ธฐ ์์
๋ฐ ์ปจํ
์คํธ ๋ด์ฉ์์ mem_cgroup
์ด๋ฌํ ๋์ ์ ๋ถ๋ช
ํ๋ค read()
ํ์ผ์ ์ฐธ์กฐํ์ธ์ memory.stat
, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ cgroup ์ ํ(Docker์ ๋ฆฌ์์ค ๊ฒฉ๋ฆฌ ๊ธฐ์ )์ ๋ณด์ฌ์ค๋๋ค. cadvisor ๋๊ตฌ๋ ์ด ํ์ผ์ ์ฟผ๋ฆฌํ์ฌ ์ปจํ
์ด๋์ ๋ํ ๋ฆฌ์์ค ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ์ป์ต๋๋ค. ์ปค๋์ด๋ ์บ๋๋ฐ์ด์ ๊ฐ ์์์น ๋ชปํ ์ผ์ ํ๊ณ ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
theojulienne@kube-node-bad ~ $ time cat /sys/fs/cgroup/memory/memory.stat >/dev/null
real 0m0.153s
user 0m0.000s
sys 0m0.152s
theojulienne@kube-node-bad ~ $
์ด์ ์ฐ๋ฆฌ๋ ๋ฒ๊ทธ๋ฅผ ์ฌํํ๊ณ Linux ์ปค๋์ด ๋ณ๋ฆฌ ํ์์ ์ง๋ฉดํ๊ณ ์์์ ์ดํดํ ์ ์์ต๋๋ค.
์ฝ๊ธฐ ์์ ์ด ์ ๊ทธ๋ ๊ฒ ๋๋ฆฐ๊ฐ์?
์ด ๋จ๊ณ์์๋ ์ ์ฌํ ๋ฌธ์ ์ ๋ํ ๋ค๋ฅธ ์ฌ์ฉ์์ ๋ฉ์์ง๋ฅผ ์ฐพ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, Cadvisor ์ถ์ ๊ธฐ์์ ์ด ๋ฒ๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณด๊ณ ๋์์ต๋๋ค.
๋ฌธ์ ๋ cgroup์ด ๋ค์์คํ์ด์ค(์ปจํ ์ด๋) ๋ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ณ ๋ คํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด cgroup์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด Docker๋ ๋ฉ๋ชจ๋ฆฌ cgroup์ ํด์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ "๋ฉ๋ชจ๋ฆฌ"๋ ๋จ์ํ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋๋๋ค. ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์์ฒด๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ง๋ง ์ปค๋์ ๋ฉ๋ชจ๋ฆฌ cgroup์ ์บ์๋ dentries ๋ฐ inode(๋๋ ํฐ๋ฆฌ ๋ฐ ํ์ผ ๋ฉํ๋ฐ์ดํฐ)์ ๊ฐ์ ์บ์๋ ์ฝํ ์ธ ๋ฅผ ์ฌ์ ํ ํ ๋นํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ฌธ์ ์ค๋ช ์์:
์ข๋น cgroups: ํ๋ก์ธ์ค๊ฐ ์๊ณ ์ญ์ ๋์์ง๋ง ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋ cgroup์ ๋๋ค(์ ๊ฒฝ์ฐ์๋ dentry ์บ์์์, ํ์ด์ง ์บ์๋ tmpfs์์ ํ ๋นํ ์๋ ์์).
cgroup์ ํด์ ํ ๋ ์บ์์ ์๋ ๋ชจ๋ ํ์ด์ง์ ๋ํ ์ปค๋์ ํ์ธ์ ๋งค์ฐ ๋๋ฆด ์ ์์ผ๋ฏ๋ก ์ง์ฐ ํ๋ก์ธ์ค๊ฐ ์ ํ๋ฉ๋๋ค. ์ด๋ฌํ ํ์ด์ง๊ฐ ๋ค์ ์์ฒญ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ๋ก ํ์ํ ๋ ๋ง์ง๋ง์ผ๋ก cgroup์ ์ง์๋๋ค. ์ด ์์ ๊น์ง๋ ํต๊ณ๋ฅผ ์์งํ ๋ cgroup์ด ๊ณ์ ๊ณ ๋ ค๋ฉ๋๋ค.
์ฑ๋ฅ ๊ด์ ์์ ๋ณด๋ฉด ์ฑ๋ฅ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ์ํ์ต๋๋ค. ์บ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ๋ถ ๋จ๊ฒจ๋์ด ์ด๊ธฐ ์ ๋ฆฌ ์๋๋ฅผ ๋์์ต๋๋ค. ์ด๊ฑด ๊ด์ฐฎ์. ์ปค๋์ด ์บ์๋ ๋ฉ๋ชจ๋ฆฌ ์ค ๋ง์ง๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ตญ cgroup์ด ์ง์์ง๋ฏ๋ก ์ด๋ฅผ "๋์ถ"์ด๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๋ค. ๋ถํํ๊ฒ๋ ๊ฒ์ ๋ฉ์ปค๋์ฆ์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ memory.stat
์ด ์ปค๋ ๋ฒ์ (4.9)์์๋ ์ฐ๋ฆฌ ์๋ฒ์ ์์ฒญ๋ ์์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฐํฉ๋์ด ์ต์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ๊ณ cgroup ์ข๋น๋ฅผ ์ง์ฐ๋ ๋ฐ ํจ์ฌ ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฐ๋ฆฌ ๋ ธ๋ ์ค ์ผ๋ถ์๋ cgroup ์ข๋น๊ฐ ๋๋ฌด ๋ง์์ ์ฝ๊ธฐ ๋ฐ ๋๊ธฐ ์๊ฐ์ด XNUMX์ด๋ฅผ ์ด๊ณผํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
Cadvisor ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์คํ ์ ์ฒด์์ dentries/inodes ์บ์๋ฅผ ์ฆ์ ํด์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ์คํธ์ ์ฝ๊ธฐ ๋๊ธฐ ์๊ฐ๊ณผ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ด ์ฆ์ ์ ๊ฑฐ๋ฉ๋๋ค. ์บ์๋ฅผ ์ง์ฐ๋ฉด ์บ์๋ ์ข๋น cgroup ํ์ด์ง๋ ์ผ์ง๊ณ ํด์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ํด๊ฒฐ์ฑ ์ ์๋์ง๋ง ๋ฌธ์ ์ ์์ธ์ ํ์ธํฉ๋๋ค.
์ต์ ์ปค๋ ๋ฒ์ (4.19+)์์๋ ํธ์ถ ์ฑ๋ฅ์ด ํฅ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. memory.stat
์ด๋ฏ๋ก ์ด ์ปค๋๋ก ์ ํํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๋์์ ์ฐ๋ฆฌ๋ Kubernetes ํด๋ฌ์คํฐ์์ ๋ฌธ์ ๊ฐ ์๋ ๋
ธ๋๋ฅผ ๊ฐ์งํ๊ณ , ์ ์ ํ๊ฒ ๋๋ ์ด๋ํ๊ณ ์ฌ๋ถํ
ํ๋ ๋๊ตฌ๋ฅผ ๋ณด์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ํด๋ฌ์คํฐ๋ฅผ ์กฐ์ฌํ์ฌ ๋๊ธฐ ์๊ฐ์ด ์ถฉ๋ถํ ๋์ ๋
ธ๋๋ฅผ ์ฐพ์ ์ฌ๋ถํ
ํ์ต๋๋ค. ์ด๋ก์จ ๋๋จธ์ง ์๋ฒ์ OS๋ฅผ ์
๋ฐ์ดํธํ ์๊ฐ์ด ์๊ฒผ์ต๋๋ค.
์ต๋ ํฉ๊ณ
์ด ๋ฒ๊ทธ๋ก ์ธํด ์๋ฐฑ ๋ฐ๋ฆฌ์ด ๋์ RX NIC ๋๊ธฐ์ด ์ฒ๋ฆฌ๊ฐ ์ค๋จ๋์๊ธฐ ๋๋ฌธ์ ์งง์ ์ฐ๊ฒฐ์์ ๋์ ๋๊ธฐ ์๊ฐ๊ณผ MySQL ์์ฒญ ๋ฐ ์๋ต ํจํท ์ฌ์ด์ ๊ฐ์ ์ค๊ฐ ์ฐ๊ฒฐ ๋๊ธฐ ์๊ฐ์ด ๋์์ ๋ฐ์ํ์ต๋๋ค.
Kubernetes์ ๊ฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์คํ
์ ์ฑ๋ฅ์ ์ดํดํ๊ณ ์ ์งํ๋ ๊ฒ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ชจ๋ ์๋น์ค์ ์์ ์ฑ๊ณผ ์๋์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์คํํ๋ ๋ชจ๋ ์์คํ
์ Kubernetes ์ฑ๋ฅ ํฅ์์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com