当前位置:首页>Linux>Linux RCU锁技术详解

Linux RCU锁技术详解

  • 2026-02-18 06:18:07
Linux RCU锁技术详解

在Linux内核同步机制中,RCU(Read-Copy-Update,读-复制-更新)始终是“读多写少”场景下的性能王者。它不同于自旋锁的排他等待,也区别于读写锁的读写互斥,以“读端零开销、写端异步更新”的设计,成为内核中高频读场景(如链表遍历、配置查询)的核心同步方案。随着Linux 6.6内核的发布,RCU在任务调度、内存回收等场景的适配的进一步优化,本文将结合内核文档基础与Linux 6.6实际特性,拆解RCU的核心原理、常用API、实操案例,并解读其在新版本中的关键更新。

一、RCU核心原理:读懂“读无锁,写复制”的本质

RCU并非新的锁机制,其思想早在20世纪80年代就已出现,Linux内核在2.5.43版本中引入该技术,并在2.6版本中正式稳定支持。其核心设计理念是:读端无需加锁、无需等待,直接访问共享资源;写端不直接修改原资源,而是复制一份副本修改,再异步替换原资源,并在所有读端完成访问后释放旧副本

这里有两个关键概念,是理解RCU的核心:

  1. 宽限期(Grace Period):写端完成副本修改并替换指针后,需要等待所有正在访问旧资源的读端都退出读操作,这个等待周期就是宽限期。只有宽限期结束,旧资源才会被安全释放,避免读端访问到无效数据。这一过程类似Java的垃圾回收机制,核心是“等待所有引用者退出”。

  2. 读写分离:RCU的读端没有锁、内存屏障、原子指令的开销,仅需通过简单的“读开始/读结束”标记(rcu_read_lock/rcu_read_unlock)告知内核“当前正在读”;写端则通过“复制-修改-替换-释放”四步完成更新,不阻塞读端,仅在宽限期等待时可能阻塞自身。

对比我们熟悉的自旋锁,更能凸显RCU的优势:假设要修改一个链表节点,自旋锁会排他性锁住整个链表,等待所有持有锁的进程/中断释放后,才能修改节点;而RCU会直接复制该节点,在副本上完成修改,替换原节点后,等待所有正在访问旧节点的读端结束(宽限期),再释放旧节点。整个过程中,读端完全不受影响,可正常遍历链表。

二、Linux 6.6 RCU关键更新:适配新场景,优化性能

Linux 6.6内核对RCU进行了针对性优化,重点围绕任务调度、内存回收等核心场景,完善了RCU的兼容性和性能,其中两个关键更新最值得关注(结合内核commit记录与实际应用场景):

1. 任务RCU(Tasks RCU)的稳定性提升

Tasks RCU是RCU的一个重要变体,主要用于用户态线程和内核线程的同步场景,无需依赖内核抢占,适用于无法使用常规RCU的任务上下文。Linux 6.6通过多个commit更新,修复了Tasks RCU在任务切换、调度延迟场景下的宽限期计算偏差问题,减少了写端回调函数的执行延迟,让Tasks RCU在高并发任务调度场景下(如容器调度、多线程任务处理)的稳定性大幅提升。

2. 页表回收的RCU优化

Linux 6.6内核优化了RCU在内存页表回收中的应用,通过RCU机制实现页表的异步释放,避免了页表回收过程中对读端(如进程地址空间遍历)的阻塞。具体来说,当内核释放进程页表时,不再直接删除页表项,而是通过RCU复制页表副本,修改后替换原指针,等待所有访问该页表的读端退出后,再异步释放旧页表,这一优化显著降低了内存回收场景下的系统卡顿概率,尤其适配大内存服务器的实际应用需求。

此外,Linux 6.6延续了RCU的核心设计原则,未对常用API进行破坏性修改,保证了内核模块、驱动程序的兼容性,这也意味着基于旧版本RCU开发的代码,无需大幅修改即可适配6.6内核。

三、RCU常用API:Linux 6.6实操必备(附案例)

RCU的API设计简洁,核心分为“读端操作、写端操作、指针操作、链表专用操作”四类,以下结合Linux 6.6内核实际用法,拆解常用API及实操案例,所有案例均适配6.6内核语法规范。

1. 读端API:零开销的读操作

读端的核心是“标记读区间”,无需加锁,仅通过两个API界定读临界区,内核会自动跟踪读端的执行状态,确保写端的宽限期等待有效。

  • 读锁定:rcu_read_lock() / rcu_read_lock_bh()(后者禁止软中断,适用于软中断上下文读操作)

  • 读解锁:rcu_read_unlock() / rcu_read_unlock_bh()

