Снизить p99 c 500+ ms до 27ms поможет простой советский...



Всем привет! Сегодня в #за_минуту история из жизни Михаила Петрова, руководителя проекта «Платформа» в VK.



Как-то раз мы наткнулись на письмо в листе рассылок Линукс-ядра. В нем Константин со знакомым доменом почты предлагал патч в ядро, чтобы улучшить утилизацию линукс-машинок в контейнером мире.



Потом туда подключились люди с китайскими именами, и у них родилось ЭТО — The burstable CFS bandwidth controller.



Что именно у них родилось, лучше всего покажет это видео. А если вы не знаете китайский, то посмотрите картинки под этим постом.



Если кратко, то они добавили в CPU-cgroups-контроллер новую опцию — cpu.cfs_burst_us, которая позволяет накапливать не использованное процессом CPU время на будущие всплески.



Все остальные восхитились и этим коммитом вмержили ЭТО в ядро 5.14. И вроде все хорошо, но есть и минус. Если процесс постоянно доиспользует неиспользованные секунды, то второй процесс может недополучить процессорного времени.



Этот вопрос также исследовали наши китайские товарищи и вывели закономерность:



🔹 чем больше контейнеров на хосте, тем лучше (30 лучше, чем 10);

🔹 если у вас утилизация CPU меньше 70%, то можно не париться.



Прямо сейчас в апстриме кубера еще нет поддержки этой функциональности, но есть контроллер от АлиБабы, который это поддерживает и активно развивается. Его аналог есть в облаке кубера от Алибабы и, подозреваю, его развивают те же инженеры.



#за_минуту