diff --git a/benchmarks/benchmark.pl b/benchmarks/benchmark.pl index 6cd4157..76dd858 100755 --- a/benchmarks/benchmark.pl +++ b/benchmarks/benchmark.pl @@ -12,8 +12,8 @@ sub clamp { my ($start, $end) = @_; my @clamped = (0, 0); - $clamped[0] = $start < 15 ? 15 : $start; - $clamped[1] = $end > 1500 ? 1500 : $end; + $clamped[0] = $start < 30 ? 30 : $start; + $clamped[1] = $end > 5000 ? 5000 : $end; return @clamped; } @@ -43,19 +43,20 @@ sub mk_rsock { } sub send_benchmark { - my ($lib, $addr, $port, $iter, $threads, $start, $end, $gen_recv) = @_; - my ($sfps, $efps) = clamp($start, $end); + my ($lib, $addr, $port, $iter, $threads, $gen_recv, @fps_vals) = @_; my ($socket, $remote, $data); $socket = mk_ssock($addr, $port); $remote = $socket->accept(); while ($threads ne 0) { - for (my $i = $sfps; $i <= $efps; $i *= 2) { - my $logname = "send_results_$threads" . "threads_$i". "fps_$iter" . "iter"; + foreach (@fps_vals) { + my $fps = $_; + my $logname = "send_results_$threads" . "threads_$fps". "fps_$iter" . "iter"; + for ((1 .. $iter)) { $remote->recv($data, 16); - system ("time ./$lib/sender $addr $threads $i >> $lib/results/$logname 2>&1"); + system ("time ./$lib/sender $addr $threads $fps >> $lib/results/$logname 2>&1"); $remote->send("end") if $gen_recv; } } @@ -65,13 +66,12 @@ sub send_benchmark { } sub recv_benchmark { - my ($lib, $addr, $port, $iter, $threads, $start, $end) = @_; - my ($sfps, $efps) = clamp($start, $end); + my ($lib, $addr, $port, $iter, $threads, @fps_vals) = @_; my $socket = mk_rsock($addr, $port); while ($threads ne 0) { - for (my $i = $sfps; $i <= $efps; $i *= 2) { - my $logname = "recv_results_$threads" . "threads_$i". "fps_$iter" . "iter"; + foreach (@fps_vals) { + my $logname = "recv_results_$threads" . "threads_$_". "fps_$iter" . "iter"; for ((1 .. $iter)) { $socket->send("start"); system ("time ./$lib/receiver $addr $threads >> $lib/results/$logname 2>&1"); @@ -84,8 +84,8 @@ sub recv_benchmark { # use netcat to capture the stream sub recv_generic { - my ($lib, $addr, $port, $iter, $threads, $start, $end) = @_; - my ($sfps, $efps) = clamp($start, $end); + my ($lib, $addr, $port, $iter, $threads, @fps_vals) = @_; + # my ($sfps, $efps) = clamp($start, $end); my $socket = mk_rsock($addr, $port); my $ports = ""; @@ -95,8 +95,8 @@ sub recv_generic { $ports .= (8888 + $_ * 2) . " " for ((0 .. $threads - 1)); while ($threads ne 0) { - for (my $i = $sfps; $i <= $efps; $i *= 2) { - my $logname = "recv_results_$threads" . "threads_$i". "fps"; + foreach (@fps_vals) { + my $logname = "recv_results_$threads" . "threads_$_". "fps"; system "parallel --files nc -kluvw 0 $addr ::: $ports &"; $socket->send("start"); $socket->recv(my $data, 16); @@ -155,7 +155,7 @@ sub print_help { . "\t--port \n" . "\t--lib \n\n" and exit; } - + GetOptions( "lib|l=s" => \(my $lib = ""), "role|r=s" => \(my $role = ""), @@ -165,16 +165,33 @@ GetOptions( "threads|t=i" => \(my $threads = 1), "start|s=f" => \(my $start = 0), "end|e=f" => \(my $end = 0), + "step=i" => \(my $step = 0), "use-nc" => \(my $nc = 0), + "fps=s" => \(my $fps = ""), "latency" => \(my $lat = 0), "help" => \(my $help = 0) ) or die "failed to parse command line!\n"; print_help() if $help; print_help() if !$lib or !$addr or !$port; -print_help() if (!$start or !$end) and !$lat; +print_help() if ((!$start or !$end) and !$fps) and !$lat; die "not implemented\n" if !grep (/$lib/, ("uvgrtp", "ffmpeg")); +my @fps_vals = (); + +if (!$lat) { + if ($fps) { + @fps_vals = split ",", $fps; + } else { + ($start, $end) = clamp($start, $end); + for (my $i = $start; $i <= $end; ) { + push @fps_vals, $i; + + if ($step) { $i += $step; } + else { $i *= 2; } + } + } +} if ($role eq "send") { if ($lat) { @@ -182,7 +199,7 @@ if ($role eq "send") { lat_send($lib, $addr, $port, $role); } else { system "make $lib" . "_sender"; - send_benchmark($lib, $addr, $port, $iter, $threads, $start, $end, $nc); + send_benchmark($lib, $addr, $port, $iter, $threads, $nc, @fps_vals); } } elsif ($role eq "recv" ) { if ($lat) { @@ -190,9 +207,9 @@ if ($role eq "send") { lat_recv($lib, $addr, $port, $role); } elsif (!$nc) { system "make $lib" . "_receiver"; - recv_benchmark($lib, $addr, $port, $iter, $threads, $start, $end); + recv_benchmark($lib, $addr, $port, $iter, $threads, @fps_vals); } else { - recv_generic($lib, $addr, $port, $iter, $threads, $start, $end); + recv_generic($lib, $addr, $port, $iter, $threads, @fps_vals); } } else { print "invalid role: '$role'\n" and exit;