当前位置:首页>Linux>Ftrace系统详解:Linux 6.6 内核函数追踪框架

Ftrace系统详解:Linux 6.6 内核函数追踪框架

  • 2026-02-06 03:14:14
Ftrace系统详解:Linux 6.6 内核函数追踪框架

在内核开发与性能调优的世界里,我们常常需要回答这样的问题:“这个函数是谁调用的?”、“这段代码执行路径有多深?”、“为什么系统在这里卡住了?”。FtraceFunction Tracer)就是 Linux 内核内置的“超级侦探”,它能在几乎零开销的情况下,为我们揭示内核函数调用的全貌。本文将带您深入Ftrace的内部世界,从编译时的埋点到运行时的动态追踪,全面解析其工作原理。

1.引言:Ftrace是什么?

Ftrace不仅仅是一个“函数跟踪器”,它是一个可扩展的追踪框架。它通过在编译阶段向每个函数入口插入一个微小的“探针”(probe),在运行时根据需求动态决定是否激活这些探针。这种“按需启用”的设计使其在未使用时几乎没有性能损耗。

 核心能力:

· 函数跟踪(function):记录函数的进入。

·函数调用图(function_graph):记录函数的进入和返回,形成完整的调用栈。

·延迟追踪(latencytracing):追踪中断关闭、抢占禁用等关键路径的延迟。

·事件追踪(eventtracing):与TraceEvents子系统深度集成。

2.Ftrace架构概览

Ftrace的架构精巧而分层,各司其职。下图展示了其核心组件之间的关系:

2.1 核心组件解析

1. 编译时插桩(Compile-timeInstrumentation):

·  原理:利用GCC的-pg编译选项,在每个函数的开头自动插入一条call__fentry__指令。

·作用:这是所有追踪的起点,为运行时的动态修改提供了“锚点”。

2. 运行时修改(RuntimeModification):

· 原理:在系统启动或用户触发时,内核会遍历所有__fentry__调用点,并将它们动态地修改为nop(空操作)指令。当需要追踪时,再将其修改为指向ftrace_callercall指令。

·   作用:实现了“零开销”特性。不追踪时,函数就像从未被插桩过一样快。

3. 回调管理(CallbackManagement):

· 原理:使用ftrace_ops结构体来封装不同的追踪行为(如记录到环形缓冲区、调用BPF程序等)。所有活跃的ftrace_ops被组织成一个RCU保护的链表。

· 作用:提供了强大的可扩展性。不同的tracer或BPF程序可以同时监听同一个函数调用。

4. 过滤系统(FilteringSystem):

· 原理:通过哈希表、PID列表、模块名等方式,在函数被调用时快速判断是否应该触发回调。

·作用:避免追踪海量无关函数,精准定位目标,极大提升效率。

5. 子系统(Subsystems):

·FunctionTracer:最基础的追踪器,只记录函数进入。

·FunctionGraphTracer:更强大的追踪器,利用返回地址劫持技术,记录完整的调用-返回过程。

·  StackTracer:定期采样当前调用栈,找出最深的栈使用情况。

·ProfileTracer:用于性能剖析。

2.2 关键文件

文件功能描述
kernel/trace/ftrace.cFtrace 的心脏。包含核心逻辑、ftrace_ops 管理、动态修改引擎、过滤系统等。
kernel/trace/trace_functions.cFunction Tracer 的具体实现。
kernel/trace/trace_functions_graph.cFunction Graph Tracer 的具体实现。
arch/x86/kernel/ftrace_64.S架构相关代码。定义了 __fentry__ 和 ftrace_caller 的汇编实现。

3. 编译时插桩机制

这是Ftrace工作的第一步,发生在你编译内核的时候。

3.1 mcount 插桩

当你在内核配置中启用CONFIG_FUNCTION_TRACER时,内核的顶层Makefile会自动为几乎所有C文件添加-pg编译标志。

编译前后对比:

// 编译前的 C 代码

voidkernel_function(intarg) {

   do_something(arg);

}

//编译后生成的汇编代码 (x86-64)

kernel_function:

push %rbp

mov %rsp, %rbp

call __fentry__        ; <-- 这就是插桩点!

; ... 函数体 do_something(arg) ...

pop %rbp

ret

注意:在较新的内核(包括6.6)中,x86架构已从mcount迁移到更快的__fentry__,但原理完全相同。

3.2 .mcount_loc Section

编译器不仅插入了call__fentry__,还做了一件非常聪明的事:它把每一个__fentry__调用指令的地址都收集起来,放到一个名为.mcount_loc的特殊段(section)中。

链接脚本(vmlinux.lds.S)片段:

SECTIONS {

    .mcount_loc : {

        __start_mcount_loc = .;

        KEEP(*(.mcount_loc))

        __stop_mcount_loc = .;

    }

}

内核中的访问:

// ftrace.c

externunsignedlong__start_mcount_loc[];

externunsignedlong__stop_mcount_loc[];

// 计算总共有多少个可追踪的函数

#defineMCOUNT_RECORD_COUNT \

   ((__stop_mcount_loc-__start_mcount_loc) / sizeof(unsignedlong))

这个段的存在,使得内核在启动时无需扫描整个内核镜像,就能立刻知道所有潜在的追踪点在哪里,极大地加速了初始化过程。

3.3 ftrace_caller(架构相关)

call__fentry__被激活后,程序会跳转到__fentry____fentry__的任务是保存所有可能被破坏的寄存器,然后调用通用的C函数ftrace_caller

简化版__fentry__ (x86-64):

SYM_FUNC_START(__fentry__)

  pushq %rax

  pushq %rcx

  ... ; 保存所有参数寄存器

  call ftrace_caller ; 跳转到 C 代码处理逻辑

  popq %r11

  ... ; 恢复所有寄存器

  popq %rax

  ret

SYM_FUNC_END(__fentry__)

ftrace_caller会准备好ftrace_regs结构(包含了所有寄存器的状态),并最终调用ftrace_ops_list_func,进入Ftrace的核心分发逻辑。

4.动态Ftrace机制

这是Ftrace“零开销”神话的核心。

4.1 工作原理

1. 初始状态:所有函数开头都是call__fentry__

2. 内核初始化(ftrace_init):内核读取.mcount_loc段,获取所有调用点地址。

3. 转换为NOP:内核将所有call__fentry__指令原地修改为5字节的nop指令(0x9090909090)。此时,函数执行速度与未插桩时完全一致。

4. 启用追踪:当用户通过tracefs启用某个tracer时,内核会将需要追踪的函数的nop指令动态修改回callftrace_handler(一个指向ftrace_callertrampoline)。

5. 禁用追踪:再次将指令改回nop

指令修改示意图:

4.2 ftrace_ops管理

ftrace_opsFtrace可扩展性的基石。每个需要监听函数调用的模块(如functiontracerBPF程序)都需要注册自己的ftrace_ops

关键数据结构:

structftrace_ops {

   ftrace_func_t func; // 回调函数指针

structftrace_hash *filter_hash; // 过滤哪些函数

structftrace_hash *notrace_hash; // 不追踪哪些函数

void*private// 私有数据,通常是 trace_array

unsignedlongflags; // 标志位 (如 FTRACE_OPS_FL_PID)

structftrace_ops __rcu *next; // 链表指针

};

注册流程(__register_ftrace_function):

1. 参数校验。

2. 将新的ops添加到全局的ftrace_ops_list链表中。

3. 如果启用了PID过滤,将ops->func替换为ftrace_pid_func(一个包装函数)。

4. 调用update_ftrace_function()更新全局的追踪函数指针。

4.3 Ftrace函数更新(update_ftrace_function)

这个函数决定了当一个被追踪的函数被调用时,最终会执行哪个C函数。

·   ops:设置为ftrace_stub(一个空函数)。

·   只有一个ops:直接调用该opsfunc,效率最高。

·   多个ops:设置为ftrace_ops_list_func,它会遍历整个链表,依次调用每个符合条件的opsfunc

5. 函数调用流程

让我们跟随一次函数调用,看看Ftrace是如何工作的。

热路径调用链:

ftrace_ops_test过滤逻辑:ftrace_ops_list_func中,对每个ops都会调用ftrace_ops_test进行快速过滤:

1. ops是否已启用?

2. 当前进程是否处于“暂停追踪”状态(防止递归)?

3. 当前ip(指令指针)是否在filter_hash中?

4. 当前ip是否在notrace_hash中?

5. (如果启用了PID过滤)当前进程PID是否匹配?

只有全部通过,才会调用ops->func

6. 函数过滤系统

精准过滤是高效追踪的关键。

6.1 函数哈希表

Ftrace使用哈希表来存储需要追踪(filter_hash)或不需要追踪(notrace_hash)的函数地址。

·  结构:ftrace_hash包含一个hlist_head数组(桶)。

·  查找:通过hash_long(ip,size_bits)计算桶索引,然后在桶内线性查找。

·  通配符:支持*?,例如echo'*schedule*'>set_ftrace_filter

6.2 模块过滤

可以通过module:function的格式来指定特定模块中的函数。

# 只追踪 ext4 模块中的 write 函数

echo 'ext4:*write*' > /sys/kernel/tracing/set_ftrace_filter

内核会解析这个字符串,并将其存储在ftrace_opsmod_trace列表中,在ftrace_ops_test中进行匹配。

6.3 PID 过滤

这是一个非常实用的功能,可以只追踪特定进程(及其子进程)的内核活动。

#只追踪当前shell进程的内核函数

echo$>/sys/kernel/tracing/set_ftrace_pid

实现上,Ftrace会将ops->func替换为ftrace_pid_func。这个函数首先检查当前task_structPID,如果不匹配就直接返回,否则才调用原始的saved_func

7. 函数跟踪器实现

7.1 Function Tracer

这是最简单的tracer。它的function_trace_call回调函数会将ip(当前函数地址)和parent_ip(调用者地址)打包成一个ftrace_entry事件,写入per-CPU的环形缓冲区(ringbuffer)

输出示例:

kworker/0:1-10 [000] ....100.123456: _raw_spin_lock <-blk_mq_run_hw_queue

这表示blk_mq_run_hw_queue函数调用了_raw_spin_lock

7.2 Function Graph Tracer

这是Ftrace的王牌功能,它能绘制出类似用户态gprof的调用图。

核心挑战: 如何捕获函数的返回

解决方案返回地址劫持

 函数入口(trace_graph_entry):

·  将函数的真实返回地址从栈上取出。

·  将其替换为一个特殊的return_to_handler地址。

·   (真实返回地址,函数地址)保存到per-CPU的fgraph_ret_stack栈中。

函数返回:

·  函数执行完ret指令后,会跳转到return_to_handler

·  return_to_handler调用trace_graph_return

·  trace_graph_returnfgraph_ret_stack中弹出对应的条目,记录返回事件,然后跳转回真实的返回地址。

输出示例:

 0)                    |  SyS_write() {

 0)                    |    vfs_write() {

 0)                    |      ext4_file_write_iter() {

 0)   0.578 us    |        generic_file_direct_write();

 0)   1.234 us    |      }

 0)   1.890 us    |    }

 0)   2.100 us    |  }

缩进清晰地展示了调用深度和每个函数的执行时间。

8. 与周边模块的配合

Ftrace并非孤岛,它与内核的其他观测子系统紧密协作。

·TraceEvents:Ftrace的事件(如funcgraph_entry)本身就是一种TraceEvent,可以通过perftrace-cmd等工具统一消费。

·Perf:perf工具可以通过perfprobe命令在内核函数上设置基于Ftrace的动态探针。

·  eBPF:这是现代内核追踪的明星。BPF程序可以直接附加到Ftraceftrace_ops上,利用Ftrace的高效探针机制,在内核函数的入口/出口执行自定义的BPF代码,实现强大的可观测性和安全策略。

9. 调试定位方法 & 10.性能优化技巧

这两部分在实践中至关重要。核心思想是:精准、克制、按需

· 调试:

·使用available_filter_functions确认你的函数是否可被追踪。

·使用set_ftrace_notrace排除干扰项(如打印函数)。

·启用record-func-recurse来检测和避免追踪死循环。

·优化:

·永远不要用*追踪所有函数,这会让系统卡死。

·  优先使用function而不是function_graph,后者开销大得多。

·使用具体的函数名,而不是宽泛的通配符。

·利用tracing_cpumask只在特定CPU上追踪。

·调整buffer_size_kb防止事件丢失。

11. 总结

Ftrace是一个集精巧设计、高性能、高灵活性于一体的内核追踪框架。它通过编译时插桩运行时动态修改的完美结合,实现了“不用时不占资源,用时精准高效”的目标。理解Ftrace的原理,不仅能帮助您解决复杂的内核问题,更能让您深刻体会到Linux内核在工程实现上的卓越智慧。掌握Ftrace,就等于掌握了一把打开内核黑盒的万能钥匙。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 15:17:51 HTTP/2.0 GET : https://f.mffb.com.cn/a/472053.html
  2. 运行时间 : 0.229742s [ 吞吐率:4.35req/s ] 内存消耗:4,781.95kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=03295b72d23bfa23c317f534a671e712
  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.001123s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001675s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.005159s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000692s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001294s ]
  6. SELECT * FROM `set` [ RunTime:0.000596s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001477s ]
  8. SELECT * FROM `article` WHERE `id` = 472053 LIMIT 1 [ RunTime:0.001103s ]
  9. UPDATE `article` SET `lasttime` = 1770448671 WHERE `id` = 472053 [ RunTime:0.032566s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.004941s ]
  11. SELECT * FROM `article` WHERE `id` < 472053 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.008805s ]
  12. SELECT * FROM `article` WHERE `id` > 472053 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001073s ]
  13. SELECT * FROM `article` WHERE `id` < 472053 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001909s ]
  14. SELECT * FROM `article` WHERE `id` < 472053 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002756s ]
  15. SELECT * FROM `article` WHERE `id` < 472053 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003121s ]
0.233651s