当前位置:首页>Linux>Linux PCIe P2P DMA 深度剖析:机制、流程与原理

Linux PCIe P2P DMA 深度剖析:机制、流程与原理

  • 2026-01-14 02:29:36
Linux PCIe P2P DMA 深度剖析:机制、流程与原理

Linux PCIe P2P DMA 深度剖析:机制、流程与原理

第一章:引言与背景动机

传统 DMA 路径的瓶颈分析

在传统的高性能计算架构中,设备间的数据传输遵循着一个经典的路径:设备 A → 系统内存 → CPU 中转处理 → 系统内存 → 设备 B。这种路径虽然保证了数据的完整性和一致性,但在高性能场景下暴露出显著的性能瓶颈。

首先,CPU 参与数据中转带来了不可忽视的开销。每次数据传输都需要 CPU 执行内存拷贝操作,这不仅消耗了宝贵的 CPU 计算资源,还引入了额外的指令执行延迟。更重要的是,现代数据中心的工作负载往往是计算密集型的,CPU 时间被大量用于数据搬运而不是核心计算任务,这直接影响了整体系统效率。

其次,系统内存带宽成为了严重的性能瓶颈。在 PCIe 4.0 时代,单条 PCIe x16 链路的理论带宽已经达到 64GB/s,但系统内存的实际带宽往往只能达到 50-100GB/s 的级别。当多个设备并发进行数据传输时,系统内存总线很快就会成为争用的热点,导致传输延迟显著增加。

PCIe P2P DMA 的定义与价值

PCIe Peer-to-Peer (P2P) DMA 技术通过允许 PCIe 设备间直接进行数据传输,彻底改变了传统的数据传输模式。在 P2P DMA 架构中,数据可以直接从一个设备的内存空间传输到另一个设备的内存空间,完全绕过系统内存和 CPU 的参与。

这种直接传输模式带来了多方面的性能优势。首先,消除了 CPU 的中转开销,释放了 CPU 资源用于核心计算任务。其次,通过减少内存拷贝次数,显著降低了传输延迟。第三,充分利用了 PCIe 总线的高带宽特性,避免了系统内存总线的争用。

P2P DMA 技术在现代数据中心和 HPC 系统中发挥着越来越重要的作用。从 GPU 间的梯度同步,到 RDMA 网络与存储设备的直接数据交换,再到 FPGA 与 GPU 的协同计算,P2P DMA 已成为高性能计算基础设施的核心组件。

第二章:P2P DMA 的硬件基础

PCIe 拓扑结构详解

要理解 P2P DMA 的工作原理,首先需要深入了解 PCIe 总线的拓扑结构。PCIe 总线采用树形拓扑结构,由根复用器 (Root Complex)、交换机 (Switch) 和终端设备 (Endpoint) 组成。

根复用器是整个 PCIe 系统的核心,负责连接 CPU、系统内存和 PCIe 总线。它通常集成在北桥或系统控制器中,提供了从处理器内存域到 PCIe 域的桥梁功能。根复用器不仅处理地址转换和事务路由,还负责维护整个 PCIe 系统的拓扑信息。

PCIe 交换机是实现 P2P 通信的关键组件。交换机内部包含多个端口,可以同时连接多个终端设备和子交换机。交换机的核心功能是事务路由,即根据事务层包 (TLP) 中的地址信息,将数据包从源端口路由到目标端口。与传统以太网交换机不同,PCIe 交换机不仅转发数据包,还需要理解和处理 PCIe 协议的语义。

终端设备是 PCIe 拓扑的叶子节点,包括网卡、存储控制器、GPU 等各类 PCIe 设备。每个终端设备都通过配置空间暴露自己的能力信息,包括支持的最大传输速率、功能特性等。

BAR 机制与设备内存暴露

基地址寄存器 (Base Address Register, BAR) 是 PCIe 设备内存映射的核心机制。每个 PCIe 设备都可以定义多个 BAR,用于向 PCIe 总线暴露自己的内存空间或 I/O 空间。

BAR 的工作原理基于地址重定向机制。当系统上电时,BIOS 或操作系统会为每个设备的 BAR 分配一段连续的地址空间。这个地址空间实际上是对设备内部内存的映射,访问这段地址空间的读写操作会被重定向到对应的设备内存。

在 P2P DMA 场景中,BAR 的作用尤为重要。一个设备的 BAR 不仅可以被 CPU 访问,还可以被其他 PCIe 设备直接访问。这就为设备间直接内存访问奠定了硬件基础。

BAR 的配置过程涉及复杂的地址分配算法。系统需要确保不同设备的 BAR 地址空间不重叠,同时满足设备的对齐要求。现代操作系统通过 PCI 子系统实现了自动化的 BAR 配置,但这个过程需要在系统启动的早期完成。

TLP 路由机制分析

事务层包 (Transaction Layer Packet, TLP) 是 PCIe 协议的核心数据单元,承载了所有 PCIe 通信的内容。TLP 的路由机制直接决定了 P2P DMA 是否可行。

PCIe 定义了两种主要的配置事务类型:Type-0 和 Type-1。Type-0 配置事务用于访问终端设备的配置空间,而 Type-1 配置事务用于访问桥接设备的配置空间。这种区分使得 PCIe 交换机能够正确地将配置请求路由到相应的设备。

对于内存事务,TLP 路由基于地址范围匹配机制。每个 PCIe 设备和桥接器都维护着地址路由表,定义了应该如何处理不同地址范围的内存访问请求。当交换机接收到一个内存读写 TLP 时,它会检查包中的地址信息,并根据路由表决定将包转发到哪个端口。

在 P2P DMA 场景中,TLP 路由的关键在于交换机能够识别出目标地址属于另一个终端设备,而不是需要向上游路由到根复用器。当发起设备访问目标设备的 BAR 地址空间时,交换机会直接将 TLP 路由到目标设备,而不会将其转发到根复用器。

这种直接路由机制是 P2P DMA 的核心硬件基础。它确保了数据传输能够在设备间直接进行,无需 CPU 或系统内存的参与。

ACS 对 P2P 的影响

访问控制服务 (Access Control Services, ACS) 是 PCIe 规范中定义的一组高级功能,用于增强 PCIe 系统的安全性和隔离性。ACS 通过在 PCIe 交换机中实现访问控制策略,限制了设备间的直接通信能力。

ACS 的核心功能包括:

  1. 源验证服务 (Source Validation):验证事务的发起者身份
  2. P2P 请求重定向 (P2P Request Redirect):控制设备间直接通信
  3. 完成重定向 (Completion Redirect):控制事务完成的路由
  4. 上行转发 (Upstream Forwarding):控制事务向上游转发的行为

在 P2P DMA 的实现中,ACS 的 P2P 请求重定向功能尤为重要。该功能允许系统管理员配置交换机,决定是否允许特定设备间的直接通信。当 ACS 启用 P2P 重定向时,原本应该直接路由到目标设备的事务会被重定向到根复用器,由软件进行处理。

ACS 的设计初衷是增强系统安全性,但在高性能计算场景中却带来了新的挑战。系统需要仔细配置 ACS 策略,在保证安全性的同时不影响 P2P DMA 的性能。

第三章:Linux 内核软件基础设施

struct page 问题与 ZONE_DEVICE 解决方案

Linux 内核的内存管理基于页框的概念,每个物理内存页都对应一个 struct page 结构,用于跟踪页的状态、引用计数和映射关系。然而,传统的设备内存 (MMIO) 并没有对应的 struct page 结构,这给设备内存的统一管理带来了困难。

在 P2P DMA 出现之前,设备内存主要用于寄存器访问和控制操作,很少涉及大数据量的传输。因此,内核并没有为设备内存分配 struct page 结构。这种设计在传统的 I/O 模型下工作良好,但无法满足 P2P DMA 对设备内存统一管理的需求。

ZONE_DEVICE 的引入解决了这一问题。ZONE_DEVICE 是 Linux 内存管理子系统中的一个特殊内存域,专门用于管理设备内存。与传统的 ZONE_NORMAL 和 ZONE_DMA 不同,ZONE_DEVICE 中的页并不对应实际的系统内存,而是代表设备可访问的内存区域。

通过 ZONE_DEVICE,内核为设备内存分配了相应的 struct page 结构,使得设备内存能够无缝集成到内核的内存管理框架中。这不仅支持了 P2P DMA,还为后续的设备内存统一管理奠定了基础。

P2PDMA 子系统的核心作用

P2PDMA 子系统是 Linux 内核中专门处理 PCIe P2P DMA 的核心组件,位于 drivers/pci/p2pdma.c 中。该子系统提供了完整的 P2P DMA 生命周期管理,包括设备发现、内存分配、映射管理和资源清理。

P2PDMA 子系统的核心功能是判断设备间的 P2P 兼容性,并提供相应的内存操作接口。它维护了一个设备兼容性矩阵,记录了哪些设备组合支持 P2P DMA。这个矩阵基于设备的 PCIe 拓扑位置和交换机能力动态构建。

此外,P2PDMA 子系统还负责管理 P2P 内存的生命周期。它跟踪哪些内存区域被映射给了哪些设备,确保在设备移除或系统重启时正确清理资源。这种生命周期管理对于保证系统稳定性至关重要。

DMABUF 与 RDMA 的集成机制

DMABUF (DMA Buffer Sharing) 子系统是 Linux 内核中用于跨设备缓冲区共享的核心机制。在 P2P DMA 架构中,DMABUF 发挥着桥梁作用,将不同设备的内存管理统一起来。

DMABUF 的核心思想是将缓冲区的所有权与访问权限分离。通过 DMABUF,设备可以将自己的内存导出为一个通用的缓冲区对象,其他设备可以导入这个对象并获得访问权限。这种设计支持了复杂的设备间协作场景。

在 RDMA (Remote Direct Memory Access) 场景中,DMABUF 的作用更加明显。RDMA 网卡需要直接访问 GPU 或存储设备的内存,而 DMABUF 提供了实现这一目标的统一接口。通过 DMABUF,RDMA 子系统可以透明地处理不同类型设备的内存访问,无需关心底层的硬件细节。

P2P DMA 与 DMABUF 的集成还涉及到复杂的同步机制。多个设备可能同时访问同一个缓冲区,需要保证数据一致性和访问顺序。内核通过 DMABUF 的附件 (attachment) 和映射 (mapping) 机制实现了这一目标。

IOMMU 在 P2P 中的作用分析

IOMMU (Input-Output Memory Management Unit) 在传统 DMA 中扮演着地址转换和内存保护的角色,但在 P2P DMA 中,其作用变得更加复杂和微妙。

在 P2P DMA 事务中,IOMMU 可能面临两种不同的处理方式:旁路或参与。理想情况下,P2P 事务应该绕过 IOMMU,直接在设备间进行地址转换。但在实际系统中,IOMMU 往往会参与到 P2P 事务的处理中。

当 P2P 事务通过交换机直接路由时,IOMMU 可能不会看到这些事务,因为它们没有经过根复用器。但如果系统配置要求所有 PCIe 事务都经过 IOMMU 检查,那么 P2P 事务也需要接受地址转换和权限验证。

这种设计既保证了安全性,又为性能优化留下了空间。系统管理员可以根据安全策略和性能需求,决定是否让 P2P 事务绕过 IOMMU。

第四章:详细机制与工作流程

发现阶段:P2P 能力的判定

P2P DMA 的第一步是确定两个设备是否具备 P2P 通信能力。这个判定过程涉及复杂的拓扑分析和能力检查。

内核首先分析设备的 PCIe 拓扑位置。通过遍历 PCI 设备树,系统可以确定两个设备是否连接到同一个交换机,或者是否存在直接的 P2P 路径。这个拓扑分析需要考虑交换机的级联情况和根复用器的限制。

其次,系统检查交换机的能力。并非所有 PCIe 交换机都支持 P2P 路由,一些低端交换机可能只支持基本的上行转发。内核维护了一个已知兼容交换机的白名单,只有列入白名单的交换机才能用于 P2P 通信。

此外,系统还需要评估设备间的距离。在多级交换机拓扑中,设备间的跳数会影响 P2P 性能。距离越远的设备,传输延迟越高,可能不适合 P2P 通信。

分配阶段:提供者设备内存的获取

一旦确定设备具备 P2P 能力,系统进入内存分配阶段。这个阶段的核心是从提供者设备的 BAR 中分配合适的内存区域。

内存分配需要考虑多个因素。首先是地址对齐要求。不同设备对内存对齐有不同的要求,一些设备需要 4K 对齐,而另一些可能需要更大的对齐粒度。

其次是内存大小的考虑。系统需要根据应用的需求和设备的 BAR 大小,分配合适的内存块。过小的分配会限制传输效率,而过大的分配可能浪费宝贵的 BAR 空间。

此外,内存分配还需要考虑连续性要求。一些设备要求内存物理连续,而另一些可以接受分散的内存块。内核通过伙伴系统和内存管理子系统来满足这些不同的要求。

映射阶段:总线地址的获取流程

映射阶段是 P2P DMA 的核心,将提供者设备的内存地址转换为发起者设备可以访问的总线地址。

这个过程通过 dma_map_sg_p2pdma 函数实现。该函数首先验证设备的 P2P 兼容性,然后从提供者设备的 BAR 中直接获取总线地址。与传统的 DMA 映射不同,P2P 映射不需要通过 IOMMU 进行地址转换,而是直接使用设备 BAR 中的物理地址。

映射过程需要维护复杂的元数据。内核需要记录哪些内存区域被映射给了哪些设备,以便在清理时正确释放资源。这种元数据管理对于保证系统稳定性至关重要。

传输阶段:DMA 引擎的触发机制

传输阶段是 P2P DMA 的执行环节,由发起者设备的 DMA 引擎直接访问提供者设备的内存地址。

DMA 引擎的触发涉及复杂的硬件编程。驱动程序需要配置 DMA 描述符,指定源地址、目标地址和传输长度。与传统 DMA 不同,P2P DMA 的源地址和目标地址都指向设备内存,而不是系统内存。

传输完成后,系统需要处理完成通知和错误处理。内核通过中断或轮询机制获取传输状态,确保数据传输的可靠性和完整性。

第五章:关键挑战与解决方案

PCIe 交换机的限制因素

PCIe 交换机是 P2P DMA 实现的关键,但并非所有交换机都完全支持 P2P 功能。交换机的限制主要体现在以下几个方面:

首先是路由表的能力。一些交换机只支持基本的地址范围路由,无法处理复杂的 P2P 事务。特别是当涉及多级交换机时,路由逻辑变得更加复杂。

其次是缓冲区深度。P2P 事务需要交换机提供足够的内部缓冲区来处理并发传输。缓冲区不足会导致传输阻塞和性能下降。

此外,交换机还需要支持必要的 PCIe 特性,如扩展的标签字段和流量控制机制。这些特性确保了 P2P 事务的可靠性和性能。

根复用器对等连接的难题

根复用器对等连接是 P2P DMA 面临的最大挑战之一。在许多系统中,不同的 PCIe 根端口之间无法直接进行 P2P 通信,所有事务都必须通过根复用器转发。

这个限制源于主机桥的设计。主机桥通常只允许从根端口到内存的单向通信,而不支持根端口间的横向通信。这种设计虽然简化了硬件实现,但限制了 P2P DMA 的应用范围。

解决方案包括使用支持多根桥接的系统或特殊的 PCIe 交换机。这些解决方案允许设备在不同的根端口间进行直接通信,扩展了 P2P DMA 的应用场景。

一致性问题与解决方案

缓存一致性是 P2P DMA 实现中的另一个关键挑战。设备间的直接内存访问绕过了 CPU 的缓存一致性协议,可能导致数据不一致的问题。

解决方案包括硬件和软件两方面的措施。在硬件层面,一些 PCIe 设备支持缓存一致性扩展,能够自动维护数据一致性。在软件层面,内核通过内存屏障和同步原语来保证数据一致性。

此外,系统还需要处理设备缓存的影响。一些设备有自己的缓存机制,需要特殊的刷新操作来确保数据可见性。

第六章:实际应用场景分析

NVMe-oF 中的 P2P DMA 应用

NVMe over Fabrics (NVMe-oF) 是现代存储网络的标准协议,通过 RDMA 网络实现对 NVMe 存储设备的远程访问。在 NVMe-oF 架构中,P2P DMA 发挥着关键作用。

