Index: misc/httpbench.pl
===================================================================
--- misc/httpbench.pl	(revision 00355546c42a724d647f978c4fa7cf04d492679e)
+++ misc/httpbench.pl	(revision 560dfd2b1a74dc1e3a2120a1a6a05c9130b9a661)
@@ -8,5 +8,5 @@
 use Parallel::ForkManager;
 use LWP::Simple;
-use Time::HiRes qw(sleep);
+use Time::HiRes qw(sleep gettimeofday);
 
 usage() if (@ARGV == 0);
@@ -32,27 +32,55 @@
 warn "$num urls with $concurrency clients, $loops loops\n";
 warn "Total: ", $num * $concurrency * $loops, " requests\n";
-warn "wait for $wait second between requests\n";
+warn "wait for $wait second between requests\n" if ($wait);
 
 
+my $transfer = 0;
+my $pm = Parallel::ForkManager->new($concurrency);
+$pm->run_on_finish(
+    sub {
+        my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $dataref) = @_;
+        if (defined $dataref) {
+            $transfer += $$dataref;
+        }
+    }
+);
 
-my $pm = Parallel::ForkManager->new($concurrency);
-for (my $child = 0; $child < $concurrency; $child++) {
-    if ($pm->start) {
-        warn "forks $child/$concurrency child ...\n";
-        next;
+my ($startsec, $startmicro) = gettimeofday();
+{
+    use bytes;
+    for (my $child = 0; $child < $concurrency; $child++) {
+        if ($pm->start) {
+            warn "forks $child/$concurrency child ...\n";
+            next;
+        }
+            my $transfer = 0;
+            for (my $i = 0; $i < $loops; $i++) {
+                print STDERR "processing $i/$loops loop\r";
+                foreach my $url (@urls) {
+                    my $res = get($url) or print STDERR "\nfail: $url";
+                    if ($res) {
+                        $transfer += length($res);
+                    }
+                    sleep($wait);
+                }
+            }
+        $pm->finish(0, \$transfer);
     }
-        for (my $i = 0; $i < $loops; $i++) {
-            print STDERR "processing $i/$loops loop\r";
-            foreach my $url (@urls) {
-                get($url) or warn "fail: $url\n";
-                sleep($wait);
-            }
-        }
-    $pm->finish;
+    $pm->wait_all_children;
 }
-$pm->wait_all_children;
+my ($endsec, $endmicro) = gettimeofday();
+my $elapsed = ($endsec - $startsec) + ($endmicro - $startmicro) / 10**6;
+my $bytepersec = $transfer / $elapsed;
+
+my @units = qw( B/s KiB/s MiB/s GiB/s );
+my $unit = 0;
+while ($bytepersec > 1024) {
+    $bytepersec /= 1024;
+    $unit++;
+}
+$bytepersec = sprintf("%.4g", $bytepersec);
 
 warn "\n ...done.\n";
-
+warn "get $transfer bytes in $elapsed seconds ($bytepersec $units[$unit])\n";
 
 sub usage {
