M
mathieo
Guest
Hello and thanks for reviewing my problem.
I have a system configured with PCIe RAID0 controller x16 lines connected to 4 NVMe Intel drives 2Tb each through m.2 connector.
Using ATTO Disk Benchmark application, File size set to 8Gb and block size set to 2Mb the max read rate is ~7Gb/S meanwhile by looking at the task manager the disk activity percentage is at the peak 100% during the process.
My problem:
I developed a simple c++ application using the Qt-Creator and MinGW-64bit compiler, using FileApi.h header to open a file with system caching disabled (No Buffering) and read same byte amount (2Mb) from the same file size (8Gb) the result is not even close, the rate is so slow ~1.2Gb/S and the disk activity during the process is around 23%
here is my code:
#include <fileapi.h>
void main()
{
HANDLE dataFile;
dataFile = CreateFileA("File.bin", GENERIC_READ, 0,nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |
FlushFileBuffers(dataFile);
if (dataFile == INVALID_HANDLE_VALUE)
return ;
//Start reading 3000 times from the file
int counter = 0;
while(counter < 3000){
char * buffer = new char [pktSize*sizeof(int)];
unsigned long read;
ReadFile(dataFile, buffer, 2097152 /*2 Megabytes */, &read,
nullptr);
counter+=1;
delete[] buffer;
}
}
I appreciate any help or advice and will be super thankful.
Continue reading...
I have a system configured with PCIe RAID0 controller x16 lines connected to 4 NVMe Intel drives 2Tb each through m.2 connector.
Using ATTO Disk Benchmark application, File size set to 8Gb and block size set to 2Mb the max read rate is ~7Gb/S meanwhile by looking at the task manager the disk activity percentage is at the peak 100% during the process.
My problem:
I developed a simple c++ application using the Qt-Creator and MinGW-64bit compiler, using FileApi.h header to open a file with system caching disabled (No Buffering) and read same byte amount (2Mb) from the same file size (8Gb) the result is not even close, the rate is so slow ~1.2Gb/S and the disk activity during the process is around 23%
here is my code:
#include <fileapi.h>
void main()
{
HANDLE dataFile;
dataFile = CreateFileA("File.bin", GENERIC_READ, 0,nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |
FlushFileBuffers(dataFile);
if (dataFile == INVALID_HANDLE_VALUE)
return ;
//Start reading 3000 times from the file
int counter = 0;
while(counter < 3000){
char * buffer = new char [pktSize*sizeof(int)];
unsigned long read;
ReadFile(dataFile, buffer, 2097152 /*2 Megabytes */, &read,
nullptr);
counter+=1;
delete[] buffer;
}
}
I appreciate any help or advice and will be super thankful.
Continue reading...