在传统的 NVMe-oF 实现中,RDMA 网卡接收到的数据需要先存储到系统内存,然后再传输到目标设备。这种模式存在明显的性能瓶颈。

通过 P2P DMA,RDMA 网卡可以直接将数据写入 NVMe 设备的内存空间。这种直接传输模式不仅消除了额外的内存拷贝,还充分利用了 PCIe 总线的高带宽。

NVMe-oF 中的 P2P DMA 实现涉及复杂的协议交互。RDMA 网卡需要理解 NVMe 协议的语义,将网络数据包正确地转换为 NVMe 命令。这种协议转换需要硬件和软件的紧密配合。

GPUDirect Storage 的实现机制

GPUDirect Storage 是 NVIDIA 推出的存储加速技术,允许 GPU 直接访问存储设备的数据。在这个架构中,P2P DMA 是核心组件。

GPUDirect Storage 的工作流程如下:GPU 发起读取请求,存储设备通过 PCIe 总线直接将数据传输到 GPU 内存。这个过程完全绕过了 CPU 和系统内存的参与。

实现这一目标需要 PCIe 拓扑的支持。GPU 和存储设备需要连接到同一个 PCIe 交换机,或者通过支持 P2P 的交换机级联连接。

此外,系统还需要处理复杂的权限和隔离问题。存储数据的访问需要经过严格的权限检查,确保只有授权的 GPU 才能访问敏感数据。

第七章:结论与未来展望

P2P DMA 的性能收益总结

PCIe P2P DMA 技术通过设备间的直接通信,实现了显著的性能提升。首先,消除了 CPU 的数据中转开销,释放了计算资源用于核心任务。其次,减少了内存拷贝次数,降低了传输延迟。第三,充分利用了 PCIe 总线的高带宽,避免了系统内存总线的争用。

在实际应用中,P2P DMA 带来了 2-5 倍的性能提升,特别是在大规模数据传输场景中效果明显。这种性能提升不仅改善了单个应用的表现,还提高了整个系统的资源利用效率。

CXL 对内存共享的未来影响

计算快速链路 (Compute Express Link, CXL) 是 PCIe 规范的扩展,专门设计用于实现设备间的内存共享和缓存一致性。CXL 的出现将为 P2P DMA 带来新的发展机遇。

CXL 通过定义标准的内存语义和一致性协议,简化了设备间内存共享的实现。设备可以像访问本地内存一样访问其他设备的内存,而无需复杂的地址转换。

此外,CXL 还支持更灵活的内存拓扑。设备可以动态地共享内存资源,根据应用需求调整内存分配。这种灵活性为高性能计算提供了新的架构可能性。

CXL 与 PCIe P2P DMA 的结合将创造出更强大的计算平台。系统可以根据工作负载的特性,灵活选择使用传统的 PCIe P2P 还是 CXL 内存共享。这种混合架构将为不同的应用场景提供最优的性能和效率。

展望未来,随着 CXL 和 PCIe 规范的不断演进,P2P DMA 将在高性能计算领域发挥越来越重要的作用。系统设计者需要关注这些新技术的发展,及时调整架构设计以充分利用硬件的潜能。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-09 04:42:46 HTTP/2.0 GET : https://f.mffb.com.cn/a/462319.html
  2. 运行时间 : 0.153781s [ 吞吐率:6.50req/s ] 内存消耗:5,253.58kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=60f866f42cb281c16e524526d4a68504
  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.000841s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001454s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.005342s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005324s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001634s ]
  6. SELECT * FROM `set` [ RunTime:0.001342s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001630s ]
  8. SELECT * FROM `article` WHERE `id` = 462319 LIMIT 1 [ RunTime:0.003775s ]
  9. UPDATE `article` SET `lasttime` = 1770583366 WHERE `id` = 462319 [ RunTime:0.025106s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.004726s ]
  11. SELECT * FROM `article` WHERE `id` < 462319 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005197s ]
  12. SELECT * FROM `article` WHERE `id` > 462319 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001596s ]
  13. SELECT * FROM `article` WHERE `id` < 462319 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003311s ]
  14. SELECT * FROM `article` WHERE `id` < 462319 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004029s ]
  15. SELECT * FROM `article` WHERE `id` < 462319 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003909s ]
0.157281s