当前位置:首页>Linux>Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命

Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命

  • 2026-01-09 13:28:01
Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命

Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命

一、引言: 为什么需要io_uring?

1.1 传统I/O模型的瓶颈

在io_uring出现之前, Linux已经历了多种I/O模型的演进:

模型
出现时间
核心机制
优点
缺点
同步阻塞
Unix早期
read()/write()阻塞调用
简单直观
并发性能差
多进程/多线程
早期
fork/多线程
提升并发
上下文切换开销大
非阻塞I/O
80年代
O_NONBLOCK标志
避免阻塞
需要轮询, CPU浪费
I/O多路复用
80-90年代
select/poll
单线程管理多个I/O
遍历所有fd, O(n)复杂度
epoll
2002
事件通知机制
O(1)复杂度
仍需要系统调用
AIO
2002
异步I/O接口
真正的异步
设计复杂, 限制多

但问题始终存在: 系统调用开销. 每次I/O操作都需要从用户态切换到内核态, 这个代价在现代高速存储设备面前显得格外沉重

1.2 存储设备的革命性变化

看看这个数据对比:

HDD时代 (2000年):    ~100 IOPS, 延迟~10msSSD时代 (2010年):    ~100K IOPS, 延迟~100μs  NVMe时代 (2020年):   ~1M IOPS, 延迟~10μs

当存储延迟从毫秒级降到微秒级, 系统调用开销(通常500-1000纳秒)就变得不可忽视. 这正是io_uring诞生的时代背景

二、io_uring的设计哲学

2.1 核心理念: 共享内存的协作

io_uring的核心思想可以用一句话概括: 通过用户态和内核态共享的内存区域, 实现零拷贝的请求提交和完成通知

这就像一个高度优化的餐厅后厨系统:

  • • 传统模型: 每次点菜都要跑到厨房通知厨师(系统调用)
  • • io_uring: 在餐厅和厨房之间放一个旋转传送带(共享环形队列), 顾客把订单放上传送带, 厨师直接取单, 做好后再放回另一个传送带

2.2 三大设计原则

  1. 1. 零拷贝: 请求和响应通过内存共享传递, 无需数据拷贝
  2. 2. 零系统调用: 理想情况下, I/O操作完全不需要系统调用
  3. 3. 批处理友好: 一次可以提交多个请求, 一次可以收割多个完成

三、核心架构与实现机制

3.1 三个核心数据结构

/* 提交队列条目 - 代表一个I/O请求 */struct io_uring_sqe {    __u8    opcode;         /* 操作类型: read/write/accept等 */    __u8    flags;          /* 标志位 */    __u16   ioprio;         /* I/O优先级 */    __s32   fd;             /* 文件描述符 */    __u64   off;            /* 文件偏移 */    __u64   addr;           /* 缓冲区地址或用户数据 */    __u32   len;            /* 缓冲区长度 */union {        __kernel_rwf_t  rw_flags;    /* R/W标志 */        __u32           fsync_flags; /* fsync标志 */        __u16           poll_events; /* poll事件 */        __u32           sync_range_flags; /* sync范围标志 */    };    __u64   user_data;      /* 用户数据, 用于关联请求和响应 */union {        __u16   buf_index;  /* 固定缓冲区索引 */        __u64   __pad2[3];  /* 填充 */    };};/* 完成队列条目 - 代表一个完成的I/O */struct io_uring_cqe {    __u64   user_data;      /* 对应SQE的user_data */    __s32   res;            /* 结果(类似返回值) */    __u32   flags;          /* 标志位 */};/* 环结构 - 管理整个队列 */struct io_uring {struct io_uring_sq sq;  /* 提交队列状态 */struct io_uring_cq cq;  /* 完成队列状态 */    unsigned flags;         /* io_uring标志 */    int ring_fd;            /* io_uring文件描述符 */};

3.2 环形队列的魔法

环形队列是io_uring性能的关键. 它的设计非常精妙:

关键点:

  • • kheadktail指针由内核和用户空间共享
  • • 用户空间通过增加tail来提交请求
  • • 内核通过增加head来消费请求
  • • 通过内存屏障保证一致性

3.3 队列的同步机制

3.4 五种工作模式详解

模式
触发机制
系统调用需求
适用场景
中断驱动
I/O完成后硬件中断
每次提交需要系统调用
通用场景
轮询模式
内核线程忙轮询
完全零系统调用
极高IOPS需求
内核轮询
内核主动检查SQ
仅收割时需要系统调用
高吞吐场景
SQ线程
独立线程处理提交
自动提交, 无需显式调用
简化编程模型
注册文件/缓冲区
预注册资源
减少重复元数据开销
重复I/O模式

四、io_uring的工作流程深度剖析

4.1 初始化阶段

// 简化的初始化流程struct io_uring ring;io_uring_queue_init(ENTRIES, &ring, 0);// 实际发生的步骤: // 1. 内核创建io_uring实例// 2. 分配并映射三个内存区域: //    - 提交队列环 (sq_ring)//    - 完成队列环 (cq_ring)  //    - 提交队列条目数组 (sqes)// 3. 返回io_uring文件描述符

初始化过程的内存布局:

4.2 请求提交阶段

// 获取一个SQEstruct io_uring_sqe *sqe = io_uring_get_sqe(&ring);// 设置请求参数io_uring_prep_read(sqe, fd, buf, size, offset);sqe->user_data = (uintptr_t)my_data;  // 用户自定义标识// 提交请求io_uring_submit(&ring);// 内部发生什么?// 1. 填充sqes数组中的条目// 2. 更新array映射// 3. 更新sq.tail指针// 4. 根据模式决定是否触发系统调用

4.3 内核处理阶段

内核视角的处理流程:

4.4 完成收割阶段

// 等待完成事件struct io_uring_cqe *cqe;int ret = io_uring_wait_cqe(&ring, &cqe);// 或者非阻塞检查int ret = io_uring_peek_cqe(&ring, &cqe);// 处理所有完成的请求unsigned head;int count = 0;io_uring_for_each_cqe(&ring, head, cqe) {    // 处理完成事件    process_completion(cqe);    count++;}// 标记这些CQE已处理io_uring_cq_advance(&ring, count);

五、高级特性详解

5.1 链接的SQE(链式操作)

io_uring支持请求依赖关系, 类似CPU的指令流水线:

// 创建链式操作: 读取 -> 处理 -> 写入struct io_uring_sqe *sqe1 = io_uring_get_sqe(&ring);struct io_uring_sqe *sqe2 = io_uring_get_sqe(&ring);struct io_uring_sqe *sqe3 = io_uring_get_sqe(&ring);// 读取数据io_uring_prep_read(sqe1, fd_in, buf1, size, 0);sqe1->flags |= IOSQE_IO_LINK;  // 链接到下一条// 处理数据(假设是自定义操作)io_uring_prep_nop(sqe2);sqe2->flags |= IOSQE_IO_LINK;  // 继续链接// 写入结果io_uring_prep_write(sqe3, fd_out, buf2, size, 0);// 不需要链接标志io_uring_submit(&ring);// 这三个操作会按顺序执行

5.2 固定文件和缓冲区

// 注册固定文件int fds[] = {fd1, fd2, fd3};io_uring_register_files(&ring, fds, 3);// 使用固定文件struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);io_uring_prep_read(sqe, 0, buf, size, 0);  // 使用索引0sqe->flags |= IOSQE_FIXED_FILE;// 注册固定缓冲区struct iovec iov = {buf, size};io_uring_register_buffers(&ring, &iov, 1);// 使用固定缓冲区io_uring_prep_read_fixed(sqe, fd, 0, size, 0, 0);  // 缓冲区索引0

5.3 轮询模式的工作原理

轮询模式是io_uring性能的终极武器:

性能对比:

