Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- mode=$1
- if [ -z "$mode" ]; then
- echo "Usage $0 <incremental|random|fixed>"
- exit -1
- fi
- mode=$1
- src=`pwd`/test/src
- dst=`pwd`/test/dst
- srcfile=$src/test.tar
- dstfile=$dst/test.tar
- mkdir -p $src
- mkdir -p $dst
- filesize=100MB
- #build a 10GB file from a smaller download. You can tweak filesize and the loop below for lower bandwidth
- if [ ! -f $srcfile ]; then
- cd $src
- if [ ! -f $srcfile.dl ]; then
- wget http://download.thinkbroadband.com/${filesize}.zip --output-document=$srcfile.dl
- fi
- rm -rf tarbase
- mkdir tarbase
- for i in {1..100}; do
- cp --reflink=always $srcfile.dl tarbase/$i.dl
- done
- tar -cvf $srcfile tarbase
- rm -rf tarbase
- fi
- cat <<END > $src/FileTest.java
- import java.io.IOException;
- import java.io.RandomAccessFile;
- public class FileTest {
- public static final int BLOCK_SIZE = 50000;
- public static final int MAX_ITERATIONS = 40000;
- public static void main(String args[]) throws IOException {
- String mode = args[0];
- RandomAccessFile f = new RandomAccessFile(args[1], "rw");
- //int offset = 0;
- int i;
- int offset = new java.util.Random().nextInt(BLOCK_SIZE); // initializer ONLY for incremental mode
- for (i=0; i < MAX_ITERATIONS; i++) {
- try {
- int writeOffset;
- if (mode.equals("incremental")) {
- writeOffset = new java.util.Random().nextInt(offset + i * BLOCK_SIZE);
- } else if (mode.equals("fixed")) {
- writeOffset = i * BLOCK_SIZE;
- offset = writeOffset; // for reporting it at the end
- } else { // mode.equals random
- writeOffset = new java.util.Random().nextInt(((int)f.length() - 100));
- offset = writeOffset; // for reporting it at the end
- }
- if (writeOffset > (f.length() - 100)) {
- break;
- }
- f.seek(writeOffset);
- f.writeBytes("DEADBEEF");
- } catch (java.io.IOException e) {
- System.out.println("EOF");
- break;
- }
- }
- //System.out.print("Last offset=" + offset);
- //System.out.println(". Made " + i + " random writes.");
- f.close();
- }
- }
- END
- cd $src
- javac FileTest.java
- /usr/bin/time --format 'rm: %E' rm -rf $dst/*
- cp --reflink=always $srcfile $dst/1.tst
- popd
- pushd $dst
- for i in {1..20}; do
- echo -n "$i."
- i_plus=`expr $i + 1`
- write[$i]=`/usr/bin/time --format '%e' java -cp $src FileTest $mode $i.tst 2>&1`
- cp[$i]=`/usr/bin/time --format '%e' cp --reflink=always $i.tst $i_plus.tst 2>&1`
- rm[$i]=`/usr/bin/time --format '%e' rm $i.tst 2>&1`
- sync[$i]=`/usr/bin/time --format '%e' sync 2>&1`
- sleep 1
- done
- echo "write cp rm sync" > ${mode}.csv
- popd
- for i in {1..20}; do
- echo "${write[$i]} ${cp[$i]} ${rm[$i]} ${sync[$i]}" >> ${mode}.csv
- done
- echo -n
RAW Paste Data