#!/usr/bin/perl use strict; my $mode = ''; my $depth = 0; my $what = ''; my $setupsize = 0; my $opsize = 0; while(<>) { chomp; if (/===== Running floram (\S+) (\d+)/) { $mode = $1; $depth = $2; $what = ''; $setupsize = 0; $opsize = 0; next; } if (/ORAM ACCESS \(SETUP/) { $what = 'SETUP'; next; } if (/ORAM ACCESS \(READ|WRITE/) { $what = 'OP'; next; } if (/,8,/) { my @F = split(/,/); my @sizes = (); my $i; for ($i=4;$i<=$#F;$i+=3) { push(@sizes, $F[$i]); } if ($what eq '') { die "Unrecognized data line\n"; } if ($what eq 'SETUP') { $setupsize += $sizes[0]; } elsif ($#sizes == 0) { $opsize += 128 * $sizes[0]; } elsif ($#sizes == 1) { $opsize += $sizes[0] + 127 * $sizes[1]; } elsif ($#sizes == 127) { foreach (@sizes) { $opsize += $_; } } else { die "Bad number of data points\n"; } } $what = ''; if (/===== End/) { # The setupsize and opsize are the _sum_ for the two parties, so # add them to get the total size for both parties, and divide by # 2 to get the average size for each party my $bytes = ($setupsize + $opsize) / 2; my $kib = $bytes / 1024; print "$depth $kib\n"; } }