Экономим память с помощью UKSM

    UKSM (Ultra Kernel Samepage Merging) — технология совмещения одинаковых страниц памяти в одну.

    UKSM вдохновлен KSM(технология от RedHat), но практически полностью переписан.
    У KSM есть несколько недостатков:
    • Непрозрачность для пользователя и разработчика. Программа должна сообщать ядру, какие страницы объединить, этим пользуются редко
    • Достаточно глупый алгоритм: сканирует память с постоянной скоростью. Зачем тратить CPU, если нет страниц, которые можно объединить?
    • Достаточно медленный: максимальная скорость сканирования, которой удалось добиться при тестах ­— 260 МБ/с.


    И тут приходит UKSM:
    • Сканирует память сам. Разработчикам не нужно править исходники.
    • Не тратит CPU зря. UKSM автоматически определяет несовмещенные страницы, основываясь на истории случайных выборок. Пространству с большим количеством известных несовмещенных страниц дается вся скорость, в то время как пространству с низким количеством совмещаемых страниц отдается низкий приоритет, практически не расходуя циклы процессора.
    • Очень высокая скорость работы. Для этого используется новый алгоритм хэширования. Обычно, чтобы отличить страницы одну от другой, достаточно прохэшировать только ее часть. В лучшем случае, алгоритму достаточно прохэшировать только одно 32-битное слово, а не всю страницу, а в худшем, его скорость сравнима с SuperFastHash. Скорость поиска страниц: 627 — 2445 МБ/с, а скорость совмещения: 477 — 923 МБ/с. Также, не тратится CPU и в зонах трешинга, что дает значительно меньшее использование процессорного времени взамен немного худшей экономии памяти.


    Какой выигрыш можно получить?
    На моем десктопе, потребляемая память сократилась на 50-100МБ. В идеале, 10 одинаковых виртуалок будут потреблять оперативную память, как одна.

    Сайт проекта: kerneldedup.org/en
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 16
    • 0
      А если после совмещения происходят изменения? Тогда память опять увеличивается?
      • +12
        Кэп подсказывает, что да.
      • 0
        Наверняка что-то аналогично copy-on-write (а то и оно один-в-один).
        • 0
          KSM это технология комплементарная COW (Copy-On-Write)

          Т.е. она находит одинаковые страницы, объединяет их и помечает как COW. Дальше действуют стандартные механизмы виртуальной памяти.
          Если процесс пишет в COW страницу хотя бы один байт, то страница физически копируется в другое место и вносится изменение в карту виртуальной памяти изменяющего процесса. После этого уже происходит запись изменений.
    • 0
      Вот как бы эту штуку с openvz заставить работать
      • 0
        Наверное, никак. Там патча под такие старые ядра, вроде, нет.
    • 0
      не в курсе, не планируется в vanilla включать?
      • 0
        Пока ни то что не планируют включать в ваниллу, а даже англоязычное коммьюнити собирать(сайт на китайском)
    • +1
      Поставил на VPS — полет нормальный. Погонял нагрузочные тесты — вроде есть профит. На метров 100 больше свободной RAM остается. При общем объеме в 512Мб — существенная экономия.
      • 0
        На vps в смысле — внутрь виртуалки, или снаружи?
        • 0
          Внутрь, на веб-сервер. У меня критически важных проектов на нем нет, стрёма поэтому тоже нет.
    • 0
      Его уже можно ставить в продакшен, или ахтунговато?
    • 0
      Интересно, как сказывается на производительности в итоге
      • 0
        RAM работает быстрее диска, поэтому avoidance свопа и ре-подгркузки с диска образов приложений рулит.
      • 0
        Практически никак, загрузка процессора не поднялась.

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.