mason-performance_hacks_including_probs_with_mason.1.11_maybe_wait_for_1.12_for_production_use

This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.



From: Ian Robertson <ian@eziba.com>
To: mason-users@lists.sourceforge.net
Subject: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Date: Fri, 12 Jul 2002 12:11:31 -0400

In preparing to upgrade our site from 1.03 to 1.11, I just ran a test
comparing the speed of Mason versions 1.03 and 1.11.  The test
basically consists of running through a simple template 50 times, and
reporting the average time per run.  The upshot is a nearly nine-fold
slow-down in Mason 1.11:

ian1:Mason1.03$ ./runner.pl simple.tmpl
average time: 0.00142055988311768

ian1:Mason1.11$ ./runner.pl simple.tmpl
average time: 0.0127044010162354

Is this a known issue?  Am I doing something stupid that is making
1.11 so slow?

The template being run was:

-----simple.tmpl-----
% for( my $i = 0; $i < 100; $i++ )
% {
  That's great, it starts with an earthquake, birds and snakes, an
  aeroplane and Lenny Bruce is not afraid. Eye of a hurricane, listen to
  yourself churn - world serves its own needs, dummy serve your own
  needs. Feed it off an aux speak, grunt, no, strength. Ladder start to
  clatter with fear fight down height. Wire in a fire, represent the
  seven games a government for hire and a combat site. Left of west and
  coming in a hurry with the furies breathing down your neck. Team by
  team reporters baffled, trumped, tethered cropped. Look at that low
  playing! Fine, then. Uh oh, overflow, population, common food, but
  it'll do. Save yourself, serve yourself. World serves its own needs,
  listen to your heart bleed dummy with the rapture and the revered in
  the right - right. You vitriolic, patriotic, slam, fight, bright
  light, feeling pretty psyched.
% }
-----simple.tmpl-----

The code to run Mason 1.03 was:

-----runner.pl-----
#!/usr/bin/perl

use strict;

use lib ".";  # Use our local copy of Mason-1.03
use HTML::Mason;
use Time::HiRes qw(time);
use Cwd;

my $TRIES = 50;
my $component = $ARGV[0];
my $output;
my $interp = HTML::Mason::Interp->
    new( comp_root => cwd, data_dir => cwd,
         out_method => \$output, out_mode => "stream" );

$interp->exec( "/$component" ); # compile

my $start = time;
for( my $i = 0; $i< $TRIES; $i++)
{
    $output = "";
    $interp->exec( "/$component" );
}
print "average time: ", (time - $start)/$TRIES, "\n";

-----runner.pl-----

The code to run Mason 1.11 was:

-----runner.pl-----
#!/usr/bin/perl

use strict;

use HTML::Mason;
use Time::HiRes qw(time);
use Cwd;

my $TRIES = 50;
my $component = $ARGV[0];
my $output;
my $interp = HTML::Mason::Interp->
    new( comp_root => cwd, data_dir => cwd, out_method => \$output );

$interp->exec( "/$component" ); # compile

my $start = time;
for( my $i = 0; $i< $TRIES; $i++)
{
    $output = "";
    $interp->exec( "/$component" );
}
print "average time: ", (time - $start)/$TRIES, "\n";
-----runner.pl-----

P.S.  I also noticed that by moving the text body from directly inside
the loop into def subcomponent increased the running time in both
versions by nearly a factor of 10.  I would expect an increase, but
should it be that much?

===

From: Dave Rolsky <autarch@urth.org>
To: Ian Robertson <ian@eziba.com>
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason
Date: Fri, 12 Jul 2002 14:09:49 -0500 (CDT)

On Fri, 12 Jul 2002, Ian Robertson wrote:

> In preparing to upgrade our site from 1.03 to 1.11, I just ran a test
> comparing the speed of Mason versions 1.03 and 1.11.  The test
> basically consists of running through a simple template 50 times, and
> reporting the average time per run.  The upshot is a nearly nine-fold
> slow-down in Mason 1.11:

It is slower, but your test is one that exposes one of the weaknesses of
Mason's implementation.  Basically, very large loops create a very large
number of method calls in the generated object code.

We might be able to introduce an optimization to improve this, but it
would probably require us to remove the autoflush feature entirely.


===

From: Dave Rolsky <autarch@urth.org>
To: Ian Robertson <ian@eziba.com>
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason
Date: Fri, 12 Jul 2002 14:18:55 -0500 (CDT)

On Fri, 12 Jul 2002, Ian Robertson wrote:

> In preparing to upgrade our site from 1.03 to 1.11, I just ran a test
> comparing the speed of Mason versions 1.03 and 1.11.  The test
> basically consists of running through a simple template 50 times, and
> reporting the average time per run.  The upshot is a nearly nine-fold
> slow-down in Mason 1.11:

Also, for a more realistic test, I'd suggest you do something in your
component _besides_ simply looping over the same text over and over again,
because this is _not_ how most people use Mason.

Try adding a database query or two into that loop and _then_ time it.
Most likely the database overhead will far outweigh the apparent slowdown
between the two versions.  I suspect 1.11 will still be slower, but not 9
times slower.

Artificial benchmarks like this are just that, artificial.  Since most
Mason apps are likely to access some sort of outside resource (RDBMS, db
file, filesystem, etc.), it is important to include that in your
benchmarks rather than simply benchmarking Mason itself.

Because if its your database that's the bottleneck (as it often will be)
then Mason's speed isn't nearly as important until _after_ you've
optimized all your queries as much as possible.

FWIW, the CVS version seems to be a bit faster, maybe as a result of
eliminating memory leaks?

I'll probably be release 1.12 soon, as eliminating these leaks is pretty
important.


===

From: "Jonathan Swartz" <swartz@pobox.com>
To: "'Dave Rolsky'" <autarch@urth.org>, "'Ian Robertson'" <ian@eziba.com>
Cc: <mason-users@lists.sourceforge.net>, <jay@eziba.com>
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Date: Fri, 12 Jul 2002 12:32:57 -0700

> On Fri, 12 Jul 2002, Ian Robertson wrote:

> > In preparing to upgrade our site from 1.03 to 1.11, I
> > just ran a test comparing the speed of Mason versions
> > 1.03 and 1.11.  The test basically consists of running
> > through a simple template 50 times, and reporting the
> > average time per run.  The upshot is a nearly nine-fold
> > slow-down in Mason 1.11:

> It is slower, but your test is one that exposes one of the
> weaknesses of Mason's implementation.  Basically, very
> large loops create a very large number of method calls in
> the generated object code.

> We might be able to introduce an optimization to improve
> this, but it would probably require us to remove the
> autoflush feature entirely.

Thought about this a bit more: what about an
'enable_autoflush' Compiler parameter that determines
whether the object files call $m->print or just append to a
buffer. It would default to 0 for maximum default
performance.  Then autoflush remains a Request parameter
that only makes sense when enable_autoflush is turned on.

We could use this to tune other rarely used features that
affect performance. But getting rid of the print method
calls is a big one, I think (still haven't had a chance to
run the numbers).

===

From: Ian Robertson <ian@eziba.com>
To: Dave Rolsky <autarch@urth.org>
Cc: Ian Robertson <ian@eziba.com>, mason-users@lists.sourceforge.net,
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason
Date: Fri, 12 Jul 2002 15:44:20 -0400

>>>>> "DR" == Dave Rolsky <autarch@urth.org> writes:

 DR> On Fri, 12 Jul 2002, Ian Robertson wrote:
 >> In preparing to upgrade our site from 1.03 to 1.11, I just ran a test
 >> comparing the speed of Mason versions 1.03 and 1.11.  The test
 >> basically consists of running through a simple template 50 times, and
 >> reporting the average time per run.  The upshot is a nearly nine-fold
 >> slow-down in Mason 1.11:

 DR> Also, for a more realistic test, I'd suggest you do something in your
 DR> component _besides_ simply looping over the same text over and over again,
 DR> because this is _not_ how most people use Mason.

It's actually not so far from how we use Mason - we use a fair amount of
component and def-component calls.  For example, every link and image
source tag is generated by component which customizes urls depending
on a number of factors.  Our standard font is in a component, so all
text blocks are surrounded by component calls to open and close a font
tag.  (We could use </font> to close, but we've found that
<& /font:open &>Text<& /font:close &> has a nice balance to it ).

This was all developed under mason 1.03, and we determined that the
total rendering time was in fact small compared to other factors, such
as database access.

 DR> Try adding a database query or two into that loop and _then_ time it.
 DR> Most likely the database overhead will far outweigh the apparent slowdown
 DR> between the two versions.  I suspect 1.11 will still be slower, but not 9
 DR> times slower.

Actually, it was observations of what was happening to total request
times after a Mason upgrade that led us to investigate Mason
specifically.  We have two machines which, prior to upgrading Mason,
ran identical in time; now the one running Mason 1.11 is taking as
2-3 times as long as the Mason 1.03 box to service http requests, and
the load is substantially higher to boot.
===

From: Dave Rolsky <autarch@urth.org>
To: Ian Robertson <ian@eziba.com>
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason
Date: Fri, 12 Jul 2002 15:29:24 -0500 (CDT)

On Fri, 12 Jul 2002, Ian Robertson wrote:

> It's actually not so far from how we use Mason - we use a fair amount of
> component and def-component calls.  For example, every link and image
> source tag is generated by component which customizes urls depending
> on a number of factors.  Our standard font is in a component, so all
> text blocks are surrounded by component calls to open and close a font
> tag.  (We could use </font> to close, but we've found that
> <& /font:open &>Text<& /font:close &> has a nice balance to it ).
>
> This was all developed under mason 1.03, and we determined that the
> total rendering time was in fact small compared to other factors, such
> as database access.

So is it individual component rendering or component calls that seem much
slower?  The component call code hasn't changed that much, I don't think,
but we'll take a look.

We've really done very little profiling of the new code yet, most of our
work was just concerned with getting it to actually work ;)

> Actually, it was observations of what was happening to total request
> times after a Mason upgrade that led us to investigate Mason
> specifically.  We have two machines which, prior to upgrading Mason,
> ran identical in time; now the one running Mason 1.11 is taking as
> 2-3 times as long as the Mason 1.03 box to service http requests, and
> the load is substantially higher to boot.

Ah, that is worth looking into, indeed.

We'll take a look at component call overhead, hopefully before 1.12.


===

From: "Jonathan Swartz" <swartz@pobox.com>
To: "Dave Rolsky \(E-mail\)" <autarch@urth.org>
Cc: <mason-users@lists.sourceforge.net>, <jay@eziba.com>
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Date: Sat, 13 Jul 2002 05:35:04 -0700

> Also, for a more realistic test, I'd suggest you do something in your
> component _besides_ simply looping over the same text over
> and over again, because this is _not_ how most people use Mason.
> Try adding a database query or two into that loop and _then_ time it.

We should also use an autohandler and, say, five component calls in our
test. We can debate the "average" number of component calls per Mason page,
but it is definitely higher than one, which is what the hello world test
provides.

It's important to get component calls in there because it gives the
once-per-component code more weight in the benchmarks than the
once-per-request code.

===

From: Ian Robertson <ian@eziba.com>
To: <swartz@pobox.com>
Cc: "'Dave Rolsky'" <autarch@urth.org>, "'Ian Robertson'" <ian@eziba.com>,
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Date: Sat, 13 Jul 2002 14:52:19 -0400

>>>>> "JS" == Jonathan Swartz <swartz@pobox.com> writes:

 JS> Thought about this a bit more: what about an 'enable_autoflush' Compiler
 JS> parameter that determines whether the object files call $m->print or just
 JS> append to a buffer. It would default to 0 for maximum default performance.
 JS> Then autoflush remains a Request parameter that only makes sense when
 JS> enable_autoflush is turned on.

I'm not sure that this is the source of the problem.  I've done some
further testing in which I've subclasses Request and overridden the
print method to simply append to a string, or even to do nothing at
all.  Even without producing output Maon 1.11 still runs substantially
slower that an unmodified 1.03.

I've also run both versions against the components that make up our
actual homepage.  Mason 1.03 processes it in .23 second, while it
takes Mason 1.11 a full 1.38 seconds; overriding print to simply noop
only brings it down to 1.28 seconds.  Admittedly, this is running on
my home pc; on actual servers, it will run probably 2-3 times faster,
but it's still significant :).
===

From: Dave Rolsky <autarch@urth.org>
To: Ian Robertson <ian@eziba.com>
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason
Date: Sat, 13 Jul 2002 14:02:22 -0500 (CDT)

On Sat, 13 Jul 2002, Ian Robertson wrote:

> I'm not sure that this is the source of the problem.  I've done some
> further testing in which I've subclasses Request and overridden the
> print method to simply append to a string, or even to do nothing at
> all.  Even without producing output Maon 1.11 still runs substantially
> slower that an unmodified 1.03.

Yep, my testing suggested this wasn't the biggest issue.

> I've also run both versions against the components that make up our
> actual homepage.  Mason 1.03 processes it in .23 second, while it
> takes Mason 1.11 a full 1.38 seconds; overriding print to simply noop
> only brings it down to 1.28 seconds.  Admittedly, this is running on
> my home pc; on actual servers, it will run probably 2-3 times faster,
> but it's still significant :).

We've been discussing this on the dev list but what it comes down to is
the following:

- Params::Validate is being called a lot.  Optimizing it helps (so install
the new 0.20 version once it hits a CPAN mirror near you).  Mason 1.12
will require the new, faster version.

- Class::Container is being called a lot too.  I've sent Ken some speedup
patches so hopefully there will be a new release of this soon as well that
Mason can require.

- Making some objects not be Class::Container subclasses seems to help.
This change will probably be in Mason 1.12.

- Setting the environment variable PERL_NO_VALIDATION to a true value will
make Params::Validate run _much_ faster, because it won't do any
validation ;)  Turning this on in production is probably worthwhile but I
wouldn't recommend it during development, except for benchmarking.

The speedup that this env var provides is _much_ greater with version 0.20
of P::V.

- Setting the static_source parameter for the Interp object may give you a
small but noticeable speed boost.  Again, this is good for production but
would make development unweildy.

Anyway, try some of these out (as the relevant modules become available)
and let us know what you see.  I think it'll provide a noticeable boost,
though it will probably still be slower than version 1.05.


===

From: Ian Robertson <ian@eziba.com>
To: <mason-users@lists.sourceforge.net>
Cc: <jay@eziba.com>
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason
Date: Sun, 14 Jul 2002 23:03:03 -0400

>>>>> "DR" == Dave Rolsky <autarch@urth.org> writes:

 DR> On Sat, 13 Jul 2002, Ian Robertson wrote:
 IBR> I've also run both versions against the components that make up our
 IBR> actual homepage.  Mason 1.03 processes it in .23 second, while it
 IBR> takes Mason 1.11 a full 1.38 seconds; overriding print to simply noop
 IBR> only brings it down to 1.28 seconds.  Admittedly, this is running on
 IBR> my home pc; on actual servers, it will run probably 2-3 times faster,
 IBR> but it's still significant :).

 DR> We've been discussing this on the dev list but what it comes down to is
 DR> the following:

 DR> - Setting the environment variable PERL_NO_VALIDATION to a true value will
 DR> make Params::Validate run _much_ faster, because it won't do any
 DR> validation ;)  Turning this on in production is probably worthwhile but I
 DR> wouldn't recommend it during development, except for benchmarking.

 DR> - Setting the static_source parameter for the Interp object may give you a
 DR> small but noticeable speed boost.  Again, this is good for production but
 DR> would make development unweildy.

Those two in combination make a pretty substantial difference in the
aforementioned test:

    no optimizations:       1.40 seconds
    PERL_NO_VALIDATION:     0.98 seconds
    static_source:          0.74 seconds
    static_source + NO_VAL: 0.54 seconds

This is still double of:
    mason 1.03:             0.23 seconds

But it's getting into much more managable territory :)

BTW, this advice is greatly appreciated.  The new Mason has some very
nice features, and we're itching to get it into production :).  All of
the suggestions are both helpful and reassuring.

===

Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Cc: <mason-users@lists.sourceforge.net>, <jay@eziba.com>
To: Ian Robertson <ian@eziba.com>
From: Ken Williams <ken@mathforum.org>
Date: Mon, 15 Jul 2002 13:25:57 +1000


On Monday, July 15, 2002, at 01:03 PM, Ian Robertson wrote:
> Those two in combination make a pretty substantial difference in the
> aforementioned test:
>
>     no optimizations:       1.40 seconds
>     PERL_NO_VALIDATION:     0.98 seconds
>     static_source:          0.74 seconds
>     static_source + NO_VAL: 0.54 seconds
>
> This is still double of:
>     mason 1.03:             0.23 seconds
>
> But it's getting into much more managable territory :)

Yeah, that's looking much better.

>
> BTW, this advice is greatly appreciated.  The new Mason has some very
> nice features, and we're itching to get it into production :).  All of
> the suggestions are both helpful and reassuring.

We're working pretty hard to make some real gains in performance 
now, and most of the changes are in two other modules 
(Class::Container and Params::Validate) that will have lots of 
internal optimizations in upcoming releases.  Most of the 
Class::Container gains are coming from caching, and most of the 
Params::Validate gains are coming from avoiding lots of data 
structure manipulations.  Mason uses both of these modules 
really heavily.

===

From: Dave Rolsky <autarch@urth.org>
To: Ian Robertson <ian@eziba.com>
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason
Date: Sun, 14 Jul 2002 23:13:14 -0500 (CDT)

On Sun, 14 Jul 2002, Ian Robertson wrote:

> Those two in combination make a pretty substantial difference in the
> aforementioned test:
>
>     no optimizations:       1.40 seconds
>     PERL_NO_VALIDATION:     0.98 seconds
>     static_source:          0.74 seconds

Wow, that's bigger than I thought.  Cool!

>     static_source + NO_VAL: 0.54 seconds

Even better but turning off validation may not be worth it.  Wait til 1.12
which will incorporate 3 new avenues of optimization:

1. Mason itself has been optimized for the common cases of code flow,
particularly when it comes to component calls.

2. Mason will require Params::Validate 0.21, which is quite a bit faster,
particularly the validate_with() function, which Class::Container uses
(and therefore Mason uses), is now more than doubled in speed.

And its PERL_NO_VALIDATION mode is also a bit faster, though I really hope
to avoid pushing people into using it.

I suspect this will translate into a noticeable speed increase for Mason
in general, though I'm not prepared to predict exactly what ;)

3. Mason will require Class::Container 0.06 (or something > 0.05), which
incorporates some good optimizations that I think will also have a
noticeable speed impact on Mason.

> This is still double of:
>     mason 1.03:             0.23 seconds

Double isn't _that_ bad, especially for the majority of people out there
whose bottlenecks will _still_ be external resources.  Although it sounds
like you guys have a somehwat unusual case.

> BTW, this advice is greatly appreciated.  The new Mason has some very
> nice features, and we're itching to get it into production :).  All of
> the suggestions are both helpful and reassuring.

Honestly, the slowdown didn't surprise me.  Mason 1.10 added a lot of new
features, and involved lots of rearchitecting.  We spent basically no time
optimizing, and in fact I think I actively worked to not do so (and
discourage others from doing so), because I wanted it to be _right_ first.

Now that we know we have a good design that works, we can start to
optimize appropriately.

I also think we should create some docs on this sort of stuff, since
things like the PERL_NO_VALIDATION bit are not at all obvious (unless
you're me, cause I'm the author of Params::Validate ;).  And static_source
is documented, but it'd be good to consolidate this all in an "optimizing
Mason" section.  Perhaps in the admin docs.


===

From: Dave Rolsky <autarch@urth.org>
To: Ken Williams <ken@mathforum.org>
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason
Date: Sun, 14 Jul 2002 23:16:17 -0500 (CDT)

On Mon, 15 Jul 2002, Ken Williams wrote:

> Class::Container gains are coming from caching, and most of the
> Params::Validate gains are coming from avoiding lots of data
> structure manipulations.  Mason uses both of these modules

Its not so much the manipulations as the copying.  I work _really_ hard to
avoid copying arrays/hashes more than I absolute must.

This is not to say that everyone should run out and pass references around
_all_ the time, as there's various potential problems with this (plus the
code can be less readable).  It seemed to be a win in this case simply
because the code in question is called a _lot_.

There's also a lot of other funkiness that was involved.  It might make an
interesting case study in Perl code optimization for someone some day.


===

From: "Jonathan Swartz" <swartz@pobox.com>
To: "'Dave Rolsky'" <autarch@urth.org>, "'Ian Robertson'" <ian@eziba.com>
Cc: <mason-users@lists.sourceforge.net>, <jay@eziba.com>
Subject: RE: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Date: Sun, 14 Jul 2002 21:40:10 -0700

> - Setting the environment variable PERL_NO_VALIDATION to a
> true value will
> make Params::Validate run _much_ faster, because it won't do any
> validation ;)  Turning this on in production is probably
> worthwhile but I
> wouldn't recommend it during development, except for benchmarking.
>
> The speedup that this env var provides is _much_ greater with
> version 0.20
> of P::V.

Ok. Some questions/concerns:

1. Do we know the breakdown of parameter validation? e.g. are there a few
validations that make up the majority of calls?

2. Are some/many of the parameter validations protecting internal Mason code
that shouldn't need protection once Mason is out in the field? For example,
no regular Mason user will call Interp::write_object_file or Lexer::lex
directly, so those validations shouldn't need to happen for them. Out in the
field Mason should be validating, at most, user-level API calls like
$interp->exec and $m->comp.

3. Having to set PERL_NO_VALIDATION is unfortunate, because (1) it isn't
configured like everything else, and (2) it will turn off validation
everywhere, including in the user's code and any other modules they call.
It's quite reasonable for the user to want to turn off validation in Mason
(because most of that is useful only for Mason's development) but to use
Params::Validate in their own application code.

Unfortunately making this a regular object parameter is difficult, as it
doesn't belong in any one object. Bring back global config? :) At the very
least it could be a different environment variable.

===

Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Cc: Mason List <mason-users@lists.sourceforge.net>
To: Dave Rolsky <autarch@urth.org>
From: Ken Williams <ken@mathforum.org>
Date: Mon, 15 Jul 2002 18:23:10 +1000


On Monday, July 15, 2002, at 02:16 PM, Dave Rolsky wrote:

> On Mon, 15 Jul 2002, Ken Williams wrote:
>
>> Class::Container gains are coming from caching, and most of the
>> Params::Validate gains are coming from avoiding lots of data
>> structure manipulations.  Mason uses both of these modules
>
> Its not so much the manipulations as the copying.  I work 
> _really_ hard to
> avoid copying arrays/hashes more than I absolute must.

Yeah, that's what I meant, actually.  I remember last time I 
looked at the code there was a lot of copying going on, and I'm 
glad you've found ways to excise it.

===
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason 1.11
Cc: "'Dave Rolsky'" <autarch@urth.org>, "'Ian Robertson'" <ian@eziba.com>,
To: <swartz@pobox.com>
From: Ken Williams <ken@mathforum.org>
Date: Mon, 15 Jul 2002 18:37:23 +1000


On Monday, July 15, 2002, at 02:40 PM, Jonathan Swartz wrote:
> 3. Having to set PERL_NO_VALIDATION is unfortunate, because (1) 
> it isn't
> configured like everything else, and (2) it will turn off validation
> everywhere, including in the user's code and any other modules 
> they call.
> It's quite reasonable for the user to want to turn off 
> validation in Mason
> (because most of that is useful only for Mason's development) 
> but to use
> Params::Validate in their own application code.
>
> Unfortunately making this a regular object parameter is 
> difficult, as it
> doesn't belong in any one object. Bring back global config? :)

It's okay for several classes to share a parameter with 
Class::Container.  It'll filter down to all classes that declare 
it.

===

From: jmelesky@performics.com
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason 1.11
To: mason-users@lists.sourceforge.net
Date: Mon, 15 Jul 2002 14:55:42 -0500 (CDT)

On 14 Jul, Dave Rolsky wrote:
> Honestly, the slowdown didn't surprise me.  Mason 1.10 added a lot of new
> features, and involved lots of rearchitecting.  We spent basically no time
> optimizing, and in fact I think I actively worked to not do so (and
> discourage others from doing so), because I wanted it to be _right_ first.

I think that's valid and admirable (premature optimization being the root of
all evil, and all that), but, especially considering some of the problems
that 1.10 had, is it time to have a separate track for development releases?

Jon, i think, has complained in the past that nobody seems to use the beta
releases, which is probably true. But i think you'd get more feedback from
something that's released under a special "new features" banner. Then you'd
have time to optimize to the point of production-readiness, without people
having already deployed it mistakenly.

It would also serve as an incentive to help test. Early adopters could get
it when they wanted it (early, without needing to go into cvs), and
production-only users would get exposure to new features through the
listserver enough that they might install it just to help get it to the
production-ready version.

Just tossing the idea out there. Thoughts?

===

From: Dave Rolsky <autarch@urth.org>
To: jmelesky@performics.com
Subject: Re: [Mason] Performance differences between Mason 1.03 and Mason
Date: Mon, 15 Jul 2002 15:27:09 -0500 (CDT)

On Mon, 15 Jul 2002 jmelesky@performics.com wrote:

> I think that's valid and admirable (premature optimization being the root of
> all evil, and all that), but, especially considering some of the problems
> that 1.10 had, is it time to have a separate track for development releases?

