Linux异步IO引擎:io-uring

Phoronix 报道称,IO_uring 可以说是 Linux 内核近期引入的最大创新之一,因其能够显著提升移步输入/输出(async I/O)的效率。一句话总结 io_uring 就是:一套全新的 syscall,一套全新的 async API,更高的性能,更好的兼容性,来迎接高 IOPS,高吞吐量的未来。

先看一下性能数据(数据来自 Jens Axboe)。
4k randread,3D Xpoint 盘:
Interface QD Polled Latency IOPS
………………………………………………………………
io_uring 1 0 9.5usec 77K
io_uring 2 0 8.2usec 183K
io_uring 4 0 8.4usec 383K
io_uring 8 0 13.3usec 449K

libaio 1 0 9.7usec 74K
libaio 2 0 8.5usec 181K
libaio 4 0 8.5usec 373K
libaio 8 0 15.4usec 402K

io_uring 1 1 6.1usec 139K
io_uring 2 1 6.1usec 272K
io_uring 4 1 6.3usec 519K
io_uring 8 1 11.5usec 592K

spdk 1 1 6.1usec 151K
spdk 2 1 6.2usec 293K
spdk 4 1 6.7usec 536K
spdk 8 1 12.6usec 586K
…………………………………………………………
io_uring vs libaio,在非 polling 模式下,io_uring 性能提升不到 10%,好像并没有什么了不起的地方。然而 io_uring 提供了 polling 模式。在 polling 模式下,io_uring 和 SPDK 的性能非常接近,特别是高 QueueDepth 下,io_uring 有赶超的架势,同时完爆 libaio。测试 per-core,4k randread 多设备下的最高 IOPS 能力:
Interface QD Polled IOPS
………………………………………………
io_uring 128 1 1620K
libaio 128 0 608K
spdk 128 1 1739K

最近几年一直流行 kernel bypass,从网络到存储,各个领域开花,内核在性能方面被各种诟病。io_uring 出现以后,算是扳回一局。

io_uring 有如此出众的性能,主要来源于以下几个方面:

用户态和内核态共享提交队列(submission queue)和完成队列(completion queue)
IO 提交和收割可以 offload 给 Kernel,且提交和完成不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值