我正试图在C++中开发一个迷你基准测试系统,并且我无法测量HDD读取和写入速度。更确切地说,我测量的传输速度很大:读取时为400-600 MB/s,写入时为1000 MB/s以上。我有一个5400 RPM硬盘驱动器(非SSD),真正的读/写速度(根据基准测试程序)大约为60 MB/s。C++中的HDD基准测试 - 测量的传输速度太快
//blockSize is 4096
//my data buffer
char* mydata = (char*)malloc(1*blockSize);
//initialized with random data
srand(time(NULL));
for(int i=0;i<blockSize;i++){
mydata[i] = rand()%256;
}
double startt, endt, difft;
int times = 10*25000;
int i=0,j=0;
DWORD written;
HANDLE f, g;
DWORD read;
f=CreateFileA(
"newfolder/myfile.txt",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(f==INVALID_HANDLE_VALUE){
std::cout<<"Error openning for write.";
return -1;
}
startt = clock();
for(i=0;i<times;i++){
WriteFile(
f,
mydata,
blockSize,
&written,
NULL
);
}
endt = clock();
difft = 1.0*(endt-startt)/(1.0*CLOCKS_PER_SEC);
std::cout<<"\nWrite time: "<<difft;
std::cout<<"\nWrite speed: "<<1.0*times*blockSize/difft/1024/1024<<" MB/s";
CloseHandle(f);
//------------------------------------------------------------------------------------------------
g=CreateFile("newfolder/myfile.txt",
GENERIC_READ,
0,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(g==INVALID_HANDLE_VALUE){
std::cout<<"Error opening for read.";
return -1;
}
startt = clock();
for(i=0;i<times;i++){
ReadFile(
g,
mydata,
blockSize,
&read,
NULL
);
}
endt = clock();
difft = 1.0*(endt-startt)/(1.0*CLOCKS_PER_SEC);
std::cout<<"\nRead time:"<<difft;
std::cout<<"\nRead speed: "<<1.0*times*blockSize/difft/1024/1024<<" MB/s";
CloseHandle(g);
我尝试使用的fopen和FWRITE功能太多,我得到了类似的结果。
我在另一台计算机上运行了我的应用程序。写入速度是正确的,读取速度仍然很大。
最有趣的是应用程序实际上在大约2秒内创建了1GB文件,这对应于500 MB/s的写入速度。
有没有人知道我做错了什么?
您的操作系统正在实施磁盘缓存; I/O实际上并不是来自磁盘本身。 – 2015-04-04 13:19:33