Может ли кто-нибудь объяснить мне, почему KSM не работает, означает ли это, что в настоящее время мое ядро не использует KSM для меньшего использования оперативной памяти.
grep KSM /boot/config-3.2.0-23-generic
CONFIG_KSM=y
cat /sys/kernel/mm/ksm/pages_shared
0
cat /sys/kernel/mm/ksm/pages_sharing
0
cat /sys/kernel/mm/ksm/pages_unshared
0
Ядро: 3.2.0-23-generic
Ubuntu 12.04 LTS 64-разрядный рабочий стол
бесплатно -m
total used free shared buffers cached
Mem: 1964 1883 81 0 11 228
-/+ buffers/cache: 1644 320
Swap: 2008 485 1523
ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 myexperiments 600 393216 2 dest
0x00000000 2490369 myexperiments 600 393216 2 dest
0x00000000 98306 myexperiments 600 393216 2 dest
0x00000000 2523139 myexperiments 600 393216 2 dest
0x00000000 13008900 myexperiments 666 262080 1 dest
0x00000000 1245189 myexperiments 666 4 2 dest
0x00000000 1277958 myexperiments 666 4 1 dest
0x00000000 6520839 myexperiments 600 393216 2 dest
0x00000000 14811144 myexperiments 666 1277760 3 dest
0x00000000 12648458 myexperiments 666 300000 1 dest
0x00000000 8060939 myexperiments 666 300000 1 dest
0x00000000 12943373 myexperiments 666 300000 2 dest
0x00000000 12976142 myexperiments 666 262080 2 dest
0x00000000 13271055 myexperiments 666 300000 2 dest
KSMD ничего не сделает, если программное обеспечение не сообщит ему, позвонив madvise(MADV_MERGEABLE)
. Скорее всего, вы не используете какое-либо прикладное программное обеспечение, использующее сервисы KSMD.
MADV_MERGEABLE (начиная с Linux 2.6.32):
Включите слияние одинаковых страниц ядра (KSM) для страниц в диапазоне, указанном адресом и длиной. Ядро регулярно сканирует те области пользовательской памяти, которые были помечены как объединяемые, в поисках страниц с идентичным содержимым. Они заменяются одной защищенной от записи страницей (которая автоматически копируется, если процесс позже захочет обновить содержимое страницы). KSM объединяет только частные анонимные страницы (см. Mmap (2)).
Функция KSM предназначена для приложений, которые генерируют множество экземпляров одних и тех же данных (например, системы виртуализации, такие как KVM). Он может потреблять много вычислительной мощности; используйте с осторожностью. Дополнительные сведения см. В исходном файле ядра Documentation / vm / ksm.txt. Операции MADV_MERGEABLE и MADV_UNMERGEABLE доступны только в том случае, если ядро было настроено с помощью CONFIG_KSM.
Кроме того, что Дэвид Шварц сказал о необходимости определения приложений через madvise
какая страница может быть авторизована для слияния, есть еще одна настройка, которую нужно активировать в Ubuntu, чтобы разрешить ksm
делать свою работу:
sudo bash -c "echo 1 > /sys/kernel/mm/ksm/run"
Вы можете проверить, каково текущее значение: cat /sys/kernel/mm/ksm/run
на моих ящиках Ubuntu 14.04.3 LTS и Ubuntu 15.04 это значение 0
. Вот разные значения в зависимости от Kernel Samepage Merging
документация ядра:
Как использовать функцию слияния одинаковых страниц ядра
run - set 0 to stop ksmd from running but keep merged pages, set 1 to run ksmd e.g. "echo 1 > /sys/kernel/mm/ksm/run", set 2 to stop ksmd and unmerge all pages currently merged, but leave mergeable areas registered for next run Default: 0 (must be changed to 1 to activate KSM, except if CONFIG_SYSFS is disabled)