[prev in list] [next in list] [prev in thread] [next in thread]
List: lnst-developers
Subject: Re: [PATCH-next 13/15] add lnst.Recipes.ENRT.ConfigMixins.BaseHWConfigMixin hierarchy
From: Ondrej Lichtner <olichtne () redhat ! com>
Date: 2019-06-13 10:12:52
Message-ID: 20190613101252.GM2152 () olichtnerh
[Download RAW message or body]
On Thu, Jun 13, 2019 at 12:03:33PM +0200, Jan Tluka wrote:
> Tue, Jun 11, 2019 at 11:33:21AM CEST, olichtne@redhat.com wrote:
> > From: Ondrej Lichtner <olichtne@redhat.com>
> >
> > The BaseHWConfigMixin class hierarchy implements various device
> > configuration scripts related to hw devices that we almost always do in
> > the same order and on the same set of devices. It includes:
> > * mtu configuration
> > * device interrupt cpu pinning
> > * coalescing configuration
> > * QDisc configuration in case parallel stream tests are requested
> >
> > Each configuration is implemented in its own mixin class inheriting from
> > the BaseHWConfigMixin class that defines the interface. Additionally the
> > CommonHWConfigMixin class inherits from all 4 config mixins and
> > implements a collaborative inheritance version of the
> > test_wide_configuration, deconfiguration and description methods to be
> > added to the BaseEnrtRecipe derived classes.
> >
> > Signed-off-by: Ondrej Lichtner <olichtne@redhat.com>
> > ---
> > lnst/Recipes/ENRT/BaseEnrtRecipe.py | 5 -
> > .../ENRT/ConfigMixins/BaseHWConfigMixin.py | 42 ++++++++
> > .../ConfigMixins/CoalescingHWConfigMixin.py | 32 ++++++
> > .../ENRT/ConfigMixins/CommonHWConfigMixin.py | 31 ++++++
> > .../ConfigMixins/DevInterruptHWConfigMixin.py | 102 ++++++++++++++++++
> > .../ENRT/ConfigMixins/MTUHWConfigMixin.py | 18 ++++
> > .../ParallelStreamQDiscHWConfigMixin.py | 32 ++++++
> > 7 files changed, 257 insertions(+), 5 deletions(-)
> > create mode 100644 lnst/Recipes/ENRT/ConfigMixins/BaseHWConfigMixin.py
> > create mode 100644 lnst/Recipes/ENRT/ConfigMixins/CoalescingHWConfigMixin.py
> > create mode 100644 lnst/Recipes/ENRT/ConfigMixins/CommonHWConfigMixin.py
> > create mode 100644 lnst/Recipes/ENRT/ConfigMixins/DevInterruptHWConfigMixin.py
> > create mode 100644 lnst/Recipes/ENRT/ConfigMixins/MTUHWConfigMixin.py
> > create mode 100644 \
> > lnst/Recipes/ENRT/ConfigMixins/ParallelStreamQDiscHWConfigMixin.py
> > diff --git a/lnst/Recipes/ENRT/BaseEnrtRecipe.py \
> > b/lnst/Recipes/ENRT/BaseEnrtRecipe.py index d89ad03..4c941c9 100644
> > --- a/lnst/Recipes/ENRT/BaseEnrtRecipe.py
> > +++ b/lnst/Recipes/ENRT/BaseEnrtRecipe.py
> > @@ -22,11 +22,6 @@ class BaseEnrtRecipe(BaseSubConfigMixin, PingTestAndEvaluate, \
> > PerfRecipe): #common requirements parameters
> > driver = StrParam(default="ixgbe")
> >
> > - #common configuration parameters
> > - mtu = IntParam(mandatory=False)
> > - adaptive_rx_coalescing = BoolParam(mandatory=False)
> > - adaptive_tx_coalescing = BoolParam(mandatory=False)
> > -
> > #common test parameters
> > ip_versions = Param(default=("ipv4", "ipv6"))
> >
> > diff --git a/lnst/Recipes/ENRT/ConfigMixins/BaseHWConfigMixin.py \
> > b/lnst/Recipes/ENRT/ConfigMixins/BaseHWConfigMixin.py new file mode 100644
> > index 0000000..1550691
> > --- /dev/null
> > +++ b/lnst/Recipes/ENRT/ConfigMixins/BaseHWConfigMixin.py
> > @@ -0,0 +1,42 @@
> > +class BaseHWConfigMixin(object):
> > + @property
> > + def hw_config_dev_list(self):
> > + return []
> > +
> > + def hw_config(self, config):
> > + config.hw_config = {}
> > +
> > + def hw_deconfig(self, config):
> > + del config.hw_config
> > +
> > + def describe_hw_config(self, config):
> > + return []
> > +
> > + def _configure_dev_attribute(self, config, attr_name, value):
> > + hw_config = config.hw_config
> > + if value:
> > + attr_cfg = hw_config[attr_name + "_configuration"] = {}
> > + for dev in self.hw_config_dev_list:
> > + attr_cfg[dev] = {}
> > + attr_cfg[dev]["original"] = getattr(dev, attr_name)
> > + setattr(dev, attr_name, value)
> > + attr_cfg[dev]["configured"] = getattr(dev, attr_name)
> > +
> > + def _describe_dev_attribute(self, config, attr_name):
> > + hw_config = config.hw_config
> > + res = []
> > + attr = hw_config.get(attr_name + "_configuration", None)
> > + if attr:
> > + for dev, info in attr.items():
> > + res.append(
> > + "{}.{}.{} configured to {}, original value {}".format(
> > + dev.host.hostid,
> > + dev.name,
> > + attr_name,
> > + info["configured"],
> > + info["original"],
> > + )
> > + )
> > + else:
> > + res.append("{} configuration skipped.".format(attr_name))
> > + return res
> > diff --git a/lnst/Recipes/ENRT/ConfigMixins/CoalescingHWConfigMixin.py \
> > b/lnst/Recipes/ENRT/ConfigMixins/CoalescingHWConfigMixin.py new file mode 100644
> > index 0000000..c4e926e
> > --- /dev/null
> > +++ b/lnst/Recipes/ENRT/ConfigMixins/CoalescingHWConfigMixin.py
> > @@ -0,0 +1,32 @@
> > +from lnst.Common.Parameters import BoolParam
> > +
> > +from lnst.Recipes.ENRT.ConfigMixins.BaseHWConfigMixin import BaseHWConfigMixin
> > +
> > +
> > +class CoalescingHWConfigMixin(BaseHWConfigMixin):
> > + adaptive_rx_coalescing = BoolParam(mandatory=False)
> > + adaptive_tx_coalescing = BoolParam(mandatory=False)
> > +
> > + def hw_config(self, config):
> > + super().hw_config(config)
> > +
> > + self._configure_dev_attribute(
> > + config,
> > + "adaptive_rx_coalescing",
> > + getattr(self.params, "adaptive_rx_coalescing", None),
> > + )
> > + self._configure_dev_attribute(
> > + config,
> > + "adaptive_tx_coalescing",
> > + getattr(self.params, "adaptive_tx_coalescing", None),
> > + )
> > +
> > + def describe_hw_config(self, config):
> > + parent = super().describe_hw_config(config)
>
> I'd rename 'parent' to 'desc' or similar. This applies to all other
> occurrences in this patch. Not a big deal, I can live with it as it is,
> but makes it a bit readable.
>
> > + parent.extend(
> > + self._describe_dev_attribute(config, "adaptive_rx_coalescing")
> > + )
> > + parent.extend(
> > + self._describe_dev_attribute(config, "adaptive_tx_coalescing")
> > + )
> > + return parent
> > diff --git a/lnst/Recipes/ENRT/ConfigMixins/CommonHWConfigMixin.py \
> > b/lnst/Recipes/ENRT/ConfigMixins/CommonHWConfigMixin.py new file mode 100644
> > index 0000000..73958f9
> > --- /dev/null
> > +++ b/lnst/Recipes/ENRT/ConfigMixins/CommonHWConfigMixin.py
> > @@ -0,0 +1,31 @@
> > +from lnst.Recipes.ENRT.ConfigMixins.ParallelStreamQDiscHWConfigMixin import (
> > + ParallelStreamQDiscHWConfigMixin,
> > +)
> > +from lnst.Recipes.ENRT.ConfigMixins.DevInterruptHWConfigMixin import (
> > + DevInterruptHWConfigMixin,
> > +)
> > +from lnst.Recipes.ENRT.ConfigMixins.CoalescingHWConfigMixin import (
> > + CoalescingHWConfigMixin,
> > +)
> > +from lnst.Recipes.ENRT.ConfigMixins.MTUHWConfigMixin import MTUHWConfigMixin
> > +
> > +
> > +class CommonHWConfigMixin(
> > + ParallelStreamQDiscHWConfigMixin,
> > + DevInterruptHWConfigMixin,
> > + CoalescingHWConfigMixin,
> > + MTUHWConfigMixin,
> > +):
> > + def test_wide_configuration(self):
> > + configuration = super().test_wide_configuration()
> > + self.hw_config(configuration)
> > + return configuration
> > +
> > + def test_wide_deconfiguration(self, configuration):
> > + self.hw_deconfig(configuration)
> > + return super().test_wide_deconfiguration(configuration)
> > +
> > + def generate_test_wide_description(self, config):
> > + parent = super().generate_test_wide_description(config)
> > + parent.extend(self.describe_hw_config(config))
> > + return parent
>
> So at the moment it is not possible to use individual HWConfigMixin
> classes, correct?
>
> J.
It is, you can inherit them as mixins and then call their hw_config
method directly.
This wrapper class includes it into the test_wide_configuration call by
default, but if you want more control over which configuration happens
when, you might want to do this manually.
-Ondrej
_______________________________________________
LNST-developers mailing list -- lnst-developers@lists.fedorahosted.org
To unsubscribe send an email to lnst-developers-leave@lists.fedorahosted.org
Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedorahosted.org/archives/list/lnst-developers@lists.fedorahosted.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic