56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
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
|
||
|