Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1173 → Rev 1160

/diskbench/trunk/src/ak/diskbench/DiskBench.java
1,3 → 1,6
// FIXME
// - temporary file names
//
package ak.diskbench;
 
import java.util.List;
20,6 → 23,8
public static void main(String[] args)
throws Exception
{
Sweeper.init();
 
DiskBench db = new DiskBench();
 
if(db.parseParams(args))
170,19 → 175,9
+ " " + length + "/" + bufLength + " " + randomWrites + "/" + randomReads
+ " " + sleepMin + "/" + sleepMax);
 
List threads = new ArrayList();
List workers = new ArrayList();
List threads = new ArrayList();
List workers = new ArrayList();
 
File commonTempFile;
if(oneFile) {
commonTempFile = File.createTempFile("db_", null, new File(dirName, "."));
commonTempFile.deleteOnExit();
}
else {
commonTempFile = null;
}
 
 
DiskThread.prepare(threadNumber);
for(int i = 0; i < threadNumber; i++) {
log.debug("create thread " + i);
190,17 → 185,8
DiskThread dt = new DiskThread();
workers.add(dt);
 
File tempFile;
if(oneFile) {
tempFile = commonTempFile;
}
else {
tempFile = File.createTempFile("db-" + dt.getId() + "_", null,
new File(dirName, "."));
tempFile.deleteOnExit();
}
 
dt.setFile(tempFile);
dt.setFileName((dirName == null ? "" : dirName)
+ (oneFile ? "test.bin" : "test" + dt.getId() + ".bin"));
dt.setSeed(seed);
dt.setCreateFile(i == 0 || !oneFile);
dt.setLength(length);
313,7 → 299,7
}
 
private int id;
private File file;
private String fileName;
private long seed = 0;
private boolean createFile = true;
private long length = 1024 * 1024; // 1M
335,14 → 321,14
return id;
}
 
public File getFile()
public String getFileName()
{
return file;
return fileName;
}
 
public void setFile(File file)
public void setFileName(String fileName)
{
this.file = file;
this.fileName = fileName;
}
 
public boolean getCreateFile()
449,8 → 435,25
result.writeSleep = 0;
result.readSleep = 0;
 
// try to delete the test file if it exists and abort execution on exception
if(createFile) {
try {
if((new File(fileName)).delete())
log.debug(Integer.toString(id) + ": test file "
+ fileName + " deleted");
}
catch(Exception ex) {
result.success = false;
result.stopTime = System.currentTimeMillis();
result.exception = ex;
log.warn(Integer.toString(id)
+ ": cannot delete the test file, execution aborted", ex);
return;
}
}
 
try {
RandomAccessFile f = new RandomAccessFile(file, "rw");
RandomAccessFile file = new RandomAccessFile(fileName, "rw");
Random random = (seed > 0) ? new Random(seed) : new Random();
byte[] buf = new byte[bufLength];
 
458,9 → 461,10
 
// sequential write
if(createFile) {
Sweeper.addFile(fileName);
result.sequentialWriteStart = System.currentTimeMillis();
for(int j = 0; j < length / bufLength; j++) {
f.write(buf);
file.write(buf);
}
result.sequentialWriteStop = System.currentTimeMillis();
log.info("sequential write: "
471,9 → 475,9
barrier.await();
 
// sequential read
f.seek(0);
file.seek(0);
result.sequentialReadStart = System.currentTimeMillis();
while(f.read(buf) > 0);
while(file.read(buf) > 0);
result.sequentialReadStop = System.currentTimeMillis();
log.info("sequential read: "
+ (result.sequentialReadStop - result.sequentialReadStart) + "ms = "
486,8 → 490,8
result.randomWriteStart = System.currentTimeMillis();
for(int j = 0; j < randomWrites; j++) {
result.writeSleep += sleep();
f.seek((long)(random.nextDouble() * (length - bufLength)));
f.write(buf);
file.seek((long)(random.nextDouble() * (length - bufLength)));
file.write(buf);
}
result.randomWriteStop = System.currentTimeMillis();
log.info("random write: " + (result.randomWriteStop - result.randomWriteStart)
501,8 → 505,8
result.randomReadStart = System.currentTimeMillis();
for(int j = 0; j < randomReads; j++) {
result.readSleep += sleep();
f.seek((long)(random.nextDouble() * length));
f.read(buf);
file.seek((long)(random.nextDouble() * length));
file.read(buf);
}
result.randomReadStop = System.currentTimeMillis();
log.info("random read: " + (result.randomReadStop - result.randomReadStart)
523,11 → 527,12
finally {
if(createFile) {
try {
file.delete();
(new File(fileName)).delete();
}
catch(Exception ex) {
log.warn(Integer.toString(id) + ": cannot delete the test file", ex);
}
Sweeper.removeFile(fileName);
}
}
 
535,6 → 540,59
}
}
 
class Sweeper
{
private static Log log = LogFactory.getLog(Sweeper.class);
private static ArrayList files = new ArrayList();
 
public static void addFile(String fileName)
{
synchronized(files)
{
log.debug("Add file '" + fileName + "'");
files.add(fileName);
}
}
 
public static void removeFile(String fileName)
{
synchronized(files)
{
log.debug("Remove file '" + fileName + "'");
files.remove(fileName);
}
}
 
public static void init()
{
log.debug("Init");
Runtime.getRuntime().addShutdownHook(new ShutdownThread());
}
 
static class ShutdownThread extends Thread
{
public void run()
{
log.debug("Cleanup");
 
synchronized(files)
{
for(int i = 0; i < files.size(); i++) {
String fileName = (String)files.get(i);
 
try {
(new File(fileName)).delete();
log.info("Test file '" + fileName + "' deleted");
}
catch(Exception ex) {
log.warn("cannot delete test file '" + fileName + "'", ex);
}
}
}
}
}
}
 
class Utils
{
private static final String[] units = {"", "K", "M", "G", "T", "P"};