96SEO 2026-02-19 19:38 8
Linux内核5.1支持了新的异步IO框架iouring由Block

Axboe开发意在提供一套公用的网络和磁盘异步IO不过io_uring目前在磁盘方面要比网络方面更加成熟。
熟悉Linux系统编程的同学都清楚Linux并没有提供完善的异步IO(网络IO、磁盘IO)机制。
IO多路复用来处理网络IO然而epoll也并不是异步网络IO仅仅是内核提供了IO复用机制epoll回调通知的是数据可以读取或者写入了具体的读写操作仍然需要用户去做而不是内核代替完成。
在存储IO栈中做存储的同学大都使用过libaio然而那是一个巨难用啊Linux
AIO这个奇葩。
首先只能在DIO下使用用不了pagecache其次用户的数据地址空间起始地址和大小必须页大小对齐然后在submit_io时仍然可能因为文件系统、pagecache、sync发生阻塞除此之外我们在使用libaio的时候会设置io_depth的大小还可能因为内核的/sys/block/sda/queue/nr_requests(128)设置的过小而发生阻塞而且libaio提供的sync命令关键还不起作用想要sync数据还得依赖fsync/fdatasync真的是心塞塞libaio想说爱你不容易啊。
所以Linux迫切需要一个完善的异步机制。
同时在Linux平台上跑的大多数程序都是专用程序并不需要内核的大多数功能而且这几年也流行kernel
API不统一使用成本过高所以内核便推出了io_uring来统一网络和磁盘的异步IO提供一套统一完善的异步API也支持异步、轮询、无锁、zero
copy。
真的是姗姗来迟啊不过也算是在高性能IO方面也算是是扳回了一城。
io_uring的设计目标是提供一个统一、易用、可扩展、功能丰富、高效的网络和磁盘系统接口。
其高性能依赖于以下几个方面
用户态支持Polling模式不依赖硬件的中断通过调用IORING_ENTER_GETEVENTS不断轮询收割完成事件。
在DirectIO下可以提前注册用户态内存地址减小地址映射的开销。
io_uring提供了3个系统调用API虽然只有3个但是直接使用起来还是蛮复杂的。
是在内核中分配的所以用户态程序并不能直接访问。
io_setup
io_uring_enter即可以提交io也可以来收割完成的IO一般IO完成时内核会自动将SQE
线程处于唤醒状态那么可以立刻捕获到这次提交这样就避免了用户程序调用
https://github.com/axboe/liburing/blob/master/src/queue.c#L22if
(IO_URING_READ_ONCE(*ring-sq.kflags)
主要包含IORING_REGISTER_FILES、IORING_REGISTER_BUFFERS在高级特性章节会描述。
Linux服务器架构师学习资料加qun579733396获取资料包括C/CLinuxgolang技术NginxZeroMQMySQLRedisfastdfsMongoDBZK流媒体CDNP2PK8SDockerTCP/IP协程DPDKffmpeg等免费分享
我们知道io_uring虽然仅仅提供了3个系统API但是想要用好还是有一定难度的所提fio大神本人封装了一个Liburing简化了io_uring的使用通过使用liburing我们很容易写出异步IO程序。
代码位置github.com/axboe/liburi在使用的时候目前仍然需要拉取代码自己编译估计之后将会融入内核在用户程序中需要包含#include
列举一些比较常用的封装的APIgithub.com/axboe/liburi
非系统调用准备阶段和libaio封装的io_prep_writev一样
非系统调用准备阶段和libaio封装的io_prep_readv一样
非系统调用提交sq的entry不会阻塞等到其完成内核在其完成后会自动将sqe的偏移信息加入到cq在提交时需要加锁
非系统调用提交sq的entry阻塞等到其完成在提交时需要加锁。
io_uring_submit_and_wait(struct
io_uring里面提供了polling机制IORING_SETUP_IOPOLL可以让内核采用
层的请求IORING_SETUP_SQPOLL可以让内核新起线程轮询提交sq的entry。
如果应用提交到内核的虚拟内存地址是固定的那么可以提前完成虚拟地址到物理
通过liburing使用起来还是比较方便的不用操心内核的一些事情简直爽歪歪啊。
具体可参考cephgithub.com/ceph/ceph/bl
IO在这个函数里面会判断是否需要调用系统调用io_uring_enter。
设置了IORING_SETUP_SQPOLL则不需要调用没有设置则需要用户调用。
可以看出来intel自己测试的结果表明延迟方面spdk比io_uring要低60%。
使用了自己带的perf的测试工具测的。
目前发现已经有几个项目在做尝试性的应用rocksdb、ceph、spdk、第三方适配(nginx、redis、echo_server)
rocksdb官方实现了PosixRandomAccessFile::MultiRead()使用io_uring。
除此之外tikv扩展了一些实现openinx.github.io/ppt/i
wal和sstbale的写入使用io_uring但是测完之后性能提升不明显。
SPDK与io_uring新异步IO机制在其抽象的通用块层加入了io_uring的支持。
ceph的io_uring主要使用在block_device抽象出了统一的块设备直接操作裸设备对上层提供统一的读写方法。
only的写入即可不需要提供随机写大大简化了bluefs的实现。
第三方io_uring适配(nginx、redis、echo_server)性能测试结果
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback