Commit a35f2b34 authored by Karol Latecki's avatar Karol Latecki Committed by Jim Harris
Browse files

scripts/nvmf_perf: add configure_services method



Disable all unnecessary services which might affect
tests performance.
Managing services implemented in a very simplified way
usign subprocess and configparser modules (because json
output is not available). Proper implementation would
need to use a proper dBus API, but this seems like an
overkill for such a script.

Change-Id: I72feec4293b77442a9d2c9b4afaa032df1c4d5e1
Signed-off-by: default avatarKarol Latecki <karol.latecki@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6264


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarMichal Berger <michalx.berger@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarMaciej Wawryk <maciejx.wawryk@intel.com>
parent 2c5849c7
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import zipfile
import threading
import subprocess
import itertools
import configparser
import time
import uuid
from collections import OrderedDict
@@ -30,6 +31,7 @@ class Server:
        self.mode = server_config["mode"]
        self.local_nic_info = []
        self._nics_json_obj = {}
        self.svc_restore_dict = {}

        self.enable_adq = False
        self.adq_priority = None
@@ -77,6 +79,9 @@ class Server:
    def exec_cmd(self, cmd, stderr_redirect=False):
        return ""

    def configure_system(self):
        self.configure_services()

    def configure_adq(self):
        self.adq_load_modules()
        self.adq_configure_nic()
@@ -121,6 +126,40 @@ class Server:
            self.log_print(self.exec_cmd(["sudo", "ethtool", "-k", nic]))
            self.log_print(self.exec_cmd(["sudo", "ethtool", "--show-priv-flags", nic]))

    def configure_services(self):
        self.log_print("Configuring active services...")
        svc_config = configparser.ConfigParser(strict=False)

        # Below list is valid only for RHEL / Fedora systems and might not
        # contain valid names for other distributions.
        svc_target_state = {
            "firewalld": "inactive",
            "irqbalance": "inactive",
            "lldpad.service": "inactive",
            "lldpad.socket": "inactive"
        }

        for service in svc_target_state:
            out = self.exec_cmd(["sudo", "systemctl", "show", "--no-page", service])
            out = "\n".join(["[%s]" % service, out])
            svc_config.read_string(out)

            if "LoadError" in svc_config[service] and "not found" in svc_config[service]["LoadError"]:
                continue

            service_state = svc_config[service]["ActiveState"]
            self.log_print("Current state of %s service is %s" % (service, service_state))
            self.svc_restore_dict.update({service: service_state})
            if service_state != "inactive":
                self.log_print("Disabling %s. It will be restored after the test has finished." % service)
                self.exec_cmd(["sudo", "systemctl", "stop", service])

    def restore_services(self):
        self.log_print("Restoring services...")
        for service, state in self.svc_restore_dict.items():
            cmd = "stop" if state == "inactive" else "start"
            self.exec_cmd(["sudo", "systemctl", cmd, service])


class Target(Server):
    def __init__(self, name, general_config, target_config):
@@ -164,6 +203,7 @@ class Target(Server):
        self.script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
        self.spdk_dir = os.path.abspath(os.path.join(self.script_dir, "../../../"))
        self.set_local_nic_info(self.set_local_nic_info_helper())
        self.configure_system()
        if self.enable_adq:
            self.configure_adq()
        self.sys_config()
@@ -458,6 +498,7 @@ class Initiator(Server):
        self._nics_json_obj = json.loads(self.exec_cmd(["ip", "-j", "address", "show"]))
        self.set_local_nic_info(self.set_local_nic_info_helper())
        self.set_cpu_frequency()
        self.configure_system()
        if self.enable_adq:
            self.configure_adq()
        self.sys_config()
@@ -1161,4 +1202,7 @@ if __name__ == "__main__":
                i.kernel_init_disconnect(i.remote_nic_ips, target_obj.subsys_no)
            i.copy_result_files(target_results_dir)

    target_obj.restore_services()
    for i in initiators:
        i.restore_services()
    target_obj.parse_results(target_results_dir)