Какие же были варианты решения проблемы некорректной аллокации и тротлинга, описанные здесь?
Задать более продуманную дефолтную квоту для тредпулов
Потенциальный импакт: небольшой прирост в производительности
Преимущества: По сравнению со всеми другими вариантами - не надо делать почти ничего, также может работать в параллель с другими правками
Недостатки: не решает проблему в целом
Корректировать размер тредпула через общий API
Потенциальный импакт: может решить большую часть проблем для большей части машин
Преимущества: понятно что и как делать
Недостатки: необходимо чтобы каждый сервис самостоятельно подписался (использовал новый API для создания тредуплов)
Тюнинг периода CFS
У CFS есть периоды которые делятся на отрезки, например период в 100мс делится на отрезки по 5мс. Если в первые 5 мс квота будет израсходована - следующие 95мс будет тротлинг
Потенциальный импакт: небольшое снижение латенси в хвосте справа, за счет снижение продолжительности во времени перед тем как квота обновится
Преимущества: понятно как и просто сделать
Недостатки: увеличиваются затраты на планировщик, что может перебить преимущества и в целом не решает проблему параллельного исчерпания квоты, может даже вылиться в большее количество тротлинга
Тюнинг отрезка CFS
Почти тоже самое что и предыдущее, только с другой стороны
Потенциальный импакт: небольшое снижение латенси в хвосте справа, за счет снижение улучшения использования аллоцированной квоты
Преимущества: понятно как и просто сделать
Недостатки: увеличиваются затраты на планировщик, что может перебить преимущества и в целом не решает проблему параллельного исчерпания квоты, может даже вылиться в большее количество тротлинга
Доработка планировщика CFS
Потенциальный импакт: улучшение утилизации CPU и минимизация тротлинга по причине низкой эффективности CFS
Преимущества: улучшения прозрачны и очевидны
Недостатки: CFS сложна штука, можно так “улучшить”, что потом придется еще больше страдать
Фиксация и изоляция CPU
Потенциальный импакт: никакого тротлинга, мапинг 1-1 на физический CPU - все ресурсы в распоряжении сервиса
Преимущества: разработчикам просто жить в такой модели, тротлинг со стороны планировщика отсутствует, повышается эффективность использования кэша, отсутствие пересечений с другими потребителями позволяет точнее оценивать производительность
Недостатки: Усложнение системы, так как теряем один уровень абстракции, гораздо чаще становятся случаи избыточной аллокации ресурсов, радикально отличается от текущей модели
Отключить CFS квоты
Потенциальный импакт: предотвращает тротлинг и позволяет сервисам использовать все доступные ядра, надеясь на эффективный шаринг
Преимущества: в некотором смысле дает позволяет максимально утилизировать CPU
Недостатки: Отдельный сервис-негодяй может съесть все ресурсы и затормозить другие сервисы на той же коробке, полная противоположность предыдущему пункту, что приводит к недетерминированности по времени
В следующем посте разберем финальное решение ребят
#SystemDesign
Задать более продуманную дефолтную квоту для тредпулов
Потенциальный импакт: небольшой прирост в производительности
Преимущества: По сравнению со всеми другими вариантами - не надо делать почти ничего, также может работать в параллель с другими правками
Недостатки: не решает проблему в целом
Корректировать размер тредпула через общий API
Потенциальный импакт: может решить большую часть проблем для большей части машин
Преимущества: понятно что и как делать
Недостатки: необходимо чтобы каждый сервис самостоятельно подписался (использовал новый API для создания тредуплов)
Тюнинг периода CFS
У CFS есть периоды которые делятся на отрезки, например период в 100мс делится на отрезки по 5мс. Если в первые 5 мс квота будет израсходована - следующие 95мс будет тротлинг
Потенциальный импакт: небольшое снижение латенси в хвосте справа, за счет снижение продолжительности во времени перед тем как квота обновится
Преимущества: понятно как и просто сделать
Недостатки: увеличиваются затраты на планировщик, что может перебить преимущества и в целом не решает проблему параллельного исчерпания квоты, может даже вылиться в большее количество тротлинга
Тюнинг отрезка CFS
Почти тоже самое что и предыдущее, только с другой стороны
Потенциальный импакт: небольшое снижение латенси в хвосте справа, за счет снижение улучшения использования аллоцированной квоты
Преимущества: понятно как и просто сделать
Недостатки: увеличиваются затраты на планировщик, что может перебить преимущества и в целом не решает проблему параллельного исчерпания квоты, может даже вылиться в большее количество тротлинга
Доработка планировщика CFS
Потенциальный импакт: улучшение утилизации CPU и минимизация тротлинга по причине низкой эффективности CFS
Преимущества: улучшения прозрачны и очевидны
Недостатки: CFS сложна штука, можно так “улучшить”, что потом придется еще больше страдать
Фиксация и изоляция CPU
Потенциальный импакт: никакого тротлинга, мапинг 1-1 на физический CPU - все ресурсы в распоряжении сервиса
Преимущества: разработчикам просто жить в такой модели, тротлинг со стороны планировщика отсутствует, повышается эффективность использования кэша, отсутствие пересечений с другими потребителями позволяет точнее оценивать производительность
Недостатки: Усложнение системы, так как теряем один уровень абстракции, гораздо чаще становятся случаи избыточной аллокации ресурсов, радикально отличается от текущей модели
Отключить CFS квоты
Потенциальный импакт: предотвращает тротлинг и позволяет сервисам использовать все доступные ядра, надеясь на эффективный шаринг
Преимущества: в некотором смысле дает позволяет максимально утилизировать CPU
Недостатки: Отдельный сервис-негодяй может съесть все ресурсы и затормозить другие сервисы на той же коробке, полная противоположность предыдущему пункту, что приводит к недетерминированности по времени
В следующем посте разберем финальное решение ребят
#SystemDesign