X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=ta%2Fconfig-manager.git;a=blobdiff_plain;f=cmdatahandlers%2Fsrc%2Fcmdatahandlers%2Fperformance_profiles%2Fconfig.py;fp=cmdatahandlers%2Fsrc%2Fcmdatahandlers%2Fperformance_profiles%2Fconfig.py;h=4ba0648464242885225b14951d1dae11c6dc95c0;hp=8b2f087910966012c8fa99e5c97b6ed433043f9d;hb=82b7d75b8609bec0f3086d93b2162375ba71e961;hpb=7c3295e9783a677bf15287bf048240c56b3b03ba diff --git a/cmdatahandlers/src/cmdatahandlers/performance_profiles/config.py b/cmdatahandlers/src/cmdatahandlers/performance_profiles/config.py index 8b2f087..4ba0648 100644 --- a/cmdatahandlers/src/cmdatahandlers/performance_profiles/config.py +++ b/cmdatahandlers/src/cmdatahandlers/performance_profiles/config.py @@ -24,11 +24,15 @@ class Config(config.Config): HUGEPAGES = 'hugepages' PLATFORM_CPUS = 'platform_cpus' OVS_DPDK_CPUS = 'ovs_dpdk_cpus' + TUNING = 'tuning' + LOW_LATENCY_OPTIONS = 'low_latency_options' PROFILE_OPTIONS = {DEFAULT_HUGEPAGESZ: 'get_profile_default_hugepage_size', HUGEPAGESZ: 'get_profile_hugepage_size', HUGEPAGES: 'get_profile_hugepage_count', PLATFORM_CPUS: 'get_platform_cpus', - OVS_DPDK_CPUS: 'get_ovs_dpdk_cpus'} + OVS_DPDK_CPUS: 'get_ovs_dpdk_cpus', + TUNING: 'get_tuning', + LOW_LATENCY_OPTIONS: 'get_low_latency_kcmd_options'} ERR_INVALID_PROFILE = 'Invalid profile name {}' ERR_MISSING_PROFILE_KEY = 'Profile {} does not have %s' @@ -37,6 +41,9 @@ class Config(config.Config): ERR_MISSING_HUGEPAGES = ERR_MISSING_PROFILE_KEY % HUGEPAGES ERR_MISSING_PLATFORM_CPUS = ERR_MISSING_PROFILE_KEY % PLATFORM_CPUS ERR_MISSING_OVS_DPDK_CPUS = ERR_MISSING_PROFILE_KEY % OVS_DPDK_CPUS + ERR_MISSING_TUNING = ERR_MISSING_PROFILE_KEY % TUNING + ERR_INVALID_PROFILE_KEY = 'Profile {} got invalid option %s' + ERR_INVALID_LOW_LATENCY_OPTIONS = ERR_INVALID_PROFILE_KEY % LOW_LATENCY_OPTIONS @staticmethod def raise_error(context, err_type): @@ -66,6 +73,11 @@ class Config(config.Config): self.get_profile_hugepage_count(profile) self.get_platform_cpus(profile) self.get_ovs_dpdk_cpus(profile) + self._validate_mandatory_option(profile, self.TUNING) + + def _validate_mandatory_option(self, profile, option): + if getattr(self, self.PROFILE_OPTIONS[option])(profile) is None: + self.raise_error(profile, self.ERR_MISSING_PROFILE_KEY % option) def is_valid_profile(self, profile): profiles = self.get_performance_profiles() @@ -197,6 +209,72 @@ class Config(config.Config): return self.config[self.ROOT][profile][self.OVS_DPDK_CPUS] + def get_tuning(self, profile): + """ get performance tuning option + + Parameters + ---------- + profile_name : str + Performance profile name. + Returns + ------- + str + Performance tuning option. + + Raises + ------ + ConfigError + """ + self.is_valid_profile(profile) + if self.TUNING not in self.config[self.ROOT][profile]: + return None + + return self.config[self.ROOT][profile][self.TUNING] + + def get_low_latency_kcmd_options(self, profile): + """ get low latency kernel cmd option + + Parameters + ---------- + profile_name : str + Performance profile name. + Returns + ------- + str + Low latency kernel cmd options. + + Raises + ------ + ConfigError + """ + self.is_valid_profile(profile) + if self.LOW_LATENCY_OPTIONS not in self.config[self.ROOT][profile]: + return None + + return self.config[self.ROOT][profile][self.LOW_LATENCY_OPTIONS] + + def set_low_latency_kcmd_options(self, profile, options): + """ set low latency kernel cmd option + + Parameters + ---------- + profile_name : str + Performance profile name. + Returns + ------- + str + Low latency kernel cmd options. + + Raises + ------ + ConfigError + """ + self.is_valid_profile(profile) + if not isinstance(options, list): + self.raise_error(profile, self.ERR_INVALID_LOW_LATENCY_OPTIONS) + + self._fill_option_value(self.config[self.ROOT][profile], profile, self.LOW_LATENCY_OPTIONS, options) + def dump(self): """ Dump all performaceprofiles data. """ @@ -213,7 +291,7 @@ class Config(config.Config): # pylint: disable=too-many-arguments def update(self, name, platform_cpus=None, ovs_dpdk_cpus=None, hugepages=None, - default_hugepagesz=None, hugepagesz=None): + default_hugepagesz=None, hugepagesz=None, tuning=None): """ Update performance profile, overwriting existing profile. Parameters @@ -234,7 +312,9 @@ class Config(config.Config): hugepagesz : str, optional Huge page size (the default value is '1G'). Valid values are '2M' and '1G' - + tuning : str, optional + Performance tuning option. + Valid values are 'low_latency and 'standard' (default). """ data = {} self._fill_option_value(data, name, 'platform_cpus', platform_cpus) @@ -242,6 +322,7 @@ class Config(config.Config): self._fill_option_value(data, name, 'hugepages', hugepages) self._fill_option_value(data, name, 'default_hugepagesz', default_hugepagesz) self._fill_option_value(data, name, 'hugepagesz', hugepagesz) + self._fill_option_value(data, name, 'tuning', tuning) self.config[self.ROOT].update({name:data}) def delete(self, name):