Назад | Перейти на главную страницу

Почему общая память ядра равна 0 в Ubuntu 12.04?

Может ли кто-нибудь объяснить мне, почему 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)