|
@@ -9,6 +9,10 @@ my $mode = '';
|
|
my %res = ();
|
|
my %res = ();
|
|
my $offlinebytes = 0;
|
|
my $offlinebytes = 0;
|
|
my $netsetup = '';
|
|
my $netsetup = '';
|
|
|
|
+my %online_s_data = ();
|
|
|
|
+my %online_kib_data = ();
|
|
|
|
+my %total_s_data = ();
|
|
|
|
+my %total_kib_data = ();
|
|
|
|
|
|
while(<>) {
|
|
while(<>) {
|
|
if (/Network setup: (.*)/) {
|
|
if (/Network setup: (.*)/) {
|
|
@@ -41,26 +45,105 @@ while(<>) {
|
|
$res{$size}->{'totbytes'} += $totbytes;
|
|
$res{$size}->{'totbytes'} += $totbytes;
|
|
}
|
|
}
|
|
if (/===== End /) {
|
|
if (/===== End /) {
|
|
|
|
+ my $label = "CircuitORAM read $size $netsetup$iters";
|
|
my $online = &max3($res{$size}->{'COnline Time'},
|
|
my $online = &max3($res{$size}->{'COnline Time'},
|
|
$res{$size}->{'DOnline Time'},
|
|
$res{$size}->{'DOnline Time'},
|
|
$res{$size}->{'EOnline Time'});
|
|
$res{$size}->{'EOnline Time'});
|
|
my $total = &max3($res{$size}->{'CETE'},
|
|
my $total = &max3($res{$size}->{'CETE'},
|
|
$res{$size}->{'DETE'},
|
|
$res{$size}->{'DETE'},
|
|
$res{$size}->{'EETE'});
|
|
$res{$size}->{'EETE'});
|
|
- print "CircuitORAMOnln read $size $netsetup$iters $online s\n";
|
|
+ &accum_data(\%online_s_data, $label, $online);
|
|
- print "CircuitORAMTotl read $size $netsetup$iters $total s\n";
|
|
+ &accum_data(\%total_s_data, $label, $total);
|
|
# Note that the java code reports bandwidth *per iteration*
|
|
# Note that the java code reports bandwidth *per iteration*
|
|
my $onlinekib = $res{$size}->{'onlbytes'} * $iters / 1024;
|
|
my $onlinekib = $res{$size}->{'onlbytes'} * $iters / 1024;
|
|
my $totalkib = $res{$size}->{'totbytes'} * $iters / 1024;
|
|
my $totalkib = $res{$size}->{'totbytes'} * $iters / 1024;
|
|
- print "CircuitORAMOnln read $size $netsetup$iters $onlinekib KiB\n";
|
|
+ &accum_data(\%online_kib_data, $label, $onlinekib);
|
|
- print "CircuitORAMTotl read $size $netsetup$iters $totalkib KiB\n";
|
|
+ &accum_data(\%total_kib_data, $label, $totalkib);
|
|
undef $res{$size};
|
|
undef $res{$size};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+# Convert the data (in the form [n, sum, sum_squares]) to statistics (in
|
|
|
|
+# the form [mean, variance])
|
|
|
|
+my %online_s_stats = ();
|
|
|
|
+my %online_kib_stats = ();
|
|
|
|
+my %total_s_stats = ();
|
|
|
|
+my %total_kib_stats = ();
|
|
|
|
+&statsify(\%online_s_stats, \%online_s_data);
|
|
|
|
+&statsify(\%online_kib_stats, \%online_kib_data);
|
|
|
|
+&statsify(\%total_s_stats, \%total_s_data);
|
|
|
|
+&statsify(\%total_kib_stats, \%total_kib_data);
|
|
|
|
+
|
|
|
|
+# Output the data
|
|
|
|
+&output_stats(\%online_s_stats, "Onln", "s");
|
|
|
|
+&output_stats(\%online_kib_stats, "Onln", "KiB");
|
|
|
|
+&output_stats(\%total_s_stats, "Totl", "s");
|
|
|
|
+&output_stats(\%total_kib_stats, "Totl", "KiB");
|
|
|
|
+
|
|
|
|
+# Subroutines
|
|
|
|
+
|
|
sub max3 {
|
|
sub max3 {
|
|
my $m = $_[0];
|
|
my $m = $_[0];
|
|
$m = $_[1] if $_[1] > $m;
|
|
$m = $_[1] if $_[1] > $m;
|
|
$m = $_[2] if $_[2] > $m;
|
|
$m = $_[2] if $_[2] > $m;
|
|
$m;
|
|
$m;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+# Pass:
|
|
|
|
+# - a reference to a dictionary
|
|
|
|
+# - the key into that dictionary
|
|
|
|
+# - the new data point
|
|
|
|
+# Data is stored in the dictionary as a triple (n, sum, sum_squares)
|
|
|
|
+sub accum_data {
|
|
|
|
+ my ($dict, $key, $data) = @_;
|
|
|
|
+ $dict->{$key} = [0, 0, 0] unless defined $dict->{$key};
|
|
|
|
+ $dict->{$key}->[0] += 1;
|
|
|
|
+ $dict->{$key}->[1] += $data;
|
|
|
|
+ $dict->{$key}->[2] += ($data * $data);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# Convert data (in the form [n, sum, sum_squares]) to statistics (in
|
|
|
|
+# the form [mean, variance])
|
|
|
|
+sub statsify {
|
|
|
|
+ my ($sdict, $ddict) = @_;
|
|
|
|
+ my $key;
|
|
|
|
+ foreach $key (keys %$ddict) {
|
|
|
|
+ my $data = $ddict->{$key};
|
|
|
|
+ my $n = $data->[0];
|
|
|
|
+ my $sum = $data->[1];
|
|
|
|
+ my $sumsq = $data->[2];
|
|
|
|
+ if ($n == 0) {
|
|
|
|
+ $sdict->{$key} = [undef, undef];
|
|
|
|
+ } elsif ($n == 1) {
|
|
|
|
+ $sdict->{$key} = [$sum, undef];
|
|
|
|
+ } else {
|
|
|
|
+ $sdict->{$key} = [$sum/$n, ($sumsq - ($sum*$sum/$n))/($n-1)];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# Turn a stat array [mean, variance] into a string to display
|
|
|
|
+sub statstr {
|
|
|
|
+ my $data = $_[0];
|
|
|
|
+ if (defined $data->[1]) {
|
|
|
|
+ my $mean = $data->[0];
|
|
|
|
+ my $stddev = $data->[1] > 0 ? sqrt($data->[1]) : 0;
|
|
|
|
+ return "$mean ± $stddev";
|
|
|
|
+ } elsif (defined $data->[0]) {
|
|
|
|
+ return $data->[0];
|
|
|
|
+ } else {
|
|
|
|
+ return "none"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# Output the stats in the given dictionary. Append $phase to the
|
|
|
|
+# protocol name, and add $units to the end.
|
|
|
|
+sub output_stats {
|
|
|
|
+ my ($dict, $phase, $units) = @_;
|
|
|
|
+ my $label;
|
|
|
|
+ foreach $label (sort keys %$dict) {
|
|
|
|
+ my $printlabel = $label;
|
|
|
|
+ $printlabel =~ s/CircuitORAM/CircuitORAM$phase/;
|
|
|
|
+ print $printlabel, " ", &statstr($dict->{$label}), " $units\n";
|
|
|
|
+ }
|
|
|
|
+}
|