#!/bin/bash # IHK SMP-x86 example McKernel unload script. # author: Balazs Gerofi # Copyright (C) 2015 RIKEN AICS # # This is an example script for destroying McKernel and releasing IHK resources # Note that the script does no output anything unless an error occurs. prefix="@prefix@" BINDIR="@BINDIR@" SBINDIR="@SBINDIR@" ETCDIR=@ETCDIR@ KMODDIR="@KMODDIR@" KERNDIR="@KERNDIR@" mem="" cpus="" # No SMP module? Exit. if ! grep ihk_smp_x86 /proc/modules &>/dev/null; then exit 0; fi # Stop mcklogd pkill mcklogd # Destroy all LWK instances if ls /dev/mcos* 1>/dev/null 2>&1; then for i in /dev/mcos*; do ind=`echo $i|cut -c10-`; if ! ${SBINDIR}/ihkconfig 0 destroy $ind; then echo "error: destroying LWK instance $ind failed" >&2 exit 1 fi done fi # Query IHK-SMP resources and release them if ! ${SBINDIR}/ihkconfig 0 query cpu > /dev/null; then echo "error: querying cpus" >&2 exit 1 fi cpus=`${SBINDIR}/ihkconfig 0 query cpu` if [ "${cpus}" != "" ]; then if ! ${SBINDIR}/ihkconfig 0 release cpu $cpus > /dev/null; then echo "error: releasing CPUs" >&2 exit 1 fi fi if ! ${SBINDIR}/ihkconfig 0 query mem > /dev/null; then echo "error: querying memory" >&2 exit 1 fi mem=`${SBINDIR}/ihkconfig 0 query mem` if [ "${mem}" != "" ]; then if ! ${SBINDIR}/ihkconfig 0 release mem $mem > /dev/null; then echo "error: releasing memory" >&2 exit 1 fi fi # Remove delegator if loaded if grep mcctrl /proc/modules &>/dev/null; then if ! rmmod mcctrl 2>/dev/null; then echo "error: removing mcctrl" >&2 exit 1 fi fi # Remove mcoverlay if loaded if grep mcoverlay /proc/modules &>/dev/null; then if [ "`cat /proc/mounts | grep /tmp/mcos/mcos0_sys`" != "" ]; then umount -l /tmp/mcos/mcos0_sys; fi if [ "`cat /proc/mounts | grep /tmp/mcos/mcos0_proc`" != "" ]; then umount -l /tmp/mcos/mcos0_proc; fi if [ "`cat /proc/mounts | grep /tmp/mcos/linux_proc`" != "" ]; then umount -l /tmp/mcos/linux_proc; fi if [ "`cat /proc/mounts | grep /tmp/mcos`" != "" ]; then umount -l /tmp/mcos; fi if [ -e /tmp/mcos ]; then rm -rf /tmp/mcos; fi if ! rmmod mcoverlay 2>/dev/null; then echo "warning: failed to remove mcoverlay" >&2 fi fi # Remove SMP module if grep ihk_smp_x86 /proc/modules &>/dev/null; then if ! rmmod ihk_smp_x86 2>/dev/null; then echo "error: removing ihk_smp_x86" >&2 exit 1 fi fi # Remove core module if grep -E 'ihk\s' /proc/modules &>/dev/null; then if ! rmmod ihk 2>/dev/null; then echo "error: removing ihk" >&2 exit 1 fi fi # Start irqbalance with the original settings if [ "`systemctl status irqbalance_mck.service 2> /dev/null |grep -E 'Active: active'`" != "" ]; then if ! systemctl stop irqbalance_mck.service 2>/dev/null; then echo "warning: failed to stop irqbalance_mck" >&2 fi if ! systemctl disable irqbalance_mck.service >/dev/null 2>/dev/null; then echo "warning: failed to disable irqbalance_mck" >&2 fi if ! etcdir=@ETCDIR@ perl -e '$etcdir=$ENV{'etcdir'}; @files = grep { -f } glob "$etcdir/proc/irq/*/smp_affinity"; foreach $file (@files) { $dest = substr($file, length($etcdir)); if(0) {print "cp $file $dest\n";} system("cp $file $dest 2>/dev/null"); }'; then echo "warning: failed to restore /proc/irq/*/smp_affinity" >&2 fi if ! systemctl start irqbalance.service; then echo "warning: failed to start irqbalance" >&2; fi fi # Re-enable ASLR if [ -f /tmp/mckernel_randomize_va_space ]; then cat /tmp/mckernel_randomize_va_space > /proc/sys/kernel/randomize_va_space fi # Set back default swappiness echo 60 > /proc/sys/vm/swappiness