This is DiskSpeed.m in view mode; [Download] [Up]
#import "DiskSpeed.h"
@implementation DiskSpeed
#define meg (1024.0 * 1024.0)
- (BOOL)canRunBenchmark
{
if(access([deviceCell stringValue],R_OK)){
[readCell setStringValue:"CANNOT OPEN DEVICE"];
return NO;
}
return YES;
}
- setupBenchmark
{
const size = 1024;
int bit;
char buf[size];
const char *name = [deviceCell stringValue];
int fd = open(name,O_RDONLY,0666);
if(fd<0){
return nil;
}
/* find the size of the disk */
disksize = 0;
for(bit=31;bit>10;bit--){
disksize |= 1<<bit;
lseek(fd,disksize,SEEK_SET);
if(read(fd,buf,size)==-1){
disksize &= ~(1<<bit);
}
}
return self;
}
- benchmark
{
long bytes;
const char *name = [deviceCell stringValue];
int fd = open(name,O_RDWR,0666);
if(fd<0){
return nil;
}
bytes = 20 * meg;
if(bytes > disksize){
bytes = disksize * 0.80;
}
{
const readsize = 65536 * 4;
char buf[readsize];
int i;
lseek(fd,0,0);
totalbytes = 0;
for(i=0;i<bytes;i+=readsize){
int q;
q = read(fd,buf,readsize);
if(q<0) {
NXRunAlertPanel(0,"Read error",0,0,0);
break;
}
totalbytes += q;
}
}
close(fd);
return self;
}
- shutdownBenchmark
{
double megread,megxfer;
char buf[256];
megread = totalbytes / meg;
megxfer = (megread * 1024) / wallTime;
[readCell setDoubleValue:megxfer];
sprintf(buf,"Disk read speed: %g",megxfer);
[self logResults:buf];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.