我正在开发一个项目,需要在单个 Linux 服务器上以非常高的速度将数据流式传输到磁盘。使用以下命令的fio基准测试表明我应该能够使用 io_uring 获得所需的写入速度(> 40 GB/s)。
\nfio --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\nRun Code Online (Sandbox Code Playgroud)\n但是,我无法使用自己的代码复制这种性能,因为我的代码使用了io_uring 的liburing帮助程序库。我目前的写入速度约为 9 GB/s。我怀疑 liburing 的额外开销可能是瓶颈,但在放弃更漂亮的 liburing 代码之前,我有几个关于我的方法的问题要问。
\nwritev(),而是排队请求以使用普通write()函数写入磁盘。(尝试收集/分散 IO 请求,但这似乎对我的写入速度没有重大影响。)NUM_JOBS。但是,它没有告诉我内核为 sq 轮询创建的线程。