当前位置:首页>Linux>Linux 内核功耗子系统(九):thermal framework 通用架构梳理

Linux 内核功耗子系统(九):thermal framework 通用架构梳理

  • 2026-06-30 00:40:53
Linux 内核功耗子系统(九):thermal framework 通用架构梳理

全景介绍

很多功耗问题,表面看是频率降不下来,往里看是温度约束没有进到正确的执行路径里。系统要回答的是:温度到了哪一档,应该限制谁,限制到什么程度。前面讲 devfreq 时,thermal 只是作为一个外部限制出现:温度升高以后,GPU、DDR、NPU 这类设备的可选最高频率会被压低。单看这一点,很容易把 thermal framework 理解成一个降频开关。这个理解会忽略掉 thermal 的架构位置。放到整机里看,thermal framework 处理的是一条闭环:温度从传感器进来,进入 thermal zone;zone 根据 trip point 判断当前热状态;governor 把热状态换算成 cooling state;cooling device 再把这个 state 转成具体动作。

Image

这个动作可能是压低 CPUFreq 的 policy max,也可能是限制 GPU、DDR、NPU 的 devfreq 上限;也可能是 charger 限流、fan 提速,或者在 critical trip 下触发关机保护。这里要先把边界摆清楚。thermal framework 不直接处理 OPP、clock、regulator,也不替 CPU 或 GPU driver 写寄存器。它做的是把“温度已经到哪一档”翻译成“某个 cooling device 应该进入哪一档冷却状态”。至于这档状态最后对应哪个频率、电压、功耗预算、风扇转速或充电电流,由下游设备自己决定。这层间接性很重要,它把温控从单个 driver 里抽了出来。一个平台上可能有多个温区,也可能有多个发热源和散热手段。如果每个 driver 都自己判断温度、自己决定压频,整机策略很快会散掉。thermal framework 把温度、策略和执行对象连到一张图里,系统才有机会做统一约束。

架构设计:把温度采集、策略和冷却动作分开

thermal framework 要处理的重点,是让温度值进入整机功耗约束链路。CPU 过热可能要限制 CPUFreq,GPU 过热可能要限制 devfreq,电池或 PMIC 过热可能要限制充电电流,整板温度过高时还可能同时压多个设备。不同板子的传感器位置、散热条件、trip 阈值和冷却手段都不一样。如果这些逻辑散在各个设备 driver 里,温控路径会变成一堆局部判断,后面很难维护。所以 thermal 把这条路径拆成四个角色:sensor driver 负责拿到温度,thermal zone 负责表达温区状态,thermal governor 负责策略计算,cooling device 负责把冷却等级落到设备动作。

Image

sensor driver 提供温度来源。它可以读 SoC 内部 TSADC,也可以读 PMIC、battery gauge、board sensor,或者通过 SCMI、固件接口拿温度。

thermal core 不关心温度来自 ADC、寄存器还是 firmware,它只要求 zone ops 能返回当前温度。thermal zone 描述一个被监控的温区。

SoC 上常见 CPU thermal zone、GPU thermal zone、NPU thermal zone、battery thermal zone、board thermal zone。每个 zone 有自己的温度、trip point、polling delay、mode 和 governor。zone 不是单纯的 sensor 别名,它是 thermal core 看待热状态的基本对象。

thermal governor 做策略计算。

  • step_wise 会随着温度越过 trip 逐步提高 cooling state,温度回落后再逐步释放;

  • power_allocator 会按功耗预算分配冷却压力;

  • user_space 会把事件交给用户态策略服务。它们都只计算“该给多少冷却等级”,不直接碰硬件资源。

cooling device 执行冷却动作。CPUFreq cooling device 常见动作是限制 CPU policy 的最高频率;devfreq cooling device 会限制 GPU、DDR、NPU 等设备的可选频率;charger cooling device 可以限制充电电流;fan cooling device 可以提高转速。thermal core 最终调用的是 set_cur_state(),设备内部怎么把 state 变成硬件动作,由对应子系统处理。

核心对象

thermal 的对象关系是围绕 thermal zone 展开的。CPUFreq 以 policy 为中心,devfreq 以 device 为中心,thermal 则以温区为中心。一个 zone 可以绑定多个 cooling device,一个 cooling device 也可能参与多个 zone 的冷却。这组多对多关系,才是 thermal 比设备自己降频更复杂的地方。

Image
  • struct thermal_zone_device 是 thermal core 为一个温区建立的运行对象。它记录当前温度、上次温度、trip 数量、polling delay、thermal zone ops、governor、device 节点、锁和状态信息。CPU、GPU、battery、board sensor 都可以对应不同 thermal zone。驱动把温度交给 zone,后面的判断都围绕 zone 展开。

  • struct thermal_trip 描述温度阈值。常见 trip 类型包括 passive、active、hot、critical。passive trip 通常用于性能限制;active trip 常用于风扇这类主动散热设备;critical trip 是硬保护路径,温度到这一档,系统要优先避免硬件损伤。struct thermal_governor 是温控策略对象。它根据 zone 温度、trip 状态和 cooling map 计算 cooling state。governor 不直接改 CPU 频率,也不直接控制 GPU 频率。它只决定某个 cooling device 应该进入哪个冷却等级。

  • struct thermal_cooling_device 表示一个可被 thermal 调节的执行对象。它向 thermal core 暴露 get_max_state()get_cur_state()set_cur_state() 等接口。CPUFreq、devfreq、fan、charger 都可以注册成 cooling device。thermal core 不需要知道每类设备内部怎么调频、限流或调速。

  • thermal_instance 描述 zone 和 cooling device 的绑定关系。device tree 里的 cooling-maps 会把某个 trip 和某个 cooling device 连接起来,并给出可用 cooling state 范围。thermal core 通过 instance 维护 zone、trip 和 cooling device 之间的关系。没有这层绑定,zone 只能知道自己热了,却不知道该通知谁。

注册路径:thermal zone 如何接入系统

thermal zone 通常由 sensor driver 或平台 thermal driver 注册。在 ARM SoC 上,驱动 probe 阶段一般会先准备温度采集资源。比如 TSADC 寄存器、ADC channel、clock、reset、interrupt,或者 firmware handle。资源准备好以后,再解析 device tree 里的 thermal-zonestrips 和 cooling-maps

Image

典型路径是先注册 thermal zone。sensor driver 提供get_temp()等 ops,thermal core 创建 thermal_zone_device。zone 注册以后,core 会解析 trip point,并根据 cooling-maps 去找对应的 cooling device。cooling device 的注册通常发生在各自子系统里。CPUFreq 可以注册 cpufreq cooling device,devfreq 设备可以注册 devfreq cooling device,charger 或 fan driver 也可以注册自己的 cooling device。

thermal core 不要求这些对象来自同一个 driver。温度来源和冷却手段,本来就可能分散在不同设备上。zone 和 cooling device 绑定以后,温度事件才有了出口。只有 thermal zone,没有 cooling device,系统只能知道温度变化,不能把温度变成性能限制。只有 cooling device,没有 cooling-map,thermal 也不知道该在哪个 trip 下调整它。温控要生效,三件事必须同时在场:zone 能读温度,trip 能判断状态,cooling-map 能找到执行对象。

温度更新路径:从 get_temp 到 set_cur_state

thermal 更新可以由轮询触发,也可以由硬件中断或 firmware 事件触发。入口不同,主线一样:读温度,比较 trip,调用 governor,更新 cooling device。理解这条路径,比记住每个结构体字段更重要。

Image

第一步,thermal core 调用 zone ops 的 get_temp() 获取当前温度。温度单位通常是毫摄氏度。driver 返回的是某个 sensor 或 firmware 视角下的温度值。这个温度对应芯片哪个物理点、代表哪块区域的热状态,不由 thermal core 推断,而由平台热设计和 device tree 描述。

第二步,core 检查 trip point。当温度跨过 passive、active、hot 或 critical trip 时,zone 状态发生变化。passive trip 更偏性能约束,active trip 更偏主动散热,critical trip 更偏保护动作。trip 不是装饰字段,它决定温度变化从哪里开始变成系统动作。

第三步,governor 根据 zone 状态和 cooling map 计算 cooling state。以 step_wise 为例,温度超过 trip 后逐步提高 cooling state,温度回落后逐步降低 state。它不会一次性替设备选择具体频率,也不需要知道某个 OPP 对应多少电压。它调整的是 cooling device 的等级。

第四步,thermal core 调用 cooling device 的 set_cur_state()。对 cpufreq cooling 来说,这个 state 会转换为 CPU 最高频率限制。对 devfreq cooling 来说,这个 state 会转换为设备频率上限。对 fan 来说,state 可能对应转速档位。对 charger 来说,state 可能对应充电电流限制。这里容易混淆:thermal 更新路径不是另一套 CPUFreq 或 devfreq 调频路径。thermal 修改的是约束,最终频率切换仍然走 CPUFreq、devfreq、OPP、clock、regulator 或 firmware。

governor:温控策略不是硬件动作

thermal governor 的输入是温度和 trip 状态,输出是 cooling state。它不应该承担设备资源切换动作,也不应该理解每个 OPP 的电压、时钟和 regulator 细节。governor 位于 thermal zone 和 cooling device 之间,负责把热状态算成冷却压力。

Image

step_wise 是最常见的策略。温度超过 trip 后,它逐级提高 cooling state;温度下降后,再逐级释放限制。这个策略不追求复杂模型,但路径清楚,适合很多 SoC 默认温控场景。嵌入式平台上,如果只是需要稳定地压住温度,它往往已经够用。power_allocator 更关注功耗预算。它会把温度控制看成热功耗分配问题,根据 thermal zone 的状态和模型,把可用功耗预算分给不同 cooling device。当 CPU 和 GPU 同时作为 cooling device 时,这类策略更有发挥空间。它处理的是多个发热源之间怎么分摊冷却压力。

user_space 把事件交给用户态。thermal core 负责通知,用户态 thermal daemon 或平台策略服务再决定如何处理。手机、车机、服务器平台经常会在内核 thermal 基础上叠加厂商策略。内核提供统一接口,平台策略可以放到用户态或固件侧继续细化。

fair_share 关注多个 cooling device 间的分摊。当一个 zone 绑定多个 cooling device 时,策略需要决定冷却压力怎么分配。不同平台的热设计差异很大,governor 只是策略入口,不替平台完成热设计。温控效果仍然取决于传感器位置、散热结构、trip 设计和 cooling map 配置。

cooling device:温控约束如何落到执行对象

cooling device 是 thermal framework 和其他子系统之间的连接点。thermal governor 只给出 cooling state,cooling device 把 state 转换成可执行动作。这个转换层很关键,因为 thermal core 不应该理解每个设备的调频细节。

Image

CPUFreq cooling device 常见动作是限制 CPU policy 的最高频率。温度升高后,thermal 提高 cooling state。cpufreq cooling 把 state 映射为某个最大频率,再让 CPUFreq core 在后续频率选择中合并这个上限。schedutil 仍然可以根据负载请求频率,但请求结果不能超过 thermal 给出的限制。

devfreq cooling device 的路径类似。GPU、DDR、NPU、ISP 等设备注册 devfreq cooling 后,thermal state 会影响 devfreq 的可选频率范围。governor 仍然可以根据负载、带宽或 passive 关系给出目标频率,但 core 合并约束后,最终目标频率会被 thermal 上限裁剪。

charger cooling device 通常限制充电电流。电池或 PMIC 温度过高时,系统不一定只压 CPU 或 GPU。降低充电功率往往是更直接的控温手段。很多移动设备和嵌入式设备里,充电发热本身就是重要热源,thermal framework 可以把 charger 纳入统一 cooling device 模型。

fan cooling device 常见于带主动散热的平台。温度达到 active trip 后,thermal 可以提高 fan state。这个路径和 CPUFreq、devfreq 不同,动作是增加散热能力,不是压性能。critical trip 是保护路径。温度达到 critical 级别时,系统通常会触发关机或重启保护。这个动作不再是性能调节,而是避免硬件损伤。到这一层,系统优先级已经从“体验”切到“安全”。

与 CPUFreq、devfreq、PM QoS 的关系

thermal 和 CPUFreq、devfreq 的关系,不能简单说成“thermal 直接给设备降频”。更准确的说法是,thermal 是约束输入。它根据温度改变 CPUFreq policy 或 devfreq device 的可选性能范围。CPUFreq/devfreq core 仍然要合并 governor、用户策略、OPP、PM QoS、firmware、thermal 等约束,再交给 driver 执行。

Image

CPUFreq 路径里,thermal cooling 通常压低 policy max。schedutil 可以继续根据 utilization 请求频率,但请求值会被 policy limit 和 thermal limit 裁剪。driver 最终执行哪个频率,还要看 OPP、transition latency、firmware 返回值和硬件限制。thermal 只是把“最高不能超过多少”放进 CPUFreq 的约束集合。

devfreq 路径里,thermal cooling 修改设备可用频率上限。GPU 或 DDR 的 devfreq governor 仍然根据 busy/total、带宽需求或 passive 关系计算目标频率。thermal 只影响可选范围,不替 governor 采样负载,也不替 driver 执行 target()

PM QoS 的方向和 thermal 不同。thermal 多数时候压低性能上限,用来降低发热。PM QoS 常用来抬高性能下限或限制低功耗延迟,用来保证响应时间、吞吐或设备恢复延迟。两者会在 CPUFreq、devfreq、Runtime PM、CPUIdle 等路径中同时出现,最终由各自 core 合并。

调度器也会感知 thermal pressure。CPU 被 thermal 限频以后,如果调度器仍按原始 capacity 估算,任务放置会偏乐观。thermal pressure 会把热限制折算进 CPU capacity,影响 EAS、schedutil 和负载均衡。