中断模式:   应用 <--中断--> 内核 <--中断--> 硬件轮询模式:   应用 <--内存访问--> 内核 <--轮询--> 硬件

六、实战示例: 构建简单的echo服务器

6.1 完整架构设计

6.2 核心代码实现

#include <liburing.h>#include <string.h>#define ENTRIES 256#define MAX_CONNECTIONS 1024struct conn_info {    int fd;    unsigned type;  // 类型: ACCEPT, READ, WRITE};int main() {    // 1. 初始化io_uringstruct io_uring ring;    io_uring_queue_init(ENTRIES, &ring, IORING_SETUP_SQPOLL);    // 2. 创建监听socket    int listen_fd = setup_listening_socket(8080);    // 3. 提交初始accept请求struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);struct conn_info conn_i = { .fd = listen_fd, .type = ACCEPT };    io_uring_prep_multishot_accept(sqe, listen_fd, NULL, NULL, 0);    io_uring_sqe_set_data64(sqe, (uint64_t)&conn_i);    io_uring_submit(&ring);    // 4. 事件循环    while (1) {struct io_uring_cqe *cqe;        int ret = io_uring_wait_cqe(&ring, &cqe);        if (ret < 0) break;struct conn_info *conn_i = (struct conn_info*)io_uring_cqe_get_data64(cqe);        int res = cqe->res;        if (conn_i->type == ACCEPT) {            // 新连接            if (res > 0) {struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);struct conn_info *new_conn = malloc(sizeof(struct conn_info));                new_conn->fd = res;                new_conn->type = READ;                io_uring_prep_read(sqe, res, buffer, BUFFER_SIZE, 0);                io_uring_sqe_set_data64(sqe, (uint64_t)new_conn);            }            // 重新提交accept(多shot模式)            if (!(cqe->flags & IORING_CQE_F_MORE)) {                sqe = io_uring_get_sqe(&ring);                io_uring_prep_multishot_accept(sqe, listen_fd, NULL, NULL, 0);                io_uring_sqe_set_data64(sqe, (uint64_t)&conn_i);            }        }        else if (conn_i->type == READ) {            if (res > 0) {                // 读取成功, 准备写回                struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);                conn_i->type = WRITE;                io_uring_prep_write(sqe, conn_i->fd, buffer, res, 0);                io_uring_sqe_set_data64(sqe, (uint64_t)conn_i);            } else {                // 连接关闭                close(conn_i->fd);                free(conn_i);            }        }        else if (conn_i->type == WRITE) {            // 写回完成, 准备下一次读            struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);            conn_i->type = READ;            io_uring_prep_read(sqe, conn_i->fd, buffer, BUFFER_SIZE, 0);            io_uring_sqe_set_data64(sqe, (uint64_t)conn_i);        }        io_uring_cq_advance(&ring, 1);        io_uring_submit(&ring);    }    io_uring_queue_exit(&ring);    return 0;}

七、性能优化与最佳实践

7.1 性能调优参数

参数
默认值
建议值
影响
SQ/CQ 条目数
依赖系统
4096-32768
影响吞吐量和延迟
SQE大小
64字节
默认
每个请求的内存占用
CQE大小
16字节
默认
每个完成的内存占用
批处理大小
1
8-32
减少系统调用次数
IORING_SETUP_SQPOLL
禁用
根据负载启用
完全零系统调用

7.2 内存对齐的重要性

// 错误示例: 未对齐的内存访问char buffer[1024];struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);io_uring_prep_read(sqe, fd, buffer, 1024, 0);  // 可能未对齐// 正确示例: 确保内存对齐#define ALIGN_UP(x, align) (((x) + (align) - 1) & ~((align) - 1))size_t aligned_size = ALIGN_UP(1024, 4096);void *buffer = aligned_alloc(4096, aligned_size);  // 页面对齐// 或者使用io_uring的固定缓冲区特性struct iovec iov = {buffer, aligned_size};io_uring_register_buffers(&ring, &iov, 1);

7.3 负载均衡策略

八、调试与监控工具

8.1 常用工具命令

# 1. 查看io_uring统计信息cat /proc/<pid>/io_uring# 输出示例: # SQEs: submitted=1000000, completed=999980# CQEs: reaped=999980, dropped=0# Poll: active=1, wakeups=50# 2. 使用bpftrace跟踪io_uringsudo bpftrace -e 'tracepoint:io_uring:io_uring_submit_sqe {    printf("pid %d submitted sqe %llx\n", pid, args->sqe);}tracepoint:io_uring:io_uring_complete {    printf("pid %d completed cqe %llx, res %d\n",            pid, args->cqe, args->res);}'# 3. perf分析io_uring性能perf record -e io_uring:* -agperf report# 4. 使用liburing提供的工具./tools/io_uring-cp input.txt output.txt  # 高性能文件复制./tools/io_uring-test  # 运行测试套件

8.2 调试技巧

  1. 1. 内存泄漏检测:
// 在调试版本中跟踪资源#define DEBUG_ALLOC 1#ifdef DEBUG_ALLOC    static atomic_long_t sqe_count = 0;    #define GET_SQE() ({ \        struct io_uring_sqe *__sqe = io_uring_get_sqe(&ring); \        if (__sqe) atomic_inc(&sqe_count); \        __sqe; \    })#endif
  1. 2. 死锁检测:
# 使用gdb检查io_uring状态gdb -p <pid>(gdb) call (void)io_uring_dump_status(uring_ptr)

九、io_uring生态系统

9.1 相关库和框架

项目
描述
适用场景
liburing
官方C库封装
所有io_uring应用
uring-rs
Rust绑定
Rust应用
iouring
Go绑定
Go应用
TokuMX
数据库引擎
存储引擎
SPDK
存储开发套件
高性能存储
Ceph
分布式存储
对象存储后端

9.2 内核集成状态

io_uring已深度集成到Linux内核多个子系统:

十、总结

10.1 技术对比表

特性
epoll
Linux AIO
io_uring
异步支持
半异步(仅通知)
完全异步
完全异步
系统调用
每次事件循环
每次I/O
零或极少
内存拷贝
需要
部分需要
零拷贝
批处理
不支持
有限支持
完全支持
链接操作
不支持
不支持
支持
轮询模式
不支持
不支持
支持
固定资源
不支持
不支持
支持
适用场景
网络服务
文件I/O
所有高性能I/O

10.2 核心优势总结

  1. 1. 极致性能: 通过共享内存、零拷贝、批处理实现微秒级延迟
  2. 2. 统一模型: 统一文件、网络、定时器等各种I/O操作
  3. 3. 灵活扩展: 支持自定义操作和未来硬件特性
  4. 4. 生态系统: 得到主流应用和内核子系统的广泛支持

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 23:04:57 HTTP/2.0 GET : https://f.mffb.com.cn/a/460987.html
  2. 运行时间 : 0.149612s [ 吞吐率:6.68req/s ] 内存消耗:4,570.88kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=5ba3706cadb63dce7c058364c7411d1b
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000893s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001584s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000725s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000677s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001222s ]
  6. SELECT * FROM `set` [ RunTime:0.001469s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001222s ]
  8. SELECT * FROM `article` WHERE `id` = 460987 LIMIT 1 [ RunTime:0.003798s ]
  9. UPDATE `article` SET `lasttime` = 1770563097 WHERE `id` = 460987 [ RunTime:0.022112s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.004383s ]
  11. SELECT * FROM `article` WHERE `id` < 460987 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005445s ]
  12. SELECT * FROM `article` WHERE `id` > 460987 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001050s ]
  13. SELECT * FROM `article` WHERE `id` < 460987 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001779s ]
  14. SELECT * FROM `article` WHERE `id` < 460987 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001731s ]
  15. SELECT * FROM `article` WHERE `id` < 460987 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.010678s ]
0.154929s