diff --git a/SUMMARY.md b/SUMMARY.md index 6fe0257817f7dad5db0d7f9db035d5f4e4348b95..de554112c013bfecf6a8e738d521da154f5b7cd4 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -8,6 +8,7 @@ * [开源硬件 RISC-V 支持](./multi_arch/riscv.md) * [龙芯自主指令集的支持](./multi_arch/loongarch_support.md) * [运维与性能](./devops_perf/README.md) + * [利用io_uring提升数据库系统性能](./devops_perf/io_uring_igraph.md) * [软硬件协同](./sw_hw_codesign/README.md) * [面向芯片研发和验证的操作系统 SiliconFastOS](./sw_hw_codesign/siliconfastos.md) * [安全可信](./security_trust/README.md) diff --git a/devops_perf/io_uring_igraph.md b/devops_perf/io_uring_igraph.md new file mode 100644 index 0000000000000000000000000000000000000000..a46db4858ad4d45b0e2ba50f906d7227157df70e --- /dev/null +++ b/devops_perf/io_uring_igraph.md @@ -0,0 +1,33 @@ +# 利用io_uring提升数据库系统性能 +tags: 运维与性能 + +## 背景介绍 + +传统的IO软件栈已经无法完全释放出高性能存储设备的性能,高性能IO栈是当前存储领域重点研究的课题之一,代表性的如用户态方案SPDK,以及标准的内核态方案io_uring。 + +## 关键技术 + +Linux社区从零开始设计一种全新的异步IO框架io_uring。io_uring为了避免在提交和完成事件中的内存拷贝,设计了一对共享的ring buffer用于应用程序和内核之间的通信。该设计带来的好处有: +- 提交、完成请求时无需应用和内核之间的内存拷贝; +- 使用SQPOLL高级特性时,应用程序无需系统调用; +- 无锁操作,用Memory Ordering实现同步等。 +龙蜥社区自2020年上半年开始参与io_uring社区开发,贡献了多个特性和优化,并在图数据库场景探索容器化部署和针对性优化 + +技术优势:应用程序通过统一的标准系统调用来使用io_uring。相比传统的Linux Native AIO,io_uring消除了仅支持Direct IO的限制以及额外的内存拷贝开销;相比用户态框架SPDK,io_uring可复用Linux内核的标准驱动,无需额外的用户态驱动开发,应用场景更通用,编程接口更友好。 + +该技术特点包括: +- 简单易用,方便应用集成; +- 可扩展,不仅仅为存储IO使用,同样可以用于网络IO; +- 特性丰富,满足所有应用,如支持Buffer IO; +- 高效,尤其是针对大部分512字节或4K IO场景; +- 可伸缩,满足峰值场景的性能需要等。 + +应用场景:io_uring可适用于绝大多数对异步IO有诉求的业务和应用。目前,io_uring已在多个主流开源应用中集成,如RocksDB,Netty,QEMU,SPDK,PostgreSQL,MariaDB等。 + +## 图数据库引擎iGraph优化实践 + +图计算服务Graph Compute是阿里云自主研发的高性能分布式图计算产品,支持复杂图关系数据的存储、查询和计算,高效对接图算法与模型,在搜索推荐广告、实时风控、知识图谱、社交网络等场景有着广泛的应用。其内核引擎iGraph在基于磁盘的查询访问场景下引入了io_uring,支持高IOPS下稳定运行。 + +![图数据库引擎iGraph优化实践](../materials/imgs/devops_perf/io_uring_igraph/io_uring_igraph.png) + +实践效果:图数据库引擎iGraph经过io_uring适配优化后,线上运行环境在CPU开销不高于原始使用Linux Native AIO版本的前提下,业务端到端时延优化达20%。 \ No newline at end of file diff --git a/materials/imgs/devops_perf/io_uring_igraph/io_uring_igraph.png b/materials/imgs/devops_perf/io_uring_igraph/io_uring_igraph.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea416145f0d936080b56cac903540c64c6dfe16 Binary files /dev/null and b/materials/imgs/devops_perf/io_uring_igraph/io_uring_igraph.png differ