thermal 不是单独的降频按钮。它是跨设备的温度约束来源,不替 CPUFreq、devfreq 或 OPP 做决策,但会改变这些子系统能看到的性能边界。

RK3588 thermal 链路示例

在 RK3588 这类 ARM SoC 上,thermal 链路通常从片内 TSADC 开始。TSADC driver 会准备寄存器、clock、reset、interrupt 等资源,把温度读取能力注册给 thermal core。thermal core 通过 zone ops 获取温度值,不需要理解 TSADC 通道背后的寄存器布局,也不需要知道某个采样点在芯片里的物理位置。

平台热设计主要落在 device tree 里。thermal-zones 描述温区,trips 描述温度阈值,cooling-maps 把 trip 和执行对象连起来。CPU、GPU、NPU、DDR、charger 是否参与温控,取决于板级 thermal 设计,以及对应设备是否注册了 cooling device。同一颗 RK3588,换一块散热结构不同的板子,trip 阈值、polling delay、cooling map 都可能不同,温控表现也会跟着变化。

Image

CPU 侧如果绑定 cpufreq cooling,thermal state 会进入 CPUFreq policy 的上限约束。GPU、NPU、DDR 如果绑定 devfreq cooling,thermal state 会影响 devfreq 可选频率范围。后面的 OPP、clock、regulator、firmware 调用仍然由 CPUFreq 或 devfreq 路径完成。这条链路的边界比较清楚:

  • • TSADC driver 提供温度来源,thermal core 不理解寄存器细节;
  • • device tree 描述 zone、trip 和 cooling-map,把板级热设计交给 thermal core;
  • • CPUFreq/devfreq cooling device 把 cooling state 转成性能上限;
  • • 实际调频调压继续走 CPUFreq、devfreq、OPP、clock、regulator 或 firmware。
  • 读 RK3588 的 thermal 设备树或驱动时,容易把 thermal zone、cooling state、CPUFreq policy max、devfreq target、OPP 电压点看成同一个动作。它们确实在同一条控温链路里,但职责不在同一层。thermal framework 负责温度状态和冷却等级,下游 DVFS 框架负责把约束合并到具体频率、电压和硬件切换路径里。

总结

thermal framework 把温度变成系统级功耗约束。

它以 thermal zone 为中心,连接 sensor driver、trip point、thermal governor 和 cooling device。

温度变化不会直接变成寄存器写入,它先变成 cooling state,再由 CPUFreq、devfreq、charger、fan 或 platform driver 转换成具体动作。

CPUFreq 和 devfreq 看到的是被 thermal 修改后的性能边界。CPUFreq governor 或 devfreq governor 仍然负责根据负载选择目标频率,OPP、clock、regulator、firmware 仍然负责执行硬件动作。

thermal 负责在温度升高时压低可选范围,在温度回落后释放约束。PM QoS、thermal、CPUFreq、devfreq 经常在同一条路径里相遇。PM QoS 更偏性能和延迟约束,thermal 更偏温度保护和功耗压制。最终系统运行在哪个频率、哪个 idle state、哪个 power state,是这些约束共同合并后的结果。

thermal 的主线可以压成一句话:温度先进入 thermal zone,经过 trip 和 governor 变成 cooling state,再通过 cooling device 改写其他子系统的性能边界。执行频率、电压、电流或风扇动作的,仍然是 CPUFreq、devfreq、charger、fan、OPP、clock、regulator 或 firmware。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 05:07:57 HTTP/2.0 GET : https://f.mffb.com.cn/a/501437.html
  2. 运行时间 : 0.311788s [ 吞吐率:3.21req/s ] 内存消耗:4,857.31kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=bb7c583ff833281c20703999af7c9485
  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.000445s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000912s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003133s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000270s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000546s ]
  6. SELECT * FROM `set` [ RunTime:0.000249s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000617s ]
  8. SELECT * FROM `article` WHERE `id` = 501437 LIMIT 1 [ RunTime:0.034926s ]
  9. UPDATE `article` SET `lasttime` = 1783026477 WHERE `id` = 501437 [ RunTime:0.003643s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.006763s ]
  11. SELECT * FROM `article` WHERE `id` < 501437 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.030979s ]
  12. SELECT * FROM `article` WHERE `id` > 501437 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.048688s ]
  13. SELECT * FROM `article` WHERE `id` < 501437 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.061900s ]
  14. SELECT * FROM `article` WHERE `id` < 501437 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.011689s ]
  15. SELECT * FROM `article` WHERE `id` < 501437 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.021382s ]
0.313266s