Re: [PATCH v2] rteval: Add measurement and load location to run report

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Fri, 5 Aug 2022, Leah Leshchinsky wrote:

> On Thu, Aug 04, 2022 at 11:48:07AM -0400, Leah Leshchinsky wrote:
> > The run report produced at the end of a run does not contain information
> > on load and measurement thread locations.
> > 
> > Adjust MakeReport() functions of LoadModules and MeasurementModules
> > class so that new properties with number of loads and cpu information
> > are added to the XML report and can be read by rteval_text.xsl.
> > 
> > Signed-off-by: Leah Leshchinsky <lleshchi@xxxxxxxxxx>
> > 
> > diff --git a/rteval/modules/loads/__init__.py b/rteval/modules/loads/__init__.py
> > index 2c2105efa964..5e5a5d85b616 100644
> > --- a/rteval/modules/loads/__init__.py
> > +++ b/rteval/modules/loads/__init__.py
> > @@ -30,6 +30,7 @@ import libxml2
> >  from rteval.Log import Log
> >  from rteval.rtevalConfig import rtevalCfgSection
> >  from rteval.modules import RtEvalModules, rtevalModulePrototype
> > +from rteval.systopology import collapse_cpulist, SysTopology
> >  
> >  class LoadThread(rtevalModulePrototype):
> >      def __init__(self, name, config, logger=None):
> > @@ -131,6 +132,12 @@ class LoadModules(RtEvalModules):
> >      def MakeReport(self):
> >          rep_n = RtEvalModules.MakeReport(self)
> >          rep_n.newProp("load_average", str(self.GetLoadAvg()))
> > +        rep_n.newProp("loads", str(self.ModulesLoaded()))
> > +        cpulist = self._cfg.GetSection(self._module_config).cpulist
> > +        if not cpulist:
> > +            st = SysTopology()
> > +            cpulist = collapse_cpulist(st.online_cpus())
> > +        rep_n.newProp("loadcpus", cpulist)
> >  
> >          return rep_n
> >  
> > diff --git a/rteval/modules/measurement/__init__.py b/rteval/modules/measurement/__init__.py
> > index 318248bd7e35..371fc5d08f44 100644
> > --- a/rteval/modules/measurement/__init__.py
> > +++ b/rteval/modules/measurement/__init__.py
> > @@ -24,7 +24,7 @@
> >  
> >  import libxml2
> >  from rteval.modules import RtEvalModules, ModuleContainer
> > -
> > +from rteval.systopology import collapse_cpulist, SysTopology
> >  
> >  class MeasurementProfile(RtEvalModules):
> >      """Keeps and controls all the measurement modules with the same measurement profile"""
> > @@ -189,6 +189,12 @@ measurement profiles, based on their characteristics"""
> >  
> >          # Get the reports from all meaurement modules in all measurement profiles
> >          rep_n = libxml2.newNode("Measurements")
> > +        cpulist = self.__cfg.GetSection("measurement").cpulist
> > +        if not cpulist:
> > +            st = SysTopology()
> > +            cpulist = collapse_cpulist(st.online_cpus())
> > +        rep_n.newProp("measurecpus", cpulist)
> > +
> >          for mp in self.__measureprofiles:
> >              mprep_n = mp.MakeReport()
> >              if mprep_n:
> > diff --git a/rteval/rteval_text.xsl b/rteval/rteval_text.xsl
> > index c40063e3dd19..7ecfac6b6140 100644
> > --- a/rteval/rteval_text.xsl
> > +++ b/rteval/rteval_text.xsl
> > @@ -13,6 +13,14 @@
> >      <xsl:value-of select="run_info/date"/><xsl:text> </xsl:text><xsl:value-of select="run_info/time"/>
> >      <xsl:text>&#10;</xsl:text>
> >  
> > +    <xsl:text>   Loads:        </xsl:text>
> > +    <xsl:value-of select="loads/@loads"/><xsl:text> loads run on cores </xsl:text><xsl:value-of select="loads/@loadcpus"/>
> > +    <xsl:text>&#10;</xsl:text>
> > +
> > +    <xsl:text>   Measurement:  </xsl:text>
> > +    <xsl:text>measurement threads run on cores </xsl:text><xsl:value-of select="Measurements/@measurecpus"/>
> > +    <xsl:text>&#10;</xsl:text>
> > +
> >      <xsl:text>   Run time:     </xsl:text>
> >      <xsl:value-of select="run_info/@days"/><xsl:text> days </xsl:text>
> >      <xsl:value-of select="run_info/@hours"/><xsl:text>h </xsl:text>
> > -- 
> > 2.31.1
> > 
> 
> Hi John,
> 
> I do believe the cpulist variable can be empty. I was able to test this by running rteval without specifying and load and measurement cpus.

Ok, you are correct, cpulist can be empty if the following are not set
--loads-cpulist=LIST
--measurement-cpulist=LIST

So you do need some code to initialize the list of it is empty.
But there are still problems

For example if you shut off cpu 3
su -c 'echo 0 > /sys/devices/system/cpu/cpu3/online '

And then request measurement on cpus 0-5
su -c './rteval-cmd -d5s --measurement-cpulist=0-5'

The report should say 
Measurement:  measurement threads run on cores  0-2,4,5
Loads:        3 loads run on cores 6-11 (the inverse)
but instead with your patch it says
Loads:        3 loads run on cores 1,2,4,6,7,8,9,10,11
Measurement:  measurement threads run on cores 0-5

Now there are problems that exist even before your patch, so for example, 
the initial info to the screen not included in the report doesn't consider 
offline cpus. (We should fix that too of course, but we can do this 
stepwise)

And it's also possible that I have introduced some new problems with the 
changes to systopology that will hopefully make things simpler in the long 
run but may be interferring with your code. So, there are many things to 
untangle here.

> 
> This patch is attempting to replicate the behavior found in rteval/__init.py lines 187-201, which also finds the cpulist using
>             cpulist = self._loadmods._cfg.GetSection("loads").cpulist
> and if the cpulist is empty, defaults to reporting the online cpus. I assume this is because the rteval program uses all available cpus
> to run measurement and load threads if no specific cpus are specified.
> 
> Please let me know if I am misunderstanding any of the above.
> 
> I will investigate why the xsl code is not working for you. It seems to be working for me at the moment.


> 
> Thank you for the review,
> Leah
> 
> 
Thanks Leah

John




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux