Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: Yao Qi <yao@codesourcery.com>
Cc: gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [RFC 2/3] Perf test framework
Date: Fri, 20 Sep 2013 16:51:00 -0000	[thread overview]
Message-ID: <CADPb22TFyjcjYnmG2BnADh7qx6sSvcQqEMrJh95RJmxeT2GovA@mail.gmail.com> (raw)
In-Reply-To: <523C015E.30902@codesourcery.com>

On Fri, Sep 20, 2013 at 1:03 AM, Yao Qi <yao@codesourcery.com> wrote:
> Doug, thanks for the review.
>
>
> On 09/20/2013 03:09 AM, Doug Evans wrote:
>>
>>   > +class PerfTestConfig(object):
>>   > +    """
>>   > +    Create the right objects according to file perftest.ini.
>>   > +    """
>>   > +
>>   > +    def __init__(self):
>>   > +        self.config = ConfigParser.ConfigParser()
>>   > +        self.config.read("perftest.ini")
>>   > +
>>   > +    def get_reporter(self):
>>   > +        """Create an instance of class Reporter which is determined
>> by
>>   > +        the option 'type' in section '[Reporter]'."""
>>   > +        if not self.config.has_section('Reporter'):
>>   > +            return reporter.TextReporter()
>>   > +        if not self.config.has_option('Reporter', 'type'):
>>   > +            return reporter.TextReporter()
>>   > +
>>   > +        name = self.config.get('Reporter', 'type')
>>   > +        cls = getattr(reporter, name)
>>   > +        return cls()
>>   > +
>>   > +perftestconfig = PerfTestConfig()
>>
>> What do you see perftest.ini containing over time?
>> While the file format is pretty trivial, it is another file format.
>> Do we need it?
>
>
> I was wondering that we can support json format, so I create class
> PerfTestConfig and perftest.ini is used to determine which format to
> be used.  I agree that we can remove PerfTestConfig since we
> only support only one format (plain text) nowadays.

Hi.  I wasn't suggesting removing support for more reporting formats.
We'll be adding our own. :-)

I'm just wondering, if all that pertest.ini will contain is the report
format, do we need it?
Or, can we specify the format (and whatever else is desired/needed)
via some other means?
How will the user specify the desired report format?

>>   > +
>>   > +    def invoke(self):
>>   > +        """Call method 'execute_test' and '__report'."""
>>
>> As I read this, this comment just says what this function is doing.
>> I'm guessing the point is to say that all such methods must, at the least,
>> do these two things.  This should be spelled out.
>> It would also be good to document that "invoke" is what GDB calls
>> to perform this function.
>>
>> Also, I'm wondering why execute_test is public and
>> __report(-> _report) is private?
>
>
> _report is private to be used only in class TestCase.  I double checked that
> private method can be overridden in python, so execute_test can be private
> too.  I'll do it in V2.

Yeah, "private" is a convention expressed by coding style, not an enforced rule.

Another thought I had was: what if a test tried to have two perf tests?
As things stand (and IIUC!), the user is intended to instantiate the
subclass of TestCase.
But the gdb.Function name is not a parameter, it's always "perftest".
It's reasonable to only require one such test
(and thus having two gdb.Functions with name "perftest" is "pilot error"),
but we should detect and report it somehow.
[It may still work, depending on the ordering of how the test does
things, but I wouldn't want to depend on it.]
OTOH, what's the cost of relaxing this restriction and making the
gdb.Function name a parameter?
[it could have a default value so the common case is unchanged]
Could be missing something of course. :-)

>>   > +
>>   > +        self.execute_test()
>>   > +        self.__report(perftestconfig.get_reporter())
>>   > +        return "Done"
>>   > +
>>   > +class SingleVariableTestCase(TestCase):
>>   > +    """Test case with a single variable."""
>>
>> I think this needs more documentation.
>> What does "single variable" refer to?  A single statistic, like wall time?
>>
>
> Yes, like wall time.  How about "SingleStatisticTestCase" or
> "SingleParameterTestCase"?

"Statistic" is nice and clear.

>>   > +
>>   > +class TestResult(object):
>>   > +    """Base class to record or save test results."""
>>   > +
>>   > +    def __init__(self, name):
>>   > +        self.name = name
>>   > +
>>   > +    def record (self, variable, result):
>>   > +        raise RuntimeError("Abstract Method:record.")
>>   > +
>>   > +    def report (self, reporter):
>>   > +        """Report the test results by reporter."""
>>   > +        raise RuntimeError("Abstract Method:report.")
>>   > +
>>   > +class SingleVariableTestResult(TestResult):
>>   > +    """Test results for the test case with a single variable. """
>>   > +
>>   > +    def __init__(self, name):
>>   > +        super (SingleVariableTestResult, self).__init__ (name)
>>   > +        self.results = dict ()
>>   > +
>>   > +    def record(self, variable, result):
>>   > +        self.results[variable] = result
>>
>> As things read (to me anyway), the class only handles a single variable,
>> but the "record" method makes the variable a parameter.
>> There's a disconnect here.
>>
>> Maybe the "variable" parameter to "record" is misnamed.
>> E.g., if testing the wall time of performing something over a range of
>> values,
>> e.g., 1 solib, 8, solibs, 256 solibs, "variable" would be 1,8,256?
>
>
> Yes, for solib test, "variable" is the number of shared libraries, and
> "result" is the time usage for loading or unloading such number of
> shared libraries.
>
>
>> If that's the case, please rename "variable".
>> I realize it's what is being varied run after run, but
>> it just doesn't read well.
>>
>> There are two "variables" (so to speak) here:
>> 1) What one is changing run after run.  E.g. # solibs
>> 2) What one is measuring.  E.g. wall time, cpu time, memory used.
>>
>> The name "variable" feels too ambiguous.
>> OTOH, if the performance testing world has a well established convention
>> for what the word "variable" means, maybe I could live with it.:-)
>>
>
> How about renaming "variable" by "parameter"?

Assuming we're talking about the "variable" argument to the "record" method,
yeah, "parameter" sounds ok to me.  "test_parameter" may be even better.

[
Though, for grin's sake, one can then have a discussion about the
difference between function arguments and function parameters, and
whether someone will be confused by the fact that we now have a
parameter named "parameter".  1/2 :-)
ref: http://stackoverflow.com/questions/156767/whats-the-difference-between-an-argument-and-a-parameter
]


  reply	other threads:[~2013-09-20 16:51 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-14 13:01 [RFC] GDB performance testing infrastructure Yao Qi
2013-08-21 20:39 ` Tom Tromey
2013-08-27  6:21   ` Yao Qi
2013-08-27 13:49 ` Agovic, Sanimir
2013-08-28  3:04   ` Yao Qi
2013-09-19  0:36     ` Doug Evans
2013-08-28  4:17 ` [RFC 0/3] GDB Performance testing Yao Qi
2013-08-28  4:17   ` [RFC 3/3] Test on solib load and unload Yao Qi
2013-08-28  4:27     ` Yao Qi
2013-08-28 11:31       ` Agovic, Sanimir
2013-09-03  1:59         ` Yao Qi
2013-09-03  6:33           ` Agovic, Sanimir
2013-09-02 15:24       ` Blanc, Nicolas
2013-09-03  2:04         ` Yao Qi
2013-09-03  7:50           ` Blanc, Nicolas
2013-09-19 22:45       ` Doug Evans
2013-09-20 19:19         ` Tom Tromey
2013-10-05  0:34           ` Doug Evans
2013-10-07 16:31             ` Tom Tromey
2013-09-22  6:25         ` Yao Qi
2013-09-23  0:14           ` Doug Evans
2013-09-24  2:31             ` Yao Qi
2013-10-05  0:37               ` Doug Evans
2013-09-20 19:14       ` Tom Tromey
2013-08-28  4:17   ` [RFC 1/3] New make target 'check-perf' and new dir gdb.perf Yao Qi
2013-08-28  9:40     ` Agovic, Sanimir
2013-09-19 17:47     ` Doug Evans
2013-09-20 19:00       ` Tom Tromey
2013-09-20 18:59     ` Tom Tromey
2013-08-28  4:17   ` [RFC 2/3] Perf test framework Yao Qi
2013-08-28  9:57     ` Agovic, Sanimir
2013-09-03  1:45       ` Yao Qi
2013-09-03  6:38         ` Agovic, Sanimir
2013-09-19 19:09     ` Doug Evans
2013-09-20  8:04       ` Yao Qi
2013-09-20 16:51         ` Doug Evans [this message]
2013-09-22  2:54           ` Yao Qi
2013-09-22 23:14             ` Doug Evans
2013-09-20 17:12         ` Doug Evans
2013-09-19 17:25   ` [RFC 0/3] GDB Performance testing Doug Evans

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADPb22TFyjcjYnmG2BnADh7qx6sSvcQqEMrJh95RJmxeT2GovA@mail.gmail.com \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    --cc=yao@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox