Files

56 lines
1.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from comar.service import *
import os
serviceType = "local"
serviceDefault = "conditional"
serviceDesc = _({"en": "Kernel Samepage Merging",
"tr": "Kernel Aynısayfa Birleştirici"})
serviceConf = "ksm"
SYSFS_KSM_RUN = "/sys/kernel/mm/ksm/run"
SYSFS_KSM_MAX_KERNEL_PAGES = "/sys/kernel/mm/ksm/max_kernel_pages"
# unless KSM_MAX_KERNEL_PAGES is set, let ksm munch up to half of total memory.
def default_max_kernel_pages():
max_kernel_pages = config.get("KSM_MAX_KERNEL_PAGES", "")
if max_kernel_pages != "":
return max_kernel_pages
total = 0
with open("/proc/meminfo", "r") as _meminfo:
for line in _meminfo.readlines():
if "MemTotal" in line:
total = int(line.split()[-2])
break
pagesize = int(os.sysconf("SC_PAGESIZE"))
return (total * 1024 / pagesize / 2)
@synchronized
def start():
max_kernel_pages = str(default_max_kernel_pages())
if os.path.exists(SYSFS_KSM_MAX_KERNEL_PAGES):
open(SYSFS_KSM_MAX_KERNEL_PAGES, "w").write(max_kernel_pages)
open(SYSFS_KSM_RUN, "w").write("1")
@synchronized
def stop():
if os.path.exists(SYSFS_KSM_RUN):
open(SYSFS_KSM_RUN, "w").write("0")
def ready():
status = is_on()
if status == "on" or (status == "conditional" and os.path.exists(SYSFS_KSM_RUN)):
start()
def status():
ret = False
try:
ret = (open(SYSFS_KSM_RUN, "r").read().strip() == "1")
except IOError:
pass
return ret