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>


Reply via email to