ááœááºáá²á·áá±á¬ ááŸá
áºááŸá
áºááá·áºá Kubernetes
á¡ááŒá±áá¶á¡á¬ážááŒáá·áºá á¡ááá®áá±ážááŸááºážáá»á¬ážááẠ100ms ááá¯á·ááá¯áẠááá¯á·áááºááá¯áá±á¬ áá»áááºážááœááºááẠlatency ááá¯áá¶á
á¬ážáááŒá®áž á¡áá»áááºáá¯ááºááŒááºáž ááá¯á·ááá¯áẠáááºá
ááºážááŒááºážáá»á¬áž ááŒá
áºáá±á«áºá
á±áá«áááºá áááºáá±á¬ááºááŸá¯áá»á¬ážááẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠ100ms ááẠááá¯ááá¯ááŒááºáááºá
áœá¬ áá¯á¶á·ááŒááºááá¯ááºáááºáᯠáá»áŸá±á¬áºááá·áºáá¬ážáááºá áá«áá±ááá·áº áá»áááºáááºááŸá¯ááá¯ááºááá¯ááºá á¡áá»áááºá¡áá»á¬ážááŒá®ážáá°ááẠáá«á áááŒá
áºááá¯ááºáá«áá°ážá áá®ážááŒá¬ážá¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá®áá®á
áá¹ááá·áºáá»á¬ážááŒá¬ááá·áºáá±á¬ MySQL queries áá»á¬ážááᯠá¡ááœááºáá»ááºááŒááºá
áœá¬ ááœá±á·ááŸááá²á·ááŒá®áž MySQL ááẠáá®áá®á
áá¹ááá·áºá¡ááœááºáž ááŒá®ážááŒá±á¬ááºáá²á·áááºá ááá¯á·áá±á¬áº áá±á¬ááºážááá¯áá±áá±á¬ á¡ááá®áá±ážááŸááºážá ááŸá¯áá±á¬áá·áºá០áá¯á¶á·ááŒááºááŸá¯ááẠ100 ms ááá¯á·ááá¯áẠááá¯á·áááºááá¯á ááŒá¬áá«áááºá
Kubernetes ááŒááºáá០áá¯ááºážáá±á«áºááá¯ááŸá¯á០ááœááºáá¬ááá·áºááá¯áẠKubernetes node ááŸáá·áº áá»áááºáááºááá·áºá¡áá«ááŸáᬠááŒá¿áá¬ááŒá
áºááœá¬ážááŒá±á¬ááºáž áá»ááºáá»ááºážáááá¬ááááºá ááŒá¿áá¬ááᯠáá»áá¯ážááœá¬ážááẠá¡ááœááºáá°áá¯á¶ážáááºážáááºážááŸá¬ á
ááºážáááºááŸá¯áá
áºáá¯ááŒá
áºáááºá
ááœááºážáááºá¡ááœááºáž áááá¯áá¬ážá¡ááºáá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááᯠáááºááŸá¬ážááŒááºážááẠáá»ááŸá¯á¶ážááŸá¯ááᯠááŒá áºá á±áááºá
áá°áá®áá±á¬á¥ááá¬ááá¯ááŒááºáá¯ááºááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááŒá¿áá¬áá¡á¬áá¯á¶ááá¯áá»ááºážááŒá±á¬ááºážá á±ááŒá®áž áááá¯á¡ááºáá±á¬ááŸá¯ááºááœá±ážááŸá¯á¡ááœáŸá¬áá»á¬ážááá¯áááºááŸá¬ážááá¯áá«áááºá á¡á ááá¯ááºážááœááºá Vegeta ááŸáá·áº Kubernetes pods áá»á¬ážá¡ááŒá¬áž á á®ážáááºážááŸá¯ááœáẠááŒááºá ááºáá»á¬áž á¡ááœááºáá»á¬ážáááºá ááá¯ááá¯áááºááŸáá¯ááºážáá±á¬ ááœááºáááºááŒá¿áá¬ááᯠáá±á¬áºáá¯ááºáááºá áááºážááá¯á·áá²á០á¡áá»áá¯á·ááᯠáááºááŸá¬ážááẠááá¯á¡ááºáááºá
client (Vegeta) ááẠá¡á
á¯á¡áá±ážááŸá áááºááá·áº node ááŸáá·áº TCP áá»áááºáááºááŸá¯ááᯠáááºáá®ážáá±ážáááºá Kubernetes ááẠá¡áá¯á¶ážááŒá¯áá±á¬ áááºááá·áºááœááºááẠ(áááºááŸááá±áá¬á
ááºáá¬ááœááºáááºáááááºááœááº) á¡ááŒá
Ạáá¯ááºáá±á¬ááºáááºá
á¡áá¯á¶ážáááºááẠtcpdump
Vegeta á
ááºážáááºááŸá¯ááœáẠTCP áááºááœá²ááŒááºáž (SYN ááŸáá·áº SYN-ACK á¡ááŒá¬áž) ááŸá±á¬áá·áºááŸá±ážááŸá¯ááŸááááºá á€áááá¯á¡ááºáá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááᯠáááºááŸá¬ážááẠáááºáá¯á¶ážááá¯ááºáááºá hping3
SYN á¡á
á¯á¶ááá¯ááºáá»á¬ážááŒáá·áº ááá¯ážááŸááºážáá±á¬ âpingsâ á¡ááœááºá áá¯á¶á·ááŒááºááŸá¯áááºáááºááœáẠááŸá±á¬áá·áºááŸá±ážááŸá¯ááŸááááŸá á
á
áºáá±ážááŒá®ážáá±á¬áẠáá»áááºáááºááŸá¯ááᯠááŒááºáááºáááºááŸááºáá«á áá»áœááºá¯ááºááá¯á·ááẠ100ms áááºááŒá®ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááá¯áᬠá
á
áºáá¯ááºááá¯ááºááŒá®áž Vegeta á ááœááºáááºá¡ááœáŸá¬ 7 á
ááºážáááºááŸá¯ááẠááŒá¿áá¬ááᯠááŒááºáááºáá¯ááºáá¯ááºááẠááá¯ááá¯ááœááºáá°áá±á¬áááºážáááºážááᯠááá°ááá¯ááºáá«áááºá á€áááºááŸá¬ 30927ms ááŒá¬ážáá¬áááœáẠáááºáá±á¬ááºááŸá¯ "node port" (10) ááœáẠTCP SYN/SYN-ACK ááá¯á¡áá¯á¶ážááŒá¯ááá·áº Kubernetes node "pings" áá»á¬ážááŒá
áºááŒá®áž á¡ááŸá±ážáá¯á¶ážáá¯á¶á·ááŒááºááŸá¯áá»á¬ážááŒáá·áº á
á
áºáá¯ááºáááº-
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 ááŸáá·áº firewall logic ááᯠáááºááŸá¬ážááŒá®áž 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 ping áááºááá¯ááœá¬ážáá² ááŒáá·áºáá¡á±á¬ááºá
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 á¥áááºááŒá áºááá¯ááºáá«ááá¬ážá á ááºážáááºááŸá¯ááᯠááá¯ááá¯ááá¯ážááŸááºážá¡á±á¬áẠáá¯ááºááŒáá«á áá¯á·á
ဠhost ááŸá
áºáá¯ááŒá¬ážááœáẠpacket á¡á¬ážáá¯á¶ážááᯠááá¯á·áá«ááá¬ážá
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
ICMP ping áá áºáá¯á០áá áºáá¯ááá¯á· áááºáááºáá áºáá¯ááá¯á· áá±ážááá¯á·ááá·áº Kubernetes node ááŸá áºáá¯á០á¡ááŒá±á¡áá±ááᯠááá¯ážááŸááºážá¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáá«áááºá áá áºááŸááºá¡áááºááŸááºááẠ"ááá¯ážáááº" (á¡ááŒá¬ážá¡áá¬áá»á¬ážááẠá¡áá»áá¯á·á ááá¯ááá¯ážáááº) ááá¯áá»áŸáẠlatency ááá¯ááŒááºáá±áá±ážáááºá
ááá¯áá±á¬ááºáá¯á¶ážáá±ážááœááºáž- á¡áááºááŒá±á¬áá·áºááŸá±á¬áá·áºááŸá±ážááŸá¯ááẠ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 á០áá°áá®áá±á¬áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááŒááºá host ááá¯á· run áá«ááẠ(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
latency packet áááºážáá°ááŸá¯áá»á¬ážááᯠá á áºáá±ážááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºááẠá¡áá»ááºá¡áááºá¡áá»áá¯á·ááᯠáááŸááá²á·áá«áááºá á¡ááá¡áá»á¡á¬ážááŒáá·áºá áá±ážááá¯á·áá° (á¡á±á¬ááºááŒá±) ááẠá€á¡áá»áááºáá¯ááºááœá¬ážáááºááᯠááŒááºáá±á¬áºáááºáž áááºáá¶áá° (á¡áá±á«áº) ááẠDelta áá±á¬áºáᶠ(á áá¹ááá·áºááá¯ááºážá¡ááœááºáž) ááᯠáááŒááºááá«á
ááá¯á·á¡ááŒááºá áááºáá¶áá°áááºááŒááºážááŸá TCP ááŸáá·áº ICMP áááºáá±á·ááºá»áá»á¬ážá á¡á á®á¡á á¥áºááœá¬ááŒá¬ážáá»ááºááᯠááŒáá·áºááŸá¯áá«áá ICMP áááºáá±á·ááºá»áá»á¬ážááẠáááºážááá¯á·áá±ážááá¯á·áá²á·ááá·áº áá°áá®áá±á¬á¡á á®á¡á á¥áºá¡ááá¯ááºáž á¡ááŒá²áá±á¬ááºááŸááá±á¬áºáááºáž á¡áá»áááºááœá¬ááŒá¬ážáá«áááºá áá áºáá»áááºáááºážááŸá¬áááºá TCP packets áá»á¬ážááẠáá áºáá«áá áºáá¶ááœáẠááŒá¬ážáááºááŒá®áž á¡áá»áá¯á·ááŸá¬ ááááºáááá±áá«áááºá á¡áá°ážáááŒáá·áºá SYN packets áá»á¬ážá ports áá»á¬ážááᯠá á áºáá±ážááŒáá·áºáá»áŸáẠáááºážááá¯á·ááẠáá±ážááá¯á·áá°áááºááœáẠá¡á ááºááá¯ááºááŸááá±á¬áºáááºáž áááºáá¶áá°áááºááœáẠááá¯ááºáá«á
áá¯ááºáá¯á¶áá¯ááºáááºážááŸá¬ áááááᬠááœá¬ááŒá¬ážáá»ááºáá
áºáá¯ááŸááá«áááºá
áá±á¬ááºáááºáá±á·áá¬ááœá±á·ááŸááá»ááºá¡áá áº- á€áá¬áá¡ááœááºáž host ááŸá áºáá¯ááŒá¬ážááŸá áááºááœááºááŸá¯á¡á¬ážáá¯á¶ážááœáẠICMP ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºááá±á¬áºáááºáž TCP ááẠáááŸááá«á áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž RX áááºážá á® hashing ááŸáá·áº áááºá ááºááá¯ááºááœááºááŸáááŒá±á¬ááºážááᯠááŒá±á¬ááŒáááº- áá¯á¶á·ááŒááºááŸá¯áá»á¬ážáá±ážááá¯á·áá¬ááœááºááá¯ááºáá² RX packet áá»á¬ážáá¯ááºáá±á¬ááºáá¬ááœáẠááááºááá¯á·ááŒááºážááŸá¬ áá±áá»á¬áá±á«ááºáá®ážáá«ážááŒá áºáááºá
áááºážááẠááŒá áºááá¯ááºáá±á¬á¡ááŒá±á¬ááºážááá¬ážáá»á¬ážá á¬áááºážá០áá¯ááºááá¯ážáá±ážááá¯á·ááŒááºážááᯠáááºááŸá¬ážáá±ážáá«áááºá á¡áá»áá¯á·áá±á¬ kube-node áá¬áá¬áá»á¬ážááœáẠpacket áá¯ááºáá±á¬ááºááŒááºážááŒá¿áá¬ááẠáááºáá¶ááá·áºáááºááœáẠááŸááá±ááŒá±á¬ááºáž ááᯠáá»áœááºá¯ááºááá¯á·áááá«áááºá
Linux kernel ááœáẠpacket áá¯ááºáá±á¬ááºááŒááºážááᯠáá¬ážáááºááŒááºážá
á¡áá»áá¯á·áá±á¬ kube-node áá¬áá¬áá»á¬ážááœáẠáááºáá¶áá°ááœáẠá¡áááºááŒá±á¬áá·áº ááŒá¿áá¬ááŒá áºááœá¬ážáááºááᯠáá¬ážáááºáááºá Linux kernel ááẠpacket áá»á¬ážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºáááºááᯠáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
á¡ááá¯ážááŸááºážáá¯á¶áž ááá¬ážááá¯ážáá» á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááá¯á· ááŒááºááœá¬ážáá±á¬á¡áá« ááœááºáááºáááºááẠáááºáááºááᯠáááºáá¶áááŸáááŒá®áž áá±ážááá¯á·áááºá
á€á¡ááŒá±á¬ááºážá¡áá¬ááŒá±á¬ááºážááŒááºážááŸá¬ ááŸá±ážááœá±ážáááº- 10s áá»á¬ážááœáẠ90Mbps ááœááºáááºáááºáá»á¬ážááœáẠlatency ááẠáááºáá¬ááŒááºáá¬áááŸáááá¯ááºáá±á¬áºáááºáž áá±ááºáá® 10G áááºáá»á¬ážááœáẠáá
áºá
áá¹ááá·áºáá»áŸáẠá¡áá»á¬ážáá¯á¶áž 15 áááºáž packet ááŸá¯ááºážááŒáá·áº áá±ážáááºáá±á¬ XNUMX-core áá¬áá¬áá
áºáá¯á
á®á core áá
áºáá¯á
á®ááẠáááºážáá±á«ááºážáá»á¬ážá
áœá¬ááŒááºáá±á¬ááºááá¯ááºáááºá áá
áºá
áá¹ááá·áºááᯠá¡ááŒáááºáá±á
á¡ááŸá±á¬áá·áºá¡ááŸááºáá»á¬ážááᯠá¡áááºáááŒáẠááá¯ááºááœááºááŒá±ááŸááºážááá¯ááºááẠááœááºáá²á·áá±á¬ ááŸá
áºáá»á¬ážá
áœá¬á Linux á ááá·áºááœááºážáá²á·áááºá
áááºážááẠááá¯ááá¯ááŒááºáááºáá±á¬áºáááºáž ááá°áá®áá±á¬ááŒá¿áá¬ááᯠááŒá
áºá
á±áááºá áááºáá±á·áá»áºáá»á¬áž áá»á¬ážááœááºážáá«áá ááœááºáááºáááºá០áááºáá±á·ááºá»áá»á¬ážááᯠá¡áá»áááºááá¯ááºáž á
á®áá¶áá±á¬ááºááœááºáá±ážáá±áááŒáá·áº á¡áá¯á¶ážááŒá¯áá° áá±áá¬ááœáẠáá¯ááºáááºážá
ááºáá»á¬ážááẠá¡ááá¯áá« á
á®áááºážáá»á¬ážááᯠá¡ááŸááºáááẠááŸááºážááẠá¡áá»áááºáááŸááá« (TCP áá»áááºáááºááŸá¯áá»á¬ážá០áááºááŸá¯ááŒááºáž á
áááº)á áá±á¬ááºáá¯á¶ážááœáẠáááºážá
á®ááŸá¯áá»á¬áž ááŒáá·áºáá¬ááŒá®áž áááºáá±á·ááºá»áá»á¬ážááᯠá
áááºáá»áá±ážáá«áááºá áá»áááºááœááºáá»áŸá¬ááá¯ááŸá¬ááœá±ááẠááŒáá¯ážáááºážááŸá¯ááœááºá kernel ááẠsoftirq áááºá
ááºááŸá¯ááœáẠáá¯ááºáá±á¬ááºáá²á·áá±á¬ á¡áá»á¬ážáá¯á¶áž áááºáááºá¡áá±á¡ááœááºá¡ááœáẠáááºáá»ááºáá
áºáᯠáááºááŸááºáááºá á€áááºáá»ááºááᯠáá»á±á¬áºááœááºááœá¬ážáááºááŸáá·áºá áá®ážááŒá¬ážá¡á
á®á¡á
á¥áºáá
áºáᯠááá¯ážááá¬áá«áááºá ksoftirqd
(áá°ááá¯á·áá²á áá
áºáá±á¬ááºááᯠááœá±á·áááá·áºáááºá ps
per core) áá¯á¶ááŸáẠsyscall/interrupt áááºážááŒá±á¬ááºážá á¡ááŒááºáááºááœáẠá¡ááá¯áá« softirqs áá»á¬ážááᯠááá¯ááºááœááºáááºá á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠáá»áŸáá»áŸááááœá²áá±ááẠááŒáá¯ážáááºážááá·áº á
á¶áá¯ááºáááºážá
áẠá¡áá»áááºááá¬ážááᯠá¡áá¯á¶ážááŒá¯á á€á
á¬ááœá²ááᯠá
á®á
ááºáá¬ážáá«áááºá
kernel ááẠpackets áá»á¬ážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºáááºááᯠáá±á·áá¬ááŒá®ážáá«áá congestion ááŒá
áºááá¯ááºááŒá±á¡áá»áá¯á·ááŸáááŒá±á¬ááºáž áááºááœá±á·ááŒááºááá¯ááºáá«áááºá softirq áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠáááŒá¬áááááºážáá«ážá
áœá¬ áááºáá¶áááŸááá«áá áááºáááºáá»á¬ážááẠááœááºáááºáááºáá±á«áºááŸá RX áááºážá
á®ááœáẠáá¯ááºáá±á¬ááºááẠá¡áá»áááºá¡áááºááŒá¬ á
á±á¬áá·áºááá¯ááºážááááºááŒá
áºáá«áááºá áááºážááŸá¬ áááá¯áááºáᬠcore ááᯠááááºááá¯á·áá¬ážááá·áº á¡áá¯ááºá¡áá»áá¯á·ááŒá±á¬áá·áº ááŒá
áºááá¯ááºáááºá ááá¯á·ááá¯áẠá¡ááŒá¬ážá¡áá¬áá
áºáá¯áá¯á core ááᯠ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 core áá áºáá¯áááºážááŒáá·áº áá¯ááºáá±á¬ááºáááºá Linux áááºááá¯á·á¡áá¯ááºáá¯ááºáááºááá¯áá¬ážáááºááá¯áá«áá á€áááºáá±á·áá»áºáá»á¬ážááá¯ááŒá±áá¬áá¶áááºá¡ááœáẠáááºááá·áºáá±áá¬ááœáẠ(CPU core) ááŸáá·áº (softirqá ksoftirqd) ááá¯á·ááᯠáááºááá¯á·áá¯ááºáá±á¬ááºáá±áááºááᯠááááŸáááẠá¡áá¯á¶ážáááºáá«áááºá
ááá¯á¡áá»áááºááẠááá·áºá¡á¬áž Linux kernel ááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá® á
á±á¬áá·áºááŒáá·áºááá¯ááºá
á±ááá·áº áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡áá»áááºáá»áá±á¬ááºááŒá®ááŒá
áºáááºá áá®ááŸá¬ áá»áœááºáá±á¬áºááá¯á· áá¯á¶ážáááºá
á€áá±áá¬ááœáẠá¡á
á®á¡á
ááºááẠááá¯ážááŸááºážáá«áááº- kernel ááẠဠICMP pings áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áááááºá ááá¯á·ááŒá±á¬áá·áº kernel áá¯ááºáá±á¬ááºáá»ááºááœáẠáá»áááºáá
áºáᯠááá·áºááá¯ááºáá«áááºá hping3
ááá¯ááá¯ááŒáá·áºáá¬ážá
áá¯áẠicmp_echo
ááá¯á·áá±á¬ááºáá±ážáááºá struct sk_buff *skb
: á€áááºááŸá¬ "áá²á·áááºáá¶áá±á¬ááºážááá¯ááŸá¯" áá«ááá·áº áááºáááºáá
áºáá¯ááŒá
áºáááºá á¡á²áá«ááᯠááŒá±áá¬áá¶ááá¯ááºáááºá á¡ááœá²ááá¯ááºááᯠááœá²áá¯ááºááá¯ááºáááºá echo.sequence
(áááºážááŸáá·áº ááŸáá¯ááºážááŸááºáááºá icmp_seq
hping3 ááŒáá·áº вÑÑе
) ááŒá®ážáá»áŸáẠuser space ááá¯á· ááá¯á·áá«á áááºááŸááá¯ááºáááºážá
ááºá¡áááº/id ááá¯áááºážáá°áááºáááºáž á¡áááºááŒá±áá«áááºá kernel ááẠpacket áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±á
ááºááœáẠáá»áœááºá¯ááºááá¯á· ááá¯ááºááá¯ááºááœá±á·ááŒááºááá±á¬ ááááºáá»á¬ážááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá
áºááẠá
TGID PID áá¯ááºáááºážá ááºá¡ááẠICMP_SEQ 0 0 11 swapper/770 0 0 11 swapper/771 0 0 11 772 swapper/0 0 11 773 swapper/0 0 11 774 swapper/20041 20086 775 0the 0 11 776 0 swapper/0 11 777 0 0 swapper/11 778 4512 4542 spokes-report-s 779
á€áá±áá¬ááœáẠá
áá¬ážá
ááºááááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá softirq
á
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážááŒá¯áá¯ááºáá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážááẠá¡ááŸááºááááºááœáẠkernel ááẠkernel áá¡ááŒá±á¡áá±ááœáẠpacket áá»á¬ážááᯠáá±ážáááºážá
áœá¬á
á®áá¶áá±á¬ááºááœááºáá±ážááá·áº kernel ááŒá
áºáá±á¬ááŒá±á¬áá·áº "áá¯ááºáááºážá
ááºáá»á¬áž" á¡ááŒá
Ạáá±á«áºáá¬áááºááŒá
áºáááºá
á€áááááá¬ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠááŸá±á¬áá·áºááŸá±ážááŸá¯ááá¯ááŒáááá·áº áá®ážááŒá¬áž áááºáá±á·ááºá»áá»á¬ážááŸáá·áº áá®ážááŒá¬ážáá¯ááºáááºážá
ááºáá»á¬ážááᯠáá»áááºáááºááá¯ááºáá«áááºá hping3
. ááá¯ážááŸááºážá¡á±á¬ááºáá¯ááºááŒáá«á
áá¯á· grep
á¡áá»áá¯á·áá±á¬áááºááá¯ážáá»á¬ážá¡ááœáẠá€áááºážáá°ááŸá¯á¡áá±á«áº icmp_seq
. á¡áááºáá±á¬áºááŒáá« icmp_seq áááºááá¯ážáá»á¬ážááŸáá·áº ááá¯ááºáá®áá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠáááºážááá¯á·á RTT ááŸáá·áºá¡áá° ááŸááºáá¬ážáá¬ážáá«ááẠ(ááœááºážá¡ááœááºážááœáẠRTT áááºááá¯áž 50 ms áááºáááºážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á· á
á
áºáá¯ááºáá¬ážáá±á¬ áááºáá±á·ááºá»áá»á¬ážá¡ááœáẠáá»áŸá±á¬áºááá·áºáá¬ážáá±á¬ RTT áááºááá¯ážáá»á¬ážááŒá
áºáááº)á
TGID PID áá¯ááºáááºážá ááºá¡ááẠICMP_SEQ ** RTT -- 10137 10436 cadvisor 1951 10137 10436 cadvisor 1952 76 76 ksoftirqd/11 1953 ** 99ms 76 76 11mk1954 ** ir qd/89 76 ** 76ms 11 1955 ksoftirqd/ 79 76 ** 76ms 11 1956 ksoftirqd/69 76 ** 76ms 11 1957 ksoftirqd/59 76** (76ms) 11 1958 ksoftirqd/49 76 ** (76ms) 11 1959 39k (76 76ms) ** ksoft irqd/ 11 1960 ** (29ms) 76 76 ksoftirqd/11 1961 ** (19ms) -- 76 76 cadvisor 11 1962 9 cadvisor 10137 10436 2068 10137 ksoft 10436 ksoftirq 2069 qd/76 76 ** 11ms 2070 áá ksoftirqd/ 75 76 ** 76ms 11 2071 ksoftirqd/ 65 76 ** (76ms) 11 2072 ksoftirqd/ 55 76 ** (76ms) 11 2073 ksoftirqd/45 76 ** (76ms) (11ms) 2074 (35ms) ms ) 76 76 ksoftirqd/11 2075 ** (25ms)
ááááºáá»á¬ážá áá»áœááºá¯ááºááá¯á·á¡á¬áž á¡áá¬áá»á¬ážá
áœá¬ááᯠááŒá±á¬ááŒáááºá ááááŠážá
áœá¬á á€áááºáá±á·áá»áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡ááŒá±á¬ááºážá¡áá¬á¡á¬ážááŒáá·áº áá¯ááºáá±á¬ááºáá«áááºá ksoftirqd/11
. ááá¯ááá¯áááºááŸá¬ á€á
ááºá¡ááœá²áá»á¬ážá¡ááœáẠICMP packet áá»á¬ážááᯠáááºáá¶áááŸáááá·áºá¡áá¯á¶ážááœáẠcore 11 ááá¯á· hashed áá¯ááºáá¬ážáááºá ááá¯ááŸá¯áá»á¬ážááŸáááá·áºá¡áá«ááá¯ááºážá á
áá
áºáá±á«áºááá¯ááŸá¯áá¡ááŒá±á¬ááºážá¡áá¬ááœáẠá
á®áá¶áá±á¬ááºááœááºáá¬ážáá±á¬ áááºáá±á·ááºá»áá»á¬ážááŸááááºááá¯áááºáž áá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºááá«áááºá cadvisor
... ááá¯á¡áá« ksoftirqd
áá¯ááºáááºážáá¬áááºááᯠááœáŸá²ááŒá±á¬ááºážáá°ááŒá®áž á
á¯áá±á¬ááºážáá¬ážáá±á¬ áááºážá
á®ááŒááºážááᯠáá¯ááºáá±á¬ááºáááº- ááŒá®ážáá±á¬áẠá
á¯áá±á¬ááºážáá¬ážáá±á¬ áááºáá±á·ááºá»á¡áá±á¡ááœáẠá¡ááá¡áá» cadvisor
.
áá»ááºááŒááºážááŸá±á·áá±á¬ááºá០ááá
á¹á
áá°á á¡áá¯ááºááŒá
áºáááºá cadvisor
ááŒá¿áá¬ááœáẠáá°áá«áááºáááºáááºááŸá¯ááᯠááá¯ááá¯áááºá ááŒá
áºáá»ááºáá±á¬á· áááºááœááºáá»ááºá
ááœááºááááºáá¬áá»á¬ážá á¡ááŒá¬ážáá±á¬ á¡ááœááºá¡ááŒááºáá»á¬ážáá²á·ááá¯á·á áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠá¡ááœááºá¡ááá·áºááŒáá·áºááá·áº áááááá¬áá»á¬ážááŒá áºááŒá®áž á¡áá»áá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááœáẠá áœááºážáá±á¬ááºáááºááá¯ááºáᬠááŒá¿áá¬áá»á¬ážááᯠááŒá¯á¶ááœá±á·ááááºáᯠáá»áŸá±á¬áºááá·áºááá¯ááºáá«áááºá
áááºáááºáááºážá á®ááŒááºážááᯠááŸá±ážááœá±ážá á±áá±á¬ cadvisor ááẠá¡áááºá¡áá¬áá¯ááºáá±á¬ááºááááºážá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáá»ááºá
á®ážááŸá¯ááŒá
áºááœá¬ážáá¯á¶á áááºááá·áºááŒá
áºá
ááºááᯠááŒá
áºá
á±ááááºážá áááºááá·áº CPU ááŒá
áºáááºááᯠáá»áœááºá¯ááºááá¯á· áá¬ážáááºááá±á¬áá±á«ááºáá±ááŒá®ááŒá
áºáááºá áááºáá²áá±á¬ááááºááá¯á·ááŒááºážááŒá±á¬áá·áº Linux kernel ááœáẠá¡áá»áááºááá¬ážááœá²ááẠá¡áá»áááºáááŸááááºááᯠáá»áœááºá¯ááºááá¯á·ááŒááºááá«áááºá ksoftirqd
. áááºáá±á·áá»áºáá»á¬ážááᯠáááºá
ááºá áá¯ááºáá±á¬ááºáááºááᯠáá»áœááºá¯ááºááá¯á·ááŒááºáááºá cadvisor
. ááá¯ááá¯á·áá°áááŒááºážááẠáá¯áá¹ááááŸááááºá cadvisor
ááŸá±ážááœá±ážáá±á¬ syscall ááá¯ááœáá·áºááá¯ááºáááºá ááá¯á·áá±á¬áẠááá¯á¡áá»áááºááœáẠá
á¯áá±á¬ááºážáá¬ážáá±á¬ áááºáá±á·ááºá»á¡á¬ážáá¯á¶ážááᯠá
á®áá¶áá±á¬ááºááœááºáááº-
áá«á áá®á¡áá¯áá®áá
áºáá¯áá«á áá«áá±ááá·áº áááºááá¯á
ááºážáááºááá²á áá»áœááºá¯ááºááá¯á·áá¯ááºááá¯ááºáááºááŸá¬ á€áá¯ááºáááºážá
ááºáá
áºáá»áŸá±á¬ááºáá¯á¶áž CPU core ááá¯ááŒá±áá¬áá¶áá«á áááºáá»ááºááẠpacket á¡áá±á¡ááœááºáá»á¬ážááœá¬ážááŒá®áž ksoftirqd ááá¯áá±á«áºááá·áºá¡áá»ááºááá¯ááŸá¬áá«á ááá¯á·áá±á¬ááºááá¯á¡ááŸááºáááá¯ááºáá®áá±ážááẠCPU core ááœááºáááºááá·áºá¡áá¬ááá¯á¡ááá¡áá»áá¯ááºáá±á¬ááºáá¬ážáááºááá¯ááŒáá·áºáááºáá±á¬ááºááá¯á·á¡áááºážáááºááŒááºááŒáá·áºáá«á . 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 tracer ááœááºá¡á á±á¬ááá¯ááºážááá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºáá²á·áá±á¬ "cadvisor before ksoftirqd" áá¯á¶á á¶ááá¯áá»áœááºá¯ááºááá¯á·ááœá±á·ááŸáááŒááºážááŒá áºáááºá áá¬ááá¯ááá¯ááá¯áá¬áá²?
á
á¬ááŒá±á¬ááºážáá
áºáá¯á
á®ááẠá¡áá»áááºáá¬ááá
áºáá¯ááœáẠCPU ááŒá±áá¬áá¶áááºá ááá¯ááºážáá
áºáá¯áá±á«áºááŸá stack down áá±á«áºááá¯ááŸá¯áá
áºáá¯á
á®ááᯠsemicolon ááŒáá·áº ááá¯ááºážááŒá¬ážáá¬ážáááºá áá»ááºážáá»á¬ážá¡áááºááœáẠsyscall áá¯áá±á«áºáááº- read(): .... ;do_syscall_64;sys_read; ...
. áá«ááŒá±á¬áá·áº cadvisor á system call ááŸá¬ á¡áá»áááºá¡áá»á¬ážááŒá®ážáá¯ááºáááºá read()
functions áá»á¬ážááŸáá·áºáááºá
áẠmem_cgroup_*
(áá±á«áºááá¯ááŸá¯á¡á
á¯á
á¯áááááº/ááá¯ááºážá¡áá¯á¶áž)á
áá±á«áºááá¯ááŸá¯ááœáẠáááºááá·áºá¡áá¬ááᯠá¡ááá¡áá»áááºáá±ááááºážááá¯áááºááᯠááŒáá·áºááẠá¡áááºáááŒá±áá±á¬ááŒá±á¬áá·áº ááŒá±ážááŒáá·áºááŒáá«á
áá¯á· strace
ááŒá®ážáá»áŸáẠ100 ms ááẠááá¯ááŸááºáá±á¬ á
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠcadvisor á áááºááá¯á·áá¯ááºáá±á¬ááºáááºááᯠááŒáá·áºááŒáá«á
áá¯á·á
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 áá°ážááºá á€ááá¯ááºááᯠáá±ážááŒááºážáááºá áááºážááẠkernel ááá¯á·ááá¯áẠ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 ~ $
ááᯠáá»áœááºá¯ááºááá¯á·ááẠbug ááᯠáá»áá¯ážááœá¬ážááá¯ááºááŒá®áž Linux kernel ááẠáá±á¬áá«áá±áááŸáá·áº áááºááá¯ááºáá±áááŒá±á¬ááºáž áá¬ážáááºáá«áááºá
á á¬áááºááŒááºážáá¯ááºáá±á¬ááºááŸá¯ááẠá¡áááºááŒá±á¬áá·áº ááŸá±ážááœá±ážááááºážá
á€á¡ááá·áºááœááºá á¡áá¬ážáá°ááŒá¿áá¬áá»á¬ážá¡ááŒá±á¬ááºáž á¡ááŒá¬ážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáá¶á០áááºáá±á·áá»áºáá»á¬ážááᯠááŸá¬ááœá±ááẠááá¯ááá¯ááœááºáá°áááºá ááœááºáá¬ááá·áºá¡ááá¯ááºážá cadvisor tracker ááœáẠဠbug ááá¯á¡á
á®áááºáá¶áá¬ážáááºá
ááŒá¿áá¬ááŸá¬ cgroups áá»á¬ážááẠnamespace (container) á¡ááœááºáž ááŸááºáá¬ááºá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááá·áºááœááºážá ááºážá á¬ážááŒááºážááŒá áºáááºá ဠcgroup ááœááºáá±á«ááºááŸá áá¯ááºáááºážá ááºáá»á¬ážá¡á¬ážáá¯á¶ážááœááºá Docker ááẠmemory cgroup ááᯠáá¯ááºáá±ážáááºá ááá¯á·áá±á¬áº âááŸááºáá¬ááºâ ááẠáá¯ááºáááºážá ááºááŸááºáá¬ááºáá»áŸáᬠááá¯ááºáá«á áá¯ááºáááºážá ááºááŸááºáá¬ááºááá¯ááºááá¯ááºá á¡áá¯á¶ážáááŒá¯áá±á¬á·áá±á¬áºáááºážá kernel ááẠmemory cgroup ááœáẠáááºááŸáºáá¯ááºáá¬ážááá·áº dentries ááŸáá·áº inodes (directory and file metadata) áá²á·ááá¯á·áá±á¬ áááºááŸáºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠkernel á áááºááŸááºáá±ážáá±áá²ááŒá áºáá¯á¶ááááºá ááŒá¿áá¬áá±á¬áºááŒáá»ááºááŸ
zombie cgroups- áá¯ááºáááºážá ááºáá»á¬ážáááŸáá áá»ááºáá¬ážáá±á¬ cgroups áá»á¬ážááŒá áºáá±á¬áºáááºáž memory ááœá²áá±áá¬ážáá²ááŒá áºááẠ(áá»áœááºá¯ááºáááá á¹á ááœááºá dentry cache ááŸá áá«áá±ááá·áº page cache ááá¯á·ááá¯áẠtmpfs ááŸáááºáž ááœá²áá±áá±ážááá¯ááºáá«áááº)á
cgroup ááᯠááœáŸááºááá¯ááºáá±á¬á¡áá« áááºááŸáºááŸá á á¬áá»ááºááŸá¬á¡á¬ážáá¯á¶ážá kernel á á á áºáá±ážááŸá¯ááẠá¡ááœááºááŸá±ážááœá±ážááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº áá»ááºážááááá·áº áá¯ááºáááºážá ááºááᯠááœá±ážáá»ááºááá¯ááºáááº- á€á á¬áá»ááºááŸá¬áá»á¬ážááᯠáááºáá¶áá±á¬ááºážááá¯áá¬áááºá¡áá á á±á¬áá·áºáá«á ááá¯á·áá±á¬áẠááŸááºáá¬áẠá¡ááŸááºáááẠááá¯á¡ááºáá¬áá±á¬á¡áá« áá±á¬ááºáá¯á¶ážááœáẠcgroup ááᯠááŸááºážáááºážáá«á á€á¡áá»ááºá¡ááá á á¬áááºážááá¬ážáá»á¬ážá á¯áá±á¬ááºážááá·áºá¡áá« cgroup ááá¯ááá·áºááœááºážá ááºážá á¬ážáá±áá²ááŒá áºáááºá
á
áœááºážáá±á¬ááºáááºááŸá¯áá±á¬áá·áºááŸááŒáá·áºáá»áŸáẠáááºááŸáºáááºááá¯áá®á¡áá»áá¯á·ááᯠáá»ááºáá¬ážááŒááºážááŒáá·áº áááŠážááŸááºážáááºážááŸá¯ááᯠá¡ááŸáááºááŒáŸáá·áºáá±ážáááºá áá«áá¡áááºááŒá±áá«áááºá kernel ááẠáááºááŸáºáááºááá¯áá®ááá±á¬ááºáá¯á¶ážááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á cgroup ááá¯áá±á¬ááºáá¯á¶ážááœááºááŸááºážáááºážááœá¬ážáááºá ááá¯á·ááŒá±á¬áá·áºáááºážááᯠ"leak" áá¯áá±á«áºááá¯ááááá«á áá¶ááá±á¬ááºážá
áœá¬áá², áááá»áá²á·ááŸá¬ááœá±áá±ážááá¹ááá¬ážáá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ memory.stat
ဠkernel áá¬ážááŸááºáž (4.9) ááœáẠáá»áœááºá¯ááºááá¯á·ááá¬áá¬áá»á¬ážááŸá áááºááá¯áá®ááá¬ááá»á¬ážá
áœá¬ááŒáá·áº áá±á«ááºážá
ááºáá¬ážáá±á¬ááŒá±á¬áá·áº áá±á¬ááºáá¯á¶ážáá±á«áº áááºááŸáºáá±áá¬áá»á¬ážááᯠááŒááºáááºááá°áááºááŸáá·áº cgroup áá¯ááºáá±á¬ááºáá»á¬ážááᯠááŸááºážáááºážááẠá¡áá»áááºááá¯ááŒá¬áááºáᯠááá¯ááá¯áááºá
áá»áœááºá¯ááºááá¯á·á node á¡áá»áá¯á·ááœáẠcgroup áá¯ááºáá±á¬ááºáá»á¬ážá áœá¬ááŸááááŒáá·áº áááºááŸá¯ááŒá®áž latency ááẠáá áºá áá¹ááá·áºááᯠáá»á±á¬áºááœááºááœá¬ážáá«áááºá
cadvisor ááŒá¿áá¬á¡ááœáẠááŒá±ááŸááºážáááºážááŸá¬ system áá áºáá»áŸá±á¬ááºáá¯á¶áž dentries/inodes áááºááŸáºáá»á¬ážááᯠáá»ááºááŒááºážáááºááŸá¬ážáááºááŒá áºááŒá®ážá áááºááŸáºááá¯ááŸááºážáááºážááŒááºážááẠáááºááŸáºáá¯ááºáá±á¬áẠcgroup á á¬áá»ááºááŸá¬áá»á¬ážááᯠááŸááºážáá¯ááºááŒá®áž áááºážááá¯á·ááá¯áááºáž ááœááºááŒá±á¬ááºá á±áá±á¬ááŒá±á¬áá·áº á áá áºáá áºáá¯áá¯á¶ážááœáẠread latency ááŸáá·áº network latency ááá¯á·ááᯠáá»ááºáá»ááºážáááºááŸá¬ážáá±ážáá«áááºá áá«á ááŒá±ááŸááºážáá»ááºááá¯ááºáá±ááá·áº ááŒá¿áá¬áá²á·á¡ááŒá±á¬ááºážáááºážááᯠá¡áááºááŒá¯áá«áááºá
á¡áá
áºáá±á¬ kernel áá¬ážááŸááºážáá»á¬áž (4.19+) ááœáẠáá±á«áºááá¯ááŸá¯á
áœááºážáá±á¬ááºááẠááá¯ááá¯áá±á¬ááºážááœááºáá¬ááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá memory.stat
ááá¯á·ááŒá±á¬áá·áº ဠkernel ááá¯á·ááŒá±á¬ááºážááŒááºážá ááŒá¿áá¬ááᯠááŒá±ááŸááºážáá±ážáá²á·áááºá áá
áºáá»áááºáááºážááŸá¬áááºá Kubernetes á¡á
á¯á¡áá±ážáá»á¬ážááœáẠááŒá¿áá¬ááŸááá±á¬ áá¯ááºáá»á¬ážááᯠááŸá¬ááœá±ááẠáááááá¬áá»á¬áž ááŸáááŒá®áž áááºážááá¯á·ááᯠááŸáá
áœá¬ áááºááŸá¬ážááŒá®áž áááºážááá¯á·ááᯠááŒááºáááºá
áááºáá«á áá»áœááºá¯ááºááá¯á·ááẠá¡á
á¯á¡áá±ážá¡á¬ážáá¯á¶ážááᯠá
á¯á
ááºážááŒá®áž áá¯á¶áá±á¬ááºáá±á¬ latency ááŒáá·áºáá¬ážáá±á¬ áá¯á¶ááŸááºáá»á¬ážááᯠááœá±á·ááŸáááŒá®áž áááºážááá¯á·ááᯠááŒááºáááºá
áááºáá²á·áááºá áááºážááẠáá»ááºááŸááá±á¬áá¬áá¬áá»á¬ážááœáẠOS ááᯠá¡ááºááááºáá¯ááºááẠá¡áá»áááºáá±ážáá²á·áááºá
áááºááá»áŒážááŒá¯áá»
á€áá»áœááºááœááºážáá»ááºááẠRX NIC áááºážá á®ááŒááºážááᯠáá¬ááŸáá·áºáá»á®áá±á¬ áá®áá®á áá¹ááá·áºáá»á¬ážá¡ááœáẠá á®áááºážáá¯ááºáá±á¬ááºááŒááºážááᯠáááºááá·áºááœá¬ážáá±á¬ááŒá±á¬áá·áºá áááºážááẠMySQL áá±á¬ááºážááá¯áá»ááºáá»á¬ážááŸáá·áº áá¯á¶á·ááŒááºááŸá¯áááºáááºáá»á¬ážááŒá¬ážáá²á·ááá¯á·áá±á¬ ááá¯áá±á¬ááºážáá±á¬áá»áááºáááºááŸá¯áá»á¬ážááŸáá·áº á¡áááºá¡áááºááŒá¬áá»áááºááŒá¬áá»áááºááŸá áºáá¯áá¯á¶ážááᯠáááŒáá¯ááºáááºáááºážááŒá áºáá±á«áºá á±áááºá
Kubernetes áá²á·ááá¯á·áá±á¬ á¡ááŒá±áá¶á¡áá»áá¯á¶ážá
áá
áºáá»á¬ážá á
áœááºážáá±á¬ááºáááºááᯠáá¬ážáááºááŒááºážááŸáá·áº ááááºážááááºážááŒááºážááẠáááºážááá¯á·á¡áá±á«áºá¡ááŒá±áá¶ááá·áº áááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážá áá¯á¶ááŒááºá
áááºáá»áááŸá¯ááŸáá·áº ááŒááºááŸá¯ááºážá¡ááœáẠá¡áá±ážááŒá®ážáá«áááºá Kubernetes á
áœááºážáá±á¬ááºáááºááŒáŸáá·áºáááºááŸá¯áá»á¬ážá០áááºáá¯ááºáá±á¬ááºááá·áº á
áá
áºááá¯ááºážááœáẠá¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážá
source: www.habr.com