-sub stddev ($$$){ #http://en.wikipedia.org/wiki/Standard_deviation
- my $sum = shift;
- my $squaresum = shift;
- my $count = shift;
- return sqrt( 1 / $count * ( $squaresum - $sum*$sum / $count ))
-}
-
-sub makerrds($$$$){
- my $count = shift;
- my $total = shift;
- my $list = shift;
- my $time = shift;
- my @files;
- for (1..$count){
- my $id = sprintf ("%07d",$total);
- $id =~ s/^(.)(.)(.)(.)(.)//;
- push @$list, "$1/$2/$3/$4/$5/$id";
- -d "$1" or mkdir "$1";
- -d "$1/$2" or mkdir "$1/$2";
- -d "$1/$2/$3" or mkdir "$1/$2/$3";
- -d "$1/$2/$3/$4" or mkdir "$1/$2/$3/$4";
- -d "$1/$2/$3/$4/$5" or mkdir "$1/$2/$3/$4/$5";
- push @files, $list->[$total];
- create $list->[$total++],$time-2;
- print STDERR ".";
- }
- for (@files){
- my $fd = new IO::File("$_.rrd","r");
- if (defined $fd) {
- $fd->sync;
- $fd->close;
- } else {
- warn "failed to sync $_\n";
- }
- }
- return $count;
-}
-
-
-sub main (){
- mkdir "db-$$" or die $!;
- chdir "db-$$";
-
- my $step = 100000; # number of rrds to creat for every round
-
- my @path;
- my $time=int(time);
-
- my $tracksize = 0;
- my $uppntr = 0;
-
-
- my %squaresum = ( cr => 0, up => 0 );
- my %sum = ( cr => 0, up => 0 );
- my %count =( cr => 0, up => 0 );
-
- my $printtime = time;
- while (1) {
- # enhance the track
- $time += 300;
- $tracksize += makerrds $step,$tracksize,\@path,$time;
- # run benchmark
- for (0..10){
- $time += 300;
- my $count = 0;
- my $sum = 0;
- my $squaresum = 0;
- for (my $i = 0; $i<$tracksize;$i ++){
- my $elapsed = update($path[$i],$time);
- $sum += $elapsed;
- $squaresum += $elapsed**2;
- $count++;
- };
-# for (my $i = 0; $i<$tracksize;$i ++){
-# my $fh = new IO::File "$path[$i].rrd","r";
-# if (defined $fh) {
-# $fh->sync;
-# $fh->close;
-# } else {
-# warn "failed to sync $path[$i]\n";
-# }
-# }
- my $ups = $count/$sum;
- my $sdv = stddev($sum,$squaresum,$count);
- printf STDERR "%4d %6.0f Up/s (%6.5f sdv)\n",$count,$ups,$sdv;
- }
- print STDERR "\n";
- exit ;
- }
-}