LINUX.ORG.RU

memory deduplication для обычных приложений

 ,


0

3

В ядре есть такая штука как дедупликация страниц памяти — ksm. Но оно работает только с приложениями которые явно заявляют через madvise и MADV_MERGEABLE что их память можно трогать. Как следствие, в реальности оно работает только с qemu. А есть ли способ заставить эту штуку работать для всей системы? Готовых решений я не нашёл, в голове крутится только через LD_PRELOAD какой-нить костыль прикрутить.

Это нужно для тачки с кучей контейнеров типа докера. Я, скорее всего, засуну их внутрь qemu для секурности, но всё же было бы интересно узнать могу ли я что-то похожее активировать для своего ноутбука.

cast tailgunner

ЗЫ если интересно, на моём сервере KSM уменьшил потребление памяти с 7гигов до 6, что не так уж плохо.

★★★★★

А есть ли способ заставить эту штуку работать для всей системы?

Так сломается же всё

melkor217 ★★★★★
()

А есть ли способ заставить эту штуку работать для всей системы?

Я без понятия, но зачем оно для случая, когда система видит файлы? Ядро ничего и не дублирует.

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

Есть, я его до 4.5 дотянул, и до 4.6 дотягивал кто-то ещё.

Хотя это не энтерпрайз ни разу, конечно. Оно жручее по CPU, а гарантию стабильной работы я тебе дать не могу, т.к. в код кроме как поправить для очередного ядра не лез.

Правильно было бы прикрутить MADV_MERGEABLE к докеру.

post-factum ★★★★★
()
Ответ на: комментарий от tailgunner

зачем оно для случая, когда система видит файлы? Ядро ничего и не дублирует.

Хороший вопрос. Я решил проверить это на практике, но почему-то на chromium LD_PRELOAD-враппер не сработал. Вангую там свой аллокатор а-ля tcmalloc которому пофиг на libc.

С firefox это сработало, но я не использую фаерфокс, поэтому замеров нету.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от post-factum

Вот пока хотел для chromium включить, но произошёл облом, см. ниже.

Если пущу в продакшн то я скину. Хотя, скорее всего, пока просто ограничусь запуском сотни контейнеров без ничего и посмотрим что оно даст.

true_admin ★★★★★
() автор топика

Не знаю, что ты там уменьшил и как это мерил, но ежу понятно что на любую дедупликацию нужны какие-то структуры в памяти, которые будут хранить хеши участков памяти и прочую инфу. Так что, чтобы дедуплицировать оперативу, нужно быть поехавшим

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

Анон, оба твоих сообщения в корне неверные.

$ pacman -Ss jemalloc
extra/jemalloc 4.2.1-1 [installed]
    General-purpose scalable concurrent malloc implementation
true_admin ★★★★★
() автор топика
Ответ на: комментарий от anonymous
# grep . /sys/kernel/mm/ksm/*
/sys/kernel/mm/ksm/full_scans:113
/sys/kernel/mm/ksm/merge_across_nodes:1
/sys/kernel/mm/ksm/pages_shared:116417
/sys/kernel/mm/ksm/pages_sharing:261507
/sys/kernel/mm/ksm/pages_to_scan:100
/sys/kernel/mm/ksm/pages_unshared:933290
/sys/kernel/mm/ksm/pages_volatile:37803
/sys/kernel/mm/ksm/run:1
/sys/kernel/mm/ksm/sleep_millisecs:100
true_admin ★★★★★
() автор топика

А интересно, это и правда может дать профит для «обычной» системы?

Я из любопытства сбросил память в файл, порезал на куски по 4К и посравнивал хеши. Получилось дубликатов где-то 300М из 4Г. Причем в основной массе дубликаты по два одинаковых блока(96%). Ну, как-то непонятно.

Может более умной дедупликацией получится лучше, но насколько?

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

Я не знаю на счёт обычной системы, но у меня будет около сотни похожих контейнеров. А может и больше.

Я бесплатного сыра не ищу и готов к тому что это всё не сработает. Я хочу разобраться в вопросе.

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

Так сделай тестовый стенд и увидишь будет профит или нет.

Для KVM работает отлично, у меня на проксмоксе 4 виртуалки по 2 гига каждая занимают ~2.5 - 3 гига памяти.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.