读端标准用法(以内核kvm模块代码为参考,适配Linux 6.6):

rcu_read_lock();// 读临界区:通过rcu_dereference获取RCU保护的指针,安全访问其指向内容irq_rt = rcu_dereference(kvm->irq_routing);if (irq < irq_rt->nr_rt_entries) {    hlist_for_each_entry(e, &irq_rt->map[irq], link) {if (likely(e->type == KVM_IRQ_ROUTING_MSI))            ret = kvm_set_msi_inatomic(e, kvm);else            ret = -EWOULDBLOCK;break;    }}rcu_read_unlock(); // 结束读临界区,告知内核当前读操作完成

关键说明:Linux 6.6中,rcu_read_lock()依然保持“零开销”特性,仅在编译期插入内存屏障(避免指令重排),运行时无任何原子操作,读端性能与直接访问共享资源几乎无差异。

2. 写端API:复制-修改-替换的核心流程

写端的核心是“异步更新+宽限期等待”,常用API分为两类:同步等待宽限期(阻塞写端)和异步回调(不阻塞写端),适配不同的写端上下文(进程上下文/中断上下文)。

  • 同步等待宽限期:synchronize_rcu(),阻塞写端,直到所有正在进行的读端完成,适用于进程上下文。

  • 异步回调:call_rcu(),不阻塞写端,将旧资源释放操作注册为回调函数,宽限期结束后自动执行,适用于中断、软中断上下文(Linux 6.6中支持更多中断场景的回调适配)。

写端标准案例(修改链表节点,适配Linux 6.6):

structfoo {structlist_headlist;int a;int b;int c;};LIST_HEAD(head); // 初始化RCU保护的链表// 写端:修改链表中指定key的节点voidupdate_foo(int key, int new_b, int new_c){structfoo *p, *q;// 1. 查找需要修改的节点(此处可加自旋锁,避免多个写端并发修改)    p = search(head, key);if (p == NULLreturn;// 2. 复制原节点副本    q = kmalloc(sizeof(*p), GFP_KERNEL);if (!q) return;    *q = *p; // 复制原节点内容// 3. 修改副本中的成员    q->b = new_b;    q->c = new_c;// 4. 替换原节点(RCU专用链表替换API)    list_replace_rcu(&p->list, &q->list);// 5. 等待宽限期,释放旧节点(Linux 6.6中synchronize_rcu()性能优化,等待延迟降低)    synchronize_rcu();    kfree(p);}

3. 指针操作API:保证读写一致性

RCU保护的共享资源多为指针指向的数据,Linux内核提供了专用的指针赋值/访问API,避免因CPU指令重排导致的读写不一致问题(Linux 6.6中这些API的兼容性进一步提升,支持更多自定义数据类型):

  • rcu_assign_pointer(p, v):给RCU保护的指针p赋值为v,内嵌内存屏障,保证写端赋值前的所有操作,对读端可见。

  • rcu_dereference(p):读端获取RCU保护的指针p,确保读端能看到指针指向的最新有效数据,必须在rcu_read_lock()/rcu_read_unlock()区间内使用。

  • rcu_access_pointer(p):仅获取指针本身的值(不访问指向内容),适用于判断指针是否为NULL的场景,无需进入读临界区。

4. 链表专用API:Linux 6.6高频使用场景

链表是内核中最常用的数据结构之一,Linux内核为RCU提供了专门的链表操作API,避免手动处理复制、替换逻辑,以下是Linux 6.6中最常用的几个:

  • list_add_rcu(new, head):将新节点new插入RCU保护的链表head头部。

  • list_add_tail_rcu(new, head):将新节点new插入链表尾部。

  • list_del_rcu(entry):从链表中删除节点entry(不立即释放,需等待宽限期)。

  • list_for_each_entry_rcu(pos, head):RCU专用链表遍历宏,在读临界区内使用,可与写端并发执行。

示例:RCU保护的链表删除操作(对比读写锁,凸显RCU优势):

// RCU版本(Linux 6.6推荐写法)structel {structlist_headlp;long key;int data;};DEFINE_SPINLOCK(listmutex); // 写端互斥,避免多个写端并发LIST_HEAD(head);intdelete_rcu(long key){structel *p;    spin_lock(&listmutex); // 写端加自旋锁,互斥修改    list_for_each_entry(p, &head, lp) {if (p->key == key) {            list_del_rcu(&p->lp); // 从链表中删除节点            spin_unlock(&listmutex);            synchronize_rcu(); // 等待宽限期,确保所有读端退出            kfree(p); // 安全释放旧节点return1;        }    }    spin_unlock(&listmutex);return0;}// 读写锁版本(对比用)DEFINE_RWLOCK(listmutex_rw);intdelete_rwlock(long key){structel *p;    write_lock(&listmutex_rw); // 写端加写锁,阻塞所有读端和写端    list_for_each_entry(p, &head, lp) {if (p->key == key) {            list_del(&p->lp);            write_unlock(&listmutex_rw);            kfree(p);return1;        }    }    write_unlock(&listmutex_rw);return0;}

