#!/usr/bin/perl -w use strict; use constant n => qq[\012]; require LWP::UserAgent; my($iters) = 20; my(@cgis) = qw( foo.pl bar.pl ); my($lwp) = {}; my($times) = {}; my($reqs) = {}; my($score) = 0; my($mult) = 0; my($tot) = 0; my($i) = 0; my($top) = ''; my($tstr) = q[qq[iter $iters on $_ was %.5f secs]]; foreach (@cgis) { $$reqs{$_} = HTTP::Request->new('GET', $_) } foreach (1..$iters) { ++$i; foreach (@cgis) { $$times{$_} += &bench($_) } } foreach (@cgis) { print(n, sprintf(eval($tstr),$$times{$_})) } $tot = $$times{$cgis[0]} + $$times{$cgis[1]}; my($faster,$slower) = (($$times{$cgis[0]} <=> $$times{$cgis[1]}) < 0) ? ($$times{$cgis[0]},$$times{$cgis[1]},&mark([$cgis[0],$cgis[1]])) : ($$times{$cgis[1]},$$times{$cgis[0]},&mark([$cgis[1],$cgis[0]])); $mult = $slower/$faster; $faster = ($faster/$tot)*100; $slower = ($slower/$tot)*100; $score = ($slower/$faster)*100; =pod x TIMES FASTER DISP print ( n . $$top[0] . ' was ' . sprintf('%.2f',$mult) . ' times faster than ' . $$top[1] ); =cut print ( n.n . $$top[0] . ' was ' . sprintf('%.0f',$score) . '% faster than ' . $$top[1] . n.n ); exit; sub mark { $top=shift(@_)||$top; $top } sub bench { my($cgi) = shift(@_); my($ss) = 0; my($sf) = 0; $lwp = LWP::UserAgent->new('keep_alive'=>0,'timeout'=>5); # each new agent get's its own name, so apache knows # it's a new client $lwp->agent(qq[$cgi $i]); $ss = (times)[0]; &bench_apache($$reqs{$cgi}); $sf = (times)[0]; undef($lwp); print(qq[iter $i on $cgi took ].sprintf('%.5f',($sf - $ss)).' secs'.n); return($sf-$ss); } sub bench_apache { ${\ $lwp->request(shift(@_)) }->status_line() } BEGIN { ++$| }