ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ืœืคื ื™ ื›ืžื” ืฉื ื™ื Kubernetes ื›ื‘ืจ ื“ื ื• ื‘ื‘ืœื•ื’ ื”ืจืฉืžื™ ืฉืœ GitHub. ืžืื–, ื”ื™ื ื”ืคื›ื” ืœื˜ื›ื ื•ืœื•ื’ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช ืœืคืจื™ืกืช ืฉื™ืจื•ืชื™ื. Kubernetes ืžื ื”ืœืช ื›ืขืช ื—ืœืง ื ื™ื›ืจ ืžื”ืฉื™ืจื•ืชื™ื ื”ืคื ื™ืžื™ื™ื ื•ื”ืฆื™ื‘ื•ืจื™ื™ื. ื›ื›ืœ ืฉื”ืืฉื›ื•ืœื•ืช ืฉืœื ื• ื’ื“ืœื• ื•ื“ืจื™ืฉื•ืช ื”ื‘ื™ืฆื•ืขื™ื ื”ืคื›ื• ืžื—ืžื™ืจื•ืช ื™ื•ืชืจ, ื”ืชื—ืœื ื• ืœืฉื™ื ืœื‘ ืฉื—ืœืง ืžื”ืฉื™ืจื•ืชื™ื ื‘-Kubernetes ื—ื•ื•ื™ื ื—ื‘ื™ื•ืŸ ื‘ืื•ืคืŸ ืกืคื•ืจื“ื™ ืฉืœื ื ื™ืชืŸ ื”ื™ื” ืœื”ืกื‘ื™ืจ ืขืœ ื™ื“ื™ ื”ืขื•ืžืก ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืขืฆืžื”.

ื‘ืขื™ืงืจื• ืฉืœ ื“ื‘ืจ, ื™ื™ืฉื•ืžื™ื ื—ื•ื•ื™ื ื”ืฉื”ื™ื™ืช ืจืฉืช ืืงืจืื™ืช ืฉืœ ืขื“ 100 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ืื• ื™ื•ืชืจ, ื•ื›ืชื•ืฆืื” ืžื›ืš ืœืคืกืงื™ ื–ืžืŸ ืื• ื ื™ืกื™ื•ื ื•ืช ื—ื•ื–ืจื™ื. ื”ืฉื™ืจื•ืชื™ื ื”ื™ื• ืืžื•ืจื™ื ืœื”ื™ื•ืช ืžืกื•ื’ืœื™ื ืœื”ื’ื™ื‘ ืœื‘ืงืฉื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ ืž-100 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”. ืื‘ืœ ื–ื” ื‘ืœืชื™ ืืคืฉืจื™ ืื ื”ื—ื™ื‘ื•ืจ ืขืฆืžื• ืœื•ืงื— ื›ืœ ื›ืš ื”ืจื‘ื” ื–ืžืŸ. ื‘ื ืคืจื“, ืฆืคื™ื ื• ื‘ืฉืื™ืœืชื•ืช MySQL ืžื”ื™ืจื•ืช ืžืื•ื“ ืฉืืžื•ืจื•ืช ืœืงื—ืช ืืœืคื™ื•ืช ืฉื ื™ื•ืช, ื•-MySQL ืื›ืŸ ื”ื•ืฉืœืžื” ื‘ืืœืคื™ื•ืช ืฉื ื™ื•ืช, ืื‘ืœ ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื”ืžื‘ืงืฉืช, ื”ืชื’ื•ื‘ื” ืืจื›ื” 100 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ืื• ื™ื•ืชืจ.

ืžื™ื“ ื”ืชื‘ืจืจ ืฉื”ื‘ืขื™ื” ื”ืชืจื—ืฉื” ืจืง ื‘ื—ื™ื‘ื•ืจ ืœืฆื•ืžืช Kubernetes, ื’ื ืื ื”ืฉื™ื—ื” ื”ื’ื™ืขื” ืžื—ื•ืฅ ืœ-Kubernetes. ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœืฉื—ื–ืจ ืืช ื”ื‘ืขื™ื” ื”ื™ื ื‘ื‘ื“ื™ืงื” ืœึดื—ื™ื•ึนืช ื—ึทื™ึดื™ื ืจึตื™ืงึดื™ื, ื”ืคื•ืขืœ ืžื›ืœ ืžืืจื— ืคื ื™ืžื™, ื‘ื•ื“ืง ืืช ืฉื™ืจื•ืช Kubernetes ื‘ื™ืฆื™ืื” ืกืคืฆื™ืคื™ืช, ื•ืจื•ืฉื ื‘ืื•ืคืŸ ืกืคื•ืจื“ื™ ื–ืžืŸ ื”ืฉื”ื™ื™ื” ื’ื‘ื•ื”. ื‘ืžืืžืจ ื–ื”, ื ื‘ื—ืŸ ื›ื™ืฆื“ ื”ืฆืœื—ื ื• ืœืืชืจ ืืช ื”ื’ื•ืจื ืœื‘ืขื™ื” ื–ื•.

ื‘ื™ื˜ื•ืœ ืžื•ืจื›ื‘ื•ืช ืžื™ื•ืชืจืช ื‘ืฉืจืฉืจืช ื”ืžื•ื‘ื™ืœื” ืœื›ื™ืฉืœื•ืŸ

ืขืœ ื™ื“ื™ ืฉื—ื–ื•ืจ ืื•ืชื” ื“ื•ื’ืžื”, ืจืฆื™ื ื• ืœืฆืžืฆื ืืช ืžื•ืงื“ ื”ื‘ืขื™ื” ื•ืœื”ืกื™ืจ ืฉื›ื‘ื•ืช ืžื™ื•ืชืจื•ืช ืฉืœ ืžื•ืจื›ื‘ื•ืช. ื‘ืชื—ื™ืœื”, ื”ื™ื• ื™ื•ืชืจ ืžื“ื™ ืืœืžื ื˜ื™ื ื‘ื–ืจื™ืžื” ื‘ื™ืŸ Vegeta ืœืชืจืžื™ืœื™ื ืฉืœ Kubernetes. ื›ื“ื™ ืœื–ื”ื•ืช ื‘ืขื™ื™ืช ืจืฉืช ืขืžื•ืงื” ื™ื•ืชืจ, ืขืœื™ืš ืœืฉืœื•ืœ ื—ืœืง ืžื”ืŸ.

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ื”ืœืงื•ื— (Vegeta) ื™ื•ืฆืจ ื—ื™ื‘ื•ืจ TCP ืขื ื›ืœ ืฆื•ืžืช ื‘ืืฉื›ื•ืœ. Kubernetes ืคื•ืขืœืช ื›ืจืฉืช ืฉื›ื‘ืช-ืขืœ (ืขืœ ื’ื‘ื™ ืจืฉืช ืžืจื›ื– ื”ื ืชื•ื ื™ื ื”ืงื™ื™ืžืช) ื”ืžืฉืชืžืฉืช IPIP, ื›ืœื•ืžืจ, ื”ื•ื ืขื•ื˜ืฃ ืืช ืžื ื•ืช ื”-IP ืฉืœ ืจืฉืช ื”ืฉื›ื‘ื” ื‘ืชื•ืš ืžื ื•ืช ื”-IP ืฉืœ ืžืจื›ื– ื”ื ืชื•ื ื™ื. ื‘ืขืช ื—ื™ื‘ื•ืจ ืœืฆื•ืžืช ื”ืจืืฉื•ืŸ, ืžืชื‘ืฆืข ืชืจื’ื•ื ื›ืชื•ื‘ืช ืจืฉืช ืชืจื’ื•ื ื›ืชื•ื‘ืช ืจืฉืช (NAT) stateful ื›ื“ื™ ืœืชืจื’ื ืืช ื›ืชื•ื‘ืช ื”-IP ื•ื”ื™ืฆื™ืื” ืฉืœ ืฆื•ืžืช Kubernetes ืœื›ืชื•ื‘ืช ื”-IP ื•ืœื™ืฆื™ืื” ื‘ืจืฉืช ืฉื›ื‘ืช-ื”ืขืœ (ื‘ืื•ืคืŸ ืกืคืฆื™ืคื™, ื”ืคื•ื“ ืขื ื”ืืคืœื™ืงืฆื™ื”). ืขื‘ื•ืจ ืžื ื•ืช ื ื›ื ืกื•ืช, ืžืชื‘ืฆืข ืจืฆืฃ ื”ืคื•ืš ืฉืœ ืคืขื•ืœื•ืช. ื–ื•ื”ื™ ืžืขืจื›ืช ืžื•ืจื›ื‘ืช ืขื ื”ืจื‘ื” ืžืฆื‘ ื•ืืœืžื ื˜ื™ื ืจื‘ื™ื ืฉืžืชืขื“ื›ื ื™ื ื•ืžืฉืชื ื™ื ื›ืœ ื”ื–ืžืŸ ืขื ืคืจื™ืกืช ื”ืฉื™ืจื•ืชื™ื ื•ื”ื–ื–ืชื.

