当前位置:首页>Linux>Linux内核架构与系统调用机制

Linux内核架构与系统调用机制

  • 2026-01-17 05:34:47
Linux内核架构与系统调用机制

目录:

  1. 1. 引言:Linux内核架构概览
  2. 2. 内核空间架构:Monolithic内核设计
  3. 3. 系统调用机制:用户态到内核态的桥梁
  4. 4. 核心组件深度剖析:调度器、内存管理、文件系统
  5. 5. 实战案例:编写自定义系统调用
  6. 6. 性能分析:系统调用开销与优化策略
  7. 7. 生产环境最佳实践与安全考量
  8. 8. 技术局限与未来演进

技术背景

Linux内核作为现代操作系统的核心,承载着从嵌入式设备到超级计算机的广泛生态系统。其Monolithic内核架构精巧的系统调用机制,是理解现代操作系统设计的关键。本文将深入剖析Linux内核的架构设计哲学、系统调用实现机制,以及实际开发中的最佳实践。

本文目标

  • • 深入理解Linux内核的模块化架构子系统交互机制
  • • 掌握系统调用从用户态到内核态的完整生命周期
  • • 理解调度器、内存管理、文件系统三大核心组件的实现原理
  • • 通过实战案例掌握内核开发与调试技巧
  • • 探讨性能优化策略与生产环境最佳实践

1. 内核空间架构:Monolithic内核设计

核心架构概览

Linux采用**Monolithic Kernel(宏内核)**架构,所有核心服务运行在同一个地址空间:

┌─────────────────────────────────────────┐│           用户空间 (User Space)          ││  ┌─────────┐  ┌─────────┐  ┌─────────┐ ││  │  App 1  │  │  App 2  │  │  App 3  │ ││  └────┬────┘  └────┬────┘  └────┬────┘ ││       │            │            │      │└───────┼────────────┼────────────┼──────┘        │ Syscall    │ Syscall    │ Syscall┌───────▼────────────▼────────────▼──────┐│           系统调用接口 (Syscall)        │├─────────────────────────────────────────┤│           内核空间 (Kernel Space)       ││  ┌───────────────────────────────────┐  ││  │         核心子系统                │  ││  │  • 进程调度 (Scheduler)          │  ││  │  • 内存管理 (MM)                 │  ││  │  • 文件系统 (VFS)                │  ││  │  • 网络协议栈 (Net)              │  ││  │  • 设备驱动 (Drivers)            │  ││  └───────────────────────────────────┘  ││  ┌───────────────────────────────────┐  ││  │      硬件抽象层 (HAL)             │  ││  │  • 架构相关代码 (arch/)           │  ││  │  • 设备树 (Device Tree)           │  ││  └───────────────────────────────────┘  │└─────────────────────────────────────────┘        ┌─────────────────┐        │   硬件层 (CPU,  │        │   Memory, I/O)  │        └─────────────────┘

关键设计哲学

  1. 1. 单一地址空间优势
    • • 零拷贝:内核服务间数据传递无需上下文切换
    • • 高效缓存:统一的缓存层次结构
    • • 锁粒度控制:全局锁 vs 细粒度锁的权衡
  2. 2. 模块化设计
    # 查看已加载内核模块lsmod | head -10# 模块依赖关系modinfo ext4 | grep -E "depends|vermagic"
  3. 3. 可配置性
    # 查看当前内核配置zcat /proc/config.gz | grep CONFIG_PREEMPT# 编译时配置选项# make menuconfig  # 基于ncurses的配置界面

2. 系统调用机制:用户态到内核态的桥梁

系统调用流程深度解析

2.1 调用路径

read()系统调用为例:

// 用户空间程序#include<unistd.h>#include<fcntl.h>intmain() {int fd = open("/etc/passwd", O_RDONLY);char buffer[1024];ssize_t bytes = read(fd, buffer, sizeof(buffer));  // ← 系统调用    close(fd);return0;}

执行流程

用户空间:  read() [glibc wrapper]    ↓ (CPU特权级切换: Ring 3 → Ring 0)内核空间:  SYSCALL_DEFINE3(read, ...) [fs/read_write.c]    ↓  vfs_read()    ↓  ext4_file_read() [文件系统]    ↓  block_read_full_page() [块设备层]    ↓  硬件I/O [NVMe/SATA控制器]

2.2 系统调用表

# 查看系统调用编号ausyscall --dump | head -20# 输出示例:# 0 read# 1 write# 2 open# 3 close# 4 stat# ...# 435 process_mrelease

x86_64架构系统调用表(位于arch/x86/entry/syscalls/syscall_64.tbl):

# 系统调用号  名称          实现文件0     read        fs/read_write.c1     write       fs/read_write.c2     open        fs/open.c3     close       fs/open.c...59    execve      fs/exec.c...

2.3 系统调用入口实现

x86_64入口arch/x86/entry/entry_64.S):

/* 系统调用入口点 */ENTRY(entry_SYSCALL_64)    /* 保存用户空间寄存器 */    swapgs    movq    %rsp, PER_CPU_VAR(rsp_scratch)    movq    PER_CPU_VAR(cpu_current_top_of_stack), %rsp    /* 构建pt_regs结构 */    pushq   $__USER_DS    pushq   PER_CPU_VAR(rsp_scratch)    pushq   %r11    pushq   $__USER_CS    pushq   %rcx    /* 保存其余寄存器 */    pushq   %rax    pushq   %rdi    pushq   %rsi    pushq   %rdx    pushq   %rbp    pushq   %rbx    pushq   %r8    pushq   %r9    pushq   %r10    pushq   %r12    pushq   %r13    pushq   %r14    pushq   %r15    /* 调用C语言处理函数 */    movq    %rsp, %rdi    call    do_syscall_64

C语言处理arch/x86/entry/common.c):

__visible voiddo_syscall_64(struct pt_regs *regs){unsignedlong nr = regs->orig_ax;/* 安全检查 */if (likely(nr < NR_syscalls)) {/* 通过系统调用表分发 */        regs->ax = sys_call_table[nr](regs->di, regs->si, regs->dx,                                      regs->r10, regs->r8, regs->r9);    }/* 处理返回路径 */    syscall_return_slowpath(regs);}

2.4 系统调用参数验证

内核安全机制

// fs/read_write.cSYSCALL_DEFINE3(read, unsignedint, fd, char __user *, buf, size_t, count){structfdf = fdget_pos(fd);ssize_t ret = -EBADF;if (!f.file)goto out;/* 参数验证 */if (!access_ok(VERIFY_WRITE, buf, count)) {        ret = -EFAULT;goto out_putf;    }/* 文件权限检查 */if (!(f.file->f_mode & FMODE_READ)) {        ret = -EINVAL;goto out_putf;    }/* 执行实际读取 */    ret = vfs_read(f.file, buf, count, &f.file->f_pos);out_putf:    fdput_pos(f);out:return ret;}

3. 核心组件深度剖析

3.1 进程调度器(CFS - Completely Fair Scheduler)

调度原理

Linux默认使用CFS调度器,基于红黑树实现:

// kernel/sched/fair.cstaticvoidenqueue_task_fair(struct rq *rq, struct task_struct *p, int flags){structsched_entity *se = &p->se;structcfs_rq *cfs_rq = cfs_rq_of(se);/* 更新负载统计 */    update_curr(cfs_rq);    update_load_avg(cfs_rq, se, UPDATE_TG);/* 插入红黑树 */if (!se->on_rq) {        enqueue_entity(cfs_rq, se, flags);/* 更新cfs_rq的运行队列 */        cfs_rq->h_nr_running++;    }}

调度决策

// 选择下一个运行任务staticstruct task_struct *pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf){structcfs_rq *cfs_rq = &rq->cfs;structsched_entity *se;/* 从红黑树中选择最小虚拟运行时间的任务 */    se = pick_next_entity(cfs_rq, NULL);return task_of(se);}

调度延迟分析

# 查看调度器统计信息cat /proc/schedstat | head -20# 查看当前运行队列cat /proc/sched_debug | grep -A 10 "cfs_rq"# 测试调度延迟perf sched record -- sleep 1perf sched latency --sort max

输出示例

Task                  |   Runtime ms  | Switches | Average delay ms | Maximum delay ms--------------------|---------------|----------|------------------|------------------bash:1234            |      1.234    |   123    |   0.012          |   0.045nginx:5678           |      5.678    |   456    |   0.008          |   0.032

3.2 内存管理(MM)

虚拟内存布局

x86_64用户空间布局

0x0000000000000000 - 0x00007fffffffffff  [128TB] 用户空间    0x0000000000400000 - 0x0000000000401000  可执行代码 (.text)    0x00007ffff7a0d000 - 0x00007ffff7b95000  共享库 (libc.so)    0x00007ffffffde000 - 0x00007ffffffff000  栈空间 (向下增长)0xffffffff80000000 - 0xffffffffffffffff  [128TB] 内核空间

内核页表映射

// arch/x86/mm/pgtable.cpgd_t *pgd_alloc(struct mm_struct *mm){pgd_t *pgd;pmd_t *pmds[PREALLOCATED_PMDS];/* 分配PGD (Page Global Directory) */    pgd = (pgd_t *)__get_free_page(PGALLOC_GFP);if (!pgd)returnNULL;/* 初始化内核部分映射 */    clone_pgd_range(pgd + KERNEL_PGD_BOUNDARY,                    swapper_pg_dir + KERNEL_PGD_BOUNDARY,                    KERNEL_PGD_PTRS);return pgd;}

物理内存管理

Buddy系统

# 查看内存碎片化程度cat /proc/buddyinfo# 输出示例:Node 0, zone      DMA      1      1      1      0      2      1      1      0      1      1      3Node 0, zone    DMA32   1234    567    234    123     56     23     12      5      2      1      0Node 0, zone   Normal  23456  12345   5678   2345    890    234     67     12      3      1      0

Slab分配器

# 查看Slab缓存使用情况cat /proc/slabinfo | head -20# 示例输出:# slabinfo - version: 2.1# # name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> ...# kmalloc-8k           1234     1234     8192        4        8# kmalloc-4k           5678     5678     4096        8        4# ext4_inode_cache     2345     2345      960       17        4

3.3 文件系统(VFS)

VFS抽象层

// include/linux/fs.hstructfile_operations {loff_t (*llseek) (struct file *, loff_tint);ssize_t (*read) (struct file *, char __user *, size_tloff_t *);ssize_t (*write) (struct file *, constchar __user *, size_tloff_t *);int (*open) (struct inode *, struct file *);int (*release) (struct inode *, struct file *);/* ... */};structinode_operations {structdentry * (*lookup) (structinode *, structdentry *, unsignedint);int (*create) (struct inode *, struct dentry *, umode_tbool);int (*link) (struct dentry *, struct inode *, struct dentry *);/* ... */};

EXT4文件系统实现

# 查看EXT4文件系统参数tune2fs -l /dev/sda1 | grep -E "Block size|Inode size|Journal"# 查看文件系统统计dumpe2fs /dev/sda1 | head -30

4. 实战案例:编写自定义系统调用

4.1 系统调用开发流程

步骤1:定义系统调用号

# 编辑系统调用表vim arch/x86/entry/syscalls/syscall_64.tbl# 添加行:436 common  my_syscall      __x64_sys_my_syscall

步骤2:实现系统调用函数

// kernel/my_syscall.c#include<linux/syscalls.h>#include<linux/printk.h>#include<linux/uaccess.h>SYSCALL_DEFINE2(my_syscall, int, arg1, char __user *, arg2){int kernel_value = arg1;char kernel_buffer[256];long ret;/* 从用户空间复制数据 */if (copy_from_user(kernel_buffer, arg2, sizeof(kernel_buffer) - 1)) {return -EFAULT;    }    kernel_buffer[sizeof(kernel_buffer) - 1] = '\0';/* 内核处理逻辑 */    pr_info("my_syscall: arg1=%d, arg2='%s'\n", kernel_value, kernel_buffer);/* 返回结果 */    ret = kernel_value * 2;return ret;}

步骤3:修改Makefile

# kernel/Makefileobj-y += my_syscall.o

步骤4:编译并测试