We did.  I released a 1.09_01 and 1.09_02.  A _few_ people used them.
Most did not.  I could have done a 1.09_03, but frankly, I think that
_most_ of the bugs fixed between 1.10 and 1.11 would _not_ have been
caught with a 1.09_03 anyway.

> Jon, i think, has complained in the past that nobody seems to use the beta
> releases, which is probably true. But i think you'd get more feedback from
> something that's released under a special "new features" banner. Then you'd
> have time to optimize to the point of production-readiness, without people
> having already deployed it mistakenly.

When I released 1.10, I said this:

  While we've done a lot of testing, and have fixed all the reported bugs
  from our two betas, we encourage you to consider this a ".0" release,
  and to test it before putting it into production.

Anyone who rushed out and stuck it in production, and had problems with
it, probably needs to think about revising their development process.

It's worth noting that 1.10 came out on June 25, followed a mere 8 days
later by 1.11.  1.12 should be out this week, meaning it'll have been
about 2 weeks since 1.11.  Anyone who grabbed 1.10 and has gotten it into
production _already_ is probably not doing any serious testing or QA work.

I believe that with 1.12 we will have resolved almost all of the major
issues with the 1.10 release.  In fact, almost all of the bugs were fixed
with 1.11, and very few new ones have been reported, except for the memory
leaks fixed in 1.12.  _And_ 1.12 will have much better performance.

It's worth noting that the 1.0x series, despite being relatively stable,
_still_ had bugs needing fixing even in the last release (1.05).

> It would also serve as an incentive to help test. Early adopters could get
> it when they wanted it (early, without needing to go into cvs), and
> production-only users would get exposure to new features through the
> listserver enough that they might install it just to help get it to the
> production-ready version.

Actually, what might have been better was simply to have made _fewer_
changes for 1.10 (which might as well be 2.0, actually!), in which case it
probably would have been more bug free.  Future major releases will almost
certainly be a smaller jump than 1.05 => 1.10 was.


===





the rest of The Pile (a partial mailing list archive)

doom@kzsu.stanford.edu