#! /bin/sh

REFRESH=5

if [ "`cat /sys/kernel/mm/ksm/run`" -ne 1 ] ; then
  echo "KSM is not enabled. Run \"echo 1 > /sys/kernel/mm/ksm/run\" to enable it."
  exit 1
fi

while getopts "r:" OPTION ; do
  case $OPTION in
    r) REFRESH="$OPTARG" ;;
  esac
done

while true ; do
  clear
  echo "Raw data from /sys/kernel/mm/ksm"
  for KSM_FILE in /sys/kernel/mm/ksm/* ; do
    [ `basename $KSM_FILE` = "run" ] && continue
    echo -n "`basename $KSM_FILE`: " ; cat $KSM_FILE
  done
  echo
  echo "Statistics"
  echo "CPU usage: `top -b -n 1 | grep ksmd | awk '{print $9}'`%"
  echo "Shared memory:\t$((`cat /sys/kernel/mm/ksm/pages_shared`*`getconf PAGE_SIZE`/1024/1024)) MB"
  echo "Saved memory:\t$((`cat /sys/kernel/mm/ksm/pages_sharing`*`getconf PAGE_SIZE`/1024/1024)) MB"
  if ! `which bc >/dev/null` ; then
    echo "Please install bc for ratio calculation."
  else
    if [ "`cat /sys/kernel/mm/ksm/pages_sharing`" -ne 0 ] ; then
      echo -n "Shared pages ratio:\t"
      echo "scale=2; `cat /sys/kernel/mm/ksm/pages_sharing`/`cat /sys/kernel/mm/ksm/pages_shared`" | bc -q
      echo -n "Unshared pages ratio:\t"
      echo "scale=2; `cat /sys/kernel/mm/ksm/pages_unshared`/`cat /sys/kernel/mm/ksm/pages_sharing`" | bc -q
    fi
  fi
  echo
  echo -n "Press Ctrl-C to stop."
  sleep $REFRESH
done