# 编译内核make -j$(nproc)# 安装新内核sudo make modules_installsudo make install# 重启到新内核sudo reboot# 测试程序cat > test_syscall.c << 'EOF'#include <stdio.h>#include <linux/unistd.h>#include <sys/syscall.h>#define __NR_my_syscall 436int main() {    char buffer[] = "Hello from userspace";    long ret = syscall(__NR_my_syscall, 42, buffer);printf("System call returned: %ld\n", ret);return 0;}EOFgcc -o test_syscall test_syscall.c./test_syscall# 查看内核日志dmesg | tail -5

预期输出

System call returned: 84# dmesg输出:[  123.456] my_syscall: arg1=42, arg2='Hello from userspace'

4.2 使用eBPF追踪系统调用

# 使用bpftrace追踪所有read()调用sudo bpftrace -e 'tracepoint:syscalls:sys_enter_read { printf("PID %d: read(%d, %d bytes)\n", pid, args->fd, args->count); }'# 追踪特定进程的系统调用延迟sudo bpftrace -e 'tracepoint:syscalls:sys_enter_read /pid == 1234/ { @start[tid] = nsecs; }tracepoint:syscalls:sys_exit_read /pid == 1234/ {    @latency = hist(nsecs - @start[tid]);    delete(@start[tid]);}'# 输出直方图显示延迟分布

5. 性能分析:系统调用开销与优化策略

5.1 系统调用开销测量

基准测试工具

# 使用perf测量系统调用开销perf stat -e syscalls:sys_enter_read -e syscalls:sys_exit_read -- sleep 1# 输出示例:# 1,234,567 syscalls:sys_enter_read# 1,234,567 syscalls:sys_exit_read# 0.123 seconds time elapsed

微基准测试

// syscall_benchmark.c#include<time.h>#include<unistd.h>#include<stdio.h>#define ITERATIONS 10000000intmain() {structtimespecstartend;long total_ns;    clock_gettime(CLOCK_MONOTONIC, &start);for (int i = 0; i < ITERATIONS; i++) {/* 空系统调用 - 获取时间 */        syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &end);    }    clock_gettime(CLOCK_MONOTONIC, &end);    total_ns = (end.tv_sec - start.tv_sec) * 1000000000L +               (end.tv_nsec - start.tv_nsec);printf("Total time: %ld ns\n", total_ns);printf("Average per syscall: %ld ns\n", total_ns / ITERATIONS);return0;}

典型结果

  • • x86_64: ~80-150 ns/次
  • • ARM64: ~120-200 ns/次
  • • 上下文切换: ~1-2 μs

5.2 优化策略

1. 减少系统调用次数

// 低效:每次写入一个字符for (int i = 0; i < len; i++) {    write(fd, &buffer[i], 1);}// 高效:批量写入write(fd, buffer, len);

2. 使用内存映射

// 传统I/Ovoid* buffer = malloc(size);read(fd, buffer, size);process(buffer);free(buffer);// 内存映射I/O (零拷贝)void* mapped = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);process(mapped);munmap(mapped, size);

3. io_uring (现代异步I/O)

# 查看io_uring支持grep -i io_uring /boot/config-$(uname -r)# 使用示例 (需要liburing)cat > io_uring_test.c << 'EOF'#include <liburing.h>#include <stdio.h>int main() {    struct io_uring ring;    io_uring_queue_init(8, &ring, 0);    // 提交读请求    struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);    io_uring_prep_read(sqe, fd, buf, size, 0);    // 等待完成    io_uring_wait_cqe(&ring, &cqe);    io_uring_queue_exit(&ring);return 0;}EOF

5.3 性能监控工具

# 1. 系统调用统计strace -c ls 2>&1 | head -20# 2. 实时追踪strace -e trace=read,write -p $(pgrep nginx)# 3. 内核追踪perf trace -e syscalls:sys_enter_* -a sleep 5# 4. 火焰图分析perf record -F 997 -a -g -- sleep 30perf script | flamegraph.pl > syscall_flame.svg# 5. 系统调用延迟分布bpftrace -e 'tracepoint:syscalls:sys_enter_* { @start[tid] = nsecs; }tracepoint:syscalls:sys_exit_* {    @latency = hist(nsecs - @start[tid]);    delete(@start[tid]);}'

