LINUX.ORG.RU
ФорумAdmin

Как включить ksm для обычных процессов?

 ,


0

2

Привет. Хочется на своей мелкой vps попробовать дедубликацию страниц памяти (ksm) включить. Но оригинальный ksm требует что бы приложения помечали страницы памяти как пригодные для дедубликации. Что работает только с виртуалками всякими. Подскажите как включить этот механизм просто для определенного круга процессов или всех процессов на серваке где виртуализации нет?

Может есть еще советы как палиативными средствами понизить потребление памяти? Сейчас поставлен jemalloc и zram. Уже стало намного легче жить и дешевле на 10 баксов в месяц :)

Думаю тебе это не нужно. Через KSM мержатся страницы целиком и под эту характеристику внутри одной ВМ заходит нормально только файловый кэш - который у тебя, внезапно, работает всегда

no-dashi-v2 ★★
()

https://www.kernel.org/doc/Documentation/vm/ksm.txt

А то что ты хочешь называлось ЕМНИП uksm, было патчем на ядро и входило в proxmox. Я пытался это юзать, огрёб уже не помню сейчас каких глюков и перестал.

Ещё сюда посмотри: https://codeberg.org/pf-kernel/uksmd

Jameson ★★★★★
()
Ответ на: комментарий от KivApple

Сделай своп

Бочку и тунца. Я так понял своп у него уже в zram сделан. Но к нему действительно можно backend device прикрутить, чтобы в мозгах не держать то что можно в них не держать.

Jameson ★★★★★
()
Ответ на: комментарий от Jameson

У своба бэк есть, uksm явидел, но оно брошено десять лет назад как я понял. Ладно, видать пока хватит. Может позже закину все в контейнеры и попробую senpai фейсбучный посмотреть.

i3draven ★★
() автор топика
Ответ на: комментарий от i3draven

uksm брошено, а https://codeberg.org/pf-kernel/uksmd совсем другое, не ленись, посмотри! (сорян, оно к pf-kernel прибито и работает только с ним, отбой)

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

Да я про него и написал, d не дописал. Видел. В целом выходит я все видел и читал о чем ты написал :) И даже больше видать. Если другого нет, то выходит стоит забить. Но за попытку спасибо конечно.

i3draven ★★
() автор топика
Последнее исправление: i3draven (всего исправлений: 1)
Ответ на: комментарий от i3draven

Да я про него и написал
оно брошено десять лет назад как я понял

Нелогично, учитывая, что в uksmd последний коммит месяц назад.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от Jameson

к pf-kernel прибито и работает только с ним

Ну да, в readme написано «Это требует pmadv_ksm()системный вызов, доступный в pf-kernel».
Интересно, что это и как включается на других ядрах. Сам-то являюсь пользователем pf-kernel и у меня все работает, естественно. )

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

Выдирается реализующий системный вызов фрагмент кода из pf-kernel, делается патч, накладывается, и потом включается (запускается юзерспейсный демон), на свой страх и риск. Проделывать всё это я конечно же не буду, хотя постфактума уважаю, он крутой.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
31 мая 2023 г.
Ответ на: комментарий от alex1101

фаерфоксом

Наверно есть ситуации, когда использование uksm наиболее эффективно, а когда как бы и не очень и надо.

Эффективно в первую очередь для пользователей firefox (строка uksmstat), 😀 именно там самые большие числа. А так же пользователей нескольких виртуалок - расход памяти как для одной. Может еще где …

krasnh ★★★
()
Ответ на: комментарий от krasnh

Что то я в liquorix uksm не видал.

modprobe uksm modprobe: FATAL: Module uksm not found in directory /lib/modules/6.3.4-1-liquorix-amd64

Может в дебиан сборке его нет? Так бы я заюзал немедленно. Или может я просто готовить не умею?

i3draven ★★
() автор топика
Ответ на: комментарий от krasnh

Попробовал собрать https://codeberg.org/pf-kernel/uksmd.git Я так понял что бы UKSM дергать надо этот демон. Оно не собралось так как в Ubuntu заголовки лежат в других местах, насколько я понял. Поправил #include <linux/fcntl.h> #include <linux/pidfd.h>

Вроде эта заголовки нужны, но не уверен. Не собралось в связи с uksmd.c:81: неопределённая ссылка на «pidfd_open» Еще и варнингов накидало

[1/2] Compiling C object uksmd.p/uksmd.c.o
../uksmd.c: In function ‘ksm_ctl’:
../uksmd.c:51:18: warning: implicit declaration of function ‘open’; did you mean ‘popen’? [-Wimplicit-function-declaration]
   51 |         int fd = open(KSM_RUN, O_WRONLY);
      |                  ^~~~
      |                  popen
../uksmd.c: In function ‘ksm_advise’:
../uksmd.c:81:17: warning: implicit declaration of function ‘pidfd_open’; did you mean ‘fdopen’? [-Wimplicit-function-declaration]
   81 |         pidfd = pidfd_open(pid, 0);
      |                 ^~~~~~~~~~
      |                 fdopen
i3draven ★★
() автор топика
Последнее исправление: i3draven (всего исправлений: 2)

Для работы (u)ksm нужен какой-то механизм возникновения в системе ненулевых побайтово одинаковых страниц. Учитывая принципы работы fork и файловых маппингов, представить себе такое в реальных условиях без виртуализации довольно сложно.

annulen ★★★★★
()
Ответ на: комментарий от krasnh

Скачал бинари с федоры и с вашей ссылки. Сделал целый chroot ему так как в убунте 22.04 libc6 меньше чем ему надо 2.36. Запустил. У меня ведро 6.3.4-1-liquorix-amd64 Получил ошибку Unable to get pmadv_ksm syscall number Вероятно в ликворе версии 6 уже нет этого, даже сам UKSMD исходный гит содержит только для 5 версии ядер исходники. Пока что не судьба.

i3draven ★★
() автор топика
Ответ на: комментарий от i3draven

Наверно только в AUR, linux-lqx 6.3.5.lqx1-1. Там как раз подтягиваются патчи, которые и включают pmadv_ksm.
Значит готовых бинарников ядра с поддержкой uksmd нет в других дистрах.

krasnh ★★★
()
Ответ на: комментарий от krasnh

Попробовал xanmod 5.х 6.х собрал linux-tkg 6.3 везде говорят эти патчи есть. Нигде не заработало. Дальше пока лень разбираться. Скорее всего придется лезть в конфиг ядра или дебажить код. Это уже долго.

i3draven ★★
() автор топика
Ответ на: комментарий от i3draven

везде говорят эти патчи есть

Вообще-то нет, linux-tkg. Что касается xanmod, там похоже принципиальная позиция не использовать uksm.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

Оказывается и linux-zen, наравне с linux-pf, поддерживает эту фичу из коробки, mm: add sysfs entry for pmadv_ksm syscall number.

А учитывая https://github.com/CachyOS/uksmd, то и в CachyOS тоже должно быть из коробки.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

зен патчи есть в liquorix, но UKSM оттуда вроде как выпилили за нестабильность давно. CachyOS же это отдельный дистр вроде, так что там ядра изкоробочного для моей убунты не найти. Судьба патчить видать. Но это потом. В любом случае спасибо за помощь.

i3draven ★★
() автор топика
Ответ на: комментарий от i3draven

Тоже увидел это в новости выхода нового ядра, тогда же.

Реализован вариант механизма объединения идентичных страниц памяти, работающий на уровне процессов и позволяющий значительно снизить потребление памяти за счёт дедупликации страниц с одинаковым содержимым.   
В отличие от ранее предложенного механизма KSM (Kernel Samepage Merging) в новой реализации включение поддержки дедупликации осуществляется через prctl(PR_SET_MEMORY_MERGE) для процесса целиком и наследуется для дочерних процессов, без необходимости активации для каждого диапазона памяти при помощи вызова madvise(MADV_MERGEABLE), что значительно упрощает применение. 


Даже подумал, что uksmd больше не понадобится и будет убран из списка патчей pf-kernel, как это всегда происходило, когда некий полезный функционал вдруг добавляли в ванильное ядро.
Но нет, uksmd на месте, но сильно переписан с учетом «функция auto-KSM была повторно реализована поверх API управления KSM для каждого процесса».
https://codeberg.org/pf-kernel/uksmd#principles

krasnh ★★★
()
3 ноября 2023 г.
Ответ на: комментарий от krasnh

Оказывается и linux-zen, наравне с linux-pf, поддерживает эту фичу из коробки

Проверил в garuda-kde-lite-linux-zen-231029.iso (дефолт linux-zen) в вирте, доустановив uksmd и запустив uksmd.service - работает.

Проверка systemctl status uksmd (Status:«Profit: … MiB»), или установка пакета uksmdstats.

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

или установка пакета uksmdstats

$ uksmdstats                        
======================================================
uksmd with uksmdstats support. Powered by CachyOS Team
======================================================
Full scans               811      
Interval                 20 ms    
                                  
Max page sharing ratio   256      
Pages to scan            100      
Pages over ratio         20       
Duplicated pages         491      
Use zero pages           0        
Sharing/shared ratio     16.0583  
Unshared/sharing ratio   2.13239  
                                  
Pages sharing            517.191  MiB
Pages shared             32.207   MiB
Pages unshared           1102.85  MiB
                                  
General profit           488.786  MiB

krasnh ★★★
()