1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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
|