我正在尝试实时打开许多大型顺序文件 (~70mb),并试图达到每秒读取 ~30 个文件的目标。 使用 SSD 基准测试工具(Linux 上的 dd,Windows 上的 winsat),我可以达到所宣传的 SSD 性能约 3200MB/s 读取。但是,使用一个非常简单的 fopen/fread 应用程序,我只能达到约 1900MB/s。打开和读取大文件 (~1GB) 似乎没有更好的表现。我尝试了 fstream 并使用了 pubsetbuf 缓冲区大小。 1MB 的缓冲区大小似乎是最佳的,但我使缓冲区越大,性能似乎下降,这让我感到惊讶。
我可以购买更快的 nvme 驱动器,但我觉得如果基准测试工具的速度超过我需要的速度,我当前的驱动器应该能够达到这些目标。
所以我的问题是基准测试工具如何达到最大速度?现实生活中能否以基准速度读取文件?
谢谢。
编辑: 低级代码供参考:
int bytesread;
int file = _open(entry.c_str(),_O_RDONLY | _O_BINARY | _O_SEQUENTIAL);
off_t currentPos = _lseek(file,SEEK_CUR);
long bytes = _lseek(file,SEEK_END);
_lseek(file,currentPos,SEEK_SET);
std::vector<char> buffer;
buffer.resize(bytes);
char* pdata = buffer.data();
const auto startTime = std::chrono::steady_clock::now();
if ((bytesread = _read(file,pdata,bytes)) <= 0)
perror("Problem reading file");
const auto endTime = std::chrono::steady_clock::now();
_close(file);
编辑2: 使用上面的代码有 2 个线程会产生我期望的结果。我最终达到了 ~2900MB/s。使用 fstream 会明显变慢。