Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1130 → Rev 1131

/diskbench/trunk/src/ak/diskbench/DiskBench.java
1,6 → 1,5
// FIXME
// oneFile support
// better speed unit convert
//
package ak.diskbench;
 
119,12 → 118,47
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()
144,9 → 178,9
DiskThread dt = new DiskThread();
workers.add(dt);
 
dt.setFileName("file" + dt.getId() + ".txt");
dt.setFileName(oneFile ? "test.bin" : "test" + dt.getId() + ".bin");
dt.setSeed(seed);
dt.setCreateFile(!oneFile);
dt.setCreateFile(i == 0 || !oneFile);
dt.setLength(length);
dt.setBufLength(bufLength);
dt.setRandomWrites(randomWrites);
187,10 → 221,12
ResultInfo r = dt.getResult();
if(r.success) {
successes++;
if(sequentialWriteStart > r.sequentialWriteStart)
sequentialWriteStart = r.sequentialWriteStart;
if(sequentialWriteStop < r.sequentialWriteStop)
sequentialWriteStop = r.sequentialWriteStop;
if(i == 0 || !oneFile) {
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)
211,17 → 247,18
 
log.info("done "
+ "sequential write: " + (sequentialWriteStop - sequentialWriteStart) + "ms = "
+ Utils.calcSpeed(length * successes, sequentialWriteStop - sequentialWriteStart)
+ Utils.calcSpeed(length * (oneFile ? 1 : successes),
sequentialWriteStop - sequentialWriteStart)
+ "; sequential read: " + (sequentialReadStop - sequentialReadStart) + "ms = "
+ Utils.calcSpeed(length * successes, sequentialReadStop - sequentialReadStart)
+ "; random write: " + (randomWriteStop - randomWriteStart) + "ms = "
+ Utils.calcSpeed(bufLength * randomWrites * successes,
randomWriteStop - randomWriteStart)
+ "; random read: " + (randomReadStop - randomReadStart) + "ms = "
+ Utils.calcSpeed(bufLength * randomReads * successes,
randomReadStop - randomReadStart)
+ (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))
+ "; " + fails + " failed");
}
}
}
 
class ResultInfo
425,9 → 462,8
+ (result.sequentialWriteStop - result.sequentialWriteStart) + "ms = "
+ Utils.calcSpeed(length,
result.sequentialWriteStop - result.sequentialWriteStart));
barrier.await();
}
barrier.await();
 
// sequential read
file.seek(0);
441,29 → 477,34
barrier.await();
 
// random write
result.randomWriteStart = System.currentTimeMillis();
for(int j = 0; j < randomWrites; j++) {
result.writeSleep += sleep();
file.seek((long)(random.nextDouble() * (length - bufLength)));
file.write(buf);
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.randomWriteStop = System.currentTimeMillis();
log.info("random write: " + (result.randomWriteStop - result.randomWriteStart) + "ms = "
+ Utils.calcSpeed(bufLength * randomWrites,
result.randomWriteStop - result.randomWriteStart));
barrier.await();
 
// random read
result.randomReadStart = System.currentTimeMillis();
for(int j = 0; j < randomReads; j++) {
result.readSleep += sleep();
file.seek((long)(random.nextDouble() * length));
file.read(buf);
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.randomReadStop = System.currentTimeMillis();
log.info("random read: " + (result.randomReadStop - result.randomReadStart) + "ms = "
+ Utils.calcSpeed(bufLength * randomReads,
result.randomReadStop - result.randomReadStart));
barrier.await();
 
result.success = true;
result.stopTime = System.currentTimeMillis();
491,7 → 532,7
 
class Utils
{
private static final String[] units = {"", "K", "M", "G", "T"};
private static final String[] units = {"", "K", "M", "G", "T", "P"};
 
public static String calcSpeed(long amount, long time)
{
500,7 → 541,7
double speed = (double)amount / time * 1000;
int power = 0;
 
while(speed >= 10000 && power < units.length) {
while(speed >= 1000 && power < units.length) {
power++;
speed /= 1024;
}
512,6 → 553,8
// 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;
/diskbench/trunk/build.xml
40,13 → 40,13
<target name="run" depends="compile">
<java classname="ak.diskbench.DiskBench" fork="yes">
<classpath refid="run.classpath" />
<arg value="thr=10" />
<arg value="thr=4" />
<arg value="oneFile=false" />
<arg value="seed=0" />
<arg value="length=20971520" />
<arg value="buf=8192" />
<arg value="rwrite=1000" />
<arg value="rread=1000" />
<arg value="rwrite=0" />
<arg value="rread=0" />
<arg value="sleepMin=0" />
<arg value="sleepMax=0" />
</java>
56,13 → 56,14
<java classname="ak.diskbench.DiskBench" fork="yes">
<classpath refid="run.classpath" />
<arg value="thr=100" />
<arg value="req=100" />
<arg value="rpc=5" />
<arg value="sleepMin=1000" />
<arg value="sleepMax=10000" />
<arg value="timeout=60000" />
<arg value="firstUrl=" />
<arg value="http://tomcat.sun.int.26th.net/kickup/" />
<arg value="oneFile=true" />
<arg value="seed=0" />
<arg value="length=1074790400" />
<arg value="buf=8192" />
<arg value="rwrite=1000" />
<arg value="rread=1000" />
<arg value="sleepMin=0" />
<arg value="sleepMax=0" />
</java>
</target>