Meningkatkan Efisiensi Memory Proxmox Lebih dari 20%
Proxmox adalah hypervisor yang populer digunakan karena penggunaannya yang cukup simpel jika dibandingkan dengan hypervisor lain. Ternyata ada fitur sangat bermanfaat yang tidak dienable secara default. Fitur ini bernama Kernel same-page merging (KSM).
KSM adalah fitur dari kernel Linux yang memungkinkan hypervisor untuk menggabungkan data-data yang sama di dalam memory. Fitur ini akan sangat bermanfaat ketika kita memiliki Virtual Machine yang memiliki OS yang seragam. Karena keseragaman tersebut, maka akan banyak data data di dalam memory yang sama. Pengaktifan KSM akan menyatukan data-data yang sama tersebut, sehingga penggunaan memory akan lebih efisien.
Terlihat bahwa penggunaan memory di Proxmox yang saya miliki berkurang hingga 20%. Karena besar memory saya adalah 64 GB, maka penggunaan memory berkurang hingga 20% * 64 GB = 12.8 GB. Pengurangan ini tergantung pada seberapa mirip virtual machine yang berjalan. Semakin banyak kemiripan (misalkan OS sama), maka akan semakin banyak pengurangan memory. Penggunaan KSM juga bisa dicek menggunakan perintah berikut:
cat /sys/kernel/mm/ksm/pages_sharing
3647265
Untuk mengaktifkan fitur KSM di Proxmox ini, kita cukup menjalankan 1 perintah berikut
apt install -y ksm-control-daemon
Untuk memastikan service KSM sudah berjalan, jalankan perintah berikut
systemctl status ksmtuned
Sebelum KSM dapat berjalan, kita perlu melakukan penyesuaian terkait dengan file konfigurasi KSM. Buka file /etc/ksmtuned.conf menggunakan text editor vi atau nano, enable konfigurasi berikut ini dengan cara menghilangkan tanda pagar (#)
KSM_THRES_COEF=20
KSM_THRES_COEF adalah persentase sisa memory yang kita inginkan agar KSM ini aktif. Dengan memasukkan nilai 20, berarti KSM akan aktif hanya ketika sisa memory tinggal 20% dari total memory. Apabila kita memiliki memory 100 GB, maka dengan settingan seperti ini, KSM akan aktif ketika pemakaian memory sudah mencapai 80 GB, atau sisa memory sudah lebih kecil dari 20 GB.
KSM_THRES_CONST=2048
KSM_THRES_CONST adalah nilai (dalam Megabyte) yang menjadi batas aktifnya KSM. 2048 berarti KSM akan aktif ketika free memory sudah kurang dari 2 GB.
Pada ksmtuned.conf kita menemukan fakta bahwa by design, KSM akan aktif ketika sudah mencapai batas tertentu. Hal ini dikarenakan pengaktifan KSM akan memakan resource CPU lebih. Hal inilah yang menyebabkan KSM sebaiknya diaktifkan hanya saat free memory sudah cukup kecil.
Berikut ini adalah penjelasan terkait file konfigurasi ksmtuned.conf, yang saya dapatkan di forum Proxmox.
# Configuration file for ksmtuned.
#DEBUG=1
# number of seconds ksmtuned should sleep between tuning adjustments
# Every KSM_MONITOR_INTERVAL seconds ksmtuned adjust how aggressive KSM will
# search for duplicated pages based on free memory.
# KSM_MONITOR_INTERVAL=60
# Millisecond sleep between ksm scans for 16Gb server.
# Smaller servers sleep more, bigger sleep less.
# How many Milliseconds to sleep between scans of 16GB of RAM.
# The actual sleep time is calculated as sleep = KSM_SLEEP_MSEC * 16 / Total GB of RAM
# The final sleep value will be written to /sys/kernel/mm/ksm/sleep_millisecs
# KSM_SLEEP_MSEC=100
# KSM_NPAGES_BOOST: amount to increment the number of pages to scan
# The number of pages to be scanned will be increased by KSM_NPAGES_BOOST
# when the amount of free ram < threshold (see KSM_THRES_* below)
# KSM_NPAGES_BOOST=300
# KSM_NPAGES_DECAY: amount to decrease the number of pages to scan
# The number of pages to be scanned will be decreased by KSM_NPAGES_DECAY
# when the amount of free ram >= threshold (see KSM_THRES_* below)
# KSM_NPAGES_DECAY=-50
# KSM_NPAGES_MIN: Minimum number of pages to be scanned at all times
# KSM_NPAGES_MIN=64
# KSM_NPAGES_MAX: Maximum number of pages to be scanned at all times
# KSM_NPAGES_MAX=1250
# KSM_THRES_COEF: Decimal percentage of free RAM
# If free memory is less than this percentage KSM will be activated
# KSM_THRES_COEF=20
# KSM_THRES_CONST: Bytes
# If free memory is less than this number KSM will be activated
# KSM_THRES_CONST=2048
#NOTE: Only KSM_THRES_CONST or KSM_THRES_COEF is actually used.
#Whichever results in a larger number wins.
Reference:
KSM Linux
KSM config reference