io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK

凌云时刻 · 技术

io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK_第1张图片

导读:Alibaba Cloud Linux 2 是阿里云操作系统团队基于开源 Linux 4.19 LTS 版本打造的一款针对云应用场景的下一代 Linux OS 发行版。在首次推出一年后,阿里云操作系统团队对外正式发布了Alibaba Cloud Linux 2  LTS 版本。

作者 | 窅默

来源 | 阿里技术

前言

LTS 版本的发布是一个重要的里程碑,标志着阿里云操作系统团队将为 Alibaba Cloud Linux 2 提供长期技术支持、稳定的更新和更好的服务,为 Alibaba Cloud Linux 2 的客户提供更多保障。

目前异步 IO 使用最多的是 Linux native aio,不幸的是,其存在着诸多约束:

  • 最大的限制无疑是仅支持 direct io。而 O_DIRECT 存在 bypass 缓存和 size 对齐等限制,直接影响了 aio 在很多场景的使用。而针对 buffered io,其表现为同步。

  • 即使满足了所有异步 IO 的约束,有时候还是可能会被阻塞。例如,等待元数据 IO,或者等待 block 层 request 的分配等。

  • 存在额外的拷贝开销,每个 IO 提交需要拷贝 64+8 字节,每个 IO 完成需要拷贝 32 字节,这 104 字节的拷贝在大量小 IO 的场景下影响很可观。同时,需要非常小心地使用完成事件以避免丢事件。IO 需要至少 2 个系统调用(submit + wait-for-completion),这在 spectre/meltdown 开启的前提下性能下降非常严重。

Alibaba Cloud Linux 2 LTS 版本率先提供了新异步 IO 机制 io_uring 的支持。io_uring 是由 block 维护者 Jens Axboe 开发的新异步 IO 框架。io_uring 在 2019 年 1 月初提出,到 2019 年 3 月初合并到 Linux 内核主线,仅用短短的 2 个月时间就合入了 Linux v5.1,充分表明了社区对该框架的积极态度。当前社区发展非常火热,很多主流应用都开始提供对 io_uring 的支持,如 Node.js,Nginx,PostgreSQL,RocksDB,QEMU,SPDK 等。

Alibaba Cloud Linux 2 LTS 评测

 测试方法

我们基于 Alibaba Cloud Linux 2 LTS 的 fio 测试评估数据如下,使用 fio io_uring 测试性能。

Alibaba Cloud Linux 2 LTS 版本在 experimental 源中提供支持 io_uring 的 fio-3.17,用户可通过 ioengine=io_uring 使用 fio io_uring 进行性能测试。

sudo yum install -y alinux-release-experimentals
sudo yum install -y fio-3.17

fio 示例:

fio -name=fiotest -filename=/mnt/vdd/testfile -iodepth=128 -thread -rw=randread -ioengine=io_uring -sqthread_poll=1 -direct=1 -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting

测试结果

 普通 ECS

测试环境:ecs.i2.2xlarge,8 vCPU 64 GiB,I2 本地存储 1788 GiB。

  • 默认模式下,略微提升。

  • 开启 sqthread_poll 后,顺序读写提升很明显,达到 160% ~ 170%;随机读写提升 30% ~ 150%。

具体测试数据如下:

  • 4k 顺序读  

io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK_第2张图片

  • 4k 顺序写

io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK_第3张图片

  • 4k 随机读

io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK_第4张图片

  • 4k 随机写

io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK_第5张图片


 神龙裸金属

原作者 Jens 对比 SPDK 测试结果显示,io_uring 在开启 iopoll 后与 SPDK 接近,甚至在 queue depth 较高时性能更好。为此,我们在神龙裸金属实例(带本地 NVMe 盘)上进行了对比。

测试环境:神龙裸金属实例,96 CPU 503 G,本地盘为三星 PM963。

  • 开启 iopoll 后,基本与 SPDK 接近。

具体测试数据如下:

  • 4k 随机读

io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK_第6张图片

io_uring 究竟通过怎样的架构和设计能带来如此大的性能提升?下一篇我们将揭秘 io_uring 的技术细节,敬请期待。

END

往期精彩文章回顾

如何写好代码?

如何解决大规模高性能存储可靠性问题?

掌门教育微服务体系 Solar(中)

演过电影的无人驾驶卡车是如何炼成的?

全部满分!阿里云函数计算通过可信云21项测试

如何应对容器和云原生时代的安全挑战?

融合阿里云,牛客助您找到心仪好工作

掌门教育微服务体系 Solar

阿里云上新了!

我们该不该在Rust上做点投资?


长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

你可能感兴趣的:(io_uring 新异步 IO 机制,性能提升超 150%,堪比 SPDK)