[Omaha.pm] Benchmarking new versions of a module

Jay Hannah jay at jays.net
Mon Jun 5 13:17:12 PDT 2006


So we re-wrote a module today for the sake of speed. Twice. Did we make it faster or slower? How much faster or slower?

Quick temp directory and "use Benchmark;"...

j



$ ls -al
total 53
drwxr-xr-x    2 jhannah  users         168 2006-06-05 15:14 .
drwxrwxrwx    5 pbaker   resmis       1024 2006-06-05 15:13 ..
-rw-r--r--    1 jhannah  users        1479 2006-06-05 15:07 j.pl
-rwxr-xr-x    1 jhannah  users       13886 2006-06-05 14:54 RateRule_new2.pm
-rwxr-xr-x    1 jhannah  users       13748 2006-06-05 14:53 RateRule_new.pm
-rwxr-xr-x    1 jhannah  users       12760 2006-06-05 14:44 RateRule_old.pm


$ cat j.pl
use strict;
use RateRule_old;
use RateRule_new;
use RateRule_new2;
use Benchmark;

timethese(10000, {
   'old' => sub {
       my $obj  = Model::omares::Complex::Rates::RateRule_old->new();
       set_get($obj);
   },
   'new' => sub {
       my $obj  = Model::omares::Complex::Rates::RateRule_new->new();
       set_get($obj);
   },
   'new2' => sub {
       my $obj  = Model::omares::Complex::Rates::RateRule_new2->new();
       set_get($obj);
   }
});


sub set_get {
   my ($obj) = @_;

   my @fields = qw( 
      date
      discount valid_arrival valid_days advance_purchase min_night_stay max_night_stay
      min_adults max_adults max_persons free_sale accepted_len_stay active_status discount
      how_disc extra_money how_apply_money package_code allotment commission commission_amt
      max_advance min_advance
   );
   my %values = qw(
      commission Y
      date       06/05/2006
   );
   my $field;
   foreach $field (@fields) {
      my $get = "get_$field";
      my $set = "set_$field";
      #print "$field...\n";
      my $value = $values{$field} || 100;
      $obj->$set($value);
      my $check = $obj->$get;
      die "[$field] failed on obj $obj ($check ne $value)" unless ($check eq $value);
   }

}


$ perl j.pl
Benchmark: timing 10000 iterations of new, new2, old...
       new:  5 wallclock secs ( 5.44 usr +  0.00 sys =  5.44 CPU) @ 1838.24/s (n=10000)
      new2:  2 wallclock secs ( 2.05 usr +  0.00 sys =  2.05 CPU) @ 4878.05/s (n=10000)
       old: 18 wallclock secs (17.61 usr +  0.01 sys = 17.62 CPU) @ 567.54/s (n=10000)




More information about the Omaha-pm mailing list