Какие же были варианты решения проблемы некорректной аллокации и тротлинга, описанные здесь?



Задать более продуманную дефолтную квоту для тредпулов

Потенциальный импакт
: небольшой прирост в производительности

Преимущества: По сравнению со всеми другими вариантами - не надо делать почти ничего, также может работать в параллель с другими правками

Недостатки: не решает проблему в целом



Корректировать размер тредпула через общий API

Потенциальный импакт
: может решить большую часть проблем для большей части машин

Преимущества: понятно что и как делать

Недостатки: необходимо чтобы каждый сервис самостоятельно подписался (использовал новый API для создания тредуплов)



Тюнинг периода CFS



У CFS есть периоды которые делятся на отрезки, например период в 100мс делится на отрезки по 5мс. Если в первые 5 мс квота будет израсходована - следующие 95мс будет тротлинг



Потенциальный импакт: небольшое снижение латенси в хвосте справа, за счет снижение продолжительности во времени перед тем как квота обновится

Преимущества: понятно как и просто сделать

Недостатки: увеличиваются затраты на планировщик, что может перебить преимущества и в целом не решает проблему параллельного исчерпания квоты, может даже вылиться в большее количество тротлинга



Тюнинг отрезка CFS

Почти тоже самое что и предыдущее, только с другой стороны



Потенциальный импакт: небольшое снижение латенси в хвосте справа, за счет снижение улучшения использования аллоцированной квоты

Преимущества: понятно как и просто сделать

Недостатки: увеличиваются затраты на планировщик, что может перебить преимущества и в целом не решает проблему параллельного исчерпания квоты, может даже вылиться в большее количество тротлинга



Доработка планировщика CFS

Потенциальный
импакт: улучшение утилизации CPU и минимизация тротлинга по причине низкой эффективности CFS

Преимущества: улучшения прозрачны и очевидны

Недостатки: CFS сложна штука, можно так “улучшить”, что потом придется еще больше страдать



Фиксация и изоляция CPU

Потенциальный
импакт: никакого тротлинга, мапинг 1-1 на физический CPU - все ресурсы в распоряжении сервиса

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

Недостатки: Усложнение системы, так как теряем один уровень абстракции, гораздо чаще становятся случаи избыточной аллокации ресурсов, радикально отличается от текущей модели



Отключить CFS квоты

Потенциальный
импакт: предотвращает тротлинг и позволяет сервисам использовать все доступные ядра, надеясь на эффективный шаринг

Преимущества: в некотором смысле дает позволяет максимально утилизировать CPU

Недостатки: Отдельный сервис-негодяй может съесть все ресурсы и затормозить другие сервисы на той же коробке, полная противоположность предыдущему пункту, что приводит к недетерминированности по времени



В следующем посте разберем финальное решение ребят

#SystemDesign