Create script for parsing the benchmark results
This commit is contained in:
parent
223503ab16
commit
cfbeda2ccc
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
use warnings;
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
# extract average send/receive goodputs
|
||||||
|
# and calculate averages for the time command outputs
|
||||||
|
sub parse_kvzrtp_recv {
|
||||||
|
my ($path) = @_;
|
||||||
|
|
||||||
|
open(my $fh, '<', $path) or die "failed to open file";
|
||||||
|
|
||||||
|
my ($t_usr, $t_sys, $t_cpu, $t_total, $t_time, $t_bytes, $lines);
|
||||||
|
|
||||||
|
# each iteration parses one benchmark run
|
||||||
|
while (my $line = <$fh>) {
|
||||||
|
$line = <$fh>;
|
||||||
|
my ($bytes, $time) = ($line =~ m/(\d+)\s(\d+)/);
|
||||||
|
|
||||||
|
$line = <$fh>;
|
||||||
|
my ($usr, $sys, $total, $cpu) = ($line =~ m/(\d+\.\d+)user\s(\d+\.\d+)system\s0:(\d+.\d+)elapsed\s(\d+)%CPU/);
|
||||||
|
|
||||||
|
# discard line about inputs, outputs and pagefaults
|
||||||
|
$line = <$fh>;
|
||||||
|
|
||||||
|
# update total
|
||||||
|
$t_usr += $usr;
|
||||||
|
$t_sys += $sys;
|
||||||
|
$t_cpu += $cpu;
|
||||||
|
$t_total += $total;
|
||||||
|
$t_time += $time;
|
||||||
|
$t_bytes += $bytes;
|
||||||
|
$lines += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $gp = int((($t_bytes / $lines) / 1000 / 1000 / ($t_time / $lines)) * 1000);
|
||||||
|
|
||||||
|
print "$path: \n";
|
||||||
|
print "\tuser: " . $t_usr / $lines . "\n";
|
||||||
|
print "\tsystem: " . $t_sys / $lines . "\n";
|
||||||
|
print "\tcpu: " . $t_cpu / $lines . "\n";
|
||||||
|
print "\ttotal: " . $t_total / $lines . "\n";
|
||||||
|
print "\ttime: " . $t_time / $lines . " ms\n";
|
||||||
|
print "\tgoodput: " . $gp . " MB/s\n";
|
||||||
|
|
||||||
|
close $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_kvzrtp_send {
|
||||||
|
my ($path) = @_;
|
||||||
|
|
||||||
|
open(my $fh, '<', $path) or die "failed to open file";
|
||||||
|
|
||||||
|
my ($t_usr, $t_sys, $t_cpu, $t_total, $t_time, $t_bytes, $lines);
|
||||||
|
|
||||||
|
# each iteration parses one benchmark run
|
||||||
|
while (my $line = <$fh>) {
|
||||||
|
$line = <$fh>;
|
||||||
|
my @nums = $line =~ /(\d+)/g;
|
||||||
|
|
||||||
|
$line = <$fh>;
|
||||||
|
my ($usr, $sys, $total, $cpu) = ($line =~ m/(\d+\.\d+)user\s(\d+\.\d+)system\s0:(\d+.\d+)elapsed\s(\d+)%CPU/);
|
||||||
|
|
||||||
|
# discard line about inputs, outputs and pagefaults
|
||||||
|
$line = <$fh>;
|
||||||
|
|
||||||
|
# update total
|
||||||
|
$t_usr += $usr;
|
||||||
|
$t_sys += $sys;
|
||||||
|
$t_cpu += $cpu;
|
||||||
|
$t_total += $total;
|
||||||
|
$t_bytes += $nums[0];
|
||||||
|
$t_time += $nums[3];
|
||||||
|
$lines += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $gp = int((($t_bytes / $lines) / 1000 / 1000 / ($t_time / $lines)) * 1000);
|
||||||
|
|
||||||
|
print "$path: \n";
|
||||||
|
print "\tuser: " . $t_usr / $lines . "\n";
|
||||||
|
print "\tsystem: " . $t_sys / $lines . "\n";
|
||||||
|
print "\tcpu: " . $t_cpu / $lines . "\n";
|
||||||
|
print "\ttotal: " . $t_total / $lines . "\n";
|
||||||
|
print "\ttime: " . $t_time / $lines . " ms\n";
|
||||||
|
print "\tgoodput: " . $gp . " MB/s\n";
|
||||||
|
|
||||||
|
close $fh;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($#ARGV + 1 != 3) {
|
||||||
|
print "usage: ./benchmarks.pl"
|
||||||
|
. "\n\t<kvzrtp|ffmpeg|gstreamer>"
|
||||||
|
. "\n\t<send|recv>"
|
||||||
|
. "\n\t<path to log file>\n" and exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
my ($lib, $role, $path) = @ARGV;
|
||||||
|
|
||||||
|
if ($lib eq "kvzrtp") {
|
||||||
|
if ($role eq "send") {
|
||||||
|
parse_kvzrtp_send($path);
|
||||||
|
} else {
|
||||||
|
parse_kvzrtp_recv($path);
|
||||||
|
}
|
||||||
|
} elsif ($lib eq "ffmpeg") {
|
||||||
|
die "not implemented";
|
||||||
|
} elsif ($lib eq "gstreamer") {
|
||||||
|
die "not implemented";
|
||||||
|
} else {
|
||||||
|
die "unknown lib: $lib";
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue