Submitted a Pull Request for the Generate.xs patch:
https://github.com/rurban/b-generate/pull/2
Added more comments to sealed.pm to explain the rationale behind the #
replace $methop logic,
since it differs from what Doug did back in 2000.

On Tue, Aug 30, 2022 at 2:52 PM Joe Schaefer <j...@sunstarsys.com> wrote:

> Take a walk down history lane with me here:
> https://www.perl.com/pub/2000/06/dougpatch.html/
>
> Like ithreads, the idea was sparked from Gurusamy's genius, coded up by
> Doug, and largely forgotten by p5p politics.
> It's not that it couldn't be done, they arrived at the place where it
> *shouldn't* be done, which was deflating for mod_perl fans.
> Simon Couzens made a lot of inroads since, with modularized Perl compilers
> and B::Generate, but it wasn't until
> Perl7 that I was motivated to try any way forward, on a more limited,
> controllable scale.
>
> What do you think?  How should this piece of the mod_perl puzzle fit in to
> the CPAN universe?
>
> On Tue, Aug 30, 2022 at 2:12 PM Joe Schaefer <j...@sunstarsys.com> wrote:
>
>> Every method call that's implemented in XS is looked-up at compile-time
>> in that script, even for class methods.
>> That's the sweet spot for :sealed.  The only other things I do with it
>> are a few hot methods in Dotiac::DTL::Core, but that's probably not worth
>> the bother.
>>
>> On Tue, Aug 30, 2022 at 1:14 PM Joe Schaefer <j...@sunstarsys.com> wrote:
>>
>>> Just look through my commit history on this sample Registry script to
>>> see what's involved in getting sealed activated on your scripts.
>>>
>>> https://github.com/SunStarSys/cms/blob/master/enquiry.pl
>>>
>>> On Tue, Aug 30, 2022 at 1:12 PM Joe Schaefer <j...@sunstarsys.com> wrote:
>>>
>>>> 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>
>>>>
>>>>
>>>>
>>>
>>> --
>>> 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>

Reply via email to