#!/usr/bin/perl
|
|
#!/usr/local/bin/perl
|
|
|
|
$out_filename = $argv[0];
|
|
$out_filename = "random.rep" unless $out_filename;
|
|
$num_blocks = $argv[1];
|
|
# $num_blocks = 1200 unless $num_blocks;
|
|
$num_blocks = 2400 unless $num_blocks;
|
|
$max_blk_size = $argv[2];
|
|
$max_blk_size = 32768 unless $max_blk_size;
|
|
|
|
#print "Output file: $out_filename\n";
|
|
#print "Number of blocks: $num_blocks\n";
|
|
#print "Max block size: $max_blk_size\n";
|
|
|
|
# Create trace
|
|
# Make a series of malloc()s
|
|
for ($i = 0; $i < $num_blocks; $i += 1) {
|
|
$size = int(rand $max_blk_size);
|
|
$op = {};
|
|
$op->{type} = "a";
|
|
$op->{seq} = $i;
|
|
$op->{size} = $size;
|
|
$total_block_size += $size;
|
|
push @trace, $op;
|
|
}
|
|
# Insert free()s in proper places
|
|
for ($i = 0; $i < $num_blocks; $i += 1) {
|
|
for ($minval = $i; $minval < $num_blocks + $i; $minval += 1) {
|
|
if (($trace[$minval]->{type} eq "a") && ($trace[$minval]->{seq} == $i)) {
|
|
last;
|
|
}
|
|
}
|
|
$pos = int(rand($num_blocks + $i - $minval - 1) + $minval + 1);
|
|
$op = {};
|
|
$op->{type} = "f";
|
|
$op->{seq} = $i;
|
|
splice @trace, $pos, 0, $op;
|
|
}
|
|
|
|
# Open output file
|
|
open OUTFILE, ">$out_filename" or die "Cannot create $out_filename\n";
|
|
|
|
# Calculate misc parameters
|
|
$suggested_heap_size = $total_block_size + 100;
|
|
$num_ops = 2*$num_blocks;
|
|
|
|
print OUTFILE "$suggested_heap_size\n";
|
|
print OUTFILE "$num_blocks\n";
|
|
print OUTFILE "$num_ops\n";
|
|
print OUTFILE "1\n";
|
|
|
|
for ($i = 0; $i < 2*$num_blocks; $i += 1) {
|
|
if ($trace[$i]->{type} eq "a") {
|
|
print OUTFILE "$trace[$i]->{type} $trace[$i]->{seq} $trace[$i]->{size}\n";
|
|
} else {
|
|
print OUTFILE "$trace[$i]->{type} $trace[$i]->{seq}\n";
|
|
}
|
|
}
|
|
|
|
close OUTFILE;
|
|
|