面试官:io_uring 相比Linux AIO性能提高5%,为什么成为革命性技术?
文章目录
点击蓝色关注。
文末有福利,先到先得
在危机时代坚持 修炼内功,锻炼身体,
等待恒纪元的到来,一旦新机会出现, 我们就已经做好了准备,抓住新的机会, 实现自己的目标
各位老师好,这是大厂面试拆解——项目实战系列的第10篇文章。
最近投递简历石沉大海,这个时候更要冷静
我问自己 面试成功第一性原理是什么?
- 自然是通过面试官 项目系统设计回答
- 死磕系统设计题目,今天不搞明白,一家公司面试不通过,换另外一家公司同样不通过,下一次面试还是不通过。
- 面试官都不更换题目这说明行业类就一个问题。
- 第一性原理 就是自己真正搞懂,而不是考虑市场环境如何。
我问自己 面试策略是什么?
- 如果不知道准备什么,先开枪,再瞄准,
- 找1-2家公司面一次就知道,这个时候必须复盘总结。
- 无数次面试经验告诉我,大部分90%人都 都会被同一个问题问到。为什么总结,忙工作,忙其他 干扰因素很多,甚至自己1个月后自己忘记了。
- 把面试官当陪练 你越战越勇,平时根本没有和大神交流机会,这次就是。准备-交流,准备-交流 也是高效的学校方式。
- 游戏地图:深入理解计算机系统–IO模型
希望在io_uring使用场景上对你有帮助。
io_uring
已成为现代高性能开源项目的基石技术
尤其在存储、
数据库和
网络领域实现革命性突破。
其设计兼顾效率与灵活性,未来有望在更多场景替代传统 I/O 模型
一、面试回顾青铜被虐
岗位信息
- 时间:2025年 5月28
- 岗位:后端开发工程师
对话内容
面试官: 在你简历提到使用 io_uring请问,
- 说说libaio和 io_uring有什么区别?
- 然后说一说 io_uring怎么使用的?
我的感觉:
- 自己简历写内容,自己忘记了,这妥妥犯了一个致命错误,别人揪出来,尴尬,面试官印象打折扣80%
- 我看W.Richard Steven « UNIX网络编程» 和 陈硕老师的 « Linux多线程服务端编程:使用muduo C++网络库»
- 提到 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO。只研究到同步IO (select、poll、epoll 、kqueue),大多数面试这个,自己源码和数据结构还不和清楚呢
- 纯异步IO 看过相关文章,看过几眼,现在忘记了,没有实际操作,当场卡克了,不知道怎么回答了。回答的没底气
我回答:把自己知道全部回答一次。
面试官:提问,还有吗?等了20分钟 ,这个才是重点
我:反复说之前内容。
后记:
- 最重要一点 减少用户态到内核态拷贝,一开始说了,这个没有深入讨论
- 自己没有实际代码结合,开始想想更多 问题,例如epoll 可以监控多个,纯异步IO不能解决,判断IO出来完成 一点 纠结15分钟。
- 还是那句话,在纯知识方面,你不会,没时间学习,面试官更没时间,更不会,在不清楚情况下,试图说全部要点,导致 思路混乱。
小陷阱
-
在日常工作中 和面试一样,领导反问,真的吗?你确定吗?还有其他吗?
-
为什么不敢大声说,就这几点,而是习惯说 我回去在想想,别人认为根本考虑不周全,是糊弄,应付领导,这就是干活了,等白干 想什么,一个项目1周完成,就是它,简单还效率。 在工作中 复杂设计绝对不通过评审的.
-
一个简单事情 你知道,大家知道,但是经过反复验证 这个才是做事情,其他超出能力范围,责任范围 不是做事情。
-
清楚 自己能做什么,把能做事情做好,不能做什么,不能做事情 找人解决,而不是自己解决,这个职场大忌,有方案不找领导,专家讨论,就是最大问题,这个蛮干,瞎干,目中无人
-
需求是什么问清楚,方案是什么考虑清楚,然后找评审,评审了 后面出问题领导不责怪,如果自己做,结果出问题了,就是自己问题。 因为分工协作
完整的题目:
二、动手写一个 io_uring例子
2.1 拆分任务
✅ 步骤1: 动手写 io_uring一个 demo例子,最简单一个例子
- 通过最简单例子 体会背后设计原理。
✅ 步骤2 :阅读材料
- Understanding Modern Storage APIs: A systematic study of libaio, SPDK, and io_uring
- How io_uring and eBPF Will Revolutionize Programming in Linux, ScyllaDB, 2020
- An Introduction to the io_uring Asynchronous I/O Framework, Oracle, 2020 ✅ 步骤3 :回答区别(不要试图完美回答,自己怎么理解就怎么回答)
✅ 步骤4:结合实际项目 验证 你猜想。不用怕打脸,及时调整,及时提问
项目 | 应用场景 | 具体实现方式 | 性能收益 |
---|---|---|---|
Ceph | 分布式存储系统 | BlueStore OSD:直接集成 io_uring 优化块设备读写CrimsonOSD:基于 Seastar 框架原生支持 io_uring |
显著提升 OSD 吞吐量,降低延迟,适应高并发存储场景 |
TiDB (TiKV) | 分布式数据库存储层 | 通过 RocksDB 启用 io_uring 异步 I/O,用于 WAL 日志写入、SSTable 读取和 Compaction |
Compaction 写入时间减少 50%,整体 I/O 效率提升 |
RocksDB | 单机 KV 存储引擎 | 官方实现 PosixRandomAccessFile::MultiRead() 支持 io_uring ,优化批量读取 |
随机读取和 Compaction 性能显著提升,尤其在高并发场景 |
SPDK | 用户态存储框架 | 深度整合 io_uring ,实现零拷贝和异步 I/O 操作 |
极致降低 I/O 延迟,适用于 NVMe 存储和虚拟化环境 |
Netty | 高性能网络通信 | 通过 netty-incubator-transport-io_uring 模块支持异步 Socket I/O |
单 Worker 场景 QPS 提升 20%,长连接吞吐量优化 |
Redis | 内存数据库 | 实验性支持 io_uring 作为事件循环后端(需内核配置) |
高负载下 QPS 提升 8%~32%(开启 SQ Polling 时) |
Nginx | Web 服务器 | 通过第三方模块实现静态文件异步读写 | 长连接场景 QPS 提升 20%,短连接性能波动 |
xynet | C++ 高性能网络库 | 基于 io_uring 和 C++20 协程,实现异步网络操作 |
减少动态内存分配和系统调用,适用于低延迟通信 |
PostgreSQL | 关系型数据库 | 社区探索异步 WAL 日志写入和索引刷盘(实验性) | 目标降低事务提交延迟,提升高并发 OLTP 性能 |
QEMU | 虚拟化磁盘 I/O | virtio-blk 后端驱动集成 io_uring ,加速虚拟机磁盘访问 |
虚拟机 I/O 吞吐量提升,延迟降低 |
|
|
——————–——END————————–
最动人的作品,为自己而写,刚刚好打动别人
我在寻找一位积极上进的小伙伴,
一起参与神奇早起 30 天改变人生计划,发展个人事情,不妨 试试
1️⃣ 加入我的技术交流群Offer 来碗里 (回复“面经”获取),一起抱团取暖
2️⃣ 关注公众号:后端开发成长指南(回复“面经”获取)获取过去我全部面试录音和大厂面试复盘攻略
3️⃣ 感兴趣的读者可以通过公众号获取老王的联系方式。
—————-我是黄金分割线—————————–
抬头看天:走暗路、耕瘦田、进窄门、见微光,
- 我要通过技术拿到百万年薪P7职务,别人投入时间完成任务,别人采取措施解决问题了,不要不贪别人功劳,
- 但是不要给自己这样假设:别人完成就等着自己完成了,大家一个集团,一个公司,分工不同,不,这个懒惰表现,这个逃避问题表现,
- 别人不这么假设,至少kpi上不会写成自己的,至少晋升不是你,裁员淘汰是,你的整个公司ceo,整个部门总裁,整个领导不帮助一下的,他们不这么想 ,你什么没做,战略是别人10年一点带你研究的多难,项目拆分别人10年完成多少问题,项目实现10年安排组织一点点完成多少bug,多少代码,是不要给自己这样假设:你等了看了观察10年什么做 ,0 贡献,
- 但是不要给自己这样假设,别人全部市场,别人全部市场,别人占据全部客户,一切重要无比,你太差,太才,思考不行,沟通不行,认知不行,去tmd,给别人丢脸。这个方面我无法控制,在这方面经历任何问题应该的。
- 我控制 的事情是 我必须亲自了解行业遇到难题,了解有什么需求,行业解决方案,我可以从三万英尺看问题,像周围人学习,像免费公开英文资料学习,从模仿开始。然后免费公开。我要通过技术拿到百万年薪P7职务,我必须糊涂混沌中走出来
- 目标:拿百万年 想进入一线大厂,但在C++学习和应用上存在瓶颈,渴望跨越最后一道坎。
- 现状:缺乏实战,渴望提升动手能力公司的项目不会重构,没有重新设计的机会,导致难以深入理解需求。
- 成为优秀完成任务,成为团队、公司都认可的核心骨干。优秀地完成任务= 高效能 + 高质量 + 可持续 + 可度量
低头走路:
- 一次专注做好一个小事。
- 不扫一屋 何以扫天下,让自己早睡,早起,锻炼身体,刷牙保持个人卫生,多喝水 ,表达清楚 基本事情做好。
- 我控制 的事情是 我通过写自己代码拿到百万收益。代码就是杠杆,我必须创造可以运行在2c2g云主机小而美产品出来(服务普通人),而不是运行构建至少10台64cpu 300g内存物理机大而全项目(领航者,超越其他产品,出货全球N1,这个还是有停留有限斗争游戏,为top 10人企业服务)我必须糊涂混沌中走出来