小编Smi*_*tch的帖子

为什么 liburing 写入性能低于预期?

问题总结

\n

我正在开发一个项目,需要在单个 Linux 服务器上以非常高的速度将数据流式传输到磁盘。使用以下命令的fio基准测试表明我应该能够使用 io_uring 获得所需的写入速度(> 40 GB/s)。

\n
fio --name=seqwrite --rw=write --direct=1 --ioengine=io_uring --bs=128k --numjobs=4 --size=100G --runtime=300 --directory=/mnt/md0/ --iodepth=128 --buffered=0 --numa_cpu_nodes=0 --sqthread_poll=1\xc2\xa0 --hipri=1\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我无法使用自己的代码复制这种性能,因为我的代码使用了io_uring 的liburing帮助程序库。我目前的写入速度约为 9 GB/s。我怀疑 liburing 的额外开销可能是瓶颈,但在放弃更漂亮的 liburing 代码之前,我有几个关于我的方法的问题要问。

\n

我的方法

\n
    \n
  • 使用liburing
  • \n
  • 利用提交队列轮询功能
  • \n
  • 不使用 排队聚集/分散 io 请求writev(),而是排队请求以使用普通write()函数写入磁盘。(尝试收集/分散 IO 请求,但这似乎对我的写入速度没有重大影响。)
  • \n
  • 多线程,每个线程一个环
  • \n
\n

附加信息

\n
    \n
  • 运行此代码的简化版本(不使用线程)会产生类似的结果。
  • \n
  • 我的调试器显示我正在创建宏中指定的线程数NUM_JOBS。但是,它没有告诉我内核为 sq 轮询创建的线程。
  • \n
  • 当运行两个以上线程时我的性能会下降
  • \n
  • Linux服务器有96个CPU可供使用
  • \n
  • 数据正在写入 RAID0 …

c++ linux io-uring

15
推荐指数
1
解决办法
2023
查看次数

标签 统计

c++ ×1

io-uring ×1

linux ×1