เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบชเบญเบ‡เบชเบฒเบกเบ›เบตเบเปˆเบญเบ™ Kubernetes เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบฅเป‰เบง เปƒเบ™ blog GitHub เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ™เบฑเป‰เบ™เบกเบฒ, เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™. เบ”เบฝเบงเบ™เบตเป‰ Kubernetes เบˆเบฑเบ”เบเบฒเบ™เบชเปˆเบงเบ™เบชเบณเบ„เบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบžเบฒเบเปƒเบ™ เปเบฅเบฐเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เป€เบกเบทเปˆเบญเบเบธเปˆเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ•เบตเบšเปƒเบซเบเปˆเบ‚เบถเป‰เบ™ เปเบฅเบฐเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เป‰เบฒเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป„เบ”เป‰เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบ‚เบถเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบšเบฒเบ‡เบšเปเบฅเบดเบเบฒเบ™เปƒเบ™ Kubernetes เบ›เบฐเบชเบปเบšเบเบฑเบšเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบญเบ‡.

เป‚เบ”เบเบซเบฅเบฑเบเบเบฒเบ™เปเบฅเป‰เบง, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™ latency เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบšเบšเบชเบธเปˆเบกเป€เบ–เบดเบ‡ 100ms เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบเปเปˆเปƒเบซเป‰เป€เบเบตเบ”เบเบฒเบ™เปเบปเบ”เป€เบงเบฅเบฒ เบซเบผเบทเบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเปƒเปเปˆ. เบšเปเบฅเบดเบเบฒเบ™เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบชเบฒเบกเบฒเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ”เป‰เป„เบงเบเบงเปˆเบฒ 100ms. เปเบ•เปˆเบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ–เป‰เบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบ. เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก MySQL เบ—เบตเปˆเป„เบงเบซเบผเบฒเบเบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒ milliseconds, เปเบฅเบฐ MySQL เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™ milliseconds, เปเบ•เปˆเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒ 100ms เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™.

เบกเบฑเบ™เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš node Kubernetes, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เป‚เบ—เบกเบฒเบˆเบฒเบเบ™เบญเบ Kubernetes. เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเปเบœเปˆเบžเบฑเบ™เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš เบœเบฑเบเบชเบฐเบซเบฅเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบˆเบฒเบเปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบเปƒเบ™เปƒเบ”เป†, เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ Kubernetes เปƒเบ™เบžเบญเบ”เบชเบฐเป€เบžเบฒเบฐ, เปเบฅเบฐเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป€เบ›เบฑเบ™เป„เบฅเบเบฐเป† latency เบชเบนเบ‡. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบกเบชเบฒเป€เบซเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ™เบตเป‰.

เบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบง

เป‚เบ”เบเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบˆเบธเบ”เบชเบธเบกเบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเปเบ„เบšเบฅเบปเบ‡เปเบฅเบฐเป€เบญเบปเบฒเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบญเบญเบ. เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เบเบฒเบ™เป„เบซเบผเบฅเบฐเบซเบงเปˆเบฒเบ‡ Vegeta เปเบฅเบฐเบเบฑเบ Kubernetes. เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบšเบฑเบ™เบซเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ›เบฐเบ•เบดเป€เบชเบ”เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™.

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบฅเบนเบเบ„เป‰เบฒ (Vegeta) เบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP เบเบฑเบš node เปƒเบ”เปƒเบ™ cluster. Kubernetes เป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบŠเป‰เบญเบ™เบเบฑเบ™ (เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง) เบ—เบตเปˆเปƒเบŠเป‰ IPIP, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™เบซเบธเป‰เบกเบซเปเปˆเบŠเบธเบ” IP เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบŠเป‰เบญเบ™เบเบฑเบ™เบžเบฒเบเปƒเบ™เบŠเบธเบ” IP เบ‚เบญเบ‡เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™. เป€เบกเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš node เบ—เปเบฒเบญเบดเบ”, เบเบฒเบ™เปเบ›เบžเบฒเบชเบฒเบ—เบตเปˆเบขเบนเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ เบเบฒเบ™เปเบ›เบ—เบตเปˆเบขเบนเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบ (NAT) stateful เป€เบžเบทเปˆเบญเปเบ›เบ—เบตเปˆเบขเบนเปˆ IP เปเบฅเบฐเบžเบญเบ”เบ‚เบญเบ‡ node Kubernetes เป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆ IP เปเบฅเบฐเบžเบญเบ”เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ overlay (เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, pod เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ). เบชเปเบฒเบฅเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ, เบฅเปเบฒเบ”เบฑเบšเบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบกเบฑเบ™เป€เบ›เบฑเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบŠเบฑเบšเบŠเป‰เบญเบ™เบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบฅเบฑเบ”เปเบฅเบฐเบซเบผเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบ›เบฑเบšเบ›เบธเบ‡เปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบเป‰เบญเบ™เบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบเป‰เบฒเบเบญเบญเบ.

