Guest User

btrfstest.sh

a guest
Feb 29th, 2012
44
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3. mode=$1
  4. if [ -z "$mode" ]; then
  5.     echo "Usage $0 <incremental|random|fixed>"
  6.     exit -1
  7. fi
  8. mode=$1
  9.  
  10. src=`pwd`/test/src
  11. dst=`pwd`/test/dst
  12. srcfile=$src/test.tar
  13. dstfile=$dst/test.tar
  14.  
  15. mkdir -p $src
  16. mkdir -p $dst
  17.  
  18. filesize=100MB
  19.  
  20. #build a 10GB file from a smaller download. You can tweak filesize and the loop below for lower bandwidth
  21. if [ ! -f $srcfile ]; then
  22.     cd $src
  23.     if [ ! -f $srcfile.dl ]; then
  24.         wget http://download.thinkbroadband.com/${filesize}.zip --output-document=$srcfile.dl
  25.     fi
  26.     rm -rf tarbase
  27.     mkdir tarbase
  28.     for  i in {1..100}; do
  29.         cp --reflink=always $srcfile.dl tarbase/$i.dl
  30.     done
  31.     tar -cvf $srcfile tarbase
  32.     rm -rf tarbase
  33. fi
  34.  
  35. cat <<END > $src/FileTest.java
  36. import java.io.IOException;
  37. import java.io.RandomAccessFile;
  38. public class FileTest {
  39.     public static final int BLOCK_SIZE = 50000;
  40.     public static final int MAX_ITERATIONS = 40000;
  41.     public static void main(String args[]) throws IOException {
  42.         String mode = args[0];
  43.         RandomAccessFile f = new RandomAccessFile(args[1], "rw");
  44.         //int offset = 0;
  45.         int i;
  46.         int offset = new java.util.Random().nextInt(BLOCK_SIZE); // initializer ONLY for incremental mode
  47.         for (i=0; i < MAX_ITERATIONS; i++) {
  48.             try {
  49.                 int writeOffset;
  50.                 if (mode.equals("incremental")) {
  51.                     writeOffset = new java.util.Random().nextInt(offset + i * BLOCK_SIZE);
  52.                 }  else if (mode.equals("fixed")) {
  53.                     writeOffset = i * BLOCK_SIZE;
  54.                     offset = writeOffset; // for reporting it at the end
  55.                 } else { // mode.equals random
  56.                     writeOffset = new java.util.Random().nextInt(((int)f.length() - 100));
  57.                     offset = writeOffset; // for reporting it at the end
  58.                 }
  59.         if (writeOffset > (f.length() - 100)) {
  60.             break;
  61.         }
  62.                 f.seek(writeOffset);
  63.                 f.writeBytes("DEADBEEF");
  64.             } catch (java.io.IOException e) {
  65.                 System.out.println("EOF");
  66.                 break;
  67.             }
  68.         }
  69.         //System.out.print("Last offset=" + offset);
  70.         //System.out.println(". Made " + i + " random writes.");
  71.         f.close();
  72.     }
  73. }
  74. END
  75.  
  76. cd $src
  77. javac FileTest.java
  78.  
  79.  
  80. /usr/bin/time --format 'rm: %E' rm -rf $dst/*
  81. cp --reflink=always $srcfile $dst/1.tst
  82. popd
  83.  
  84. pushd $dst
  85. for i in {1..20}; do
  86.     echo -n "$i."
  87.     i_plus=`expr $i + 1`
  88.     write[$i]=`/usr/bin/time --format '%e' java -cp $src FileTest $mode $i.tst 2>&1`
  89.     cp[$i]=`/usr/bin/time --format '%e' cp --reflink=always $i.tst $i_plus.tst 2>&1`
  90.     rm[$i]=`/usr/bin/time --format '%e' rm $i.tst 2>&1`
  91.     sync[$i]=`/usr/bin/time --format '%e' sync 2>&1`
  92.     sleep 1
  93. done
  94. echo "write cp  rm  sync" > ${mode}.csv
  95. popd
  96.  
  97. for i in {1..20}; do
  98.     echo "${write[$i]}  ${cp[$i]}   ${rm[$i]}   ${sync[$i]}" >> ${mode}.csv
  99. done
  100. echo -n
RAW Paste Data