Improve the FPS parameter
Make it possible to provide a list of FPS values that should be tested and add step parameter that tells how the FPS value should be increased
This commit is contained in:
parent
3624456ae2
commit
0a52fb3d26
|
|
@ -12,8 +12,8 @@ sub clamp {
|
||||||
my ($start, $end) = @_;
|
my ($start, $end) = @_;
|
||||||
my @clamped = (0, 0);
|
my @clamped = (0, 0);
|
||||||
|
|
||||||
$clamped[0] = $start < 15 ? 15 : $start;
|
$clamped[0] = $start < 30 ? 30 : $start;
|
||||||
$clamped[1] = $end > 1500 ? 1500 : $end;
|
$clamped[1] = $end > 5000 ? 5000 : $end;
|
||||||
|
|
||||||
return @clamped;
|
return @clamped;
|
||||||
}
|
}
|
||||||
|
|
@ -43,19 +43,20 @@ sub mk_rsock {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub send_benchmark {
|
sub send_benchmark {
|
||||||
my ($lib, $addr, $port, $iter, $threads, $start, $end, $gen_recv) = @_;
|
my ($lib, $addr, $port, $iter, $threads, $gen_recv, @fps_vals) = @_;
|
||||||
my ($sfps, $efps) = clamp($start, $end);
|
|
||||||
my ($socket, $remote, $data);
|
my ($socket, $remote, $data);
|
||||||
|
|
||||||
$socket = mk_ssock($addr, $port);
|
$socket = mk_ssock($addr, $port);
|
||||||
$remote = $socket->accept();
|
$remote = $socket->accept();
|
||||||
|
|
||||||
while ($threads ne 0) {
|
while ($threads ne 0) {
|
||||||
for (my $i = $sfps; $i <= $efps; $i *= 2) {
|
foreach (@fps_vals) {
|
||||||
my $logname = "send_results_$threads" . "threads_$i". "fps_$iter" . "iter";
|
my $fps = $_;
|
||||||
|
my $logname = "send_results_$threads" . "threads_$fps". "fps_$iter" . "iter";
|
||||||
|
|
||||||
for ((1 .. $iter)) {
|
for ((1 .. $iter)) {
|
||||||
$remote->recv($data, 16);
|
$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;
|
$remote->send("end") if $gen_recv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -65,13 +66,12 @@ sub send_benchmark {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub recv_benchmark {
|
sub recv_benchmark {
|
||||||
my ($lib, $addr, $port, $iter, $threads, $start, $end) = @_;
|
my ($lib, $addr, $port, $iter, $threads, @fps_vals) = @_;
|
||||||
my ($sfps, $efps) = clamp($start, $end);
|
|
||||||
my $socket = mk_rsock($addr, $port);
|
my $socket = mk_rsock($addr, $port);
|
||||||
|
|
||||||
while ($threads ne 0) {
|
while ($threads ne 0) {
|
||||||
for (my $i = $sfps; $i <= $efps; $i *= 2) {
|
foreach (@fps_vals) {
|
||||||
my $logname = "recv_results_$threads" . "threads_$i". "fps_$iter" . "iter";
|
my $logname = "recv_results_$threads" . "threads_$_". "fps_$iter" . "iter";
|
||||||
for ((1 .. $iter)) {
|
for ((1 .. $iter)) {
|
||||||
$socket->send("start");
|
$socket->send("start");
|
||||||
system ("time ./$lib/receiver $addr $threads >> $lib/results/$logname 2>&1");
|
system ("time ./$lib/receiver $addr $threads >> $lib/results/$logname 2>&1");
|
||||||
|
|
@ -84,8 +84,8 @@ sub recv_benchmark {
|
||||||
|
|
||||||
# use netcat to capture the stream
|
# use netcat to capture the stream
|
||||||
sub recv_generic {
|
sub recv_generic {
|
||||||
my ($lib, $addr, $port, $iter, $threads, $start, $end) = @_;
|
my ($lib, $addr, $port, $iter, $threads, @fps_vals) = @_;
|
||||||
my ($sfps, $efps) = clamp($start, $end);
|
# my ($sfps, $efps) = clamp($start, $end);
|
||||||
my $socket = mk_rsock($addr, $port);
|
my $socket = mk_rsock($addr, $port);
|
||||||
my $ports = "";
|
my $ports = "";
|
||||||
|
|
||||||
|
|
@ -95,8 +95,8 @@ sub recv_generic {
|
||||||
$ports .= (8888 + $_ * 2) . " " for ((0 .. $threads - 1));
|
$ports .= (8888 + $_ * 2) . " " for ((0 .. $threads - 1));
|
||||||
|
|
||||||
while ($threads ne 0) {
|
while ($threads ne 0) {
|
||||||
for (my $i = $sfps; $i <= $efps; $i *= 2) {
|
foreach (@fps_vals) {
|
||||||
my $logname = "recv_results_$threads" . "threads_$i". "fps";
|
my $logname = "recv_results_$threads" . "threads_$_". "fps";
|
||||||
system "parallel --files nc -kluvw 0 $addr ::: $ports &";
|
system "parallel --files nc -kluvw 0 $addr ::: $ports &";
|
||||||
$socket->send("start");
|
$socket->send("start");
|
||||||
$socket->recv(my $data, 16);
|
$socket->recv(my $data, 16);
|
||||||
|
|
@ -165,16 +165,33 @@ GetOptions(
|
||||||
"threads|t=i" => \(my $threads = 1),
|
"threads|t=i" => \(my $threads = 1),
|
||||||
"start|s=f" => \(my $start = 0),
|
"start|s=f" => \(my $start = 0),
|
||||||
"end|e=f" => \(my $end = 0),
|
"end|e=f" => \(my $end = 0),
|
||||||
|
"step=i" => \(my $step = 0),
|
||||||
"use-nc" => \(my $nc = 0),
|
"use-nc" => \(my $nc = 0),
|
||||||
|
"fps=s" => \(my $fps = ""),
|
||||||
"latency" => \(my $lat = 0),
|
"latency" => \(my $lat = 0),
|
||||||
"help" => \(my $help = 0)
|
"help" => \(my $help = 0)
|
||||||
) or die "failed to parse command line!\n";
|
) or die "failed to parse command line!\n";
|
||||||
|
|
||||||
print_help() if $help;
|
print_help() if $help;
|
||||||
print_help() if !$lib or !$addr or !$port;
|
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"));
|
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 ($role eq "send") {
|
||||||
if ($lat) {
|
if ($lat) {
|
||||||
|
|
@ -182,7 +199,7 @@ if ($role eq "send") {
|
||||||
lat_send($lib, $addr, $port, $role);
|
lat_send($lib, $addr, $port, $role);
|
||||||
} else {
|
} else {
|
||||||
system "make $lib" . "_sender";
|
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" ) {
|
} elsif ($role eq "recv" ) {
|
||||||
if ($lat) {
|
if ($lat) {
|
||||||
|
|
@ -190,9 +207,9 @@ if ($role eq "send") {
|
||||||
lat_recv($lib, $addr, $port, $role);
|
lat_recv($lib, $addr, $port, $role);
|
||||||
} elsif (!$nc) {
|
} elsif (!$nc) {
|
||||||
system "make $lib" . "_receiver";
|
system "make $lib" . "_receiver";
|
||||||
recv_benchmark($lib, $addr, $port, $iter, $threads, $start, $end);
|
recv_benchmark($lib, $addr, $port, $iter, $threads, @fps_vals);
|
||||||
} else {
|
} else {
|
||||||
recv_generic($lib, $addr, $port, $iter, $threads, $start, $end);
|
recv_generic($lib, $addr, $port, $iter, $threads, @fps_vals);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print "invalid role: '$role'\n" and exit;
|
print "invalid role: '$role'\n" and exit;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue