Eric Snow <ericsnowcurren...@gmail.com> added the comment:

On Fri, Aug 27, 2021 at 6:29 PM Guido van Rossum <rep...@bugs.python.org> wrote:
> The plot thickens. By searching my extensive GMail archives for Jeethu Rao I 
> found
> an email from Sept. 14 to python-dev by Larry Hastings titled "Store startup 
> modules
> as C structures for 20%+ startup speed improvement?"

Thanks for finding that, Guido!

On Fri, Aug 27, 2021 at 6:37 PM Guido van Rossum <rep...@bugs.python.org> wrote:
> Either way it's a suboptimal experience for people contributing to those 
> modules. But
> we stand to gain a ~20% startup time improvement.

Agreed, and I think a solution shouldn't be too hard to reach.

On Fri, Aug 27, 2021 at 7:48 PM Larry Hastings <rep...@bugs.python.org> wrote:
> In experimenting with the prototype, I observed that simply calling stat() to 
> ensure
> the frozen .py file hadn't changed on disk lost us about half the performance 
> win
> from this approach.

Yeah, this is an approach others had suggested and I'd considered.  We
have other solutions available that don't have that penalty.

On Fri, Aug 27, 2021 at 8:08 PM Larry Hastings <rep...@bugs.python.org> wrote:
> There should be a boolean flag that enables/disables cached copies of .py 
> files from
> Lib/.  You should be able to turn it off with either an environment variable 
> or a
> command-line option, and when it's off it skips all the internal cached stuff 
> and
> uses the normal .py / .pyc machinery.
>
> With that in place, it'd be great to pre-cache all the .py files 
> automatically read in
> at startup.

Yeah, something along these lines should be good enough.

> [snip]
> But then I'm not sure this is a very good analogy--the workflow for making 
> Clinic
> changes is very different from people hacking on Lib/*.py.

Agreed.

On Fri, Aug 27, 2021 at 10:06 PM Guido van Rossum
<rep...@bugs.python.org> wrote:
> [snip]
> FWIW in my attempts to time this, it looks like the perf benefits of Eric's 
> approach are
> close to those of deep-freezing. And deep-freezing causes much more bloat of 
> the
> source code and of the resulting binary.

The question of freeze vs deep-freeze (i.e. is deep-freeze better
enough) is one we can discuss separately, and your point here is
probably the fundamental center of that discussion.  However, I don't
think it has a lot of bearing on the change proposed in this issue.

> [snip]
> I think the only solution here was hinted at in the python-dev thread from 
> 2018: have
> a command-line flag to turn it on or off (e.g. -X deepfreeze=1/0) and have a 
> policy for
> what the default for that flag should be (e.g. on by default in production 
> builds, off by
> default in developer builds -- anything that doesn't use 
> --enable-optimizations).

Agreed.

> [snip]
> it wasn't so clear that code objects should be immutable -- that realization 
> came later,
> when Greg Stein proposed making them ROM-able. That didn't work out, but the
> notion that code objects should be strictly mutable (to the python user, at 
> least)
> was born

This sounds like an interesting story.  Do you have any mailing list
links handy?  (Otherwise I can search the archives.)

> In fact, Eric's approach freezes everything in the encodings package, which 
> turns out
> to be a lot of files and a lot of code (lots of simple data tables expressed 
> in code), and
> I found that for basic startup time, it's best not to deep-freeze the 
> encodings module
> except for __init__.py, aliases.py and utf_8.py.

Yeah, this is something to consider.  FWIW, in my testing, dropping
encodings.* from the
list of frozen modules reduced the performance gains (from 20 ms to 21 ms).

-eric

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45020>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to