Pull to refresh

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

Reading time2 min
Views17K
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
Tags:
Hubs:
Total votes 20: ↑18 and ↓2+16
Comments18

Articles