当前位置:首页>Linux>Linux下编译乱序与执行乱序深度解析及优化实践

Linux下编译乱序与执行乱序深度解析及优化实践

  • 2026-02-17 05:23:32
Linux下编译乱序与执行乱序深度解析及优化实践

在Linux内核开发中,尤其是基于ARM架构的嵌入式与服务器场景,并发程序的稳定性往往被“隐形的乱序”困扰。编译乱序由编译器优化引发,执行乱序则源于ARM CPU的乱序执行机制,二者看似不影响单线程逻辑,却会在多核并发、外设交互等场景下引发难以调试的异常。本文基于Linux 6.6内核,结合ARM架构CPU的特性,拆解两种乱序的本质、问题场景,并给出可直接落地的优化方案,帮你避开并发编程中的“隐形陷阱”。

一、乱序的“导火索”:为什么Linux 6.6 ARM架构下必须重视乱序?

Linux 6.6内核对ARM架构(尤其是ARMv8-A/v9-A)进行了大量性能优化,无论是编译器层面的GCC/Clang优化升级,还是CPU层面的乱序执行能力增强(如ARM Cortex-A76/A78的超标量乱序架构、ARM v9的ROB缓冲区扩容30%提升乱序效率),都让系统性能大幅提升,但也让乱序问题变得更加突出。

先看一个典型的内核编程场景(源自附件核心案例,适配Linux 6.6内核接口),写端初始化结构体并赋值给全局指针,读端读取指针并操作结构体:

// 定义结构体与全局指针structfoo {int a;int b;int c;};structfoo *gp = NULL;// 写端逻辑(内核线程/中断处理函数)voidwrite_foo(void){structfoo *p = kmalloc(sizeof(*p), GFP_KERNEL);if (!p) return;    p->a = 1;    p->b = 2;    p->c = 3;    gp = p; // 全局指针赋值}// 读端逻辑(另一个内核线程)voidread_foo(void){structfoo *p = gp;if (p != NULL) {        do_something_with(p->a, p->b, p->c); // 可能读取到异常值    }}

在Linux 6.6 + ARM架构环境下,读端大概率会出现异常——明明写端已经给gp赋值,却读取到p->a、p->b、p->c为随机值。核心原因就是两种乱序的叠加:编译器的优化打乱了指令编译顺序,ARM CPU的乱序执行打乱了指令运行顺序,导致“gp = p”先于结构体初始化完成,读端拿到了未初始化的结构体地址。

需要注意的是,Linux 6.6内核中,ARM架构的SMP(对称多处理)机制被广泛应用,多核间的内存可见性问题进一步放大了乱序的影响;同时,内核对ARM外设访问、DMA操作的优化,也让乱序引发的异常场景更加多样(如DMA启动指令先于配置指令执行,导致DMA传输失败)。

二、编译乱序:编译器的“性能优化”与“逻辑陷阱”

2.1 编译乱序的本质(Linux 6.6 ARM场景适配)

编译乱序是编译器(如ARM架构常用的arm-linux-gnueabihf-gcc、Clang)在优化目标码时,对无数据依赖的指令进行重新排序的行为。Linux 6.6内核编译时,默认开启O2优化等级(部分场景开启O3),编译器会优先优化访存效率、提高Cache命中率和CPU Load/Store单元的利用率,从而导致汇编码顺序与C语言源代码顺序不一致。

以附件中的测试代码为例,在Linux 6.6环境下,使用arm-linux-gnueabihf-gcc -O2编译(适配ARMv8-A架构),会出现明显的编译乱序:

// 无编译屏障的测试代码intmain(int argc, char *argv[]){int a = 0, b, c, d[4096], e;    e = d[4095]; // 访存指令    b = a;       // 赋值指令(无数据依赖)    c = a;       // 赋值指令(无数据依赖)printf("a:%d b:%d c:%d e:%d\n", a, b, c, e);return0;}

反汇编结果(截取核心片段,适配Linux 6.6 ARMv8-A汇编格式):

8330: 460a         mov  r2, r1         ; b = a(提前执行)8332: 460b         mov  r3, r1         ; c = a(提前执行)8338: 682c         ldr  r4, [r5, #0]833a: 9400         str  r4, [sp, #0]   ; e = d[4095](延后执行)

可以看到,源代码中“e = d[4095]”先于“b = a、c = a”执行,但编译后的汇编码中,赋值指令被提前,访存指令被延后——这就是编译乱序的典型表现。在Linux 6.6内核中,这种乱序在结构体初始化、全局变量赋值、外设寄存器操作等场景中极为常见。

2.2 Linux 6.6 ARM架构下编译乱序的优化方案

解决编译乱序的核心是使用“编译屏障”,阻止编译器对屏障前后的指令进行重排序。Linux 6.6内核为ARM架构提供了完善的编译屏障接口,无需自行定义汇编指令,优先使用内核原生接口,保证兼容性和稳定性。

方案1:使用内核原生barrier()宏(推荐)

Linux 6.6内核在<linux/compiler.h>中定义了barrier()宏,适配ARM全架构,其底层实现与附件中的自定义屏障一致(__asm__ volatile("": : :"memory")),但经过内核兼容性优化,支持ARMv8-A/v9-A等新架构。

在上述测试代码中添加barrier()屏障后,重新编译(Linux 6.6 + ARMv8-A):

#include<linux/compiler.h> // Linux 6.6内核头文件intmain(int argc, char *argv[]){int a = 0, b, c, d[4096], e;    e = d[4095];    barrier(); // 编译屏障:阻止前后指令乱序    b = a;    c = a;printf("a:%d b:%d c:%d e:%d\n", a, b, c, e);return0;}

反汇编结果会恢复指令顺序:“e = d[4095]”先执行,“b = a、c = a”后执行,彻底解决编译乱序问题。

在本文开头的结构体赋值场景中,优化后的写端逻辑如下(适配Linux 6.6内核):

voidwrite_foo(void){structfoo *p = kmalloc(sizeof(*p), GFP_KERNEL);if (!p) return;    p->a = 1;    p->b = 2;    p->c = 3;    barrier(); // 编译屏障:保证结构体初始化完成后,再赋值gp    gp = p;}

方案2:慎用volatile关键字(Linux 6.6内核不推荐)

很多开发者会误以为volatile关键字可以解决编译乱序,但在Linux 6.6内核中,volatile的作用极其有限——它仅能避免编译器对内存访问的合并优化,告知编译器“该变量可能被其他执行线索(如中断、其他核)修改”,但无法阻止指令重排序。

例如,给gp添加volatile关键字(struct foo *volatile gp = NULL;),编译器仍可能将“gp = p”提前到结构体初始化之前。此外,volatile不具备保护临界资源的能力,无法解决多核并发问题。

Linux 6.6内核明确不推荐过度使用volatile,内核文档Documentation/volatile-considered-harmful.txt详细说明了其弊端:滥用volatile会导致编译器优化失效,降低系统性能,且无法解决核心的乱序问题。

方案3:针对编译器优化等级的微调(特殊场景)

如果某段代码对指令顺序要求极高(如外设寄存器初始化),可在Linux 6.6内核编译脚本中,针对该文件关闭O2/O3优化,使用-O0优化等级(禁止编译器优化),但这种方式会牺牲性能,仅适用于极少数特殊场景。

示例(内核Makefile片段):

# 针对foo.c文件关闭优化,避免编译乱序obj-$(CONFIG_FOO) += foo.occflags-y += -O0

三、执行乱序:ARM CPU的“乱序执行”与“内存可见性”

3.1 执行乱序的本质(ARM架构特性)

执行乱序是ARM CPU(尤其是ARMv6及以上架构,Linux 6.6主要适配ARMv8-A/v9-A)的“乱序执行(Out-of-Order Execution)”策略导致的——即便编译器输出的汇编码顺序完全符合源代码逻辑,CPU在执行时,也会对无数据依赖的指令重新排序,以提高执行效率。

ARM CPU的乱序执行主要基于两个特性:

  • 访存优化:CPU会根据Cache组织特性,优先执行连续地址的访存指令,提高Cache命中率;

  • 非阻塞访存:如果前一条访存指令因Cache不命中导致长延时,后一条无依赖的访存指令可提前执行,避免CPU空闲。

以附件中的ARM指令示例为例(适配Linux 6.6 ARMv8-A架构):

LDR r0, [r1] ; 读取内存(假设Cache不命中,延时较长)STR r2, [r3] ; 写入内存(与前一条指令无依赖)

在ARMv8-A架构CPU(如Cortex-A76,采用4发射8执行的超标量乱序结构)中,STR指令会提前于LDR指令执行——因为LDR指令需要等待Cache填充,而STR指令无依赖,可直接执行,这就是典型的执行乱序。

需要注意的是,执行乱序对单核程序是“不可见”的——CPU会保证单线程内的指令依赖关系,遇到数据依赖时会等待前一条指令执行完成。但在Linux 6.6内核的SMP多核场景中,这种乱序会导致多核间的内存可见性问题,例如:

// CPU0执行(内核线程)while (f == 0);printk("x: %d\n", x); // 可能打印随机值,而非42// CPU1执行(另一个内核线程)x = 42;f = 1;

即便编译后的指令顺序是“x = 42”先于“f = 1”,CPU1执行时仍可能将“f = 1”提前执行,导致CPU0跳出循环时,“x = 42”尚未执行完成,最终打印异常值。这种问题在Linux 6.6 ARM多核服务器场景中,会严重影响并发程序的正确性。

3.2 Linux 6.6 ARM架构下执行乱序的优化方案

解决执行乱序的核心是使用“内存屏障”——ARM CPU提供了专门的内存屏障指令,Linux 6.6内核基于这些指令封装了统一的API,适配ARM全架构,开发者无需直接操作汇编指令,优先使用内核原生API即可。

第一步:了解ARM CPU的内存屏障指令(Linux 6.6适配)

ARMv8-A/v9-A架构(Linux 6.6主要适配)提供了3种核心内存屏障指令,内核API均基于这些指令封装:

  • DMB(数据内存屏障):保证DMB指令之前的所有内存访问(读/写),在DMB之后的内存访问执行前全部完成;仅影响内存访问,不影响非访存指令,性能开销较低,是Linux 6.6内核中最常用的内存屏障指令。

  • DSB(数据同步屏障):等待DSB指令之前的所有指令(访存、非访存)全部完成,包括Cache、跳转预测、TLB维护等操作;性能开销较高,适用于需要严格同步的场景(如解锁互斥体后唤醒其他核)。

  • ISB(指令同步屏障):刷新CPU流水线,保证ISB之后执行的指令全部从Cache或内存中重新读取;适用于指令修改后需要立即生效的场景(如动态修改内核指令后)。

第二步:使用Linux 6.6内核原生内存屏障API(推荐)

Linux 6.6内核在<linux/memory-barriers.h>中,为ARM架构封装了统一的内存屏障API,无需区分具体的ARM架构版本,直接调用即可,常用API如下:

API名称
作用
底层实现(ARM架构)
适用场景
mb()
读写屏障:保证屏障前的读写指令全部完成后,再执行屏障后的读写指令
DMB指令
多核间数据同步(如本文开头的结构体赋值场景)
rmb()
读屏障:保证屏障前的读指令全部完成后,再执行屏障后的读指令
DMB指令(读操作限制)
多核间读操作同步(如读端读取全局变量)
wmb()
写屏障:保证屏障前的写指令全部完成后,再执行屏障后的写指令
DMB指令(写操作限制)
多核间写操作同步(如写端修改全局变量)
iormb()
IO读屏障:保证屏障前的IO读指令全部完成
DSB指令
ARM外设寄存器读操作(如读取GPIO状态)
iowmb()
IO写屏障:保证屏障前的IO写指令全部完成
DSB指令
ARM外设寄存器写操作(如配置DMA寄存器)

第三步:典型场景优化实践(Linux 6.6 + ARM)

结合本文开头的结构体赋值场景,同时解决编译乱序和执行乱序,优化后的代码如下(适配Linux 6.6内核):

// 写端逻辑(添加内存屏障,解决执行乱序;编译屏障由mb()隐含)voidwrite_foo(void){structfoo *p = kmalloc(sizeof(*p), GFP_KERNEL);if (!p) return;    p->a = 1;    p->b = 2;    p->c = 3;    mb(); // 读写屏障:同时解决编译乱序(隐含barrier()功能)和执行乱序    gp = p;}// 读端逻辑(添加读屏障,保证内存可见性)voidread_foo(void){structfoo *p;    rmb(); // 读屏障:保证读取gp后,能获取到最新的结构体数据    p = gp;if (p != NULL) {        do_something_with(p->a, p->b, p->c);    }}

说明:Linux 6.6内核中的mb()、rmb()、wmb() API,均隐含了编译屏障的功能,无需额外添加barrier(),简化了代码编写。

场景2:ARM外设DMA操作优化(Linux 6.6)

在Linux 6.6内核中,ARM外设DMA操作极易受到执行乱序的影响——如果DMA配置指令(写寄存器)被乱序执行,会导致DMA传输失败。此时需使用iowmb() IO写屏障,保证配置指令执行完成后,再启动DMA。

#include<linux/memory-barriers.h>#include<linux/of_gpio.h>// DMA寄存器定义(示例)#define DMA_SRC_REG 0x12340000#define DMA_DST_REG 0x12340004#define DMA_SIZE_REG 0x12340008#define DMA_ENABLE 0x1234000Cvoiddma_start(unsignedint src, unsignedint dst, unsignedint size){// 使用relaxed接口(无屏障)快速配置寄存器    writel_relaxed(src, DMA_SRC_REG);    writel_relaxed(dst, DMA_DST_REG);    writel_relaxed(size, DMA_SIZE_REG);// IO写屏障:保证配置指令全部完成后,再启动DMA    iowmb();    writel(1, DMA_ENABLE);}

说明:Linux 6.6内核提供了readl_relaxed()/writel_relaxed()接口,用于无屏障的IO读写,配合iormb()/iowmb()屏障,既能保证指令顺序,又能最大化IO操作性能。

场景3:ARM多核互斥逻辑优化(Linux 6.6)

Linux 6.6内核的自旋锁、互斥体等互斥机制,内部已集成了内存屏障(适配ARM架构),无需开发者手动添加。例如,内核自旋锁spin_lock()会在获取锁时添加DMB屏障,spin_unlock()会在释放锁时添加DMB/DSB屏障,保证多核间的临界资源访问安全。

附件中的简单互斥逻辑,适配Linux 6.6 ARMv8-A架构后的优化版本(使用内核原生屏障):

LOCKED   EQU 1UNLOCKED EQU 0lock_mutex    ; 检查互斥量是否锁定    LDREX r1, [r0]         ; 原子读取互斥量值    CMP r1, #LOCKED    WFEEQ                  ; 已锁定,进入休眠    BEQ lock_mutex         ; 唤醒后重新检查    ; 尝试锁定互斥量    MOV r1, #LOCKED    STREX r2, r1, [r0]     ; 原子写入锁定值    CMP r2, #0x0    BNE lock_mutex         ; 锁定失败,重试    DMB                    ; 内存屏障(Linux 6.6推荐,保证互斥量状态可见)    BX lrunlock_mutex    DMB                    ; 保证临界资源访问完成    MOV r1, #UNLOCKED    STR r1, [r0]    DSB                    ; 保证互斥量状态更新完成(Linux 6.6 ARMv8-A适配)    SEV                    ; 唤醒等待的CPU    BX lr

四、Linux 6.6 ARM架构乱序优化注意事项

  • 优先使用内核原生接口:无论是编译屏障(barrier())还是内存屏障(mb()、iowmb()等),均使用Linux 6.6内核提供的原生API,避免自行编写汇编指令,确保适配ARMv8-A/v9-A等新架构,同时保证内核兼容性。

  • 区分场景选择屏障类型:无需过度使用高性能开销的屏障(如DSB、ISB),多核数据同步优先使用mb()/rmb()/wmb()(底层DMB),IO操作优先使用iormb()/iowmb(),指令同步仅在特殊场景使用ISB。

  • 避免滥用volatile:仅在极少数场景(如中断共享变量)使用volatile,且需配合内存屏障,不可依赖volatile解决乱序问题,遵循Linux内核文档的建议。

  • 结合ARM架构特性优化:针对ARMv8-A/v9-A的乱序执行特性(如超标量架构、非阻塞访存),合理拆分无依赖指令,在保证顺序的前提下,最大化系统性能;同时注意Cache对乱序的影响,必要时使用dcache_clean()等接口刷新Cache。

  • 调试技巧:Linux 6.6内核提供了ftrace工具,可跟踪指令执行顺序;同时可通过反汇编(objdump -d)查看编译后的指令顺序,定位编译乱序问题;多核场景下,可使用内核printk打印时间戳,定位执行乱序导致的异常。

五、总结

编译乱序和执行乱序是Linux 6.6 ARM架构下并发编程的“隐形陷阱”,其本质是编译器和CPU为追求性能而进行的优化,却破坏了多核场景、IO场景下的指令顺序和内存可见性。

核心优化思路是:使用“编译屏障”阻止编译器指令重排序,使用“内存屏障”阻止CPU执行重排序,优先依赖Linux 6.6内核提供的原生API,无需深入底层汇编指令,即可高效解决乱序问题。

在实际开发中,需结合具体场景(多核同步、IO操作、互斥逻辑)选择合适的屏障类型,平衡性能与正确性——既不牺牲Linux 6.6内核和ARM架构的性能优势,又能保证程序的稳定性和可靠性。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-17 06:23:48 HTTP/2.0 GET : https://f.mffb.com.cn/a/475152.html
  2. 运行时间 : 0.240756s [ 吞吐率:4.15req/s ] 内存消耗:4,785.83kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=69600271cbe2cdcc7344c1314aed8147
  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.001108s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001505s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000737s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000670s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001178s ]
  6. SELECT * FROM `set` [ RunTime:0.000564s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001471s ]
  8. SELECT * FROM `article` WHERE `id` = 475152 LIMIT 1 [ RunTime:0.001047s ]
  9. UPDATE `article` SET `lasttime` = 1771280629 WHERE `id` = 475152 [ RunTime:0.001506s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000659s ]
  11. SELECT * FROM `article` WHERE `id` < 475152 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001143s ]
  12. SELECT * FROM `article` WHERE `id` > 475152 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001104s ]
  13. SELECT * FROM `article` WHERE `id` < 475152 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.036016s ]
  14. SELECT * FROM `article` WHERE `id` < 475152 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002274s ]
  15. SELECT * FROM `article` WHERE `id` < 475152 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006337s ]
0.244540s