Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1160 → Rev 1161

/diskbench/trunk/src/ak/diskbench/DiskBench.java
1,6 → 1,3
// FIXME
// - temporary file names
//
package ak.diskbench;
 
import java.util.List;
23,8 → 20,6
public static void main(String[] args)
throws Exception
{
Sweeper.init();
 
DiskBench db = new DiskBench();
 
if(db.parseParams(args))
175,9 → 170,19
+ " " + 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);
185,8 → 190,17
DiskThread dt = new DiskThread();
workers.add(dt);
 
dt.setFileName((dirName == null ? "" : dirName)
+ (oneFile ? "test.bin" : "test" + dt.getId() + ".bin"));
File tempFile;
if(oneFile) {
tempFile = commonTempFile;
}
else {
tempFile = File.createTempFile("db-" + dt.getId() + "_", null,
new File(dirName, "."));
tempFile.deleteOnExit();
}
 
dt.setFile(tempFile);
dt.setSeed(seed);
dt.setCreateFile(i == 0 || !oneFile);
dt.setLength(length);
299,7 → 313,7
}
 
private int id;
private String fileName;
private File file;
private long seed = 0;
private boolean createFile = true;
private long length = 1024 * 1024; // 1M
321,14 → 335,14
return id;
}
 
public String getFileName()
public File getFile()
{
return fileName;
return file;
}
 
public void setFileName(String fileName)
public void setFile(File file)
{
this.fileName = fileName;
this.file = file;
}
 
public boolean getCreateFile()
435,25 → 449,8
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 file = new RandomAccessFile(fileName, "rw");
RandomAccessFile f = new RandomAccessFile(file, "rw");
Random random = (seed > 0) ? new Random(seed) : new Random();
byte[] buf = new byte[bufLength];
 
461,10 → 458,9
 
// sequential write
if(createFile) {
Sweeper.addFile(fileName);
result.sequentialWriteStart = System.currentTimeMillis();
for(int j = 0; j < length / bufLength; j++) {
file.write(buf);
f.write(buf);
}
result.sequentialWriteStop = System.currentTimeMillis();
log.info("sequential write: "
475,9 → 471,9
barrier.await();
 
// sequential read
file.seek(0);
f.seek(0);
result.sequentialReadStart = System.currentTimeMillis();
while(file.read(buf) > 0);
while(f.read(buf) > 0);
result.sequentialReadStop = System.currentTimeMillis();
log.info("sequential read: "
+ (result.sequentialReadStop - result.sequentialReadStart) + "ms = "
490,8 → 486,8
result.randomWriteStart = System.currentTimeMillis();
for(int j = 0; j < randomWrites; j++) {
result.writeSleep += sleep();
file.seek((long)(random.nextDouble() * (length - bufLength)));
file.write(buf);
f.seek((long)(random.nextDouble() * (length - bufLength)));
f.write(buf);
}
result.randomWriteStop = System.currentTimeMillis();
log.info("random write: " + (result.randomWriteStop - result.randomWriteStart)
505,8 → 501,8
result.randomReadStart = System.currentTimeMillis();
for(int j = 0; j < randomReads; j++) {
result.readSleep += sleep();
file.seek((long)(random.nextDouble() * length));
file.read(buf);
f.seek((long)(random.nextDouble() * length));
f.read(buf);
}
result.randomReadStop = System.currentTimeMillis();
log.info("random read: " + (result.randomReadStop - result.randomReadStart)
527,12 → 523,11
finally {
if(createFile) {
try {
(new File(fileName)).delete();
file.delete();
}
catch(Exception ex) {
log.warn(Integer.toString(id) + ": cannot delete the test file", ex);
}
Sweeper.removeFile(fileName);
}
}
 
540,59 → 535,6
}
}
 
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"};