对比可见:RCU版本的写端仅阻塞其他写端(通过自旋锁),不阻塞读端;而读写锁版本的写端会阻塞所有读端,在高频读场景下,RCU的性能优势极为明显。

四、RCU的适用场景与避坑指南(Linux 6.6实操重点)

1. 适用场景

RCU的核心优势是“读端零开销”,因此最适合读多写少的场景,结合Linux 6.6的特性,以下场景优先选用RCU:

  • 内核链表遍历(如进程链表、设备链表、配置项链表)。

  • 高频读、低频写的共享配置(如网络参数、文件系统配置)。

  • 内存页表回收、任务调度等内核核心场景(Linux 6.6优化后更适配)。

  • 读端性能要求极高,且写端修改不频繁的场景(如监控数据查询)。

注意:Linux 6.6中,RCU依然不能替代自旋锁、读写锁——如果写端频率过高(如每秒数万次写操作),写端的副本复制、宽限期等待开销,会超过读端的性能收益,此时更适合用读写锁或自旋锁。

2. 避坑指南(新手常犯错误)

  1. 读端未使用rcu_dereference()获取指针:直接访问RCU保护的指针,可能因CPU指令重排,导致读端访问到无效数据(Linux 6.6中会触发内核警告)。

  2. 写端修改原资源而非副本:直接修改原资源会导致读端看到脏数据,违背RCU“写复制”的核心原则。

  3. 宽限期结束前释放旧资源:未调用synchronize_rcu()或call_rcu(),直接释放旧资源,会导致读端访问野指针,引发内核崩溃。

  4. 中断上下文使用synchronize_rcu():synchronize_rcu()会阻塞写端,中断上下文不能阻塞,需改用call_rcu()(Linux 6.6中对此类错误的检测更严格)。

五、总结:Linux 6.6 RCU的核心价值与未来趋势

RCU作为Linux内核中“读多写少”场景的最优同步方案之一,其核心价值在于“平衡读端性能与写端一致性”。Linux 6.6内核并未对RCU的核心架构进行重构,而是围绕实际应用场景进行了针对性优化—— Tasks RCU的稳定性提升、页表回收的适配优化,让RCU在高并发、大内存场景下的适用性更强,同时保持了API的兼容性,降低了开发者的迁移成本。

结合Linux内核的发展趋势,RCU未来将继续向“更轻量、更适配多场景”演进,比如进一步优化宽限期计算效率、扩展用户态RCU的支持场景。对于内核开发者、驱动开发者而言,掌握RCU的原理与API,尤其是Linux 6.6中的优化点,能在高频读场景中写出更高效、更稳定的内核代码。

最后,附上Linux社区RCU经典文档与Linux 6.6 RCU相关资源,方便大家深入学习:

  • RCU经典文档:https://www.kernel.org/doc/ols/2001/read-copy.pdf

  • Linux 6.6 RCU源码:kernel/rcu/ 目录下(重点关注tasks_rcu.c、rcu_gp.c)

  • 内核文档:Documentation/RCU/ (包含RCU原理、API详解与案例)

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 08:55:02 HTTP/2.0 GET : https://f.mffb.com.cn/a/475697.html
  2. 运行时间 : 0.105312s [ 吞吐率:9.50req/s ] 内存消耗:4,695.75kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=61e1d03d4bdba445b078c2f7656e36f0
  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.000593s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000748s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000297s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000370s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000669s ]
  6. SELECT * FROM `set` [ RunTime:0.000206s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000529s ]
  8. SELECT * FROM `article` WHERE `id` = 475697 LIMIT 1 [ RunTime:0.000764s ]
  9. UPDATE `article` SET `lasttime` = 1772240102 WHERE `id` = 475697 [ RunTime:0.012480s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.002764s ]
  11. SELECT * FROM `article` WHERE `id` < 475697 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000667s ]
  12. SELECT * FROM `article` WHERE `id` > 475697 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001213s ]
  13. SELECT * FROM `article` WHERE `id` < 475697 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001979s ]
  14. SELECT * FROM `article` WHERE `id` < 475697 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001141s ]
  15. SELECT * FROM `article` WHERE `id` < 475697 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006338s ]
0.106976s