Newsgroup: it.comp.lang.perl
Titolo: performance mod_perl

Mi sono imbattuto in uno strano problema di performance.
Probabilmente si tratta di una questione che andrebbe affrontata in un luogo
dedicato al mod_perl, ma per iniziare la propongo qui.
Mi sono accorto che sulla mia piattaforma (Debian, kernel 2.6.11,
Apache/1.3.33, mod_perl/1.29) il codice Perl che effettua molte letture da
file sembra significativamente meno efficiente quando eseguito sotto
mod_perl. Me ne sono accorto casualmente confrontando l'esecuzione della
stessa applicazione sotto mod_perl e sotto CGI, e ho scritto un semplice
benchmark per mostrarlo.
Eseguendo il seguente codice
 use Benchmark;
 timethis ( 500000, sub { open FX, "/etc/passwd"; my $s = <FX>; } );
come script di startup di mod_perl e come script ordinario, ottengo i
seguenti risultati:
 # apache-perl -X -F
 timethis 500000: 19 wallclock secs (11.03 usr +  7.11 sys = 18.14 CPU) 
     @ 27563.40/s (n=500000)
 # perl /etc/apache-perl/
startup.pl
 timethis 500000: 14 wallclock secs ( 7.87 usr +  6.92 sys = 14.79 CPU) 
  @ 33806.63/s (n=500000)
Ripetendo il test ottengo sempre lo stesso rapporto. La differenza è
sostanziosa. Non so come spiegarla. Le due instanze dell'interprete Perl
sembrano compilate nello stesso modo, giudicando dall'output di "perl -V" e
di "
http://localhost/perl/perl-status/?myconfig
".
Qualcuno ha qualche idea?
Max

 Qualcuno ha qualche idea?
Al momento posso eseguire le prove soltanto su:
WinXP + Apache 2.0.55 + mod_perl 2.0.2
quindi una configurazione molto diversa dalla tua, per cui non so quanto 
possa esserti d'aiuto...
Comunque non rilevo *nessuna* differenza, eseguendo il tuo script da 
linea di comando, o come script di startup di mod_perl (invocato 
mediante PerlRequire), o addirittura come (perl-script) handler 
(PerlResponseHandler) invocato da una transazione http tramite browser: 
i risultati sono pressoché *identici*, anche con un numero di cicli 
molto elevato (maggiore di 500000).
I risultati permangono invariati anche aggiungendo lo switch -X di 
Apache (ci puň essere un rallentamento con Apache monoprocesso se il 
browser tenta di aprire piů connessioni, ma non ha nulla a che vedere 
con il tuo caso, dato il tuo codice e considerato pure che lo stai 
eseguendo come script di startup).
Al momento ho anche una debian box (unstable con gli ultimi pacchetti 
perl e apache-perl disponibili) in produzione (quindi purtroppo non 
posso smanettarci) e non mi sembra di aver mai rilevato un rallentamento 
di questo genere...
Sei su debian e quindi presumo tu stia utilizzando i pacchetti debian 
per perl e apache-perl, e non versioni compilate a manella.
Quindi l'unica cosa che mi viene in mente č un disallineamento tra perl 
e apache-perl: prova ad installare (se puoi) l'ultima versione di questo 
pacchetto per la tua debian e vedi se le cose cambiano...
Magari prova anche ad eseguire lo script come perl-script handler: se il 
rallentamento ci fosse anche lě, in un certo senso sarebbe ancora piů 
grave (se mi rallenta solo 
startup.pl
, dal punto di vista operativo 
chissenefrega, anche se rimane interessante capire il perché...)
Mi rendo conto che come suggerimenti sono tutt'altro che originali, mi 
spiace.
Comunque facci sapere come va a finire, che la cosa č interessante.
Ciao,
Emanuele.