小红花·文摘
  • 首页
  • AI Tokens🪙
  • 排行榜🏆
  • 直播
  • FAQ
Dify.AI

本文为SPDK用户态存储栈系列首篇,定位其相对内核NVMe与io_uring的生态位,提出五条坐标系(I/O路径、线程消息、设备独占、bdev、远端控制面)作为排障语言,并规划16篇阅读路线,强调用户态轮询栈的CPU税与运维代价。

【SPDK 用户态存储】用户态存储全景:从 Reactor 到 NVMe-oF 的坐标系

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-08-13T00:00:00Z

本文对比SPDK用户态、内核NVMe块层及O_DIRECT+io_uring三条存储路径,强调选型需基于机制差异而非速度排名。SPDK适合NVMe-oF目标或用户态后端,内核路径利于系统共置,io_uring优化应用自管缓存。迁移需考虑设备独占、CPU核税、配置与观测成本,并建议可回滚演练。最终选择应依据硬件实测与运维能力,而非追求技术先进。

【SPDK 用户态存储】对照内核路径:SPDK、内核 NVMe 与 O_DIRECT+io_uring

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-08-13T00:00:00Z

本文为SPDK用户态存储系列终章,通过排除树指导选型:无用户态需求用内核NVMe,需高IOPS用O_DIRECT+io_uring,能付核税且需target/vhost则选SPDK。强调机制差异而非跑分,列出阅读路径、开放问题(如ZNS、DPU卸载),并建议将决策写入架构记录,重跑排除树时禁止仅贴跑分截图。

【SPDK 用户态存储】选型收束:机制排除树与系列开放问题

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-08-13T00:00:00Z

本文比较了 Linux 中的两种 I/O 处理机制:epoll 和 io_uring。epoll 适用于高并发场景,但需要多次系统调用;io_uring 通过共享环形队列减少系统调用次数,适合高吞吐量需求。尽管 io_uring 有优势,但在低版本内核或现有生态系统中,epoll 仍然是更合适的选择。选择应基于具体需求和环境。

Linux 异步 I/O:epoll 与 io_uring 对比

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-06-21T00:00:00Z

本文探讨了将O_DIRECT与io_uring组合使用的技术路径,旨在解决数据库和块存储引擎中的双重缓冲与系统调用开销问题。文章详细分析了组合使用的决策边界、O_DIRECT的对齐约束、io_uring固定缓冲区的注册方法及其与O_DIRECT叠加时的注意事项。通过实测对比了三种写路径的性能,指出register_buffers组合在特定环境下可能失败,强调需在目标内核上验证。最后提供了工程检查清单和选型建议,帮助读者在实际应用中做出正确决策。

【存储工程】O_DIRECT 与 io_uring:固定缓冲区、register_buffers 与工程选型

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-06-12T00:00:00Z
拉蒂西亚·阿夫罗特:一位审稿人的诞生

Lucas Draescher 提交的 PostgreSQL 补丁修复了 io_method=io_uring 的文件描述符泄漏问题。该补丁经过多次修订,未得到审查。作者建议在等待审查时主动审查他人补丁,以促进社区互动。补丁经过测试,确认问题真实存在,修复后文件描述符计数保持稳定,代码清晰,符合 PostgreSQL 规范。

拉蒂西亚·阿夫罗特:一位审稿人的诞生

Planet PostgreSQL Planet PostgreSQL · 2026-06-05T00:00:00Z

epoll是Linux网络服务器的核心I/O多路复用机制,通过红黑树管理fd、就绪链表和回调机制实现高效事件通知。支持LT(水平触发)和ET(边缘触发)模式,EPOLLEXCLUSIVE解决惊群问题,EPOLLONESHOT保证单线程处理。相比select/poll,epoll仅遍历就绪fd,性能更优。io_uring是补充而非替代,适用于文件I/O和极致性能场景。

【操作系统百科】epoll 内部

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-05-19T00:00:00Z

io_uring 是 Linux 5.1 引入的异步 I/O 框架,利用共享内存环形缓冲区减少系统调用开销,支持多种文件和网络操作。核心数据结构包括提交队列(SQE)和完成队列(CQE),通过 SQPOLL 和 IOPOLL 等模式优化性能。注册文件描述符和缓冲区可减少重复开销,io-wq 处理阻塞操作。安全模型仍在演进,建议在生产环境中限制非特权用户使用。

【操作系统百科】io_uring 内核内部

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-05-18T00:00:00Z

本文讨论了在高并发网络服务中使用io_uring的多线程架构,推荐采用“每个工作线程一个ring”的Thread-per-Ring模式,并结合SO_REUSEPORT进行连接分流,以提升性能和简化代码。文章分析了多线程的线程安全问题,介绍了四种多线程架构模式及其优缺点,强调了内存管理和CPU亲和性的重要性,并提供了多线程Echo Server的实现示例,展示了如何有效利用io_uring进行高效的网络编程。

io_uring 多线程编程模式:从线程安全到架构选型

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2026-03-14T00:00:00Z
io_uring 核心原理:Linux 异步 I/O 的新纪元

