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<mailto: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<http://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. [https://ci3.googleusercontent.com/mail-sig/AIorK4xJ9wGYA7VWN-zW0DcpKll4IC6JxLGTMmDkmdn4h4eHliQhOGGu1nAHJcSkYVnw1jXF8E--UGA] We only build what you need built. <j...@sunstarsys.com<mailto:j...@sunstarsys.com>> 954.253.3732<tel://954.253.3732>