1,5 → 1,6 |
// FIXME |
// oneFile support |
// better speed unit convert |
// |
package ak.diskbench; |
|
118,47 → 119,12 |
throw new IllegalArgumentException("unrecignized"); |
} |
} |
|
return true; |
} |
catch(Exception ex) { |
return false; |
} |
|
if(threadNumber <= 0) { |
log.error("Number of threads must be positive"); |
return false; |
} |
|
if(length <= 0) { |
log.error("Length of file must be positive"); |
return false; |
} |
|
if(bufLength <= 0) { |
log.error("Length of buffer must be positive"); |
return false; |
} |
|
if(randomWrites < 0) { |
log.error("Number of random writes must be non-negative"); |
return false; |
} |
|
if(randomReads < 0) { |
log.error("Number of random reads must be non-negative"); |
return false; |
} |
|
if(sleepMin < 0) { |
log.error("Min sleep must be non-negative"); |
return false; |
} |
|
if(sleepMax < sleepMin) { |
log.error("Max sleep may not be less then min sleep"); |
return false; |
} |
|
return true; |
} |
|
private void run() |
178,9 → 144,9 |
DiskThread dt = new DiskThread(); |
workers.add(dt); |
|
dt.setFileName(oneFile ? "test.bin" : "test" + dt.getId() + ".bin"); |
dt.setFileName("file" + dt.getId() + ".txt"); |
dt.setSeed(seed); |
dt.setCreateFile(i == 0 || !oneFile); |
dt.setCreateFile(!oneFile); |
dt.setLength(length); |
dt.setBufLength(bufLength); |
dt.setRandomWrites(randomWrites); |
221,12 → 187,10 |
ResultInfo r = dt.getResult(); |
if(r.success) { |
successes++; |
if(i == 0 || !oneFile) { |
if(sequentialWriteStart > r.sequentialWriteStart) |
sequentialWriteStart = r.sequentialWriteStart; |
if(sequentialWriteStop < r.sequentialWriteStop) |
sequentialWriteStop = r.sequentialWriteStop; |
} |
if(sequentialWriteStart > r.sequentialWriteStart) |
sequentialWriteStart = r.sequentialWriteStart; |
if(sequentialWriteStop < r.sequentialWriteStop) |
sequentialWriteStop = r.sequentialWriteStop; |
if(sequentialReadStart > r.sequentialReadStart) |
sequentialReadStart = r.sequentialReadStart; |
if(sequentialReadStop < r.sequentialReadStop) |
247,18 → 211,17 |
|
log.info("done " |
+ "sequential write: " + (sequentialWriteStop - sequentialWriteStart) + "ms = " |
+ Utils.calcSpeed(length * (oneFile ? 1 : successes), |
sequentialWriteStop - sequentialWriteStart) |
+ Utils.calcSpeed(length * successes, sequentialWriteStop - sequentialWriteStart) |
+ "; sequential read: " + (sequentialReadStop - sequentialReadStart) + "ms = " |
+ Utils.calcSpeed(length * successes, sequentialReadStop - sequentialReadStart) |
+ (randomWrites == 0 ? "" : "; random write: " + (randomWriteStop - randomWriteStart) |
+ "ms = " + Utils.calcSpeed(bufLength * randomWrites * successes, |
randomWriteStop - randomWriteStart)) |
+ (randomReads == 0 ? "" : "; random read: " + (randomReadStop - randomReadStart) |
+ "ms = " + Utils.calcSpeed(bufLength * randomReads * successes, |
randomReadStop - randomReadStart)) |
+ "; random write: " + (randomWriteStop - randomWriteStart) + "ms = " |
+ Utils.calcSpeed(bufLength * randomWrites * successes, |
randomWriteStop - randomWriteStart) |
+ "; random read: " + (randomReadStop - randomReadStart) + "ms = " |
+ Utils.calcSpeed(bufLength * randomReads * successes, |
randomReadStop - randomReadStart) |
+ "; " + fails + " failed"); |
} |
} |
} |
|
class ResultInfo |
462,8 → 425,9 |
+ (result.sequentialWriteStop - result.sequentialWriteStart) + "ms = " |
+ Utils.calcSpeed(length, |
result.sequentialWriteStop - result.sequentialWriteStart)); |
|
barrier.await(); |
} |
barrier.await(); |
|
// sequential read |
file.seek(0); |
477,34 → 441,29 |
barrier.await(); |
|
// random write |
if(randomWrites > 0) { |
result.randomWriteStart = System.currentTimeMillis(); |
for(int j = 0; j < randomWrites; j++) { |
result.writeSleep += sleep(); |
file.seek((long)(random.nextDouble() * (length - bufLength))); |
file.write(buf); |
} |
result.randomWriteStop = System.currentTimeMillis(); |
log.info("random write: " + (result.randomWriteStop - result.randomWriteStart) |
+ "ms = " + Utils.calcSpeed(bufLength * randomWrites, |
result.randomWriteStop - result.randomWriteStart)); |
result.randomWriteStart = System.currentTimeMillis(); |
for(int j = 0; j < randomWrites; j++) { |
result.writeSleep += sleep(); |
file.seek((long)(random.nextDouble() * (length - bufLength))); |
file.write(buf); |
} |
result.randomWriteStop = System.currentTimeMillis(); |
log.info("random write: " + (result.randomWriteStop - result.randomWriteStart) + "ms = " |
+ Utils.calcSpeed(bufLength * randomWrites, |
result.randomWriteStop - result.randomWriteStart)); |
barrier.await(); |
|
// random read |
if(randomWrites > 0) { |
result.randomReadStart = System.currentTimeMillis(); |
for(int j = 0; j < randomReads; j++) { |
result.readSleep += sleep(); |
file.seek((long)(random.nextDouble() * length)); |
file.read(buf); |
} |
result.randomReadStop = System.currentTimeMillis(); |
log.info("random read: " + (result.randomReadStop - result.randomReadStart) |
+ "ms = " + Utils.calcSpeed(bufLength * randomReads, |
result.randomReadStop - result.randomReadStart)); |
result.randomReadStart = System.currentTimeMillis(); |
for(int j = 0; j < randomReads; j++) { |
result.readSleep += sleep(); |
file.seek((long)(random.nextDouble() * length)); |
file.read(buf); |
} |
barrier.await(); |
result.randomReadStop = System.currentTimeMillis(); |
log.info("random read: " + (result.randomReadStop - result.randomReadStart) + "ms = " |
+ Utils.calcSpeed(bufLength * randomReads, |
result.randomReadStop - result.randomReadStart)); |
|
result.success = true; |
result.stopTime = System.currentTimeMillis(); |
532,7 → 491,7 |
|
class Utils |
{ |
private static final String[] units = {"", "K", "M", "G", "T", "P"}; |
private static final String[] units = {"", "K", "M", "G", "T"}; |
|
public static String calcSpeed(long amount, long time) |
{ |
541,7 → 500,7 |
double speed = (double)amount / time * 1000; |
int power = 0; |
|
while(speed >= 1000 && power < units.length) { |
while(speed >= 10000 && power < units.length) { |
power++; |
speed /= 1024; |
} |
553,8 → 512,6 |
// replacement of java.util.concurrent.CyclicBarrier from Java 1.5 |
class CyclicBarrier |
{ |
private static Log log = LogFactory.getLog(CyclicBarrier.class); |
|
private int parties; |
private int waiting = 0; |
private Runnable barrierAction = null; |