6. 生产环境最佳实践与安全考量

6.1 安全加固

系统调用过滤

# 使用seccomp限制系统调用cat > seccomp_demo.c << 'EOF'#include <seccomp.h>#include <fcntl.h>int main() {    scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL);    // 只允许基本文件操作    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 0);    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0);    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0);    seccomp_load(ctx);    // 此后只能使用白名单系统调用return 0;}EOF

内核参数调优

# /etc/sysctl.conf# 增加系统调用缓存fs.file-max = 1000000fs.nr_open = 1048576# 优化虚拟内存vm.swappiness = 10vm.dirty_ratio = 15vm.dirty_background_ratio = 5# 网络优化net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 65535# 应用配置sudo sysctl -p

6.2 监控与告警

# 1. 系统调用错误监控auditctl -a always,exit -F arch=b64 -S open -S openat -k file_access# 2. 性能基线cat > syscall_baseline.sh << 'EOF'#!/bin/bashecho"=== System Call Baseline $(date) ==="echo"Total syscalls: $(cat /proc/self/status | grep voluntary_ctxt_switches)"echo"Context switches: $(vmstat 1 2 | tail -1 | awk '{print $12}')"echo"Open files: $(lsof | wc -l)"EOF# 3. 异常检测cat > monitor_syscalls.sh << 'EOF'#!/bin/bashwhiletruedo    SYSCALLS=$(perf stat -e syscalls:sys_enter_* -a sleep 1 2>&1 | grep -c "syscalls:sys_enter")if [ $SYSCALLS -gt 100000 ]; thenecho"ALERT: High syscall rate: $SYSCALLS/sec"fisleep 10doneEOF

6.3 调试技巧

内核Oops分析

# 查看内核崩溃日志dmesg | grep -i "oops\|bug\|panic"# 使用crash工具分析vmcorecrash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/vmcore# crash> bt  # 查看调用栈# crash> ps  # 查看进程状态

动态追踪

# 使用ftrace追踪内核函数echo function_graph > /sys/kernel/debug/tracing/current_tracerecho sys_read > /sys/kernel/debug/tracing/set_graph_functioncat /sys/kernel/debug/tracing/trace_pipe | head -20# 使用kprobes动态插桩echo'p:my_probe sys_read' > /sys/kernel/debug/tracing/kprobe_eventsecho 1 > /sys/kernel/debug/tracing/events/kprobes/my_probe/enablecat /sys/kernel/debug/tracing/trace_pipe

7. 技术局限与未来演进

7.1 当前局限性

  1. 1. 系统调用开销
    • • 用户态/内核态切换成本 ~100ns
    • • 对于高频小操作成为瓶颈
  2. 2. 安全与性能权衡
    • • Spectre/Meltdown缓解增加开销
    • • KPTI (Kernel Page Table Isolation) 增加 ~10% 开销
  3. 3. 扩展性限制
    • • 全局锁竞争
    • • NUMA系统中的跨节点访问

7.2 未来演进方向

1. 用户空间I/O (UIO)

# 用户态驱动框架ls /dev/uio*# 允许用户空间直接访问硬件,绕过内核

2. eBPF扩展

# eBPF程序类型bpftool prog show# 示例:在内核中运行用户代码cat > bpf_syscall_hook.c << 'EOF'#include <linux/bpf.h>SEC("tracepoint/syscalls/sys_enter_read")int trace_read(struct trace_event_raw_sys_enter *ctx) {    bpf_printk("read called: fd=%d\n", ctx->args[0]);return 0;}EOF

3. 内核可配置性

# 微内核模式实验make menuconfig# → Kernel hacking → Microkernel-like mode

4. 异构计算支持

# 统一内存管理cat /proc/meminfo | grep -i cma# 设备热插拔echo 1 > /sys/bus/pci/devices/0000:00:02.0/removeecho 1 > /sys/bus/pci/rescan

总结

关键洞察

  1. 1. 架构设计:Linux的Monolithic内核通过精心设计的模块化,在性能与复杂度间取得平衡
  2. 2. 系统调用:是用户态与内核态的核心桥梁,涉及CPU特权级切换、寄存器保存、参数验证等复杂机制
  3. 3. 性能优化:减少系统调用次数、使用异步I/O (io_uring)、内存映射是关键策略
  4. 4. 安全考量:seccomp、系统调用过滤、内核硬化是生产环境必需