เบ›เบฐเป‚เบซเบเบ” tcpdump เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Vegeta เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบเบŠเป‰เบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบˆเบฑเบšเบกเบท TCP (เบฅเบฐเบซเบงเปˆเบฒเบ‡ SYN เปเบฅเบฐ SYN-ACK). เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ hping3 เบชเปเบฒเบฅเบฑเบš "pings" เบ‡เปˆเบฒเบเป†เบเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ” SYN. เบžเบงเบเป€เบฎเบปเบฒเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบŠเบฑเบเบŠเป‰เบฒเปƒเบ™เบŠเบธเบ”เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบซเบกเปˆ. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฝเบ‡เปเบ•เปˆเบฅเบงเบกเป€เบญเบปเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบเบงเปˆเบฒ 100ms เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบšเบฑเบ™เบซเบฒเปƒเบซเบกเปˆเบเบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบŠเบฑเป‰เบ™ 7 เป€เบ•เบฑเบกเปƒเบ™ Vegeta. เบ™เบตเป‰เปเบกเปˆเบ™ node Kubernetes "pings" เป‚เบ”เบเปƒเบŠเป‰ TCP SYN / SYN-ACK เปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ "node port" (30927) เปƒเบ™เป„เบฅเบเบฐ 10ms, เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เป‚เบ”เบเบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบŠเป‰เบฒเบ—เบตเปˆเบชเบธเบ”:

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 tunneling เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ? เบงเบดเบ—เบตเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ—เบปเบ”เบชเบญเบšเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบ•เปˆเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป‚เบ”เบเบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบกเบฑเบ™. เบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเป€เบซเบ”เบœเบปเบ™ NAT เปเบฅเบฐเป„เบŸเบงเป, เบ›เปˆเบญเบเปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™ IPIP:

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เป‚เบŠเบเบ”เบต, 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? เบ‚เปโ€‹เปƒเบซเป‰โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบ‡เปˆเบฒเบโ€‹เบ‚เบถเป‰เบ™โ€‹เบ•เบทเปˆเบกโ€‹เบญเบตเบโ€‹:

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ 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 ping. เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เป€เบซเบฑเบ™ 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 เปเบซเบผเปˆเบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเป„เบ›เบซเบฒเป‚เบฎเบ”เบžเบฒเบเบ™เบญเบ (เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบฅเบงเบกเป‚เบฎเบ”เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ 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

เป‚เบ”เบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบˆเบฑเบšเป€เบงเบฅเบฒเปเบžเบฑเบเป€เบเบฑเบ”เปเบžเบฑเบเป€เบเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบšเบฒเบ‡เบขเปˆเบฒเบ‡. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบœเบนเป‰เบชเบปเปˆเบ‡ (เบฅเบธเปˆเบก) เป€เบซเบฑเบ™เป€เบงเบฅเบฒเบซเบกเบปเบ”เป€เบงเบฅเบฒเบ™เบตเป‰, เปเบ•เปˆเบœเบนเป‰เบฎเบฑเบš (เป€เบ—เบดเบ‡) เบšเปเปˆเป„เบ”เป‰ - เป€เบšเบดเปˆเบ‡เบ–เบฑเบ™ Delta (เปƒเบ™เบงเบดเบ™เบฒเบ—เบต):

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบŠเบธเบ” TCP เปเบฅเบฐ ICMP (เป‚เบ”เบเบ•เบปเบงเป€เบฅเบเบฅเปเบฒเบ”เบฑเบš) เปƒเบ™เบ”เป‰เบฒเบ™เบœเบนเป‰เบฎเบฑเบš, เปเบžเบฑเบเป€เบเบฑเบ” ICMP เบชเบฐเป€เบซเบกเบตเบกเบฒเบฎเบญเบ”เปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›, เปเบ•เปˆเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เปเบžเบฑเบเป€เบเบฑเบ” TCP เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เปเบŠเบเปเบŠเบ‡, เปเบฅเบฐเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เบ–เบทเบเบ•เบดเบ”. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเบงเบ”เป€เบšเบดเปˆเบ‡เบžเบญเบ”เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ” SYN, เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบœเบนเป‰เบชเบปเปˆเบ‡, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเบ‚เป‰เบฒเบ‡เบœเบนเป‰เบฎเบฑเบš.

เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™ เบšเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก (เป€เบŠเบฑเปˆเบ™เบขเบนเปˆเปƒเบ™เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ) เบŠเบธเบ”เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ—เบตเปˆเบกเบต TCP เบซเบผเบท ICMP. เป€เบกเบทเปˆเบญเปเบžเบฑเบเป€เบเบฑเบ”เบกเบฒเบฎเบญเบ”, เบญเบฐเปเบ”เบšเป€เบ•เบตเป€เบ„เบทเบญเบ‚เปˆเบฒเบ "hashs เบกเบฑเบ™เบ•เปเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ", เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™เบžเบฐเบเบฒเบเบฒเบกเบ—เปเบฒเบฅเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ›เบฑเบ™เปเบ–เบงเปเบฅเบฐเบชเบปเปˆเบ‡เปเบ•เปˆเบฅเบฐเปเบ–เบงเป„เบ›เบซเบฒเปเบเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบชเปเบฒเบฅเบฑเบš TCP, hash เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบ—เบฑเบ‡เบ—เบตเปˆเบขเบนเปˆ IP เปเบซเบผเปˆเบ‡เปเบฅเบฐเบ›เบฒเบเบ—เบฒเบ‡เปเบฅเบฐเบžเบญเบ”. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบ•เปˆเบฅเบฐเปเบกเปˆเบ™ hashed (เบ—เปˆเบฒเปเบฎเบ‡) เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบชเปเบฒเบฅเบฑเบš ICMP, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ—เบตเปˆเบขเบนเปˆ IP เบ—เบตเปˆเบ–เบทเบ hashed, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบšเปเปˆเบกเบตเบžเบญเบ”.

เบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เปƒเบซเบกเปˆเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡: เปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒ ICMP เปƒเบ™เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบš, เปเบ•เปˆ TCP เบšเปเปˆเป„เบ”เป‰. เบ™เบตเป‰เบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบชเบฒเป€เบซเบ”เปเบกเปˆเบ™เบญเบฒเบ”เบˆเบฐเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš RX queue hashing: congestion เปเบกเปˆเบ™เป€เบเบทเบญเบšเปเบ™เปˆเบ™เบญเบ™เปƒเบ™เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡ RX packets, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ„เปเบฒเบ•เบญเบš.

เบ™เบตเป‰เบฅเบปเบšเบฅเป‰เบฒเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบŠเบญเบ‡เบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฒเป€เบซเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ”เป‰เบฒเบ™เบฎเบฑเบšเปƒเบ™เบšเบฒเบ‡เป€เบŠเบตเบšเป€เบงเบต kube-node.

เป€เบ‚เบปเป‰เบฒเปƒเบˆเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ”เปƒเบ™ Linux kernel

เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเบฑเบ™เบซเบฒเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบฎเบฑเบšเปƒเบ™เบšเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ kube-node, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒ Linux kernel เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ”เปเบ™เบงเปƒเบ”.

เบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบกเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”, เบšเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เปเบฅเบฐเบชเบปเปˆเบ‡ เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡ Linux kernel เบ—เบตเปˆเบกเบตเบŠเบธเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡. kernel เบขเบธเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบทเปˆเบ™เป†, เบชเบฐเบซเบผเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™เป„เบ›เบซเบฒเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡, เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบงเบฝเบเบ‡เบฒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบเบฒเบ™เบชเบฐเบซเบผเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบŠเป‰เบฒ: เป€เบงเบฅเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบญเบฒเบ”เบšเปเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบšเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ 10Mbps เปƒเบ™เบŠเบธเบกเบ›เบต 90, เปเบ•เปˆเปƒเบ™เบšเบฑเบ” 10G เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป„เบงเบชเบนเบ‡เบชเบธเบ” 15 เบฅเป‰เบฒเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต, เปเบ•เปˆเบฅเบฐเบซเบผเบฑเบเบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบตเปเบ›เบ”เปเบเบ™เบ™เป‰เบญเบเบชเบฒเบกเบฒเบ”เบฅเบปเบšเบเบงเบ™เป„เบ”เป‰เบซเบผเบฒเบเบฅเป‰เบฒเบ™เบ„เบปเบ™. เบ‚เบญเบ‡เป€เบ—เบทเปˆเบญเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต.

เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบกเบตเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, เป€เบกเบทเปˆเบญเบซเบฅเบฒเบเบ›เบตเบเปˆเบญเบ™ Linux เป„เบ”เป‰เป€เบžเบตเปˆเบก NAPI: Network API เบ—เบตเปˆเป„เบ”เป€เบงเบตเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบฑเบ‡เปเบปเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบ„เบงเบฒเบกเป„เบงเบชเบนเบ‡. เบขเบนเปˆเบ—เบตเปˆเบ„เบงเบฒเบกเป„เบงเบ•เปˆเปเบฒ kernel เบเบฑเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบˆเบฒเบเบšเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™เปเบšเบšเป€เบเบปเปˆเบฒ. เป€เบกเบทเปˆเบญเปเบžเบฑเบเป€เบเบฑเบ”เบžเบฝเบ‡เบžเปเบกเบฒเบฎเบญเบ”เบ—เบตเปˆเป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”, kernel เบ›เบดเบ”เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบก polling adapter เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเป€เบ–เบดเบ‡ packets เป€เบ›เบฑเบ™ chunks. เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ softirq, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™ เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบŠเบญเบšเปเบงเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡ เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เปเบฅเบฐโ€‹เบฎเบฒเบ”โ€‹เปเบงโ€‹เบ‚เบฑเบ”โ€‹เบ‚เบงเบฒเบ‡โ€‹, เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆ kernel (เบเบปเบ‡โ€‹เบเบฑเบ™โ€‹เบ‚เป‰เบฒเบกโ€‹เบเบฑเบšโ€‹เบžเบทเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹) เปเบกเปˆเบ™โ€‹เปเบฅเป‰เบงโ€‹เปเบฅเปˆเบ™โ€‹.

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบ™เบตเป‰เป„เบงเบเบงเปˆเบฒเบซเบผเบฒเบ, เปเบ•เปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ–เป‰เบฒเบกเบตเปเบžเบฑเบเป€เบเบฑเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›, เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบˆเบฒเบเบšเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบšเปเปˆเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบซเบงเปˆเบฒเบ‡เบ„เบดเบงเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ (เบญเปˆเบฒเบ™เบˆเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP, เปเบฅเบฐเบญเบทเปˆเบ™เป†). เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹เปเบ–เบงโ€‹เบˆเบฐโ€‹เป€เบ•เบฑเบกโ€‹เป„เบ›โ€‹เปเบฅเบฐโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹เบŠเบญเบ‡โ€‹. เปƒเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบ„เบงเบฒเบกเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡, kernel เบเปเบฒเบ™เบปเบ”เบ‡เบปเบšเบ›เบฐเบกเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™ softirq. เป€เบกเบทเปˆเบญเบ‡เบปเบšเบ›เบฐเบกเบฒเบ™เบ™เบตเป‰เป€เบเบตเบ™, เบเบฐเบ—เบนเป‰เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบกเปˆเบ™เบ›เบธเบ ksoftirqd (เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ ps per core) เบ—เบตเปˆเบˆเบฑเบ”เบเบฒเบ™ softirqs เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเบ™เบญเบเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ syscall / interrupt เบ›เบปเบเบเบฐเบ•เบด. เบเบฐเบ—เบนเป‰เบ™เบตเป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เป€เบŠเบดเปˆเบ‡เบžเบฐเบเบฒเบเบฒเบกเบˆเบฑเบ”เบชเบฑเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบขเปˆเบฒเบ‡เบเบธเบ”เบ•เบดเบ—เปเบฒ.

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบกเบตเบเบฒเบ™เบชเบถเบเบชเบฒเบงเบดเบ—เบตเบเบฒเบ™ kernel เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡ congestion. เบ–เป‰เบฒเบเบฒเบ™เป‚เบ— 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 core เบ”เบฝเบง. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒ Linux เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเบšเปˆเบญเบ™เปƒเบ” (เบเปˆเบฝเบงเบเบฑเบš CPU core) เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™ (softirq, ksoftirqd) เปเบžเบเป€เบเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบก Linux kernel เปƒเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡. เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ™เปเบฒเปƒเบŠเป‰ bcc. เบŠเบธเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก C เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบขเบนเปˆเปƒเบ™เปเบเปˆเบ™เปเบฅเบฐ buffer เป€เบซเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ›เปเบเบผเบก Python เบ—เบตเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบธเบ‡เปเบ•เปˆเบ‡เบžเบงเบเบกเบฑเบ™เปเบฅเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบซเป‰เบ—เปˆเบฒเบ™. Hooking arbitrary functions in the kernel is a tricky business , but the utility is designed for the maximum security and is designed to track down the kind of production problems that are not easily reproduced in a test or development environment.

เปเบœเบ™เบเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ: เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒ kernel เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ pings ICMP เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบชเปˆ hook เบเปˆเบฝเบงเบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™ kernel. icmp_echo, เป€เบŠเบดเปˆเบ‡เบเบญเบกเบฎเบฑเบšเบŠเบธเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป ICMP echo เบ‚เบฒเป€เบ‚เบปเป‰เบฒเปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบชเบปเปˆเบ‡ ICMP echo เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เปเบžเบฑเบเป€เบเบฑเบ”เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™ icmp_seq, เป€เบŠเบดเปˆเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ hping3 เบชเบนเบ‡เบ‚เบถเป‰เบ™.

เบฅเบฐโ€‹เบซเบฑเบ” bcc script เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบชเบฑเบšเบชเบปเบ™, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบ•เบฒเบขเป‰เบฒเบ™เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ. เบŸเบฑเบ‡เบŠเบฑเบ™ icmp_echo เบ–เปˆเบฒเบเบ—เบญเบ” struct sk_buff *skb: เบ™เบตเป‰เปเบกเปˆเบ™เบŠเบธเบ”เบ—เบตเปˆเบกเบต "เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบชเบฝเบ‡เบ”เบฑเบ‡". เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบกเบกเบฑเบ™, เบ”เบถเบ‡เบญเบญเบเบฅเปเบฒเบ”เบฑเบš echo.sequence (เป€เบŠเบดเปˆเบ‡เบ›เบฝเบšเบ—เบฝเบšเบเบฑเบš icmp_seq เป‚เบ”เบ hping3 ะฒั‹ัˆะต), เปเบฅเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰. เบกเบฑเบ™เบเบฑเบ‡เบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบŠเบทเปˆ/id เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เป‚เบ”เบเบเบปเบ‡เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ kernel processes packets:

TGID PID PROCESS NAME ICMP_SEQ
0 0 swapper/11
770 0 swapper/0
11 771 swapper/0
0 11 swapper/772
0 0 swapper/11
773 0 prometheus 0
11 774 swapper/20041
20086 775 swapper/0
0 11 swapper/776
0 0 spokes-report-s 11

เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบงเปˆเบฒเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™ softirq เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบšเบˆเบฐเบ›เบฒเบเบปเบ”เป€เบ›เบฑเบ™ "เบ‚เบฐเบšเบงเบ™เบเบฒเบ™" เปƒเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบกเบฑเบ™เป€เบ›เบฑเบ™เปเบเปˆเบ™เบ—เบตเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบžเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เปเบเปˆเบ™.

เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฑเบšเบŠเบธเบ”เบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒ hping3. เปƒเบซเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ grep เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฑเบšเบžเบฒเบšเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบ„เปˆเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™ icmp_seq. เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเบ„เปˆเบฒ icmp_seq เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เป„เบ”เป‰เบ–เบทเบเบ—เบธเบ‡เบžเป‰เบญเบกเบเบฑเบš RTT เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ (เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเปเบกเปˆเบ™เบ„เปˆเบฒ RTT เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบชเปเบฒเบฅเบฑเบšเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เปˆเบฒ RTT เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ 50ms):

TGID PID PROCESS NAME 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 ksoftirqd / 11 1955 ** 79ms
76 76 ksoftirqd / 11 1956 ** 69ms
76 76 ksoftirqd / 11 1957 ** 59ms
76 76 ksoftirqd/11 1958 ** (49ms)
76 76 ksoftirqd/11 1959 ** (39ms)
76 76 ksoftirqd/11 1960 ** (29ms)
76 76 ksoftirqd/11 1961 ** (19ms)
76 76 ksoftirqd/11 1962 ** (9ms)
--
10137 10436 cadvisor 2068
10137 10436 cadvisor 2069
76 76 ksoftirqd / 11 2070 ** 75ms
76 76 ksoftirqd / 11 2071 ** 65ms
76 76 ksoftirqd/11 2072 ** 55ms
76 76 ksoftirqd/11 2073 ** (45ms)
76 76 ksoftirqd/11 2074 ** (35ms)
76 76 ksoftirqd/11 2075 ** (25ms)
76 76 ksoftirqd/11 2076 ** (15ms)
76 76 ksoftirqd/11 2077 ** (5ms)

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบซเบผเบฒเบเบขเปˆเบฒเบ‡. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบŠเบธเบ”เบ—เบฑเบ‡ เปเบปเบ” เบ™เบตเป‰เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เป‚เบ”เบเบชเบฐเบžเบฒเบšเบเบฒเบ™ ksoftirqd/11. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ„เบนเปˆเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ™เบตเป‰, เบŠเบธเบ” ICMP เป„เบ”เป‰เบ–เบทเบ hashed เบเบฑเบšเบซเบผเบฑเบ 11 เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบฎเบฑเบš. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป€เบซเบฑเบ™เบงเปˆเบฒเบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบดเบ”เบ‚เบฑเบ”, เบกเบตเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ—. cadvisor... เบˆเบฒเบเบ™เบฑเป‰เบ™ ksoftirqd เปƒเบŠเป‰ เป€เบง เบฅเบฒ เปƒเบ™ เป„เบฅ เบเบฐ เบงเบฝเบ เบ‡เบฒเบ™ เปเบฅเบฐ เบเบฒเบ™ เบ›เบธเบ‡ เปเบ•เปˆเบ‡ เปเบ–เบง เบชเบฐ เบชเบปเบก: เปเบ—เป‰ เบˆเปเบฒ เบ™เบงเบ™ เบ‚เบญเบ‡ เบŠเบธเบ” เบ—เบตเปˆ เป„เบ”เป‰ เบชเบฐ เบชเบปเบก เบซเบผเบฑเบ‡ เบˆเบฒเบ cadvisor.

เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ—เบฑเบ™เบ—เบตเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบชเบฐเป€เบซเบกเบต cadvisor, เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเบ‚เบญเบ‡เบฅเบฒเบงเปƒเบ™เบšเบฑเบ™เบซเบฒ. Ironically, เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡ cadvisor - "เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ เปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเปเบฅเปˆเบ™" เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ™เบตเป‰.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบเป‰เบฒเบงเบซเบ™เป‰เบฒเบชเบนเบ‡เปเบฅเบฐเบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบ›เบฐเบชเบปเบšเบเบฑเบšเบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบฒเบเปƒเบ•เป‰เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”.

cadvisor เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เปเบ–เบงเปเบžเบฑเบเป€เบเบฑเบ”เบŠเป‰เบฒเบฅเบปเบ‡?

เบ”เบฝเบงเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ”เบตเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ crash เป€เบเบตเบ”เบ‚เบทเป‰เบ™, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบกเบฑเบ™, เปเบฅเบฐ CPU เปƒเบ”. เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบ™เบฑเบเปเบซเบ™เป‰เบ™, Linux kernel เบšเปเปˆเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ ksoftirqd. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™ cadvisor. เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ cadvisor เป€เบ›เบตเบ”เบ•เบปเบง syscall เบŠเป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบชเบฐเบชเบปเบกเปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡:

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบดเบ”เบชเบฐเบ”เบต, เปเบ•เปˆเบˆเบฐเบ—เบปเบ”เบชเบญเบšเปเบ™เบงเปƒเบ”? เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ„เบทเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบซเบผเบฑเบ CPU เบ•เบฐเบซเบผเบญเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰, เบŠเบญเบเบซเบฒเบˆเบธเบ”เบ—เบตเปˆเบˆเปเบฒเบ™เบงเบ™เปเบžเบฑเบเป€เบเบฑเบ”เป€เบเบตเบ™เบ‡เบปเบšเบ›เบฐเบกเบฒเบ™เปเบฅเบฐ ksoftirqd เบ–เบทเบเป€เบญเบตเป‰เบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบ™เบญเบตเบเป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบซเบผเบฑเบ CPU เบเปˆเบญเบ™เบˆเบธเบ”เบ™เบฑเป‰เบ™. . เบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบเบฒเบ™ x-raying CPU เบ—เบธเบเป†เบชเบญเบ‡เบชเบฒเบกเบกเบดเบ™เบฅเบดเบงเบดเบ™เบฒเบ—เบต. เบกเบฑเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ„เป‰เบฒเบเบ„เบทเบ™เบตเป‰:

เบเบฒเบ™เบ”เบตเบšเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes

เบชเบฐเบ”เบงเบ, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡, perf เบšเบฑเบ™เบ—เบถเบ เบเบงเบ”เป€เบšเบดเปˆเบ‡เบซเบผเบฑเบ CPU เบ—เบตเปˆเปƒเบซเป‰เบกเบฒเปƒเบ™เบ„เบงเบฒเบกเบ–เบตเปˆเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰ เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เป‚เบ—เป„เบ›เบซเบฒเบฅเบฐเบšเบปเบšเปเบฅเปˆเบ™, เบฅเบงเบกเบ—เบฑเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰ เปเบฅเบฐ kernel Linux. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบญเบปเบฒโ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบ™เบตเป‰โ€‹เปเบฅเบฐโ€‹เบ›เบธเบ‡โ€‹เปเบ•เปˆเบ‡โ€‹เบกเบฑเบ™โ€‹เป‚เบ”เบโ€‹เปƒเบŠเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบเบฒเบงโ€‹เบ‚เบญเบ‡โ€‹เบชเป‰เบญเบกโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹ FlameGraph เบˆเบฒเบ Brendan Gregg, เป€เบŠเบดเปˆเบ‡เบฎเบฑเบเบชเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก stack เป„เบ”เป‰. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบก stack เปเบ–เบงโ€‹เบ”เบฝเบงโ€‹เปƒเบ™โ€‹เบ—เบธเบเป† 1 ms, เปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เป€เบ™เบฑเป‰เบ™โ€‹เปเบฅเบฐโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡ 100 milliseconds เบเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบก 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 เบเปˆเบญเบ™ ksoftirqd" เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เปƒเบ™ ICMP tracer. เบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”?

เปเบ•เปˆเบฅเบฐเบชเบฒเบเปเบกเปˆเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก CPU เบขเบนเปˆเบˆเบธเบ”เบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป€เบงเบฅเบฒ. เปเบ•เปˆเบฅเบฐเบเบฒเบ™เป‚เบ—เบฅเบปเบ‡ stack เปƒเบ™เบชเบฒเบเปเบกเปˆเบ™เปเบเบเบญเบญเบเป‚เบ”เบ semicolon. เบขเบนเปˆเป€เบ„เบดเปˆเบ‡เบเบฒเบ‡เบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™ 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 เบชเบญเบšเบ–เบฒเบกเป„เบŸเบฅเปŒเบ™เบตเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธ. เปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ 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 bug เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบฅเบฒเบเบ‡เบฒเบ™เป€เบ›เบฑเบ™ เบšเบฑเบ™เบซเบฒเบเบฒเบ™เปƒเบŠเป‰ CPU เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›, เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเบšเปเปˆเบกเบตเปƒเบœเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒ latency เปเบกเปˆเบ™เบเบฑเบ‡เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบธเปˆเบกเบขเบนเปˆเปƒเบ™ stack เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบกเบฑเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบงเปˆเบฒ cadvisor เปƒเบŠเป‰เป€เบงเบฅเบฒ CPU เบซเบผเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เปƒเบซเป‰เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ CPU เบซเบผเบฒเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเบฑเบ™เบซเบฒเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบถเบเบชเบฒเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”.

เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒ cgroups เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบžเบฒเบเปƒเบ™ namespace (container). เป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบเบฒเบ™เบญเบญเบ cgroup เบ™เบตเป‰, Docker เบ›เปˆเบญเบ cgroup เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, "เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ" เบšเปเปˆเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบญเบตเบเบ•เปเปˆเป„เบ›, เบ›เบฐเบเบปเบ”เบงเปˆเบฒ kernel เบเบฑเบ‡เบเปเบฒเบ™เบปเบ”เป€เบ™เบทเป‰เบญเบซเบฒเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ, เป€เบŠเบฑเปˆเบ™: dentries เปเบฅเบฐ inodes (เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบฅเบฐ metadata เบ‚เบญเบ‡เป„เบŸเบฅเปŒ), เป€เบŠเบดเปˆเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ cgroup เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบˆเบฒเบเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบšเบฑเบ™เบซเบฒ:

zombie cgroups: cgroups เบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเบฐเบ–เบทเบเบฅเบถเบš, เปเบ•เปˆเบเบฑเบ‡เบกเบตเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบˆเบฒเบ cache dentry, เปเบ•เปˆเบกเบฑเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบชเบฑเบ™เบˆเบฒเบ cache เบซเบ™เป‰เบฒเบซเบผเบท tmpfs).

เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ‚เบญเบ‡ kernel เบ‚เบญเบ‡เบ—เบธเบเบซเบ™เป‰เบฒเปƒเบ™ cache เป€เบกเบทเปˆเบญเบ›เปˆเบญเบ cgroup เบชเบฒเบกเบฒเบ”เบŠเป‰เบฒเบซเบผเบฒเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบตเป‰เบเบฝเบ”เบ–เบทเบเป€เบฅเบทเบญเบ: เบฅเปเบ–เป‰เบฒเบˆเบปเบ™เบเปˆเบงเบฒเบซเบ™เป‰เบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบฎเป‰เบญเบ‡เบ‚เปเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเป‰เบฒเบ‡ cgroup เป€เบกเบทเปˆเบญเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเบˆเบดเบ‡. เบˆเบปเบ™เบเปˆเบงเบฒเบˆเบธเบ”เบ™เบตเป‰, cgroup เบเบฑเบ‡เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเปƒเบ™เป€เบงเบฅเบฒเป€เบเบฑเบšเบเปเบฒเบชเบฐเบ–เบดเบ•เบด.

เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบชเบเบชเบฐเบฅเบฐเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”: เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบ›เบฐเป„เบงเป‰เบšเบฒเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบˆเบฒเบเบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบ”เบต. เป€เบกเบทเปˆเบญ kernel เปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ, cgroup เป„เบ”เป‰เบ–เบทเบเบฅเบถเบšเบฅเป‰เบฒเบ‡เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "เบฎเบปเปˆเบง". เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบเบปเบ™เป„เบเบ„เบปเป‰เบ™เบซเบฒ memory.stat เปƒเบ™ kernel เป€เบงเบตเบŠเบฑเปˆเบ™เบ™เบตเป‰ (4.9), เบšเบงเบเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบŸเบทเป‰เบ™เบŸเบนเบ‚เปเป‰เบกเบนเบ™ cache เบซเบผเป‰เบฒเบชเบธเบ”เปเบฅเบฐเบฅเป‰เบฒเบ‡ zombies cgroup.

