[PATCH v4 3/7] dts: infer use first core without config

Nicholas Pratte npratte at iol.unh.edu
Fri Jan 24 19:14:18 CET 2025


I wonder if you could remove this particular patch entirely, since
this particular 'use_first_core' issue is addressed differently in the
proceeding patch. I left this patch in the original series so that we
might discuss what the best mode of action would be for tackling this
problem. In any case, it doesn't hurt to keep this patch in the
series.

Reviewed-by: Nicholas Pratte <npratte at iol.unh.edu>

On Fri, Jan 24, 2025 at 6:39 AM Luca Vizzarro <luca.vizzarro at arm.com> wrote:
>
> From: Nicholas Pratte <npratte at iol.unh.edu>
>
> To further the simplification of the user configuration, use_first_core
> can be inferred from the lcores. If the user explicitly includes the
> core 0 in the lcores range, it will only then be used.
>
> Bugzilla ID: 1360
>
> Signed-off-by: Nicholas Pratte <npratte at iol.unh.edu>
> Signed-off-by: Luca Vizzarro <luca.vizzarro at arm.com>
> Reviewed-by: Paul Szczepanek <paul.szczepanek at arm.com>
> Reviewed-by: Dean Marx <dmarx at iol.unh.edu>
> ---
>  dts/conf.yaml                       |  3 +--
>  dts/framework/config/__init__.py    | 19 ++++++++++++-------
>  dts/framework/testbed_model/node.py |  9 +++++++++
>  3 files changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/dts/conf.yaml b/dts/conf.yaml
> index 4b6965b3d7..c93eedbc94 100644
> --- a/dts/conf.yaml
> +++ b/dts/conf.yaml
> @@ -40,8 +40,7 @@ nodes:
>      hostname: sut1.change.me.localhost
>      user: dtsuser
>      os: linux
> -    lcores: "" # use all the available logical cores
> -    use_first_core: false # tells DPDK to use any physical core
> +    lcores: "" # use all available logical cores (Skips first core)
>      memory_channels: 4 # tells DPDK to use 4 memory channels
>      hugepages_2mb: # optional; if removed, will use system hugepage configuration
>          number_of: 256
> diff --git a/dts/framework/config/__init__.py b/dts/framework/config/__init__.py
> index 3fa8f4fa8f..5dfa0cf0d4 100644
> --- a/dts/framework/config/__init__.py
> +++ b/dts/framework/config/__init__.py
> @@ -138,12 +138,12 @@ class ScapyTrafficGeneratorConfig(TrafficGeneratorConfig):
>  #: A union type discriminating traffic generators by the `type` field.
>  TrafficGeneratorConfigTypes = Annotated[ScapyTrafficGeneratorConfig, Field(discriminator="type")]
>
> -#: Comma-separated list of logical cores to use. An empty string means use all lcores.
> +#: Comma-separated list of logical cores to use. An empty string or ```any``` means use all lcores.
>  LogicalCores = Annotated[
>      str,
>      Field(
> -        examples=["1,2,3,4,5,18-22", "10-15"],
> -        pattern=r"^(([0-9]+|([0-9]+-[0-9]+))(,([0-9]+|([0-9]+-[0-9]+)))*)?$",
> +        examples=["1,2,3,4,5,18-22", "10-15", "any"],
> +        pattern=r"^(([0-9]+|([0-9]+-[0-9]+))(,([0-9]+|([0-9]+-[0-9]+)))*)?$|any",
>      ),
>  ]
>
> @@ -161,15 +161,20 @@ class NodeConfiguration(FrozenModel):
>      password: str | None = None
>      #: The operating system of the :class:`~framework.testbed_model.node.Node`.
>      os: OS
> -    #: A comma delimited list of logical cores to use when running DPDK.
> -    lcores: LogicalCores = "1"
> -    #: If :data:`True`, the first logical core won't be used.
> -    use_first_core: bool = False
> +    #: A comma delimited list of logical cores to use when running DPDK. ```any```, an empty
> +    #: string or omitting this field means use any core except for the first one. The first core
> +    #: will only be used if explicitly set.
> +    lcores: LogicalCores = ""
>      #: An optional hugepage configuration.
>      hugepages: HugepageConfiguration | None = Field(None, alias="hugepages_2mb")
>      #: The ports that can be used in testing.
>      ports: list[PortConfig] = Field(min_length=1)
>
> +    @property
> +    def use_first_core(self) -> bool:
> +        """Returns :data:`True` if `lcores` explicitly selects the first core."""
> +        return "0" in self.lcores
> +
>
>  class SutNodeConfiguration(NodeConfiguration):
>      """:class:`~framework.testbed_model.sut_node.SutNode` specific configuration."""
> diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
> index 08328ee482..b08b1cf14d 100644
> --- a/dts/framework/testbed_model/node.py
> +++ b/dts/framework/testbed_model/node.py
> @@ -91,6 +91,15 @@ def __init__(self, node_config: NodeConfiguration):
>              self.lcores, LogicalCoreList(self.config.lcores)
>          ).filter()
>
> +        if LogicalCore(lcore=0, core=0, socket=0, node=0) in self.lcores:
> +            self._logger.info(
> +                """
> +                WARNING: First core being used;
> +                using the first core is considered risky and should only
> +                be done by advanced users.
> +                """
> +            )
> +
>          self._other_sessions = []
>          self._init_ports()
>
> --
> 2.43.0
>


More information about the dev mailing list