It'd be pretty harmless to apply the RegistryCooker.pm patch once we find a home for sealed.pm (either in this project or as a stand-alone pragma on CPAN). Nothing will segfault without consciously using types on your lexical object reference declarations; otherwise it's a giant noop.
On Tue, Aug 30, 2022 at 12:53 PM Joe Schaefer <j...@sunstarsys.com> wrote: > If you really beat the hell out of it thread-wise, sealed.pm v4.0.0 will > still segfault, but there's not much more I can do with the code at this > point to prevent that. > B::Generate doesn't really support what I'm doing here, which is to do > surgery on an existing op-tree, instead of just playing around with a > user-generated one. > There's no good way to remove the target "method_named" op that we're > replacing with a gv_op. If that can't be supported using B::OP APIs, then > it should > be handled from perl itself. The problem is that the politics around the > feature were never resolved, because nobody wants to change the default > "virtual method" > behavior of Perl's OO-runtime-lookups. Now with the new :sealed > SUBROUTINE ATTRIBUTE, it's only enabled for people (like us) who want it > conditionally applied, > just like we do for the :method attribute. > > On Tue, Aug 30, 2022 at 11:26 AM Joe Schaefer <j...@sunstarsys.com> wrote: > >> Someday this patch might be interesting: >> >> diff -u RegistryCooker.pm~ RegistryCooker.pm >> --- RegistryCooker.pm~ 2022-08-30 11:10:19.790171019 -0400 >> +++ RegistryCooker.pm 2022-08-30 11:12:34.319572045 -0400 >> @@ -399,7 +399,8 @@ >> my $eval = join '', >> 'package ', >> $self->{PACKAGE}, ";", >> - "sub handler {", >> + "use base 'sealed';", >> + "sub handler :Sealed {", >> "local \$0 = '$script_name';", >> $nph, >> $shebang, >> >> On Mon, Aug 29, 2022 at 2:21 PM Joe Schaefer <j...@sunstarsys.com> wrote: >> >>> Forgive me for the pent up frustration of having our wonderful mod_perl >>> project being completely ignored and abandoned by the Perl Steering >>> Committee's frivolous lingustic interests over the years since the Parrot >>> announcement. >>> SaywerX gave us a reason to be hopeful again. Let's see what they do >>> with it. >>> >>> On Mon, Aug 29, 2022 at 1:34 PM Joe Schaefer <j...@sunstarsys.com> wrote: >>> >>>> If the Perl steering committee had any brains left it would have >>>> capitalized on the perl 5.34 release and Co announced modperl2 ithread >>>> compatibility now available with Perl7’s new release. >>>> >>>> Instead they are going to kick the tires on the defaults for strictures >>>> and warnings until nobody cares any more. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Monday, August 29, 2022 1:17:17 PM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> The only reason I’ve been vacillating about glibc/malloc thread safety >>>> is because I couldn’t fathom the fact that people still believed modperl >>>> isn’t compatible with mpm_event at this point in the Perl7 storyline. The >>>> old segfaults of the past that happened in glibc malloc were because Perl >>>> was corrupting the heap in some other part of the codebase, and there’s no >>>> simple way to track it down without a tool like Valgrind, but we weren’t >>>> successful with that effort either. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Monday, August 29, 2022 1:08:00 PM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> Religiously avoid setting up per request ithread environment variables. >>>> Just use PerlSetEnv in your Webserver config. Everything we did in modperl >>>> to support CGI scripts is a train wreck. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Monday, August 29, 2022 1:04:03 PM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> Look into reducing the scope of your interpreters down from the request >>>> level to the handler level. If all you are doing is running registry >>>> scripts, you will get even better scaling out of just a few ithreads per >>>> worker process. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Monday, August 29, 2022 12:57:14 PM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> The only impact to your work with modperl is that you will need to >>>> assess the ithread-safety of your dependent XS-based modules. For example, >>>> use a JSON::XS thread safe alternative- there are several. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Monday, August 29, 2022 12:49:22 PM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> There is a mountain of awful advice floating around about ithreads, >>>> including pretty much everything going on in Raku around adopting the >>>> node.js model instead. It is safe to ignore all that now that SawyerX spit >>>> polished all of the perl5 internals. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Monday, August 29, 2022 12:40:43 PM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> Many of the performance hacks we’ve encouraged over the years, eg >>>> around HTTPD’s lingering close effect, are obsoleted with ithreads. Unless >>>> you send flush buckets down the output filter stack yourself, the “response >>>> handler” phase exits long before the “connection handler” starts making non >>>> blocking socket system calls. So you need an order of magnitude fewer >>>> ithreads than you do prefork children in a multitier arch. >>>> >>>> Get Outlook for iOS <https://aka.ms/o0ukef> >>>> ------------------------------ >>>> *From:* Joe Schaefer <j...@sunstarsys.com> >>>> *Sent:* Sunday, August 28, 2022 11:09:14 AM >>>> *To:* mod_perl list <modperl@perl.apache.org> >>>> *Subject:* Re: sealed.pm v4.0.0 is out >>>> >>>> Benchmark ran on my 2021 Dell Precision Laptop w/ 8 cores + HT (so >>>> 16vCPU) and Ubuntu 22.04 inside WSL2. Never topped 50% avg CPU, and almost >>>> all of the CPU was in userland (not system calls). >>>> >>>> On Sat, Aug 27, 2022 at 11:42 AM <j...@sunstarsys.com> wrote: >>>> >>>> See https://sunstarsys.com/essays/perl7-sealed-lexicals. For the full >>>> effect, you will need to build B::Generate with this patched version >>>> instead: https://github.com/SunStarSys/cms/blob/master/Generate.xs >>>> >>>> >>>> >>>> Sample mod_perl config + benchmarks: >>>> >>>> >>>> >>>> <IfModule mpm_event_module> >>>> >>>> StartServers 2 >>>> >>>> MinSpareThreads 100 >>>> >>>> MaxSpareThreads 500 >>>> >>>> ThreadLimit 1000 >>>> >>>> ThreadsPerChild 100 >>>> >>>> MaxRequestWorkers 1000000 >>>> >>>> MaxConnectionsPerChild 0 >>>> >>>> </IfModule> >>>> >>>> >>>> >>>> <IfModule mod_perl.c> >>>> >>>> PerlSwitches -T -I/home/joesuf4/src/cms/lib >>>> >>>> PerlInterpStart 2 >>>> >>>> PerlInterpMax 4 >>>> >>>> PerlInterpMinSpare 1 >>>> >>>> PerlInterpMaxSpare 4 >>>> >>>> PerlInterpMaxRequests 1000000 >>>> >>>> PerlOptions +GlobalRequest >>>> >>>> >>>> >>>> <Directory /home/joesuf4/src/cms> >>>> >>>> Require all granted >>>> >>>> AddHandler perl-script .pl >>>> >>>> PerlResponseHandler ModPerl::Registry >>>> >>>> Options +ExecCGI >>>> >>>> </Directory> >>>> >>>> >>>> >>>> <Directory /home/joesuf4/src/trunk/content> >>>> >>>> Require all granted >>>> >>>> </Directory> >>>> >>>> >>>> >>>> <VirtualHost *:80> >>>> >>>> ServerName localhost >>>> >>>> DocumentRoot /home/joesuf4/src/trunk/content >>>> >>>> Alias /perl-script /home/joesuf4/src/cms >>>> >>>> </VirtualHost> >>>> >>>> >>>> >>>> </IfModule> >>>> >>>> >>>> >>>> >>>> >>>> ab -n 10000 -c 1000 http://localhost/perl-script/enquiry.pl >>>> >>>> This is ApacheBench, Version 2.3 <$Revision: 1879490 $> >>>> >>>> Copyright 1996 Adam Twiss, Zeus Technology Ltd, >>>> http://www.zeustech.net/ >>>> >>>> Licensed to The Apache Software Foundation, http://www.apache.org/ >>>> >>>> >>>> >>>> Benchmarking localhost (be patient) >>>> >>>> Completed 1000 requests >>>> >>>> Completed 2000 requests >>>> >>>> Completed 3000 requests >>>> >>>> Completed 4000 requests >>>> >>>> Completed 5000 requests >>>> >>>> Completed 6000 requests >>>> >>>> Completed 7000 requests >>>> >>>> Completed 8000 requests >>>> >>>> Completed 9000 requests >>>> >>>> Completed 10000 requests >>>> >>>> Finished 10000 requests >>>> >>>> >>>> >>>> >>>> >>>> Server Software: Apache/2.4.52 >>>> >>>> Server Hostname: localhost >>>> >>>> Server Port: 80 >>>> >>>> >>>> >>>> Document Path: /perl-script/enquiry.pl >>>> >>>> Document Length: 1329 bytes >>>> >>>> >>>> >>>> Concurrency Level: 1000 >>>> >>>> Time taken for tests: 1.218 seconds >>>> >>>> Complete requests: 10000 >>>> >>>> Failed requests: 0 >>>> >>>> Total transferred: 15010000 bytes >>>> >>>> HTML transferred: 13290000 bytes >>>> >>>> Requests per second: 8207.94 [#/sec] (mean) >>>> >>>> Time per request: 121.833 [ms] (mean) >>>> >>>> Time per request: 0.122 [ms] (mean, across all concurrent >>>> requests) >>>> >>>> Transfer rate: 12031.37 [Kbytes/sec] received >>>> >>>> >>>> >>>> Connection Times (ms) >>>> >>>> min mean[+/-sd] median max >>>> >>>> Connect: 0 2 6.2 0 24 >>>> >>>> Processing: 4 93 49.6 82 458 >>>> >>>> Waiting: 1 80 44.5 71 455 >>>> >>>> Total: 17 95 49.5 84 458 >>>> >>>> >>>> >>>> Percentage of the requests served within a certain time (ms) >>>> >>>> 50% 84 >>>> >>>> 66% 100 >>>> >>>> 75% 112 >>>> >>>> 80% 120 >>>> >>>> 90% 147 >>>> >>>> 95% 173 >>>> >>>> 98% 233 >>>> >>>> 99% 318 >>>> >>>> 100% 458 (longest request) >>>> >>>> >>>> >>>> % pgrep -f apache2 | xargs -n1 ps -uwww >>>> >>>> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME >>>> COMMAND >>>> >>>> root 442827 0.0 0.1 18180 14244 ? Ss 11:27 0:00 >>>> /usr/sbin/apache2 -k start >>>> >>>> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME >>>> COMMAND >>>> >>>> www-data 446387 1.7 1.5 7549352 129692 ? Sl 11:28 0:12 >>>> /usr/sbin/apache2 -k start >>>> >>>> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME >>>> COMMAND >>>> >>>> www-data 451006 15.2 1.5 7483708 128468 ? Sl 11:39 0:10 >>>> /usr/sbin/apache2 -k start >>>> >>>> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME >>>> COMMAND >>>> >>>> www-data 451317 11.7 1.4 7483772 119836 ? Sl 11:39 0:07 >>>> /usr/sbin/apache2 -k start >>>> >>>> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME >>>> COMMAND >>>> >>>> www-data 451629 6.4 1.3 7483804 113012 ? Sl 11:39 0:03 >>>> /usr/sbin/apache2 -k start >>>> >>>> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME >>>> COMMAND >>>> >>>> www-data 451929 1.1 1.4 7483816 116668 ? Sl 11:39 0:00 >>>> /usr/sbin/apache2 -k start >>>> >>>> >>>> >>>> -- >>>> Joe Schaefer, Ph.D. >>>> We only build what you need built. >>>> <j...@sunstarsys.com> >>>> 954.253.3732 <//954.253.3732> >>>> >>>> >>>> >>> >>> -- >>> Joe Schaefer, Ph.D. >>> We only build what you need built. >>> <j...@sunstarsys.com> >>> 954.253.3732 <//954.253.3732> >>> >>> >>> >> >> -- >> Joe Schaefer, Ph.D. >> We only build what you need built. >> <j...@sunstarsys.com> >> 954.253.3732 <//954.253.3732> >> >> >> > > -- > Joe Schaefer, Ph.D. > We only build what you need built. > <j...@sunstarsys.com> > 954.253.3732 <//954.253.3732> > > > -- Joe Schaefer, Ph.D. We only build what you need built. <j...@sunstarsys.com> 954.253.3732 <//954.253.3732>