Назад | Перейти на главную страницу

Были ли ситуации, когда activedefrag нужно было отключить в Redis 5 (с распределителем Jemalloc)?

В Redis 4 добавлена ​​активная дефрагментация памяти (источник: примечания к выпуску):

Активная дефрагментация памяти. Redis может дефрагментировать память в режиме онлайн, если используется распределитель Jemalloc (по умолчанию в Linux). Полезно для рабочих нагрузок, когда распределитель не может удерживать фрагментацию на достаточно низком уровне, поэтому единственная возможность - это сотрудничество Redis и распределителя для дефрагментации памяти.

В Redis 5 эта функция (теперь называемая версией 2) была улучшена:

Источник 1: твит Сальваторе Санфилиппо, главного разработчика Redis

Активная дефрагментация, версия 2. Дефрагментация памяти работающего сервера - это черная магия, но Оран Агра улучшил свои прошлые усилия, и теперь она работает лучше, чем раньше. Очень полезно для длительных рабочих нагрузок, которые склонны фрагментировать Jemalloc.

Источник 2: Объявление на AWS о Redis 5

Одним из основных моментов предыдущего выпуска было то, что Redis получил возможность дефрагментировать память в режиме онлайн. Это работает очень умно: Redis сканирует пространство ключей и для каждого указателя спрашивает распределитель, поможет ли перемещение его на новый адрес уменьшить фрагментацию. Этот выпуск поставляется с тем, что можно назвать активной дефрагментацией 2: он быстрее, умнее и имеет меньшую задержку. Эта функция особенно полезна для рабочих нагрузок, когда распределитель не может поддерживать достаточно низкую фрагментацию, поэтому стратегия заключается в сотрудничестве и Redis, и распределителя. Чтобы это работало, необходимо использовать распределитель Jemalloc. К счастью, в Linux это распределитель по умолчанию.

Вопрос: Предполагая, что вы уже используете Jemalloc, есть ли причина не всегда устанавливать activedefrag yes?

Учитывая, что альтернативой является перезапуск экземпляра, чтобы справиться с фрагментацией (что очень проблематично), и учитывая, что накладные расходы activedefrag кажутся довольно низкими по сравнению с тем, что я видел до сих пор, эта опция кажется слишком полезной, чтобы быть отключенной по умолчанию.

Или есть ситуации, когда это повредит производительности?

Разумеется, активная дефрагментация снижает производительность, но почти всегда незначительна. Хотя он отключен по умолчанию в дистрибутиве OSS, мы (Redis Labs) уже много лет используем его в продакшене;)