ืฉื™ืจื•ืช tcpdump ื‘ืžื‘ื—ืŸ Vegeta ื™ืฉ ืขื™ื›ื•ื‘ ื‘ืžื”ืœืš ืœื—ื™ืฆืช ื”ื™ื“ ืฉืœ TCP (ื‘ื™ืŸ SYN ืœ-SYN-ACK). ื›ื“ื™ ืœื”ืกื™ืจ ืืช ื”ืžื•ืจื›ื‘ื•ืช ื”ืžื™ื•ืชืจืช ื”ื–ื•, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ hping3 ืขื‘ื•ืจ "ืคื™ื ื’ื™ื" ืคืฉื•ื˜ื™ื ืขื ืžื ื•ืช SYN. ืื ื• ื‘ื•ื“ืงื™ื ืื ื™ืฉ ืขื™ื›ื•ื‘ ื‘ื—ื‘ื™ืœืช ื”ืชื’ื•ื‘ื”, ื•ืœืื—ืจ ืžื›ืŸ ืžืืคืกื™ื ืืช ื”ื—ื™ื‘ื•ืจ. ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืกื ืŸ ืืช ื”ื ืชื•ื ื™ื ื›ืš ืฉื™ื›ืœืœื• ืจืง ืžื ื•ืช ื’ื“ื•ืœื•ืช ืž-100 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ื•ืœืงื‘ืœ ื“ืจืš ืงืœื” ื™ื•ืชืจ ืœืฉื—ื–ืจ ืืช ื”ื‘ืขื™ื” ืžืืฉืจ ืžื‘ื—ืŸ ืฉื›ื‘ื” 7 ืฉืœ ื”ืจืฉืช ื”ืžืœืื” ืฉืœ Vegeta. ืœื”ืœืŸ "ืคื™ื ื’ื™ื" ืฉืœ ืฆื•ืžืช Kubernetes ื‘ืืžืฆืขื•ืช TCP SYN/SYN-ACK ื‘"ื™ืฆื™ืืช ื”ืฆื•ืžืช" ืฉืœ ื”ืฉื™ืจื•ืช (30927) ื‘ืžืจื•ื•ื—ื™ื ืฉืœ 10 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”, ืžืกื•ื ื ื™ื ืœืคื™ ื”ืชื’ื•ื‘ื•ืช ื”ืื™ื˜ื™ื•ืช ื‘ื™ื•ืชืจ:

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

ื™ื›ื•ืœ ืžื™ื“ ืœื‘ืฆืข ืืช ื”ืชืฆืคื™ืช ื”ืจืืฉื•ื ื”. ืื ืœืฉืคื•ื˜ ืœืคื™ ืžืกืคืจื™ ื”ืจืฆืฃ ื•ื”ืชื–ืžื•ื ื™ื, ื‘ืจื•ืจ ืฉืœื ืžื“ื•ื‘ืจ ื‘ื’ื•ื“ืฉื™ื ื—ื“-ืคืขืžื™ื™ื. ื”ืขื™ื›ื•ื‘ ืžืฆื˜ื‘ืจ ืœืขื™ืชื™ื ืงืจื•ื‘ื•ืช ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืžืขื•ื‘ื“.

ืœืื—ืจ ืžื›ืŸ, ืื ื• ืจื•ืฆื™ื ืœื‘ืจืจ ืื™ืœื• ืžืจื›ื™ื‘ื™ื ืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ืžืขื•ืจื‘ื™ื ื‘ื”ืชืจื—ืฉื•ืช ื”ื’ื•ื“ืฉ. ืื•ืœื™ ืืœื• ื›ืžื” ืžืžืื•ืช ื›ืœืœื™ iptables ื‘-NAT? ืื• ืฉื™ืฉ ื‘ืขื™ื•ืช ืขื ืžื ื”ื•ืจ IPIP ื‘ืจืฉืช? ื“ืจืš ืื—ืช ืœื‘ื“ื•ืง ื–ืืช ื”ื™ื ืœื‘ื“ื•ืง ื›ืœ ืฉืœื‘ ื‘ืžืขืจื›ืช ืขืœ ื™ื“ื™ ื‘ื™ื˜ื•ืœื•. ืžื” ืงื•ืจื” ืื ืชืกื™ืจ ืืช ื”-NAT ื•ื”ืœื•ื’ื™ืงื” ืฉืœ ื—ื•ืžืช ื”ืืฉ, ื•ืžืฉืื™ืจ ืจืง ืืช ื—ืœืง ื”-IPIP:

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ืœืžืจื‘ื” ื”ืžื–ืœ, ืœื™ื ื•ืงืก ืžืงืœื” ืขืœ ื’ื™ืฉื” ื™ืฉื™ืจื” ืœืฉื›ื‘ืช ืฉื›ื‘ืช ื”-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? ื‘ื•ืื• ื ืคืฉื˜ ืืช ื”ืžื‘ื—ืŸ ืขื•ื“ ื™ื•ืชืจ:

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ื”ืื ื›ืœ ื”ื—ื‘ื™ืœื•ืช ื ืฉืœื—ื•ืช ื‘ื™ืŸ ืฉื ื™ ื”ืžืืจื—ื™ื ื”ืœืœื•?

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. ื”ื ืขื“ื™ื™ืŸ ืจื•ืื™ื ื—ื‘ื™ื•ืŸ ืื ืžืืจื— ื”ื™ืขื“ "ืจืข" (ื—ืœืงื ื’ืจื•ืขื™ื ื™ื•ืชืจ ืžืื—ืจื™ื).

ืขื›ืฉื™ื• ื”ืฉืืœื” ื”ืื—ืจื•ื ื”: ืžื“ื•ืข ื”ื”ืฉื”ื™ื” ืžืชืจื—ืฉืช ืจืง ื‘ืฉืจืชื™ 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 ืฉืœ ื”ืžืงื•ืจ ื”ืงื•ื“ื ืœืžืืจื— ื”ื—ื™ืฆื•ื ื™ (ืžื” ืฉืœื ื›ื•ืœืœ ืืช ืžืืจื— ื”ืžืงื•ืจ ืžื›ื™ื•ื•ืŸ ืฉื”ืคื™ื ื’ ื›ื•ืœืœ ื’ื ืจื›ื™ื‘ 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

ืขืœ ื™ื“ื™ ื‘ื—ื™ื ืช ืœื›ื™ื“ืช ืžื ื•ืช ื—ื‘ื™ื•ืŸ, ื”ืฉื’ื ื• ืžื™ื“ืข ื ื•ืกืฃ. ืกืคืฆื™ืคื™ืช, ืฉื”ืฉื•ืœื— (ืœืžื˜ื”) ืจื•ืื” ืืช ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ื”ื–ื”, ืื‘ืœ ื”ื ืžืขืŸ (ืœืžืขืœื”) ืœื - ืจืื” ืืช ื”ืขืžื•ื“ื” ื“ืœืชื (ื‘ืฉื ื™ื•ืช):

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ื‘ื ื•ืกืฃ, ืื ืžืกืชื›ืœื™ื ืขืœ ื”ื”ื‘ื“ืœ ื‘ืกื“ืจ ืžื ื•ืช TCP ื•-ICMP (ืœืคื™ ืžืกืคืจื™ ืจืฆืฃ) ื‘ืฆื“ ื”ื ืžืขืŸ, ืžื ื•ืช ICMP ืžื’ื™ืขื•ืช ืชืžื™ื“ ื‘ืื•ืชื• ืจืฆืฃ ืฉื‘ื• ื”ืŸ ื ืฉืœื—ื•, ืืš ื‘ืชื–ืžื•ืŸ ืฉื•ื ื”. ื™ื—ื“ ืขื ื–ืืช, ืžื ื•ืช TCP ืœืคืขืžื™ื ืžืฉืชืœื‘ื•ืช, ื•ื—ืœืงืŸ ื ืชืงืขื•ืช. ื‘ืคืจื˜, ืื ื‘ื•ื—ื ื™ื ืืช ื”ื™ืฆื™ืื•ืช ืฉืœ ืžื ื•ืช SYN, ื”ืŸ ืžืกื•ื“ืจื•ืช ื‘ืฆื“ ื”ืฉื•ืœื—, ืื‘ืœ ืœื ื‘ืฆื“ ืฉืœ ื”ืžืงืœื˜.

ื™ืฉ ื”ื‘ื“ืœ ื“ืง ื‘ืื™ืš ื›ืจื˜ื™ืกื™ ืจืฉืช ืฉืจืชื™ื ืžื•ื“ืจื ื™ื™ื (ื›ืžื• ืืœื• ื‘ืžืจื›ื– ื”ื ืชื•ื ื™ื ืฉืœื ื•) ืžืขื‘ื“ื™ื ืžื ื•ืช ื”ืžื›ื™ืœื•ืช TCP ืื• ICMP. ื›ืืฉืจ ืžื’ื™ืขื” ื—ื‘ื™ืœื”, ืžืชืื ื”ืจืฉืช "ืžื’ื™ื‘ ืื•ืชื” ืœื›ืœ ื—ื™ื‘ื•ืจ", ื›ืœื•ืžืจ ืžื ืกื” ืœืคืจืง ืืช ื”ื—ื™ื‘ื•ืจื™ื ืœืชื•ืจื™ื ื•ืœืฉืœื•ื— ื›ืœ ืชื•ืจ ืœืœื™ื‘ื” ื ืคืจื“ืช ืฉืœ ืžืขื‘ื“. ืขื‘ื•ืจ TCP, Hash ื–ื” ื›ื•ืœืœ ื’ื ืืช ื›ืชื•ื‘ืช ื”-IP ื•ื”ื™ืฆื™ืื” ืฉืœ ื”ืžืงื•ืจ ื•ื’ื ื”ื™ืขื“. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื›ืœ ื—ื™ื‘ื•ืจ ื’ื™ื‘ื•ื‘ (ืคื•ื˜ื ืฆื™ืืœื™) ื‘ืฆื•ืจื” ืฉื•ื ื”. ืขื‘ื•ืจ ICMP, ืจืง ื›ืชื•ื‘ื•ืช IP ืขื•ื‘ืจื•ืช ื’ื™ื‘ื•ื‘, ืžื›ื™ื•ื•ืŸ ืฉืื™ืŸ ื™ืฆื™ืื•ืช.

ืขื•ื“ ืชืฆืคื™ืช ื—ื“ืฉื”: ื‘ืžื”ืœืš ืชืงื•ืคื” ื–ื• ืื ื• ืจื•ืื™ื ืขื™ื›ื•ื‘ื™ื ืฉืœ ICMP ื‘ื›ืœ ื”ืชืงืฉื•ืจืช ื‘ื™ืŸ ืฉื ื™ ืžืืจื—ื™ื, ืืš TCP ืœื. ื–ื” ืื•ืžืจ ืœื ื• ืฉื”ืกื™ื‘ื” ื›ื ืจืื” ืงืฉื•ืจื” ืœื’ื™ื‘ื•ื‘ ืฉืœ ืชื•ืจ RX: ื”ืขื•ืžืก ื”ื•ื ื›ืžืขื˜ ื‘ื•ื•ื“ืื•ืช ื‘ืขื™ื‘ื•ื“ ืžื ื•ืช RX, ืœื ื‘ืฉืœื™ื—ืช ืชื’ื•ื‘ื•ืช.

ื–ื” ืžื‘ื˜ืœ ืฉืœื™ื—ืช ืžื ื•ืช ืžืจืฉื™ืžืช ื”ืกื™ื‘ื•ืช ื”ืืคืฉืจื™ื•ืช. ื›ืขืช ืื ื• ื™ื•ื“ืขื™ื ืฉื‘ืขื™ื™ืช ืขื™ื‘ื•ื“ ื”ืžื ื•ืช ื ืžืฆืืช ื‘ืฆื“ ื”ืงื‘ืœื” ื‘ื›ืžื” ืฉืจืชื™ kube-node.

ื”ื‘ื ืช ืขื™ื‘ื•ื“ ืžื ื•ืช ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืžื“ื•ืข ื”ื‘ืขื™ื” ืžืชืจื—ืฉืช ื‘ืžืงืœื˜ ื‘ื›ืžื” ืฉืจืชื™ kube-node, ื”ื‘ื” ื ื‘ื—ืŸ ื›ื™ืฆื“ ืœื™ื‘ืช ืœื™ื ื•ืงืก ืžืขื‘ื“ืช ืžื ื•ืช.

ืื ื ื—ื–ื•ืจ ืœืžื™ืžื•ืฉ ื”ืžืกื•ืจืชื™ ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ, ื›ืจื˜ื™ืก ื”ืจืฉืช ืžืงื‘ืœ ืืช ื”ื—ื‘ื™ืœื” ื•ืฉื•ืœื— ืคืกื™ืงืช ืœื™ื‘ืช ืœื™ื ื•ืงืก ืฉื™ืฉ ื—ื‘ื™ืœื” ืฉืฆืจื™ืš ืœืขื‘ื“. ื”ืงืจื ืœ ืžืคืกื™ืง ืขื‘ื•ื“ื” ืื—ืจืช, ืžื—ืœื™ืฃ ืืช ื”ื”ืงืฉืจ ืœืžื˜ืคืœ ื‘ืคืกื™ืงื•ืช, ืžืขื‘ื“ ืืช ื”ื—ื‘ื™ืœื” ื•ืื– ื—ื•ื–ืจ ืœืžืฉื™ืžื•ืช ื”ื ื•ื›ื—ื™ื•ืช.

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ืžื™ืชื•ื’ ื”ื”ืงืฉืจ ื”ื–ื” ืื™ื˜ื™: ื™ื™ืชื›ืŸ ืฉื”ืฉื”ื™ื™ื” ืœื ื”ื™ื™ืชื” ืžื•ืจื’ืฉืช ื‘ื›ืจื˜ื™ืกื™ ืจืฉืช ืฉืœ 10Mbps ื‘ืฉื ื•ืช ื”-90, ืื‘ืœ ื‘ื›ืจื˜ื™ืกื™ 10G ืžื•ื“ืจื ื™ื™ื ืขื ืชืคื•ืงื” ืžืงืกื™ืžืœื™ืช ืฉืœ 15 ืžื™ืœื™ื•ืŸ ื—ื‘ื™ืœื•ืช ื‘ืฉื ื™ื™ื”, ื›ืœ ืœื™ื‘ื” ืฉืœ ืฉืจืช ืฉืžื•ื ื” ืœื™ื‘ื•ืช ืงื˜ืŸ ื™ื›ื•ืœื” ืœื”ื™ืงื˜ืข ื‘ืžื™ืœื™ื•ื ื™ ืฉืœ ืคืขืžื™ื ื‘ืฉื ื™ื™ื”.

ื›ื“ื™ ืœื ืœื˜ืคืœ ื›ืœ ื”ื–ืžืŸ ื‘ื”ืคืจืขื•ืช, ืœืคื ื™ ืฉื ื™ื ืจื‘ื•ืช ื ื•ืกืคื” ืœื™ื ื•ืงืก NAPI: ืจืฉืช API ืฉื›ืœ ื”ื“ืจื™ื™ื‘ืจื™ื ื”ืžื•ื“ืจื ื™ื™ื ืžืฉืชืžืฉื™ื ื‘ื• ื›ื“ื™ ืœืฉืคืจ ื‘ื™ืฆื•ืขื™ื ื‘ืžื”ื™ืจื•ื™ื•ืช ื’ื‘ื•ื”ื•ืช. ื‘ืžื”ื™ืจื•ื™ื•ืช ื ืžื•ื›ื•ืช ื”ืงืจื ืœ ืขื“ื™ื™ืŸ ืžืงื‘ืœ ืคืกื™ืงื•ืช ืžื›ืจื˜ื™ืก ื”ืจืฉืช ื‘ื“ืจืš ื”ื™ืฉื ื”. ื‘ืจื’ืข ืฉืžื’ื™ืขื•ืช ืžืกืคื™ืง ืžื ื•ืช ื”ื—ื•ืจื’ื•ืช ืžื”ืกืฃ, ื”ืงืจื ืœ ืžืฉื‘ื™ืช ืืช ื”ื”ืคืจืขื•ืช ื•ื‘ืžืงื•ื ื–ืืช ืžืชื—ื™ืœ ืœื‘ืฆืข ืกืงืจ ืœืžืชืื ื”ืจืฉืช ื•ืœืืกื•ืฃ ืžื ื•ืช ื‘ื—ืชื™ื›ื•ืช. ื”ืขื™ื‘ื•ื“ ืžืชื‘ืฆืข ื‘-softirq, ื›ืœื•ืžืจ ื‘ ื”ืงืฉืจ ืฉืœ ื”ืคืจืขื•ืช ื‘ืชื•ื›ื ื” ืœืื—ืจ ืงืจื™ืื•ืช ืžืขืจื›ืช ื•ื”ืคืจืขื•ืช ื‘ื—ื•ืžืจื”, ื›ืืฉืจ ื”ืงืจื ืœ (ื‘ื ื™ื’ื•ื“ ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ) ื›ื‘ืจ ืคื•ืขืœ.

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ื–ื” ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ื™ืจ, ืื‘ืœ ื’ื•ืจื ืœื‘ืขื™ื” ืื—ืจืช. ืื ื™ืฉ ื™ื•ืชืจ ืžื“ื™ ืžื ื•ืช, ืื– ื›ืœ ื”ื–ืžืŸ ืžื•ืงื“ืฉ ืœืขื™ื‘ื•ื“ ืžื ื•ืช ืžื›ืจื˜ื™ืก ื”ืจืฉืช, ื•ืœืชื”ืœื™ื›ื™ ืฉื˜ื— ื”ืžืฉืชืžืฉ ืื™ืŸ ื–ืžืŸ ืœืจื•ืงืŸ ืืช ื”ืชื•ืจื™ื ื”ืืœื” ื‘ืคื•ืขืœ (ืงืจื™ืื” ืžื—ื™ื‘ื•ืจื™ TCP ื•ื›ื•'). ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ืชื•ืจื™ื ืžืชืžืœืื™ื ื•ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœื”ื•ืจื™ื“ ืžื ื•ืช. ื‘ื ื™ืกื™ื•ืŸ ืœืžืฆื•ื ืื™ื–ื•ืŸ, ื”ืงืจื ืœ ืžื’ื“ื™ืจ ืชืงืฆื™ื‘ ืœืžืกืคืจ ื”ืžืจื‘ื™ ืฉืœ ืžื ื•ืช ื”ืžืขื•ื‘ื“ื•ืช ื‘ื”ืงืฉืจ softirq. ืœืื—ืจ ื—ืจื™ื’ื” ืžื”ืชืงืฆื™ื‘ ื”ื–ื”, ืžืชืขื•ืจืจ ืฉืจืฉื•ืจ ื ืคืจื“ ksoftirqd (ืชืจืื” ืื—ื“ ืžื”ื ื‘ ps ืœื›ืœ ืœื™ื‘ื”) ื”ืžื˜ืคืœ ื‘-softirqs ืืœื” ืžื—ื•ืฅ ืœื ืชื™ื‘ ื”-syscall/ื”ืคืกืงื” ื”ืจื’ื™ืœ. ื”ืฉืจืฉื•ืจ ื”ื–ื” ืžืชื•ื–ืžืŸ ื‘ืืžืฆืขื•ืช ืžืชื–ืžืŸ ื”ืชื”ืœื™ืš ื”ืกื˜ื ื“ืจื˜ื™, ืฉืžื ืกื” ืœื”ืงืฆื•ืช ืžืฉืื‘ื™ื ื‘ืฆื•ืจื” ื”ื•ื’ื ืช.

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ืœืื—ืจ ืฉืœืžื“ืช ื›ื™ืฆื“ ื”ืงืจื ืœ ืžืขื‘ื“ ืžื ื•ืช, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉื™ืฉ ืกื‘ื™ืจื•ืช ืžืกื•ื™ืžืช ืœืขื•ืžืก. ืื ืฉื™ื—ื•ืช 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 ื™ื—ื™ื“ ื•ืžืขื•ื‘ื“ื•ืช ืขืœ ื™ื“ื™ ืœื™ื‘ืช ืžืขื‘ื“ ื™ื—ื™ื“ื”. ืื ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ื‘ื™ืŸ ืื™ืš ืœื™ื ื•ืงืก ืขื•ื‘ื“ืช, ื›ื“ืื™ ืœื“ืขืช ื”ื™ื›ืŸ (ืขืœ ืื™ื–ื• ืœื™ื‘ืช ืžืขื‘ื“) ื•ื›ื™ืฆื“ (softirq, ksoftirqd) ืขื™ื‘ื•ื“ ื”ื—ื‘ื™ืœื•ืช ื”ืœืœื• ืขืœ ืžื ืช ืœืขืงื•ื‘ ืื—ืจ ื”ืชื”ืœื™ืš.

ืขื›ืฉื™ื• ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ื ื”ืžืืคืฉืจื™ื ืœืš ืœืคืงื— ืขืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก ื‘ื–ืžืŸ ืืžืช. ื›ืืŸ ื”ืฉืชืžืฉื ื• BCC. ืกื˜ ื›ืœื™ื ื–ื” ืžืืคืฉืจ ืœืš ืœื›ืชื•ื‘ ืชื•ื›ื ื™ื•ืช C ืงื˜ื ื•ืช ื”ืžื—ื‘ืจื™ื ืคื•ื ืงืฆื™ื•ืช ืฉืจื™ืจื•ืชื™ื•ืช ื‘ืงืจื ืœ ื•ืžื—ืฆืฆื•ืช ืืช ื”ืื™ืจื•ืขื™ื ืœืชื•ื›ื ืช Python ื‘ืžืจื—ื‘ ื”ืžืฉืชืžืฉ ืฉื™ื›ื•ืœื” ืœืขื‘ื“ ืื•ืชื ื•ืœื”ื—ื–ื™ืจ ืœืš ืืช ื”ืชื•ืฆืื”. ื—ื™ื‘ื•ืจ ืคื•ื ืงืฆื™ื•ืช ืฉืจื™ืจื•ืชื™ื•ืช ื‘ืงืจื ืœ ื”ื•ื ืขื ื™ื™ืŸ ืžื•ืจื›ื‘, ืื‘ืœ ื”ื›ืœื™ ืžื™ื•ืขื“ ืœืื‘ื˜ื—ื” ืžื™ืจื‘ื™ืช ื•ื ื•ืขื“ ืœืืชืจ ื‘ื“ื™ื•ืง ืืช ืกื•ื’ ื‘ืขื™ื•ืช ื”ื™ื™ืฆื•ืจ ืฉืœื ื ื™ืชืŸ ืœืฉื—ื–ืจ ื‘ืงืœื•ืช ื‘ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื” ืื• ืคื™ืชื•ื—.

ื”ืชื•ื›ื ื™ืช ื›ืืŸ ื”ื™ื ืคืฉื•ื˜ื”: ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉื”ืงืจื ืœ ืžืขื‘ื“ ืืช ื”ืคื™ื ื’ื™ื ื”ืืœื” ืฉืœ ICMP, ืื– ืื ื—ื ื• ื ื—ื‘ืจ ืืช ืคื•ื ืงืฆื™ื™ืช ื”ืงืจื ืœ icmp_echo, ื”ืžืงื‘ืœ ื—ื‘ื™ืœืช ื‘ืงืฉืช ื”ื“ ื ื›ื ืกืช ืฉืœ ICMP ื•ืžืชื—ื™ืœ ืฉืœื™ื—ืช ืชื’ื•ื‘ืช ื”ื“ ืฉืœ ICMP. ื ื•ื›ืœ ืœื–ื”ื•ืช ื—ื‘ื™ืœื” ืขืœ ื™ื“ื™ ื”ื’ื“ืœืช ื”ืžืกืคืจ icmp_seq, ืฉืžื•ืคื™ืข hping3 ื’ื‘ื•ื” ื™ื•ืชืจ.

ืงื•ื“ ืกืงืจื™ืคื˜ ืžื•ืกืชืจ ื ืจืื” ืžืกื•ื‘ืš, ืื‘ืœ ื–ื” ืœื ืžืคื—ื™ื“ ื›ืžื• ืฉื–ื” ื ืจืื”. ืคื•ึผื ืงืฆึดื™ึธื” icmp_echo ืžืฉื“ืจ struct sk_buff *skb: ื–ื•ื”ื™ ื—ื‘ื™ืœื” ืขื "ื‘ืงืฉืช ื”ื“". ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืงื•ื‘ ืื—ืจื™ ื–ื”, ืœื”ื•ืฆื™ื ืืช ื”ืจืฆืฃ echo.sequence (ืžื” ืฉืžืฉื•ื•ื•ื” ืขื icmp_seq ืขืœ ื™ื“ื™ hping3 ะฒั‹ัˆะต), ื•ืฉืœื— ืื•ืชื• ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ. ื–ื” ื’ื ื ื•ื— ืœืœื›ื•ื“ ืืช ืฉื ื”ืชื”ืœื™ืš ื”ื ื•ื›ื—ื™/ืžื–ื”ื”. ืœื”ืœืŸ ื”ืชื•ืฆืื•ืช ืฉืื ื• ืจื•ืื™ื ื™ืฉื™ืจื•ืช ื‘ื–ืžืŸ ืฉื”ืงืจื ืœ ืžืขื‘ื“ ืžื ื•ืช:

TGID PID PROCESS NAME 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 swapper 0 11 776 0 0 ื”ื—ืœืคื”/11 777 0 0 ื“ื•ื—ื•ืช ื—ื™ืฉื•ืจื™ื 11

ื™ืฉ ืœืฆื™ื™ืŸ ื›ืืŸ ื›ื™ ื‘ื”ืงืฉืจ softirq ืชื”ืœื™ื›ื™ื ืฉื‘ื™ืฆืขื• ืงืจื™ืื•ืช ืœืžืขืจื›ืช ื™ื•ืคื™ืขื• ื›"ืชื”ืœื™ื›ื™ื" ื›ืืฉืจ ืœืžืขืฉื” ื–ื” ื”ืงืจื ืœ ืฉืžืขื‘ื“ ื‘ื‘ื˜ื—ื” ืžื ื•ืช ื‘ื”ืงืฉืจ ืฉืœ ื”ืงืจื ืœ.

ืขื ื”ื›ืœื™ ื”ื–ื” ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืฉื™ื™ืš ืชื”ืœื™ื›ื™ื ืกืคืฆื™ืคื™ื™ื ืœื—ื‘ื™ืœื•ืช ืกืคืฆื™ืคื™ื•ืช ืฉืžืจืื•ืช ืขื™ื›ื•ื‘ ืฉืœ hping3. ื‘ื•ืื• ื ืขืฉื” ืืช ื–ื” ืคืฉื•ื˜ grep ืขืœ ืœื›ื™ื“ื” ื–ื• ืขื‘ื•ืจ ืขืจื›ื™ื ืžืกื•ื™ืžื™ื icmp_seq. ืžื ื•ืช ื”ืชื•ืืžื•ืช ืœืขืจื›ื™ icmp_seq ืฉืœืขื™ืœ ืฆื•ื™ื ื• ื™ื—ื“ ืขื ื”-RTT ืฉืœื”ื ืฉืฆืคื™ื ื• ืœืžืขืœื” (ื‘ืกื•ื’ืจื™ื™ื ื”ื ืขืจื›ื™ ื”-RTT ื”ืฆืคื•ื™ื™ื ืœื—ื‘ื™ืœื•ืช ืฉืกื•ื ื ื• ืขืงื‘ ืขืจื›ื™ RTT ืฉืœ ืคื—ื•ืช ืž-50 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”):

TGID PID PROCESS NAME ICMP_SEQ ** RTT -- 10137 10436 cadvisor 1951 10137 10436 cadvisor 1952 76 76 ksoftirqd/11 1953 ** 99ms 76 76 ksoftir 11 1954 ksoftirq 89d d/76 76 ** 11ms 1955 79 ksoftirqd/ 76 76 ** 11ms 1956 69 ksoftirqd/76 76 ** 11ms 1957 59 ksoftirqd/76 76 ** (11ms) 1958 49 ksoftirqd/76 76 ** (11ms) 1959 39d softir 76 76d ืจืš irqd/ 11 1960 ** (29ms) 76 76 ksoftirqd/11 1961 ** (19ms) -- 76 76 cadvisor 11 1962 9 cadvisor 10137 10436 2068 ksoftirq 10137 ksoftirq 10436k /2069 76 ** 76ms 11 2070 ksoftirqd/ 75 76 ** 76ms 11 2071 ksoftirqd/65 76 ** (76ms) 11 2072 ksoftirqd/55 76 ** (76ms) 11 2073 ksoftirqd/45 76 ** (76ms) ** (11qms) ) 2074 35 ksoftirqd/76 76 ** (11ms)

ื”ืชื•ืฆืื•ืช ืžืกืคืจื•ืช ืœื ื• ื›ืžื” ื“ื‘ืจื™ื. ืจืืฉื™ืช, ื›ืœ ื”ื—ื‘ื™ืœื•ืช ื”ืœืœื• ืžืขื•ื‘ื“ื•ืช ืขืœ ื™ื“ื™ ื”ื”ืงืฉืจ ksoftirqd/11. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉืขื‘ื•ืจ ืฆืžื“ ื”ืžื›ื•ื ื•ืช ื”ืžืกื•ื™ื ื”ื–ื”, ืžื ื•ืช ICMP ื”ื•ืขื‘ืจื• ืœื’ื™ื‘ื•ื‘ ืœืœื™ื‘ื” 11 ื‘ืงืฆื” ื”ืžืงื‘ืœ. ืื ื• ืจื•ืื™ื ื’ื ืฉื‘ื›ืœ ืคืขื ืฉื™ืฉ ื’'ืื, ื™ืฉ ืžื ื•ืช ืฉืžืขื•ื‘ื“ื•ืช ื‘ื”ืงืฉืจ ืฉืœ ืงืจื™ืืช ื”ืžืขืจื›ืช cadvisor. ื•ืื– ksoftirqd ืžืฉืชืœื˜ ืขืœ ื”ืžืฉื™ืžื” ื•ืžืขื‘ื“ ืืช ื”ืชื•ืจ ื”ืžืฆื˜ื‘ืจ: ื‘ื“ื™ื•ืง ืžืกืคืจ ื”ื—ื‘ื™ืœื•ืช ืฉื”ืฆื˜ื‘ืจ ืœืื—ืจ ืžื›ืŸ cadvisor.

ื”ืขื•ื‘ื“ื” ืฉืžื™ื“ ืœืคื ื™ ื–ื” ืชืžื™ื“ ืขื•ื‘ื“ cadvisor, ืžืจืžื– ืขืœ ืžืขื•ืจื‘ื•ืชื• ื‘ื‘ืขื™ื”. ื‘ืื•ืคืŸ ืื™ืจื•ื ื™, ื”ืžื˜ืจื” cadvisor - "ื ืชื— ืืช ืžืืคื™ื™ื ื™ ื”ืฉื™ืžื•ืฉ ื‘ืžืฉืื‘ื™ื ื•ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžื™ื›ืœื™ื ื”ืคื•ืขืœื™ื" ื‘ืžืงื•ื ืœื’ืจื•ื ืœื‘ืขื™ื™ืช ื‘ื™ืฆื•ืขื™ื ื–ื•.

ื›ืžื• ื‘ื”ื™ื‘ื˜ื™ื ืื—ืจื™ื ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื, ื›ืœ ืืœื” ื”ื ื›ืœื™ื ืžืชืงื“ืžื™ื ื‘ื™ื•ืชืจ ื•ื ื™ืชืŸ ืœืฆืคื•ืช ืฉื™ื™ืชืงืœื• ื‘ื‘ืขื™ื•ืช ื‘ื™ืฆื•ืขื™ื ื‘ื ืกื™ื‘ื•ืช ื‘ืœืชื™ ืฆืคื•ื™ื•ืช.

ืžื” ืขื•ืฉื” cadvisor ืฉืžืื˜ ืืช ืชื•ืจ ื”ื—ื‘ื™ืœื•ืช?

ื›ืขืช ื™ืฉ ืœื ื• ื”ื‘ื ื” ื˜ื•ื‘ื” ืœืžื“ื™ ื›ื™ืฆื“ ื”ืงืจื™ืกื” ืžืชืจื—ืฉืช, ืื™ื–ื” ืชื”ืœื™ืš ื’ื•ืจื ืœื”, ื•ืขืœ ืื™ื–ื” ืžืขื‘ื“. ืื ื• ืจื•ืื™ื ืฉื‘ืฉืœ ื—ืกื™ืžื” ืงืฉื”, ืœืงืจื ืœ ื”ืœื™ื ื•ืงืก ืื™ืŸ ื–ืžืŸ ืœืชื–ืžืŸ ksoftirqd. ื•ืื ื—ื ื• ืจื•ืื™ื ืฉืžื ื•ืช ืžืขื•ื‘ื“ื•ืช ื‘ื”ืงืฉืจ cadvisor. ื–ื” ื”ื’ื™ื•ื ื™ ืœื”ื ื™ื— ืืช ื–ื” cadvisor ืžืคืขื™ืœ ืžืขืจื›ืช ื”ืคืขืœื” ืื™ื˜ื™ืช, ืฉืœืื—ืจื™ื” ื›ืœ ื”ื—ื‘ื™ืœื•ืช ืฉื ืฆื‘ืจื• ื‘ืื•ืชื• ื–ืžืŸ ืžืขื•ื‘ื“ื•ืช:

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ื–ื• ืชื™ืื•ืจื™ื”, ืื‘ืœ ืื™ืš ืœื‘ื“ื•ืง ืื•ืชื”? ืžื” ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ื–ื” ืœืขืงื•ื‘ ืื—ืจ ืœื™ื‘ืช ื”-CPU ืœืื•ืจืš ื”ืชื”ืœื™ืš ื”ื–ื”, ืœืžืฆื•ื ืืช ื”ื ืงื•ื“ื” ืฉื‘ื” ืžืกืคืจ ื”ื—ื‘ื™ืœื•ืช ืขื•ื‘ืจ ืืช ื”ืชืงืฆื™ื‘ ื•ื ืงืจื ksoftirqd, ื•ืื– ืœื”ืกืชื›ืœ ืงืฆืช ื™ื•ืชืจ ืื—ื•ืจื” ื›ื“ื™ ืœืจืื•ืช ืžื” ื‘ื“ื™ื•ืง ืจืฅ ื‘ืœื™ื‘ืช ื”-CPU ืžืžืฉ ืœืคื ื™ ื”ื ืงื•ื“ื” ื”ื–ื•. . ื–ื” ื›ืžื• ืฆื™ืœื•ื ืจื ื˜ื’ืŸ ืฉืœ ื”ืžืขื‘ื“ ื›ืœ ื›ืžื” ืืœืคื™ื•ืช ืฉื ื™ื•ืช. ื–ื” ื™ื™ืจืื” ื‘ืขืจืš ื›ืš:

ืื™ืชื•ืจ ื‘ืื’ื™ื ืฉืœ ื—ื‘ื™ื•ืŸ ืจืฉืช ื‘-Kubernetes

ื‘ื ื•ื—ื•ืช, ื›ืœ ื–ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ืขื ื›ืœื™ื ืงื™ื™ืžื™ื. ืœื“ื•ื’ืžื”, ืฉื™ื ืžื•ืฉืœื ื‘ื•ื“ืง ืœื™ื‘ืช CPU ื ืชื•ื ื” ื‘ืชื“ื™ืจื•ืช ืžื•ื’ื“ืจืช ื•ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืœื•ื— ื–ืžื ื™ื ืฉืœ ืฉื™ื—ื•ืช ืœืžืขืจื›ืช ื”ืคื•ืขืœืช, ื›ื•ืœืœ ืฉื˜ื— ืžืฉืชืžืฉ ื•ื’ื ืœื™ื‘ืช ืœื™ื ื•ืงืก. ืืชื” ื™ื›ื•ืœ ืœืงื—ืช ืืช ื”ืจืฉื•ืžื” ื”ื–ื• ื•ืœืขื‘ื“ ืื•ืชื” ื‘ืืžืฆืขื•ืช ืžื–ืœื’ ืงื˜ืŸ ืฉืœ ื”ืชื•ื›ื ื™ืช FlameGraph ืž-Brendan Gregg, ื”ืžืฉืžืจ ืืช ืกื“ืจ ืขืงื‘ื•ืช ื”ืขืจื™ืžื”. ืื ื• ื™ื›ื•ืœื™ื ืœืฉืžื•ืจ ืขืงื‘ื•ืช ืžื—ืกื ื™ืช ื‘ืฉื•ืจื” ืื—ืช ื›ืœ 1 ms, ื•ืœืื—ืจ ืžื›ืŸ ืœื”ื“ื’ื™ืฉ ื•ืœืฉืžื•ืจ ื“ื’ื™ืžื” 100 ืืœืคื™ื•ืช ืฉื ื™ื•ืช ืœืคื ื™ ืฉื”ืขืงื™ื‘ื” ืคื•ื’ืขืช 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

ื™ืฉ ื›ืืŸ ื”ืจื‘ื” ื“ื‘ืจื™ื, ืื‘ืœ ื”ืขื™ืงืจ ืฉื ืžืฆื ืืช ื“ืคื•ืก "cadvisor before ksoftirqd" ืฉืจืื™ื ื• ืงื•ื“ื ืœื›ืŸ ื‘-ICMP tracer. ืžื” ื–ื” ืื•ืžืจ?

ื›ืœ ืฉื•ืจื” ื”ื™ื ืขืงื‘ื•ืช CPU ื‘ื ืงื•ื“ืช ื–ืžืŸ ืžืกื•ื™ืžืช. ื›ืœ ืงืจื™ืื” ื‘ืžื•ืจื“ ื”ืขืจื™ืžื” ื‘ืงื• ืžื•ืคืจื“ืช ื‘ืืžืฆืขื•ืช ื ืงื•ื“ื”-ืคืกื™ืง. ื‘ืืžืฆืข ื”ืฉื•ืจื•ืช ืื ื• ืจื•ืื™ื ืืช ื”-syscall ืฉื ืงืจืืช: read(): .... ;do_syscall_64;sys_read; .... ืื– cadvisor ืžื‘ืœื” ื”ืจื‘ื” ื–ืžืŸ ื‘ืฉื™ื—ืช ื”ืžืขืจื›ืช read()ื”ืงืฉื•ืจื™ื ืœืคื•ื ืงืฆื™ื•ืช mem_cgroup_* (ื”ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ืขืจื™ืžืช ื”ืฉื™ื—ื•ืช/ืกื•ืฃ ืงื•).

ื–ื” ืœื ื ื•ื— ืœืจืื•ืช ื‘ืžืขืงื‘ ืฉื™ื—ื” ืžื” ื‘ื“ื™ื•ืง ื ืงืจื, ืื– ื‘ื•ื ื ืจื•ืฅ strace ื•ื‘ื•ืื• ื ืจืื” ืžื” Cadvisor ืขื•ืฉื” ื•ื ืžืฆื ืฉื™ื—ื•ืช ืžืขืจื›ืช ืืจื•ื›ื•ืช ืž-100 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”:

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 ืฉื•ืืœ ืืช ื”ืงื•ื‘ืฅ ื”ื–ื” ื›ื“ื™ ืœืงื‘ืœ ืžื™ื“ืข ืขืœ ืฉื™ืžื•ืฉ ื‘ืžืฉืื‘ื™ื ืขื‘ื•ืจ ืงื•ื ื˜ื™ื™ื ืจื™ื. ื‘ื•ื ื ื‘ื“ื•ืง ืื ื–ื” ื”ืงืจื ืœ ืื• ื”-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 ~ $

ื›ืขืช ืื ื• ื™ื›ื•ืœื™ื ืœืฉื—ื–ืจ ืืช ื”ื‘ืื’ ื•ืœื”ื‘ื™ืŸ ื›ื™ ืœื™ื‘ืช ืœื™ื ื•ืงืก ืขื•ืžื“ืช ื‘ืคื ื™ ืคืชื•ืœื•ื’ื™ื”.

ืžื“ื•ืข ืคืขื•ืœืช ื”ืงืจื™ืื” ื›ืœ ื›ืš ืื™ื˜ื™ืช?

ื‘ืฉืœื‘ ื–ื”, ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœืžืฆื•ื ื”ื•ื“ืขื•ืช ืžืžืฉืชืžืฉื™ื ืื—ืจื™ื ืขืœ ื‘ืขื™ื•ืช ื“ื•ืžื•ืช. ื›ืคื™ ืฉื”ืชื‘ืจืจ, ื‘-cadvisor tracker ื“ื•ื•ื— ืขืœ ื”ื‘ืื’ ื”ื–ื” ื‘ืขื™ื” ืฉืœ ืฉื™ืžื•ืฉ ืžื•ื’ื–ื ื‘ืžืขื‘ื“, ืจืง ืฉืืฃ ืื—ื“ ืœื ืฉื ืœื‘ ืฉื”ืฉื”ื™ื™ื” ืžืฉืชืงืคืช ื‘ืื•ืคืŸ ืืงืจืื™ ื‘ืขืจื™ืžืช ื”ืจืฉืช. ืื›ืŸ ื”ื‘ื—ื™ื ื• ืฉ-cadvisor ืฆื•ืจื›ืช ื™ื•ืชืจ ื–ืžืŸ ืžืขื‘ื“ ืžื”ืฆืคื•ื™, ืื‘ืœ ื–ื” ืœื ืงื™ื‘ืœ ื—ืฉื™ื‘ื•ืช ืจื‘ื”, ืžื›ื™ื•ื•ืŸ ืฉืœืฉืจืชื™ื ืฉืœื ื• ื™ืฉ ื”ืจื‘ื” ืžืฉืื‘ื™ ืžืขื‘ื“, ื›ืš ืฉื”ื‘ืขื™ื” ืœื ื ื—ืงืจื” ื‘ืงืคื™ื“ื”.

ื”ื‘ืขื™ื” ื”ื™ื ืฉ-cgroups ืœื•ืงื—ื•ืช ื‘ื—ืฉื‘ื•ืŸ ืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ ื‘ืชื•ืš ืžืจื—ื‘ ื”ืฉืžื•ืช (ืžื™ื›ืœ). ื›ืืฉืจ ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘-cgroup ื–ื• ื™ื•ืฆืื™ื, Docker ืžืฉื—ืจืจ ืืช ื”-cgroup ืฉืœ ื”ื–ื™ื›ืจื•ืŸ. ืขื ื–ืืช, "ื–ื™ื›ืจื•ืŸ" ืื™ื ื• ืจืง ื–ื™ื›ืจื•ืŸ ืชื”ืœื™ืš. ืœืžืจื•ืช ืฉื–ื™ื›ืจื•ืŸ ื”ืชื”ืœื™ืš ืขืฆืžื• ื›ื‘ืจ ืœื ื‘ืฉื™ืžื•ืฉ, ื ืจืื” ืฉื”ืงืจื ืœ ืขื“ื™ื™ืŸ ืžืงืฆื” ืชื•ื›ืŸ ืฉืžื•ืจ, ื›ื’ื•ืŸ ื“ื ื˜ืจื™ื•ืช ื•ืื™ื ื•ื“ื™ื (ืžื˜ื-ื ืชื•ื ื™ื ืฉืœ ืกืคืจื™ื•ืช ื•ืงื‘ืฆื™ื), ืฉื ืฉืžืจื™ื ื‘ืžื˜ืžื•ืŸ ื‘-cgroup ืฉืœ ื”ื–ื™ื›ืจื•ืŸ. ืžืชื•ืš ืชื™ืื•ืจ ื”ื‘ืขื™ื”:

zombie cgroups: cgroups ืฉืื™ืŸ ืœื”ื ืชื”ืœื™ื›ื™ื ื•ื ืžื—ืงื•, ืื‘ืœ ืขื“ื™ื™ืŸ ืžื•ืงืฆื” ืœื”ื ื–ื™ื›ืจื•ืŸ (ื‘ืžืงืจื” ืฉืœื™, ืžืžื˜ืžื•ืŸ dentry, ืื‘ืœ ืืคืฉืจ ืœื”ืงืฆื•ืช ืื•ืชื• ื’ื ืžืžื˜ืžื•ืŸ ื”ืขืžื•ื“ ืื• tmpfs).

ื”ื‘ื“ื™ืงื” ืฉืœ ื”ืœื™ื‘ื” ืฉืœ ื›ืœ ื”ื“ืคื™ื ื‘ืžื˜ืžื•ืŸ ื‘ืขืช โ€‹โ€‹ืฉื—ืจื•ืจ cgroup ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžืื•ื“ ืื™ื˜ื™ืช, ื•ืœื›ืŸ ื”ืชื”ืœื™ืš ื”ืขืฆืœ ื ื‘ื—ืจ: ื”ืžืชืŸ ืขื“ ืฉื”ื“ืคื™ื ื”ืœืœื• ื™ืชื‘ืงืฉื• ืฉื•ื‘, ื•ืœืื—ืจ ืžื›ืŸ ื ืงื” ืœื‘ืกื•ืฃ ืืช cgroup ื›ืฉื™ืฉ ืฆื•ืจืš ื‘ื–ื™ื›ืจื•ืŸ ื‘ืคื•ืขืœ. ืขื“ ืœื ืงื•ื“ื” ื–ื•, cgroup ืขื“ื™ื™ืŸ ื ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ื‘ืขืช โ€‹โ€‹ืื™ืกื•ืฃ ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื.

ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ ื‘ื™ืฆื•ืขื™ื, ื”ื ื”ืงืจื™ื‘ื• ื–ื™ื›ืจื•ืŸ ืขื‘ื•ืจ ื‘ื™ืฆื•ืขื™ื: ื”ืืฆืช ื”ื ื™ืงื•ื™ ื”ืจืืฉื•ื ื™ ืขืœ ื™ื“ื™ ื”ืฉืืจืช ื–ื™ื›ืจื•ืŸ ืฉืžื•ืจ ืžืื—ื•ืจ. ื–ื” ื‘ืกื“ืจ. ื›ืืฉืจ ื”ืœื™ื‘ื” ืžืฉืชืžืฉืช ื‘ื–ื™ื›ืจื•ืŸ ื”ืื—ืจื•ืŸ ื‘ื–ื™ื›ืจื•ืŸ ื”ืžื˜ืžื•ืŸ, ื”-cgroup ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืžื ื•ืงื”, ื›ืš ืฉืœื ื ื™ืชืŸ ืœืงืจื•ื ืœื” "ื“ืœื™ืคื”". ืœืžืจื‘ื” ื”ืฆืขืจ, ื”ื™ื™ืฉื•ื ื”ืกืคืฆื™ืคื™ ืฉืœ ืžื ื’ื ื•ืŸ ื”ื—ื™ืคื•ืฉ memory.stat ื‘ื’ืจืกืช ื”ืœื™ื‘ื” ื”ื–ื• (4.9), ื‘ืฉื™ืœื•ื‘ ืขื ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ืขืฆื•ืžื” ื‘ืฉืจืชื™ื ืฉืœื ื•, ืคื™ืจื•ืฉ ื”ื“ื‘ืจ ืฉืœื•ืงื— ื”ืจื‘ื” ื™ื•ืชืจ ื–ืžืŸ ืœืฉื—ื–ืจ ืืช ื”ื ืชื•ื ื™ื ื”ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ ื‘ืžื˜ืžื•ืŸ ื•ืœื ืงื•ืช ื–ื•ืžื‘ื™ื ืžืกื•ื’ cgroup.

ืžืกืชื‘ืจ ืฉื‘ื—ืœืง ืžื”ืฆืžืชื™ื ืฉืœื ื• ื”ื™ื• ื›ืœ ื›ืš ื”ืจื‘ื” ื–ื•ืžื‘ื™ื ืฉืœ cgroup ืฉื”ืงืจื™ืื” ื•ื”ืฉื”ื™ื™ื” ืขืœื• ืขืœ ืฉื ื™ื”.

ื”ื“ืจืš ืœืขืงื™ืคืช ื”ื‘ืขื™ื” ืฉืœ ื”-cadvisor ื”ื™ื ืฉื—ืจื•ืจ ืžื™ื™ื“ื™ ืฉืœ ืžื˜ืžื•ื ื™ ืฉื™ื ื™ื™ื/ืื™ื•ื“ื•ืช ื‘ื›ืœ ื”ืžืขืจื›ืช, ืžื” ืฉืžื‘ื˜ืœ ืžื™ื™ื“ื™ืช ืืช ื–ืžืŸ ื”ืงืจื™ืื” ื•ื›ืŸ ืืช ื–ืžืŸ ื”ืฉื”ื™ื™ืช ื”ืจืฉืช ื‘ืžืืจื—, ืžื›ื™ื•ื•ืŸ ืฉื ื™ืงื•ื™ ื”ืžื˜ืžื•ืŸ ืžืคืขื™ืœ ืืช ื“ืคื™ cgroup ื”ื–ื•ืžื‘ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืžื˜ืžื•ืŸ ื•ืžืฉื—ืจืจ ื’ื ืื•ืชื. ื–ื” ืœื ืคืชืจื•ืŸ, ืื‘ืœ ื”ื•ื ืžืืฉืจ ืืช ื”ืกื™ื‘ื” ืœื‘ืขื™ื”.

ื”ืชื‘ืจืจ ืฉื‘ื’ืจืกืื•ืช ืœื™ื‘ื” ื—ื“ืฉื•ืช ื™ื•ืชืจ (4.19+) ื‘ื™ืฆื•ืขื™ ื”ืฉื™ื—ื•ืช ืฉื•ืคืจื• memory.stat, ืื– ื”ืžืขื‘ืจ ืœืงืจื ืœ ื”ื–ื” ืคืชืจ ืืช ื”ื‘ืขื™ื”. ื‘ืžืงื‘ื™ืœ, ื”ื™ื• ืœื ื• ื›ืœื™ื ืœื–ื”ื•ืช ืฆืžืชื™ื ื‘ืขื™ื™ืชื™ื™ื ื‘ืืฉื›ื•ืœื•ืช Kubernetes, ืœืจื•ืงืŸ ืื•ืชื ื‘ื—ืŸ ื•ืœืืชื—ืœ ืื•ืชื. ืกื™ืจืงื ื• ืืช ื›ืœ ื”ืืฉื›ื•ืœื•ืช, ืžืฆืื ื• ืฆืžืชื™ื ืขื ื—ื‘ื™ื•ืŸ ื’ื‘ื•ื” ืžืกืคื™ืง ื•ื”ืคืขืœื ื• ืื•ืชื ืžื—ื“ืฉ. ื–ื” ื ืชืŸ ืœื ื• ื–ืžืŸ ืœืขื“ื›ืŸ ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ื‘ืฉืจืชื™ื ื”ื ื•ืชืจื™ื.

ื”ืกืชื›ืžื•ืช

ืžื›ื™ื•ื•ืŸ ืฉื”ื‘ืื’ ื”ื–ื” ืขืฆืจ ืืช ืขื™ื‘ื•ื“ ืชื•ืจ RX NIC ื‘ืžืฉืš ืžืื•ืช ืืœืคื™ื•ืช ืฉื ื™ื•ืช, ื”ื•ื ื’ืจื ื‘ื• ื–ืžื ื™ืช ื”ืŸ ืœืื—ื‘ื™ื•ืŸ ื’ื‘ื•ื” ื‘ื—ื™ื‘ื•ืจื™ื ืงืฆืจื™ื ื•ื”ืŸ ืœืื—ื‘ื™ื•ืŸ ื‘ืืžืฆืข ื”ื—ื™ื‘ื•ืจ, ื›ืžื• ื‘ื™ืŸ ื‘ืงืฉื•ืช MySQL ื•ืžื ื•ืช ืชื’ื•ื‘ื”.

ื”ื‘ื ื” ื•ืฉืžื™ืจื” ืขืœ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืžืขืจื›ื•ืช ื”ื‘ืกื™ืกื™ื•ืช ื‘ื™ื•ืชืจ, ื›ื’ื•ืŸ Kubernetes, ื”ื™ื ืงืจื™ื˜ื™ืช ืœืืžื™ื ื•ืช ื•ืœืžื”ื™ืจื•ืช ืฉืœ ื›ืœ ื”ืฉื™ืจื•ืชื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœื™ื”ืŸ. ื›ืœ ืžืขืจื›ืช ืฉืืชื” ืžืคืขื™ืœ ื ื”ื ื™ืช ืžืฉื™ืคื•ืจื™ ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ Kubernetes.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”