develooper Front page | perl.perl5.porters | Postings from February 2014

[perl #121119] [PATCH] speed up miniperl @INC searching, buildcustomize

Thread Previous | Thread Next
bulk88 via RT
February 4, 2014 07:34
[perl #121119] [PATCH] speed up miniperl @INC searching, buildcustomize
Message ID:
On Mon Feb 03 19:02:17 2014, tonyc wrote:
> This made a significant difference, I did 3 runs for a baseline, with
> build durations of 718, 735 and 727 seconds[1].
> I added -DPERL_DISABLE_PMC to the $(MINICORE_OBJ) build command and
> did another three runs with durations of 643, 698 and 675 seconds.
> Taking the median of each that's a 7% reduction in build time.
> Tony
> [1] this was on my normal desktop, which didn't have a lot of CPU
> usage, but I guess there was a lot of noise anyway.

Since this ticket is heading down different directions. I'll point the following 3 ideas in this ticket so far.

1. disabling pmc in miniperl can be done for all OSes, there is also the PERL_IS_MINIPERL macro, so no need to -D it

2. ${^WIN32_SLOPPY_STAT} for Win32 miniperl only

3. /lib first on Win32 miniperl only

The reason I/O is slow on the machine I used is probably a combination of 2 things. A horrible HP RAID controller I've never figured out why its slow. Sequential read speed averages 49 MBps. Random access time 8 ms. But its full of 15K SCSIs. And I'm using WOW64 (32 bit Windows process on 64 bit OS, C stack params and passed struct *s are copied and extended/truncated WOW64 before the 64 bit syscall, it will add a lil overhead probably). My time improvements in abs time saved (minutes) will be the largest of any porter because of these 2 negative factors.

Random thoughts on the code, both S_check_type_and_open and S_doopen_pm do SvPV on their SV.In 1 place in pp_require (doopen_pm's caller), SvPVX is done just before doopen_pm. Multiple magic gets issue. I know with no .pmc, 1 sub replaces the other. The whole sv_newmortal and SvSetSV_nosteal is confusing. Why not just cat onto incoming SV the "c", then SvCUR it off? "if (PerlLIO_stat(SvPV_nolen_const(pmcsv)" that can become SvPVX since sv_catpvn guarentees a PV. In .pmc mode, if there is a .pmc, 2 stats are done on it. 

    if (!IS_SAFE_PATHNAME(p, len, "require"))
        return NULL;
This is done twice on every path between the 2 funcs. I'm not touching the mess that is called pp_require.
bulk88 ~ bulk88 at

via perlbug:  queue: perl5 status: open

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About