IO_uring继续证明自己是过去十年中 Linux 内核最激动人心的基础创新之一。虽然开始用于异步存储 I/O,但最近围绕网络用例开展了一些工作,并推动了其他创新,例如用于基于 IO_uring 的用户空间块驱动程序的新“UBD”驱动程序。Jens Axboe 和其他人还不断对其进行优化,以获得最大的性能潜力。本周在都柏林举行的 2022 年 Linux Plumbers Conference 上宣布的围绕 IO_uring 的最新创新是 io_uring_spawn。
Josh Triplett 是前著名的英特尔 Linux 工程师,最近专注于 Rust 编程语言,他共同领导 Rust 语言团队,他昨天在 LPC 2022 上宣布了他在 io_uring_spawn 上的工作。Triplett 在他的谈话摘要中非常优雅地总结了这一点:
io_uring 允许代表当前进程快速运行一批操作。顾名思义,这对于 I/O 工作负载非常有效。然而,软件开发中最突出的工作负载之一涉及执行其他流程:make 和其他构建系统在构建过程中启动许多其他流程。我们如何才能更快地启动这些流程?
如果我们可以启动其他进程,并使用 io_uring 为它们提供初始工作,并以 exec 结尾会怎样?如果我们可以完全在内核中处理新进程的 pre-exec 步骤,不需要用户空间,消除对 fork 甚至 vfork 的需要,并消除页表 CoW 开销,那会怎样?
在本次演讲中,我将介绍 io_uring_spawn,一种用于启动具有关联 io_uring 的空新进程的机制。我将展示内核如何启动一个没有初始写时复制页表的空白进程,并从 io_uring 初始化它的所有资源。我将介绍成功路径和错误处理路径,并展示如何获取有关已启动进程的信息。最后,我将展示现有用户空间如何利用 io_uring_spawn 来加速 posix_spawn,并为常见工作负载(包括内核编译)提供性能数据。
事实上,他的基准测试结果不言自明,io_uring_spawn 比 fork 或 posix_spawn 快得多,甚至比 vfork 快 6~10%,同时被认为更安全、更灵活。
Josh Triplett 在 io_uring_spawn 上的工作看起来非常令人兴奋,但仍处于实施的早期阶段。
这是 io_uring_spawn 的一个非常有希望的开始,他说他“刚刚开始”。他期待接下来在其上实现 posix_spawn,支持预生成的进程池,并进一步优化克隆。
| 留言与评论(共有 0 条评论) “” |