#!/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 [ "`lsmod | grep ihk_smp_x86`" == "" ]; then exit 0; fi # 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 ! ${SBINDIR}/ihkconfig 0 release cpu $cpus > /dev/null; then echo "error: releasing CPUs" >&2; exit 1; 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 ! ${SBINDIR}/ihkconfig 0 release mem $mem > /dev/null; then echo "error: releasing memory" >&2; exit 1; fi # Remove delegator if loaded if [ "`lsmod | grep mcctrl`" != "" ]; then if ! rmmod mcctrl; then echo "error: removing mcctrl" >&2; exit 1; fi fi # Remove SMP module if [ "`lsmod | grep ihk_smp_x86`" != "" ]; then if ! rmmod ihk_smp_x86; then echo "error: removing ihk_smp_x86" >&2; exit 1; fi fi # Remove core module if [ "`lsmod | grep -E 'ihk\s' | awk '{print $1}'`" != "" ]; then if ! rmmod ihk; then echo "error: removing ihk" >&2; exit 1; fi fi # Stop mcklogd pkill mcklogd # 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 "error: stopping irqbalance_mck" >&2; exit 1; fi; if ! systemctl disable irqbalance_mck.service >/dev/null 2>/dev/null; then echo "error: disabling irqbalance_mck" >&2; exit 1; 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 "error: restoring /proc/irq/*/smp_affinity" >&2; exit 1; fi; if ! systemctl start irqbalance.service; then echo "error: starting irqbalance" >&2; exit 1; fi; fi