diff --git a/stack.sh b/stack.sh index 20cdc1dfcc..504d94f148 100755 --- a/stack.sh +++ b/stack.sh @@ -1006,6 +1006,22 @@ init_service_check # Save configuration values save_stackenv $LINENO +# Kernel Samepage Merging (KSM) +# ----------------------------- + +# Processes that mark their memory as mergeable can share identical memory +# pages if KSM is enabled. This is particularly useful for nova + libvirt +# backends but any other setup that marks its memory as mergeable can take +# advantage. The drawback is there is higher cpu load; however, we tend to +# be memory bound not cpu bound so enable KSM by default but allow people +# to opt out if the CPU time is more important to them. + +if [[ "ENABLE_KSM" == "True" ]] ; then + if [[ -f /sys/kernel/mm/ksm/run ]] ; then + sudo sh -c "echo 1 > /sys/kernel/mm/ksm/run" + fi +fi + # Start Services # ============== diff --git a/stackrc b/stackrc index 61501b5696..b53f791380 100644 --- a/stackrc +++ b/stackrc @@ -104,6 +104,14 @@ if [[ "$USE_SYSTEMD" == "True" ]]; then USE_SCREEN=False fi +# Whether or not to enable Kernel Samepage Merging (KSM) if available. +# This allows programs that mark their memory as mergeable to share +# memory pages if they are identical. This is particularly useful with +# libvirt backends. This reduces memory useage at the cost of CPU overhead +# to scan memory. We default to enabling it because we tend to be more +# memory constrained than CPU bound. +ENABLE_KSM=$(trueorfalse True ENABLE_KSM) + # When using screen, should we keep a log file on disk? You might # want this False if you have a long-running setup where verbose logs # can fill-up the host.