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 <npra...@iol.unh.edu> On Fri, Jan 24, 2025 at 6:39 AM Luca Vizzarro <luca.vizza...@arm.com> wrote: > > From: Nicholas Pratte <npra...@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 <npra...@iol.unh.edu> > Signed-off-by: Luca Vizzarro <luca.vizza...@arm.com> > Reviewed-by: Paul Szczepanek <paul.szczepa...@arm.com> > Reviewed-by: Dean Marx <dm...@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 >