Экономим память с помощью 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
                    Практически никак, загрузка процессора не поднялась.

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