io_uring 是 Linux 5.1 引入的新异步 I/O 接口,旨在解决 epoll 的性能瓶颈。它通过双环形缓冲区减少系统调用和内存拷贝,支持网络和磁盘 I/O,提升高频 I/O 性能,简化编程模型,推动 Linux I/O 的未来发展。

io_uring 核心原理:Linux 异步 I/O 的新纪元

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

在 Linux 网络编程中,epoll 已使用近 20 年,而 io_uring 的出现改变了这一局面。两者在架构、性能和适用场景上存在显著差异:epoll 依赖频繁的系统调用,适合遗留系统和低活跃连接;io_uring 通过批处理和零拷贝提升性能,更适合高性能需求和新项目。

巅峰对决:io_uring vs epoll 性能与架构对比

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

liburing 提供了更友好的 API 来使用 io_uring,简化了内存管理和请求处理。使用 liburing 的流程包括初始化、获取请求、提交、等待完成和处理结果。示例代码展示了一个简单的 cat 命令,适合高并发场景。

【io_uring】liburing 基础 API 详解:从 Hello World 到文件 I/O

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

本文介绍了如何使用 io_uring 实现 TCP Echo Server。与传统同步模型不同,io_uring 通过状态机管理连接状态,并通过回调链式处理异步操作。代码示例展示了连接、数据读取和写入的处理,并强调了内存管理的重要性。

实战:基于 io_uring 的 TCP Echo Server

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

io_uring通过SQPOLL、固定文件和提供缓冲区等特性,显著提升I/O性能,减少系统调用开销,优化内核资源管理。

io_uring 高级特性:榨干性能极限

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

Libevent 2.2(Alpha)版本引入了实验性的 io_uring 后端,结合了 Reactor 和 Proactor 模式。虽然目前主要使用 io_uring 的 POLL_ADD 操作,尚未完全发挥其异步能力,但已能减少系统调用。该后端仍处于实验阶段,未来有望支持真正的 Proactor 模式,以提升性能。

Libevent 对 io_uring 的支持现状

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

Linux 5.1 引入的 io_uring 技术彻底改变了高性能 I/O 的方式。文章探讨了 io_uring 的核心概念、异步 I/O 的优势,以及与 AIO 和 epoll 的比较,并介绍了如何使用 liburing API 进行文件 I/O 和网络编程。

io_uring 系列文章

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

本文讨论了io_uring的缺点与局限性,指出在某些场景下epoll更为优越。io_uring在低延迟和内存占用方面表现不佳,尤其在高并发和海量连接时。此外,编程复杂度和调试难度较高,生态和安全性问题也需考虑。选择技术时应根据具体需求,避免盲目追新。

反思与打破神话:为何特定场景 epoll 比 io_uring 更高效

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z

在高性能系统编程中,Linux的io_uring模型通过将I/O操作从“询问就绪”转变为“提交后通知”,降低了内核与用户态的交互成本。Go语言在集成io_uring时面临调度、内存安全和接口兼容性等挑战,建议使用liburing与CGO进行初步集成以验证性能收益。资源管理和请求生命周期控制是主要难点,尤其在高并发场景下。

Go 如何集成 io_uring:从 CGO 封装到纯 Go 实现

土法炼钢兴趣小组的博客 土法炼钢兴趣小组的博客 · 2025-11-30T00:00:00Z
Postgres 17与18的基准测试

PlanetScale Postgres 18引入了io_method配置选项,显著提升了磁盘I/O控制。基准测试显示,Postgres 18在不同I/O设置下的性能优于17版本,尤其在本地NVMe驱动上。io_uring在高并发场景下表现良好,但在低并发时效果不佳。整体而言,Postgres 18带来了显著的I/O改进和灵活性。

Postgres 17与18的基准测试

PlanetScale - Blog PlanetScale - Blog · 2025-10-14T00:00:00Z
汉斯-尤尔根·肖宁:PostgreSQL 18:通过AIO提升I/O性能

PostgreSQL 18引入异步I/O(AIO),允许数据库在等待数据时进行计算,从而提升性能。AIO支持三种I/O模式,推荐使用io_uring。测试表明,AIO在大规模操作中显著降低延迟,尤其在顺序扫描时效果明显。

汉斯-尤尔根·肖宁:PostgreSQL 18:通过AIO提升I/O性能

Planet PostgreSQL Planet PostgreSQL · 2025-09-19T05:00:05Z
  • <<
  • <
  • 1 (current)
  • 2
  • >
  • >>
👤 个人中心
在公众号发送验证码完成验证
登录验证
在本设备完成一次验证即可继续使用

完成下面两步后,将自动完成登录并继续当前操作。

1 关注公众号
小红花技术领袖公众号二维码
小红花技术领袖
如果当前 App 无法识别二维码,请在微信搜索并关注该公众号
2 发送验证码
在公众号对话中发送下面 4 位验证码
小红花技术领袖俱乐部
小红花·文摘:汇聚分发优质内容
小红花技术领袖俱乐部
Copyright © 2021-
粤ICP备2022094092号-1
公众号 小红花技术领袖俱乐部公众号二维码
视频号 小红花技术领袖俱乐部视频号二维码