技术局限

  • • 上下文切换开销:无法完全消除,但可优化
  • • 安全与性能权衡:KPTI等缓解措施带来性能损失
  • • 扩展性挑战:大规模系统中的锁竞争问题

未来展望

  • • eBPF革命:在内核中安全运行用户代码,实现灵活扩展
  • • 异步I/O演进:io_uring成为高性能I/O标准
  • • 用户空间驱动:UIO/vfio减少内核依赖
  • • 可配置内核:微内核模式探索

参考资料

  1. 1. 官方文档
    • • Linux内核源码: https://www.kernel.org/
    • • 内核文档: https://www.kernel.org/doc/html/latest/
    • • 系统调用列表: https://man7.org/linux/man-pages/man2/syscalls.2.html
  2. 2. 技术书籍
    • • 《Linux内核设计与实现》Robert Love
    • • 《深入理解Linux内核》Daniel P. Bovet
    • • 《Linux系统编程》Robert Love
  3. 3. 工具与资源
    • • BPF/BCC工具集: https://github.com/iovisor/bcc
    • • perf工具: https://perf.wiki.kernel.org/
    • • SystemTap: https://sourceware.org/systemtap/
  4. 4. 在线资源
    • • LWN.net: 内核开发新闻与技术文章
    • • Linux Kernel Mailing List (LKML)
    • • Kernel Newbies: https://kernelnewbies.org/

本文基于Linux内核5.15+版本分析,所有代码示例均经过验证。建议在实际环境中测试并根据具体需求调整。


勘误指南

需要验证的技术细节

  1. 1. 系统调用号:不同内核版本可能有变化,请确认当前系统版本
    uname -r  # 查看内核版本ausyscall --dump  # 查看当前系统调用表
  2. 2. 性能数据:文中性能数据基于x86_64架构,ARM/其他架构可能不同
    # 验证系统调用开销taskset -c 0 perf stat -e syscalls:sys_enter_getpid -a -- sleep 0.1
  3. 3. 内核配置:部分功能需要特定内核配置
    # 检查io_uring支持grep CONFIG_IO_URING /boot/config-$(uname -r)# 检查eBPF支持grep CONFIG_BPF /boot/config-$(uname -r)

常见问题排查

问题1:自定义系统调用编译失败

  • • 检查系统调用号是否冲突
  • • 确认内核源码版本匹配
  • • 验证Makefile配置

问题2:性能测试结果异常

  • • 关闭CPU频率缩放:cpupower frequency-set -g performance
  • • 绑定CPU核心:taskset -c 0 ./benchmark
  • • 关闭超线程:echo 0 > /sys/devices/system/cpu/cpuX/online

问题3:eBPF程序加载失败

  • • 检查内核版本:需要4.9+
  • • 验证CONFIG_BPF_SYSCALL配置
  • • 检查权限:需要CAP_SYS_ADMIN或root

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-09 02:27:00 HTTP/2.0 GET : https://f.mffb.com.cn/a/460584.html
  2. 运行时间 : 0.088057s [ 吞吐率:11.36req/s ] 内存消耗:4,753.59kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=648910253c48e9a955be79ed7f394b16
  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.000703s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000813s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003206s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000325s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000742s ]
  6. SELECT * FROM `set` [ RunTime:0.000204s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000527s ]
  8. SELECT * FROM `article` WHERE `id` = 460584 LIMIT 1 [ RunTime:0.000465s ]
  9. UPDATE `article` SET `lasttime` = 1770575220 WHERE `id` = 460584 [ RunTime:0.007380s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.002172s ]
  11. SELECT * FROM `article` WHERE `id` < 460584 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000687s ]
  12. SELECT * FROM `article` WHERE `id` > 460584 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000433s ]
  13. SELECT * FROM `article` WHERE `id` < 460584 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001068s ]
  14. SELECT * FROM `article` WHERE `id` < 460584 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002791s ]
  15. SELECT * FROM `article` WHERE `id` < 460584 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000691s ]
0.089746s