Проблема

На хосте Proxmox (многих версий, вплоть до 6.x) процесс ksmd потребляет много CPU (25-40% на четырехъядерном процессоре).

Решение

Очевидно - решение в тонкой настройке демона ksmd, который занимается поиском и слиянием (merging) страниц памяти с одинаковым содержимым для высвободжения памяти. Настройки демона хранятся в файле /etc/ksmtuned.conf.
Помогает увеличение интервала KSM_SLEEP_MSEC до 100 милисекунд:

KSM_SLEEP_MSEC=100

Значение остальных параметров:

  • KSM_MONITOR_INTERVAL - временной интервал в секундах между сканированиями.
  • KSM_SLEEP_MSEC - временной интервал в милисекундах между сканированиями кусков по 16Gb. текущее значение можно найти тут: /sys/kernel/mm/ksm/sleep_millisecs
  • KSM_NPAGES_BOOST - число страниц, на которое будет увеличено количество сканируемых страниц при достижении порогов заданных параметрами KSM_THRES_*
  • KSM_NPAGES_DECAY - число страниц, на которое будет уменьшено количество сканируемых страниц при достижении порогов заданных параметрами KSM_THRES_*
  • KSM_NPAGES_MIN - минимальное число страниц памяти, которое сканируется всегда.
  • KSM_NPAGES_MAX - максимальное число сканируемых страниц
  • KSM_THRES_COEF - порог количества свободной памяти в процентах, при достижении которого запускается процесс сканирования и слияния.
  • KSM_THRES_CONST - порог количества свободной памяти в килобайтах, при достижении которого запускается процесс сканирования и слияния.

Текущий размер страницы памяти можно получить так:

getconf PAGE_SIZE

На сервере с объемом памяти 32Gb я использую такие значения:

KSM_SLEEP_MSEC=1000
KSM_THRES_COEF=50

Перезапустить демон ksmd можно такой командой:

sudo service ksmtuned restart
Enter your comment. Wiki syntax is allowed:
 
  • proxmox/proxmox_ksmd_high_cpu_load.txt
  • Last modified: 2019/11/12 07:43
  • by admin