เบกเบฑเบ™ turns เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบšเบฒเบ‡เบ‚เปเป‰เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบต zombies cgroup เบซเบผเบฒเบเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบญเปˆเบฒเบ™เปเบฅเบฐ latency เป€เบเบตเบ™เบซเบ™เบถเปˆเบ‡เบงเบดเบ™เบฒเบ—เบต.

เบเบฒเบ™เปเบเป‰เป„เบ‚เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบซเบฒ cadvisor เปเบกเปˆเบ™เบเบฒเบ™เบ›เบปเบ”เบ›เปˆเบญเบเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ” dentries / inodes cache เปƒเบ™เบ—เบปเปˆเบงเบฅเบฐเบšเบปเบš, เป€เบŠเบดเปˆเบ‡เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบฅเบปเบšเบฅเป‰เบฒเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™ latency เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™ latency เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบš, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบฅเป‰เบฒเบ‡ cache เบซเบฑเบ™เบซเบ™เป‰เบฒ cgroup cache เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบปเบ”เบ›เปˆเบญเบ. เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚, เปเบ•เปˆเบกเบฑเบ™เบขเบทเบ™เบขเบฑเบ™เบชเบฒเป€เบซเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒ.

เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเปƒเบ™ kernel เบฎเบธเปˆเบ™เปƒเบซเบกเปˆ (4.19+) เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบ—เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡ memory.stat, เบชเบฐเบ™เบฑเป‰เบ™เบเบฒเบ™เบชเบฐเบซเบผเบฑเบšเบเบฑเบš kernel เบ™เบตเป‰เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ. เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบžเบทเปˆเบญเบเบงเบ”เบซเบฒเป‚เบ™เบ”เบ—เบตเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบขเบนเปˆเปƒเบ™เบเบธเปˆเบก Kubernetes, เบฅเบฐเบšเบฒเบเบžเบงเบเบกเบฑเบ™เบญเบญเบเบขเปˆเบฒเบ‡เบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบก เปเบฅเบฐเบ›เบดเบ”เป€เบ›เบตเบ”เบžเบงเบเบกเบฑเบ™เบ„เบทเบ™เปƒเปเปˆ. เบžเบงเบเป€เบฎเบปเบฒเบฅเบงเบšเบฅเบงเบกเบเบธเปˆเบกเบ—เบฑเบ‡เปเบปเบ”, เบžเบปเบšเป‚เบ™เบ”เบ—เบตเปˆเบกเบตเป€เบงเบฅเบฒเปเบžเบฑเบเป€เบเบฑเบ”เบชเบนเบ‡เบžเป เปเบฅเบฐเบ›เบดเบ”เป€เบ›เบตเบ”เบžเบงเบเบกเบฑเบ™เบ„เบทเบ™เปƒเปเปˆ. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡ OS เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญ.

เป€เบžเบทเปˆเบญเบชเบฐเบซเบผเบธเบš

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ bug เบ™เบตเป‰เบขเบธเบ”เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบ–เบง RX NIC เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบฎเป‰เบญเบ milliseconds, เบกเบฑเบ™เบžเป‰เบญเบกเบเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เบฑเบ‡เบชเบญเบ‡ latency เบชเบนเบ‡เปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบฑเป‰เบ™เปเบฅเบฐ latency เบเบฒเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เป€เบŠเบฑเปˆเบ™: เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป MySQL เปเบฅเบฐเบŠเบธเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡.

เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบฅเบฐเบเบฒเบ™เบฎเบฑเบเบชเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบชเบธเบ”, เป€เบŠเบฑเปˆเบ™ Kubernetes, เปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเปเบฅเบฐเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบžเบงเบเบกเบฑเบ™. เบ—เบธเบเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš Kubernetes.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™