b112209
#!/bin/bash
b112209
#
b112209
# ksm          Kernel Samepage Merging
b112209
#
b112209
# Author:      Dan Kenigsberg <danken@redhat.com>
b112209
#
b112209
# Copyright 2009 Red Hat, Inc. and/or its affiliates.
b112209
# Released under the GPL
b112209
#
b112209
# chkconfig: - 84 16
b112209
# description: The KSM init script starts and stops the ksm kernel thread.
b112209
# config: /etc/sysconfig/ksm
b112209
#
b112209
### BEGIN INIT INFO
b112209
# Provides: ksm
b112209
# Required-Start:
b112209
# Required-Stop:
b112209
# Should-Start:
b112209
# Short-Description: start and stop ksm
b112209
# Description: The KSM init script starts and stops the ksm kernel thread.
b112209
### END INIT INFO
b112209
b112209
. /etc/rc.d/init.d/functions
b112209
b112209
if [ -f /etc/sysconfig/ksm ]; then
b112209
    . /etc/sysconfig/ksm
b112209
fi
b112209
b112209
prog=ksm
b112209
RETVAL=0
b112209
b112209
# unless KSM_MAX_KERNEL_PAGES is set, let ksm munch up to half of total memory.
b112209
default_max_kernel_pages () {
b112209
    local total pagesize
b112209
    total=`awk '/^MemTotal:/ {print $2}' /proc/meminfo`
b112209
    pagesize=`getconf PAGESIZE`
b112209
    echo $[total * 1024 / pagesize / 2]
b112209
}
b112209
b112209
start() {
b112209
    echo -n $"Starting $prog: "
b112209
    KSM_MAX_KERNEL_PAGES=${KSM_MAX_KERNEL_PAGES:-`default_max_kernel_pages`}
b112209
    echo $KSM_MAX_KERNEL_PAGES > /sys/kernel/mm/ksm/max_kernel_pages
b112209
    echo 1 > /sys/kernel/mm/ksm/run
b112209
    RETVAL=$?
b112209
    [ $RETVAL = 0 ] && success $"$prog startup" || failure $"$prog startup"
b112209
    echo
b112209
    return $RETVAL
b112209
}
b112209
b112209
stop() {
b112209
    echo -n $"Stopping $prog: "
b112209
    echo 0 > /sys/kernel/mm/ksm/run
b112209
    RETVAL=$?
b112209
    [ $RETVAL = 0 ] && success $"$prog shutdown" || failure $"$prog shutdown"
b112209
    echo
b112209
}
b112209
6d739f7
status() {
6d739f7
    if [ ! -f /sys/kernel/mm/ksm/run ] ; then
6d739f7
        echo $"$prog not supported"
6d739f7
        RETVAL=1
6d739f7
    else if [ "$(cat /sys/kernel/mm/ksm/run 2>/dev/null)" != "1" ]; then
6d739f7
        echo $"$prog is not running"
6d739f7
        RETVAL=1
6d739f7
    else
6d739f7
        echo $"$prog is running"
6d739f7
        RETVAL=0
6d739f7
    fi; fi
6d739f7
}
6d739f7
b112209
case "$1" in
b112209
  start)
b112209
	start
b112209
	;;
b112209
  stop)
b112209
	stop
b112209
	;;
b112209
  status)
6d739f7
        status
b112209
	;;
b112209
  restart)
b112209
	stop
b112209
	start
b112209
	;;
cd8d5cb
  condrestart)
cd8d5cb
        ;;
b112209
  *)
cd8d5cb
	echo $"Usage: $prog {start|stop|restart|condrestart|status|help}"
b112209
	RETVAL=3
b112209
esac
b112209
b112209
exit $RETVAL