fread 性能与基准测试工具

我正在尝试实时打开许多大型顺序文件 (~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 会明显变慢。

a692613576 回答:fread 性能与基准测试工具

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3496.html

大家都在问