diff --git a/profiles/functions b/profiles/functions
index 957dfb6..ee525e0 100644
--- a/profiles/functions
+++ b/profiles/functions
@@ -495,19 +495,21 @@ stop() {
#
process() {
- case "$1" in
+ ARG="$1"
+ shift
+ case "$ARG" in
start)
- start
+ start "$@"
RETVAL=$?
;;
stop)
- stop
+ stop "$@"
RETVAL=$?
;;
verify)
if declare -f verify &> /dev/null;
then
- verify
+ verify "$@"
else
:
fi
diff --git a/profiles/realtime-virtual-host/script.sh b/profiles/realtime-virtual-host/script.sh
index 161052c..9c09ee3 100755
--- a/profiles/realtime-virtual-host/script.sh
+++ b/profiles/realtime-virtual-host/script.sh
@@ -2,8 +2,22 @@
. /usr/lib/tuned/functions
+modfile=/etc/modprobe.d/kvm.rt.tuned.conf
ltanfile=/sys/module/kvm/parameters/lapic_timer_advance_ns
+create_modfile()
+{
+ modinfo -p kvm | grep -q kvmclock_periodic_sync
+ if [ "$?" -eq 0 ]; then
+ echo "options kvm kvmclock_periodic_sync=0" > $modfile
+ fi
+
+ modinfo -p kvm_intel | grep -q ple_gap
+ if [ "$?" -eq 0 ]; then
+ echo "options kvm_intel ple_gap=0" >> $modfile
+ fi
+}
+
start() {
python /usr/libexec/tuned/defirqaffinity.py "remove" "$TUNED_isolated_cores_expanded" &&
tuna -c "$TUNED_isolated_cores_expanded" -i
@@ -13,14 +27,8 @@ start() {
return $retval
fi
- modinfo -p kvm | grep -q kvmclock_periodic_sync
- if [ "$?" -eq 0 ]; then
- echo "options kvm kvmclock_periodic_sync=0" > /etc/modprobe.d/kvm.rt.tuned.conf
- fi
-
- modinfo -p kvm_intel | grep -q ple_gap
- if [ "$?" -eq 0 ]; then
- echo "options kvm_intel ple_gap=0" >> /etc/modprobe.d/kvm.rt.tuned.conf
+ if [ ! -f $modfile ]; then
+ create_modfile
fi
if [ -f lapic_timer_adv_ns.cpumodel ]; then
@@ -55,7 +63,7 @@ start() {
}
stop() {
- rm -f /etc/modprobe.d/kvm.rt.tuned.conf
+ [ "$1" = "profile_switch" ] && rm -f $modfile
tuna -c "$TUNED_isolated_cores_expanded" -I &&
python /usr/libexec/tuned/defirqaffinity.py "add" "$TUNED_isolated_cores_expanded"
return "$?"
diff --git a/tuned.spec b/tuned.spec
index e152dac..2e2d9e9 100644
--- a/tuned.spec
+++ b/tuned.spec
@@ -139,6 +139,10 @@ mkdir -p %{buildroot}%{_datadir}/tuned/grub2
mv %{buildroot}%{_sysconfdir}/grub.d/00_tuned %{buildroot}%{_datadir}/tuned/grub2/00_tuned
rmdir %{buildroot}%{_sysconfdir}/grub.d
+# ghost for NFV
+mkdir -p %{buildroot}%{_sysconfdir}/modprobe.d
+touch %{buildroot}%{_sysconfdir}/modprobe.d/kvm.rt.tuned.conf
+
%post
%systemd_post tuned.service
@@ -283,6 +287,7 @@ fi
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/tuned/realtime-virtual-guest-variables.conf
%config(noreplace) %{_sysconfdir}/tuned/realtime-virtual-host-variables.conf
+%ghost %{_sysconfdir}/modprobe.d/kvm.rt.tuned.conf
%{_prefix}/lib/tuned/realtime-virtual-guest
%{_prefix}/lib/tuned/realtime-virtual-host
%{_libexecdir}/tuned/defirqaffinity*
diff --git a/tuned/plugins/plugin_script.py b/tuned/plugins/plugin_script.py
index 7b3d487..57a6335 100644
--- a/tuned/plugins/plugin_script.py
+++ b/tuned/plugins/plugin_script.py
@@ -30,14 +30,14 @@ class ScriptPlugin(base.Plugin):
def _instance_cleanup(self, instance):
pass
- def _call_scripts(self, scripts, argument):
+ def _call_scripts(self, scripts, arguments):
for script in scripts:
environ = os.environ
environ.update(self._variables.get_env())
- log.info("calling script '%s' with argument '%s'" % (script, argument))
+ log.info("calling script '%s' with arguments '%s'" % (script, str(arguments)))
log.debug("using environment '%s'" % str(environ.items()))
try:
- proc = Popen([script, argument], stdout=PIPE, stderr=PIPE, close_fds=True, env=environ, \
+ proc = Popen([script] + arguments, stdout=PIPE, stderr=PIPE, close_fds=True, env=environ, \
cwd = os.path.dirname(script))
out, err = proc.communicate()
if proc.returncode:
@@ -50,13 +50,13 @@ class ScriptPlugin(base.Plugin):
def _instance_apply_static(self, instance):
super(self.__class__, self)._instance_apply_static(instance)
- self._call_scripts(instance._scripts, "start")
+ self._call_scripts(instance._scripts, ["start"])
def _instance_verify_static(self, instance):
ret = True
if super(self.__class__, self)._instance_verify_static(instance) == False:
ret = False
- if self._call_scripts(instance._scripts, "verify") == True:
+ if self._call_scripts(instance._scripts, ["verify"]) == True:
log.info(consts.STR_VERIFY_PROFILE_OK % instance._scripts)
else:
log.error(consts.STR_VERIFY_PROFILE_FAIL % instance._scripts)
@@ -64,5 +64,8 @@ class ScriptPlugin(base.Plugin):
return ret
def _instance_unapply_static(self, instance, profile_switch = False):
- self._call_scripts(reversed(instance._scripts), "stop")
+ args = ["stop"]
+ if profile_switch:
+ args = args + ["profile_switch"]
+ self._call_scripts(reversed(instance._scripts), args)
super(self.__class__, self)._instance_unapply_static(instance, profile_switch)