You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 regels
1.6 KiB

9 maanden geleden
  1. #!/usr/bin/perl
  2. #!/usr/local/bin/perl
  3. $out_filename = $argv[0];
  4. $out_filename = "random.rep" unless $out_filename;
  5. $num_blocks = $argv[1];
  6. # $num_blocks = 1200 unless $num_blocks;
  7. $num_blocks = 2400 unless $num_blocks;
  8. $max_blk_size = $argv[2];
  9. $max_blk_size = 32768 unless $max_blk_size;
  10. #print "Output file: $out_filename\n";
  11. #print "Number of blocks: $num_blocks\n";
  12. #print "Max block size: $max_blk_size\n";
  13. # Create trace
  14. # Make a series of malloc()s
  15. for ($i = 0; $i < $num_blocks; $i += 1) {
  16. $size = int(rand $max_blk_size);
  17. $op = {};
  18. $op->{type} = "a";
  19. $op->{seq} = $i;
  20. $op->{size} = $size;
  21. $total_block_size += $size;
  22. push @trace, $op;
  23. }
  24. # Insert free()s in proper places
  25. for ($i = 0; $i < $num_blocks; $i += 1) {
  26. for ($minval = $i; $minval < $num_blocks + $i; $minval += 1) {
  27. if (($trace[$minval]->{type} eq "a") && ($trace[$minval]->{seq} == $i)) {
  28. last;
  29. }
  30. }
  31. $pos = int(rand($num_blocks + $i - $minval - 1) + $minval + 1);
  32. $op = {};
  33. $op->{type} = "f";
  34. $op->{seq} = $i;
  35. splice @trace, $pos, 0, $op;
  36. }
  37. # Open output file
  38. open OUTFILE, ">$out_filename" or die "Cannot create $out_filename\n";
  39. # Calculate misc parameters
  40. $suggested_heap_size = $total_block_size + 100;
  41. $num_ops = 2*$num_blocks;
  42. print OUTFILE "$suggested_heap_size\n";
  43. print OUTFILE "$num_blocks\n";
  44. print OUTFILE "$num_ops\n";
  45. print OUTFILE "1\n";
  46. for ($i = 0; $i < 2*$num_blocks; $i += 1) {
  47. if ($trace[$i]->{type} eq "a") {
  48. print OUTFILE "$trace[$i]->{type} $trace[$i]->{seq} $trace[$i]->{size}\n";
  49. } else {
  50. print OUTFILE "$trace[$i]->{type} $trace[$i]->{seq}\n";
  51. }
  52. }
  53. close OUTFILE;