当前位置:首页>Linux>Linux 调度器中的时间片管理:从 Tick、CFS 到 EEVDF 的逻辑

Linux 调度器中的时间片管理:从 Tick、CFS 到 EEVDF 的逻辑

  • 2026-07-03 02:16:32
Linux 调度器中的时间片管理:从 Tick、CFS 到 EEVDF 的逻辑

第一章 时间片是什么

1.1 时间片不是一个固定常量

很多人会把时间片理解成“一个进程运行 10ms 后强制切换到下一个进程”。这个理解只适合非常早期的轮转调度模型,放到现代 Linux 上并不准确。Linux 不同调度策略对时间片的定义完全不同:SCHED_FIFO 基本没有时间片概念,当前任务只要不阻塞、不主动让出 CPU,也没有更高优先级任务抢占,就可以持续运行;SCHED_RR 使用真实、固定的轮转时间片;普通任务所属的 fair 调度类则更接近“按权重计算 CPU 份额”,其单次连续执行时间会随运行队列任务数量、任务优先级、调度延迟目标以及唤醒抢占情况动态变化。

因此,分析 Linux 时间片不能只盯着某个毫秒数,要先确认任务属于哪一种调度类别。调度器从高到低通常依次检查 Deadline、实时调度类、普通公平调度类以及 Idle 调度类。高优先级类别只要存在可运行任务,就会压制低优先级类别;普通任务之间才讨论公平分配,实时任务之间才讨论固定轮转。所谓“时间片耗尽”在不同类别中的表现也不同:对 SCHED_RR 而言是真正的剩余量减到零,对普通任务而言则是当前任务已经运行到不再值得继续占据 CPU 的程度,调度器据此设置重新调度标记。

1.2 调度器处理的是线程,不是进程

Linux 调度的最小单位不是传统意义上的进程,而是 task_struct。一个多线程程序中的每个线程都会拥有独立的 task_struct,也会分别进入某个 CPU 的运行队列。因此当我们说“一个进程拿到了多少时间片”时,内核真正统计的是其中每个可运行线程分别获得了多少 CPU 时间。一个程序创建八个计算线程,在八核机器上可能同时运行八个线程;如果这八个线程被绑定到同一个 CPU,它们又会在同一个运行队列中竞争 CPU 时间。

每个 CPU 都维护自己的 struct rq 运行队列,当前正在运行的任务记录在 rq->curr 中,其余可运行任务按照调度类别挂在不同结构里。普通任务过去主要由 CFS 红黑树组织,现在较新的 EEVDF 逻辑仍然围绕公平实体和虚拟时间推进;实时任务则依优先级队列组织。时间片管理并不是一个全局定时器简单减法,而是“当前 CPU 的时钟推进、当前任务所属调度类、运行队列中竞争者数量、任务权重和抢占关系”共同决定的结果。

CPU0 └─ struct rq ├─ curr:当前正在执行的 task_struct ├─ deadline/rt 队列:高优先级任务 ├─ fair 队列:普通任务 └─ idle:没有其他任务可运行时执行CPU1、CPU2、CPU3…… └─ 各自维护独立 rq,并通过负载均衡迁移任务

                    第二章 Tick 如何驱动时间片推进

2.1 从时钟中断进入 scheduler_tick()

时间片的推进通常依赖调度 Tick。传统周期 Tick 模式下,本地定时器按照 HZ 频率触发中断,内核在时钟中断路径中更新时间、执行软定时器处理并进入调度器 Tick 逻辑。即使启用了 Tickless,CPU 在运行普通任务期间仍然需要在合适时机更新调度统计,只是空闲 CPU 或 NO_HZ_FULL CPU 不再机械地以固定频率执行无意义 Tick。时间片管理的关键不是“每次 Tick 都立即切换任务”,而是每次 Tick 都给调度器一次机会:统计当前任务运行了多久,判断是否存在更合适的下一个任务,并在必要时要求调度。

可以把主线理解成这样。scheduler_tick() 先锁定当前 CPU 的运行队列,更新运行队列时钟,再调用当前任务所属调度类的 task_tick() 回调。普通任务会进入 fair 类的 Tick 处理逻辑,实时 RR 任务会检查剩余轮转时间片,Deadline 任务则根据自身运行预算和截止时间判断是否需要处理。这里最重要的一点是:调度 Tick 的职责是更新状态和触发重调度意图,真正的上下文切换不一定发生在这一行代码里。

/* 抽象后的调度 Tick 主线,便于理解而非可直接编译源码 */voidscheduler_tick(void){ struct rq *rq = this_rq(); struct task_struct *curr = rq->curr; update_rq_clock(rq); /* 推进当前 CPU 的调度时钟 */ curr->sched_class->task_tick(rq, curr, 0); /* 进入具体调度类 */}

2.2 TIF_NEED_RESCHED 信号

当前任务不再适合继续执行时,调度器通常不会在任何上下文都立刻切换,而是通过 resched_curr() 为当前任务设置重新调度标记。这个标记最终会反映为线程标志中的 TIF_NEED_RESCHED。当内核即将从中断返回用户态、从抢占关闭区域恢复、主动调用 schedule(),或者发生允许抢占的内核路径时,调度器会检查该标志;一旦发现需要重新调度,就进入 __schedule(),选择下一个任务并执行上下文切换。

这种延后切换设计非常重要。假设时钟中断发生在持有自旋锁的临界区中,内核不能在持锁状态直接切换到其他任务,否则锁语义将被破坏。因此时间片耗尽通常只是设置“需要调度”的事实,而实际切换必须等到抢占计数允许、当前执行上下文安全时再完成。对用户程序而言,这意味着理论时间片并不等于绝对运行时间:如果任务长时间运行在禁止抢占的内核区间里,它实际占用 CPU 的时间可能超过原本的调度预算。

Local Timer Interrupt └─ scheduler_tick() └─ 当前调度类 task_tick() └─ 判断当前任务是否应继续运行 └─ resched_curr() └─ 设置 TIF_NEED_RESCHED └─ 在安全抢占点进入 __schedule() └─ pick_next_task() └─ context_switch()

第三章 CFS 如何计算普通任务的时间份额

3.1 CFS 关注 vruntime,不是时间片

传统 CFS,即 Completely Fair Scheduler,核心目标不是简单轮流执行,而是模拟一颗“所有任务同时按比例运行”的理想 CPU。现实 CPU 同一时刻只能执行一个任务,因此 CFS 使用虚拟运行时间 vruntime 记录每个任务已经获得了多少公平意义上的 CPU 服务。权重相同的两个任务,谁的 vruntime 更小,说明谁相对运行得更少,就应该优先获得 CPU;低 nice 值任务权重更高,因此其真实运行一段时间后,vruntime 增长得更慢,结果就是它会更频繁地被选中。

简化理解时,可以把 vruntime 看成经过权重归一化后的运行时间。普通任务真实运行时间相同,但 nice 值不同,虚拟时间增长速度不同:高权重任务增长慢,调度器认为它仍然“欠 CPU”;低权重任务增长快,调度器认为它已经获得了较多服务。过去 CFS 使用按 vruntime 排序的红黑树,最左侧任务通常是最应当执行的任务。即使较新的内核引入 EEVDF,这套“公平份额、权重归一化、虚拟时间”思想仍然是理解普通任务时间管理的基础。

/* 概念化公式:权重越大,vruntime 增长越慢 */delta_vruntime = delta_exec * NICE_0_LOAD / task_weight;/* * delta_exec:任务真实执行时间 * NICE_0_LOAD:基准权重 * task_weight:当前任务权重 */

3.2 调度周期如何分配给多个任务

普通任务的单次运行预算通常来自调度周期思想。假设一个 CPU 上有 N 个权重相同的可运行任务,调度器希望在一个目标周期内让每个任务都至少运行一次,那么每个任务理论上可获得约 调度周期 / N 的 CPU 时间。实际实现还要考虑任务权重:某个任务的理想份额大致等于“调度周期乘以该任务权重,再除以运行队列总权重”。任务越多,单个任务可连续执行时间越短;高优先级普通任务权重更高,理论份额也更大。

但 Linux 不会机械地让任务精确运行到某个纳秒数才切换。调度器还要考虑最小粒度、唤醒任务抢占、缓存局部性和运行队列变化。例如系统只有两个普通任务时,给每个任务极短时间片会造成大量上下文切换;系统有几百个任务时,若仍严格让每个任务在一个较短周期内运行一次,又会让每个时间片短到没有意义。因此内核会在目标响应时间和最小执行粒度之间做折中。所谓“CFS 时间片”更准确地说是基于公平份额计算出的理想运行预算,而不是用户可直接依赖的固定常量。

调度周期 = 目标让全部可运行任务都获得一次机会的时间范围任务 A 理想份额≈ 调度周期 × A 的权重 / 运行队列总权重任务数增加 └─ 单任务可连续运行时间下降任务权重增加 └─ 该任务在一个调度周期中获得的 CPU 比例上升

第四章 EEVDF 如何重新定义普通任务时间片

4.1 最小 vruntime

EEVDF,即 Earliest Eligible Virtual Deadline First,并没有推翻公平调度目标,而是在任务选择方式上进一步改善延迟表现。传统 CFS 更强调谁的 vruntime 最小,谁就更应该运行;EEVDF 则先判断任务是否具备运行资格,再从具备资格的任务中选择虚拟截止时间最早的那个。它会用 lag 表示一个任务相对于公平份额是“欠 CPU”还是“超额使用 CPU”:lag 为正意味着任务尚未拿到应得份额,lag 为负则意味着它已经跑得偏多。

EEVDF 的关键价值在于它能更自然地处理不同长度的时间请求。一个交互型任务可能只需要很短的 CPU burst 来响应用户输入,而后台编译任务可能希望持续运行较长时间。若调度器只盯着历史 vruntime,短任务的快速响应有时不够理想;EEVDF 则通过虚拟截止时间让短 slice 任务更早被选中,从而改善交互性。这里的“时间片”不再只是公平调度周期中的一段份额,还与任务希望获得的服务长度、当前 lag 和虚拟 deadline 共同关联。

4.2 睡眠任务

调度器设计中有一个经典问题:任务如果频繁睡眠再唤醒,能否因为“很久没运行”而每次醒来都抢占其他任务?早期桌面调度器为了提升交互响应,确实会对睡眠任务给予一定优势,但如果放任这种优势无限累积,任务就可能通过刻意 sleep/wakeup 获得不公平 CPU 份额。EEVDF 对此采用 lag 管理和衰减思路:睡眠任务不会简单地把过去的运行债务彻底抹掉,而是随着虚拟时间推进逐渐衰减,使长期睡眠任务最终回到合理位置。

这也是为什么用户态程序不要试图依赖“频繁 usleep() 就能提高优先级”这种经验。短暂睡眠可能改变任务被重新放入运行队列的时机,但它并不能稳定绕开公平调度规则,反而会增加上下文切换和缓存失效。真正需要低延迟的任务应明确使用合适策略,例如通过 nice、CPU affinity、实时策略或 cgroup 进行隔离;若应用具备明确服务模型,也可以结合调度属性表达合理的 CPU 服务诉求,而不是依赖偶然的睡眠行为。

任务 A:CPU 密集型后台编译 └─ 需要较长连续运行,关注吞吐任务 B:交互线程或事件循环 └─ 每次只需很短 CPU burst,关注响应EEVDF └─ 先判断任务是否“欠 CPU” └─ 再从可执行任务中选择虚拟截止时间更早者 └─ 让短响应任务更容易及时获得 CPU

第五章 实时任务的时间片管理

5.1 SCHED_FIFO

SCHED_FIFO 是典型的固定优先级实时策略。它没有轮转时间片概念:同一优先级的 FIFO 任务一旦运行,通常会一直运行,直到它主动阻塞、调用 sched_yield()、被更高优先级实时任务抢占,或者被迁移等特殊事件打断。对于同一优先级的多个 FIFO 任务,先进入运行队列的任务会先持续运行,后来的任务不会因为“等太久”自动获得 CPU。这个特性非常适合严格控制型任务,但也极其危险。

如果一个 SCHED_FIFO 线程内部存在死循环,且优先级高于系统关键线程,它可能让普通任务、桌面、网络服务甚至远程登录处理都无法获得 CPU。工程中使用 FIFO 时,必须保证线程具有明确阻塞点,例如等待队列、定时器、设备中断或条件变量;同时应为系统管理线程、RCU、软中断处理和看门狗相关任务预留可运行 CPU。实时策略不是“让程序更快”的通用开关,而是把调度风险从内核转交给应用设计者。

5.2 SCHED_RR

SCHED_RR 也是固定优先级实时策略,但它在同一优先级的多个实时任务之间引入了轮转时间片。每个任务都有一个剩余时间预算,Tick 推进时该预算不断减少;当预算耗尽后,当前任务被放到相同优先级队列尾部,调度器选择该优先级队列中下一个任务运行。若同优先级没有其他可运行 RR 任务,当前任务通常会重新获得时间片并继续运行,因此 RR 的切换只有在“同优先级存在竞争者”时才真正体现出轮转效果。

实时 RR 时间片是 Linux 中最接近传统教材定义的时间片。应用可以使用 sched_rr_get_interval() 查询当前线程对应的 RR 时间间隔,而不是把某个发行版默认值写死到代码中。需要注意的是,RR 时间片只用于相同实时优先级任务之间的公平轮转,它并不能阻止更高优先级实时线程立即抢占当前任务,也不能让普通 SCHED_OTHER 任务获得与实时线程竞争的机会。实时系统调优的重点不是盲目缩短 RR 时间片,而是先设计正确的优先级层次和阻塞模型。

#include<sched.h>#include<stdio.h>intmain(void){ struct timespec ts; if (sched_rr_get_interval(0, &ts) == 0) printf(”RR quantum: %ld.%09ld s\n”, ts.tv_sec, ts.tv_nsec); return 0;}

第六章 如何观察和调优时间片行为

6.1 从调度事件看任务切换

判断某个线程是否频繁因为时间片、唤醒抢占或优先级变化而被切走,不能只看 CPU 使用率。最直接的方法是观察调度事件,例如 sched_switchsched_wakeupsched_wakeup_newsched_switch 能显示哪个任务被换出、哪个任务被换入;结合时间戳可以计算一个线程实际连续运行了多久。perf sched timehist、ftrace 的 scheduler tracepoint、trace-cmd record -e sched:* 都适合分析这一类问题,尤其适用于排查实时线程抖动、DPDK worker 被抢占、编译任务导致交互卡顿等情况。

对于单个任务,还可以查看 /proc/<pid>/sched 获取调度统计信息,例如任务运行次数、上下文切换次数、负载权重以及部分虚拟运行时间相关字段。需要区分自愿上下文切换和非自愿上下文切换:任务等待 I/O、锁、条件变量而主动睡眠,通常表现为自愿切换;任务正在运行却被更高优先级任务或公平调度器切走,则更接近非自愿切换。若一个 CPU 密集型线程的非自愿切换次数异常高,往往说明它所在 CPU 上竞争任务过多、被中断打扰严重,或有更高优先级工作不断抢占。

# 查看线程调度策略与实时优先级chrt -p <PID># 查看任务调度统计cat /proc/<PID>/sched# 观察任务切换时间线perf sched timehist -p <PID># 使用 ftrace 记录调度切换事件trace-cmd record -e sched:sched_switch -e sched:sched_wakeup

6.2 不同业务应该怎样处理时间片问题

普通服务程序通常不应直接修改调度器全局参数。Web 服务、数据库客户端、脚本任务和一般后台服务更适合保持默认 fair 调度,让内核根据权重和负载自动分配时间;若某个服务确实需要比其他普通任务更高响应优先级,可以先考虑适度调整 nice 值、绑定 CPU 或通过 cgroup 控制 CPU 份额。对容器和批处理环境而言,cgroup 的 CPU 权重与配额往往比修改单进程调度策略更安全,因为它能限制一个服务组对整个系统的影响范围。

高性能网络、工业控制和实时采集场景则需要从系统整体设计时间片,而不是只给一个线程设置 SCHED_FIFO。典型做法是将关键 worker 绑定到专用 CPU,结合 isolcpusnohz_full、IRQ affinity 和 RCU callback offload 降低干扰;同时让关键线程在等待事件时正确阻塞,避免占满 CPU。若业务存在多个同等级实时 worker,可采用 SCHED_RR 控制轮转;若某任务必须连续运行,则使用 FIFO 但必须设计可靠让出点。真正决定系统延迟的并不只是时间片长度,而是“谁能抢占谁、何时阻塞、IRQ 跑在哪颗 CPU、缓存是否被破坏、是否存在不可抢占内核路径”这一整套调度和系统架构。

总结一下

Linux 的时间片管理早不是简单的“每个进程轮流运行固定毫秒数”。普通任务的核心是权重、公平份额、虚拟运行时间以及虚拟截止时间;SCHED_RR 具有最传统的固定轮转时间片;SCHED_FIFO 则不依赖时间片,依赖严格优先级和主动让出。时钟 Tick 负责推进调度统计,TIF_NEED_RESCHED 负责记录“该换任务了”的事实,真正的上下文切换则必须发生在允许抢占的安全位置。

把完整链路串起来:任务运行后,CPU 本地时钟持续推进;调度 Tick 或其他事件调用具体调度类逻辑;调度器根据权重、运行时间、虚拟 deadline、实时优先级或剩余 RR quantum 判断当前任务是否仍应继续运行;需要切换时设置重调度标记;最终由 __schedule() 选择下一个任务并完成上下文切换。理解这条链路之后,再分析 CPU 抖动、实时任务卡顿、DPDK worker 被抢占、线程响应慢或者系统负载不均衡时,就不会只停留在“是不是时间片太短”这一层,而能真正定位到调度策略、运行队列竞争、抢占来源和 CPU 隔离设计上。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 03:11:16 HTTP/2.0 GET : https://f.mffb.com.cn/a/501103.html
  2. 运行时间 : 0.097944s [ 吞吐率:10.21req/s ] 内存消耗:4,512.51kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=110caaeade6dc1d797cfef9bc92039f0
  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.000369s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000743s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000307s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000253s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000469s ]
  6. SELECT * FROM `set` [ RunTime:0.000195s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000503s ]
  8. SELECT * FROM `article` WHERE `id` = 501103 LIMIT 1 [ RunTime:0.000490s ]
  9. UPDATE `article` SET `lasttime` = 1783105876 WHERE `id` = 501103 [ RunTime:0.005316s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000261s ]
  11. SELECT * FROM `article` WHERE `id` < 501103 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000498s ]
  12. SELECT * FROM `article` WHERE `id` > 501103 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000395s ]
  13. SELECT * FROM `article` WHERE `id` < 501103 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006063s ]
  14. SELECT * FROM `article` WHERE `id` < 501103 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003963s ]
  15. SELECT * FROM `article` WHERE `id` < 501103 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009006s ]
0.099606s