The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

stopwatch - benchmark mod_perl vs. CGI with File::CounterFile

DESCRIPTION

I have a stopwatch here. It consists of a CGI program that must be installed so that it can be accessed both as Apache::Registry routine and as CGI program. The program assumes that the environment variable SCRIPT_FILENAME is set and writes different counterfiles for the two access methods. On the client side I use LWP. Here's the CGI program:

    #!/usr/bin/perl

    use CGI::Switch;
    use File::CounterFile; # part of LWP
    my $q = new CGI::Switch;
    $q->print(
       $q->header,
       $q->start_html(),
       $q->start_form(),
       $q->textfield(-name => "textfield"),
       $q->submit(),
       $q->end_form,
       "<p>textfield = ", $q->param("textfield"),
    );

    my $cfile =
        $ENV{SCRIPT_FILENAME} =~ m{/perl/} ? "C-apache" : "C-cgi";

    my $c = File::CounterFile->new($cfile,"00000000");
    my $id = $c->inc;

    $q->print(
              "<H4>", scalar(localtime()),"</H4>\n",
              sprintf("Accessed %d times (%d)\n",$id,$$),
              $q->end_html,
             );

And here is how I access it:

    perl -MLWP::UserAgent -MURI::URL -e '
    $ua = new LWP::UserAgent;
    $curl = url("http:");
    $curl->query_form(textfield => 12345);
    $req = new HTTP::Request "POST", "http://localhost/perl/forbench";
                                                     # ^^^^^^^^^^^^^
                                                     # change that
    $req->content_type("application/x-www-form-urlencoded");
    $req->content($curl->equery);
    printf "%s\n", $1
        while $ua->request($req)->as_string =~ /(Ac.*)/m;
    '

I have this program run in one window for /perl/forbench and in another window for /cgi-bin/forbench. While I'm typing this, the two counters have reached the numbers 5215 and 141. A speed advantage of 37:1 on my Linux box. When I try this on my Indy I get a relation of 20:1. The advantage seems to be system dependent.

AUTHOR

Andreas J. Koenig <k@anna.in-berlin.de>