当前位置:首页>Linux>7、Linux调优cpu利用率

7、Linux调优cpu利用率

  • 2026-03-26 08:34:50
7、Linux调优cpu利用率

Linux调优cpu使用率

一、调度的进程

单个CPU一次只能执行一个进程。虽然Linux系统可能通过多任务处理同时运行多个进程,但当多 个进程在单个CPU上并发运行时,它是通过交错执行这些进程。 内核使用进程调度器来确定在任何给定的时间点运行哪个进程。进程调度器必须平衡几个选项,基 于以下标准: 1.快速决定哪个进程进入下一个cpu使用周期。 2.进程可以获得公平的CPU时间份额,但是允许高优先级进程获得更大的份额,并抢占低优先级进 程。 3.响应式受益交互应用。 4.在各种工作条件下保持可预测性和可扩展性。

二、进程的优先级介绍

在Linux中,调度器根据分配给每个线程或进程的"调度策略""调度优先级"控制执行顺序。调度策略分为非实时策略组和实时策略组。 #静态优先级 静态优先级是在新进程创建时设置的默认优先级,不能更改。使用"实时策略"的进程优先级的值在1(最低)到99(最高)之间,被称为"实时优先级"。调度程序在一个自平衡的二叉搜索树中维护一个可运行进程列表。要确定哪些进程下一个获得CPU时间,调度器查找具有最高静态优先级或实时优 先级的进程。调度策略只确定具有相同静态优先级的进程在运行队列中的顺序。使用非实时策略的 进程不使用静态优先级,静态优先级设置为0。 #动态优先级 当CPU不足时,进程优先级会被重置,因为优先级更高的进程会被优先调度。在此场景中,调度器 提高CPU等待时间最长的进程的优先级。用户还可以使用nice或renice命令修改进程优先级。进 程优先级可以在进程生命周期内增加或减少,这被称为动态优先级。用于确定哪个非实时进程抢占 其他非实时进程的值称为nice值。由于非实时进程的静态优先级设置为0,因此nice优先级值决定 了非实时进程的相对调度。进程的权重控制进程获得的CPU数量,而nice值将衡量进程的权重。例 如,在系统CPU饱和的情况下,nice值为10的进程获得的CPU时间是nice值为5的进程的两倍。当 系统负载未达到CPU饱和时,每个进程将获得公平的CPU时间份额。nice的取值范围最高为-20, 最低为19。 ps命令能列出进程的优先级,pri参数列出静态优先级,rtprio参数列出实时优先级,ni参数列 出nice值,cls参数列出调度策略,TS表示时间共享,non-real-time策略,FF表示FIFO real-time策略。 #ps axo pid,pri,rtprio,ni,cls,comm 在任何给定的CPU上,在特定的时间只能运行一个进程。因此,进程在完成执行之前通常会停止和 启动几次。默认情况下,内核分配一组处理时间给进程,称为时间片。一个进程将它的时间片分成 几个部分,而不是一次运行所有的部分。当某个进程的时间片耗尽,或者该进程正在等待某个事件 时,该进程可以主动将CPU时间让给其他进程。当进程"非自愿"将CPU时间让给更高优先级的进程时,这称为"抢占"。抢占会损害应用程序的整体性能。使用ps命令列出进程的时间片;使用cputime选项列出CPU时间。一个进程使用实时策略(FF)执 行,另一个进程使用非实时策略(TS)执行。注意实时进程比非实时进程占用更多的CPU时间。 #ps axo pid,pri,rtprio,ni,cls,cputime,comm 1238 1248 在进程之间切换时,内核存储前一个进程和下一个进程的信息。每次进程释放处理器时,内核都会 存储有关其当前操作状态的信息,以便在再次调度它在处理器上运行时,它可以从相同的位置恢复 操作。这种操作状态数据称为上下文(context),它由CPU寄存器和程序计数器的内容组成。进 程对CPU时间的切换称为上下文切换(context switching)。 可以通过/proc/PID/status中的voluntary字段查看进程上下文切换。 #grep voluntary /proc/4350/status 改变进程的优先级可以帮助减少进程的上下文切换。 

三、定义调度策略

RHEL系统提供6种调度策略,分为两组,Real-Time调度策略,Non-Real-Time调度策略。

1、实时调度策略

1.SCHED_FIFO 先进先出调度算法不带时间片。直到IO阻塞(sched_yield死锁)或者被更高优先级抢占之前它 都将一直运行。("FF"2.SCHED_RR round-robin(轮询策略)调度算法带时间片。每个进程都将保持运行直到耗尽了提前分配的时 间片。同优先级的进程使用round-robin调度策略。("RR")两种实时调度策略都采用固定优先级。内核不会为实时任务计算动态优先级值。固定的实时优先级 确保具有给定优先级的实时进程总是抢占较低优先级的进程。使用实时调度策略,内核尝试在时间 期限内调度进程,但内核并不总是承诺实现这些目标。

2、非实时策略

1.SCHED_NORMAL(SCHED_OTHER)该策略定义了round-robin风格的时间共享策略。该策略是Linux上大多数进程使用的默认时间共 享策略。("TS"2.SCHED_BATCH 该策略有利于面向批处理的工作负载。它不像SCHED_NORMAL那样频繁抢占,因此任务运行时间更 长,可以更好地利用缓存。("B"3.SCHED_IDLE 该策略有利于运行低优先级的应用程序。使用SCHED_IDLE运行的进程的优先级低于使用19的nice 值运行的进程。("IDLE"除非特定应用需要使用固定优先级(fixed-priority)的调度策略,否则应用必须使用默认的调度 策略。当使用SCHED_FIFO运行的高优先级进程时,系统的总体性能会降低。例如,执行密集计算 的进程(例如对大矩阵求逆)永远不能使用SCHED_FIFO运行。大多数内核线程使用SCHED_FIFO来 避免用户级应用程序抢占。例如,migration内核进程(在cpu之间移动进程以实现负载平衡)使用 SCHED_FIFO。

3、完全公平调度器CFS

旧的抢占式调度程序使用固定的时间片和多个调度队列,每个进程优先级一个。当一个不想要的实 时进程开始执行时,固定时间片调度器会带来风险,因为被另一个高优先级进程抢占是调度实时进 程的唯一方法。完全公平调度器(CFS)是在Linux kernel 2.6.23中引入的,是RHEL系统的默认 调度器。使用CFS,当调度上下文在系统生命周期内发生变化时,将动态计算正在运行的进程的计 算时间。CFS使用SCHED_NORMAL调度策略,这是所有用户空间应用程序的默认策略。 CFS不使用队列而是通过在时间有序、自平衡的二叉搜索红黑树中维护可运行进程,从而保证了一 种公平的方法。要了解红黑自平衡二叉搜索树,请参阅红黑树 https://en.wikipedia.org/wiki/Redblack_tree。CFS调度器的三个主要特性是: 1.调度种类:调度种类使用调度器模块扩展CFS功能。调度器核心处理这些维护调度策略系列的模 块 2.公平调度:根据当前争夺CPU时间的进程数量,维护进程的CPU时间共享公平性。CFS跟踪每个 任务已经消耗的时间量,即其虚拟运行时。 3.组调度:CFS调度器可以为定义的进程组提供公平的CPU时间 CFS使用一种自平衡的二叉搜索树来管理可运行进程,并确定CPU等待时间最长的进程。虚拟时间 最长、等待时间最长的进程将使用CPU。随着该进程使用CPU周期,它的虚拟时间会减少。当CFS下 一次检查时,虚拟时间较高的进程会抢占正在运行的进程。CFS内核代码简单,可伸缩性和行为良 好,"病态"用户进程更难影响交互系统行为。#调度策略的内核可调项 [root@workstation ~]# ls /proc/sys/kernel/sched_*/proc/sys/kernel/sched_autogroup_enabled /proc/sys/kernel/sched_rr_timeslice_ms /proc/sys/kernel/sched_cfs_bandwidth_slice_us /proc/sys/kernel/sched_rt_period_us /proc/sys/kernel/sched_child_runs_first /proc/sys/kernel/sched_rt_runtime_us /proc/sys/kernel/sched_latency_ns /proc/sys/kernel/sched_schedstats /proc/sys/kernel/sched_migration_cost_ns /proc/sys/kernel/sched_time_avg_ms /proc/sys/kernel/sched_min_granularity_ns /proc/sys/kernel/sched_tunable_scaling /proc/sys/kernel/sched_nr_migrate /proc/sys/kernel/sched_wakeup_granularity_ns /proc/sys/kernel/sched_domain: cpu0 cpu1 1.sched_latency_ns:定义目标抢占延迟。增加这个变量值会增加CPU绑定进程的时间片。目标 延迟是所有运行队列任务至少调度一次的周期。持续时间定义为纳秒(ns)。 2.sched_min_granularity_ns:定义任何计划进程在被另一个进程抢占之前必须允许运行的最 短时间。持续时间定义为纳秒(ns)。该变量值必须小于sched_latency_ns。如果队列中正在运 行的任务数大于sched_latency_ns除以sched_min_granularity_ns,则系统中任务过多, sched_latency_ns变量不能满足任务的所有最小粒度时间要求。为了适应这种情况,调度器通过 将任务的运行次数乘以sched_min_granularity_ns值来增加调度周期。 3.sched_migration_cost_ns:定义进程最后一次执行后迁移到另一个CPU所需的运行时间。持 续时间定义为纳秒(ns)。增加这个变量值可以减少跨cpu的进程迁移。 4.sched_rt_period_us:定义为CPU绑定进程提供运行时的时间片。持续时间以微秒(us)为单位 定义。默认值为100% CPU带宽。 5."sched_rt_runtime_us":定义所有实时任务可以使用的最大CPU时间。持续时间以微秒(us)定义。调度器为使用非实时调度策略的进程保留sched_rt_period_us和sched_rt_runtime_us 变量值之间的差异。sched_rt_period_us的默认值为1000000 μs(1秒), sched_rt_runtime_us的默认值为950000 μs(0.95秒)。这为使用非实时策略的进程提供了 0.05秒的时间。这些默认值防止实时进程锁定系统。这种保护机制被称为实时调度器节流。将 sched_rt_runtime_us设置为-1将禁用进程的时间预留。将sched_rt_runtime_us设置为0不允 许为实时进程分配时间周期。 6.sched_rr_timeslice_us:定义SCHED_RR进程在被抢占并放在CPU绑定进程队列的末尾之前允 许运行的时间片。持续时间以微秒(us)定义。 示例: 1.在视频转码过程中,CPU必须每秒传送25帧,也就是每0.04秒传送一帧。执行转码的系统还必 须处理其他SCHED_NORMAL进程,因此工程师希望将视频转码时间限制为CPU时间的80%。如下所 示,sched_rt_runtime_us可调参数设置为0.032秒。 2.对于视频转码过程,sched_rt_period_us被设置为0.040秒(40000 us), sched_rt_runtime_us被设置为0.032秒(32000 us)。 3.视频也有音频,需要定期重新填充内存缓冲区,以便在转码运行时不会清空。工程师已经确定每 5ms加一次就足够了。重新填充音频缓冲区需要最少的CPU,工程师限制为3%的CPU时间。如下所 示,sched_rt_runtime_us可调参数设置为0.00015秒(0.005*3%=150纳秒)。 4.在下面的图中,将sched_rt_period_us设置为0.005秒(5000 us),并将 sched_rt_runtime_us设置为0.00015秒(150 us),用于音频缓冲区填充。

四、Deadline调度器介绍

实时系统必须在最后期限内响应请求。如果系统未能在deadline前作出响应,则认为系统未能交 付结果。RHEL8增加了对名为deadline调度器或SCHED_DEADLINE的新实时调度器的支持。即使 在高负载条件下,调度程序允许指定任务需求参数,允许系统做出更好的调度决策。该调度器保证 实时任务调度。实时调度器提供SCHED_FIFO和SCHED_RR调度策略,它基于固定的优先级对任务进 行调度。与此相反,deadline调度程序根据流程截止日期调度任务,并优先调度截止日期最早的 流程。 deadline调度程序使用三个参数:周期、截止日期和运行时以纳秒为单位定义任务。下图中,周期 是一个实时任务的激活模式。考虑一个视频编码任务的例子,它每秒处理60帧,每16(0.016)毫 秒发送一帧新帧,所以在这种情况下周期是16毫秒。运行时是应用程序生成输出所需的CPU时间 量。在上面的例子中,如果视频编码工具花费5毫秒来处理图像,那么运行时间是5毫秒。截止日期 是相对于期限,任务必须交付结果的最长时间。在上面的例子中,任务必须交付一个处理过的帧是 10毫秒,那么deadline是10毫秒。

在下面的命令中,任务使用SCHED_DEADLINE策略保证每16.6ms提供5ms的CPU时间,并且在10ms 内所有CPU时间都可用于任务。

带有--sched-runtime、--sched-deadline和--sched-period选项的chrt命令定义运行时、 相对截止时间和周期,单位为纳秒。-d选项使用SCHED_DEADLINE调度策略对任务进行调度。ps o cls命令输出使用SCHED_DEADLINE策略作为"DLN"显示进程。在使用实时调度器时,用户必须 定义正确的任务固定优先级,以避免非自愿抢占。因此,在一个有很多正在运行的进程的系统中, 使用实时调度器可能比使用截止日期调度器更复杂。 deadline scheduler的主要优点是用户需要通过参数来满足任务的截止日期,并且不需要分析系 统上运行的其他任务。在截止日期调度程序中,上下文切换更少。在单处理器系统中,截止日期调 度比固定优先级调度可以调度更多的任务,同时满足所有任务的截止日期

五、为进程设置调度器

Linux提供了一系列用于管理调度器参数的系统调用,这些调用允许操作进程优先级、调度策略和 处理器关联,从而将处理器交付给其他任务。应用程序以编程方式使用sched_setscheduler()和sched_getscheduler()系统调用来设置和获取给定的调度策略和进程的实时优先级。 sched_setscheduler(2)man page提供了关于sched_setscheduler()和 sched_getscheduler()系统调用的信息。Red Hat Enterprise Linux为管理员提供了两种不 同的方式来配置和观察进程调度器配置:chrt命令和tuna接口。

1、chart

系统管理员可以使用chrt命令查看调度策略和优先级,并使用所选的调度策略执行应用。使用以 下命令查看特定进程的属性: [root@workstation ~]# chrt -p 1 pid 1's current scheduling policy: SCHED_OTHER pid 1's current scheduling priority: 0 chrt命令使用指定的调度器和给定的优先级启动一个程序。该命令还可以更改已运行进程上的调 度器和优先级(可选)。当使用chrt启动一个新程序时,系统管理员需要提供所需的调度器;否则, 该命令默认使用SCHED_RR调度策略。另外,chrt命令可以使用实时优先级作为执行命令的参数之 一。 -b:设置调度策略为SCHED_BATCH -f:设置调度策略为SCHED_FIFO -i:设置调度策略为SCHED_IDLE -o:设置调度策略为SCHED_NORMAL或者SCHED_OTHER -r:设置调度策略为SCHED_RR -d:设置调度策略为SCHED_DEADLINE

2、使用tuna改变调度参数

tuna包提供了一个命令行实用程序和一个GUI应用程序来调整调度器选项,比如调度器策略、实时 优先级和CPU亲和性。使用tuna--show_threads命令查询系统中所有线程的当前策略和优先 级。

--threads可以简写成-t --show_threads可以简写成-P 使用--priority参数可以改变调度策略和实时优先级,调度策略可以是RR,FIFO,OTHER

3、使用systemd修改调度参数

系统管理员可以修改系统启动时启动的系统管理服务的调度策略和优先级。单元配置指令用于更改 启动过程中服务的优先级。在[Service]部分使用以下指令来更改调度策略和优先级: Nice:设置服务的默认nice级别。nice级别设置为-20(最高优先级)到19(最低优先级)之间的数 字。 CPUSchedulingPolicy:设置服务的CPU调度策略。策略设置为以下值之一:other、batch、 idle、fifo和rr。 CPUSchedulingPriority:设置服务的CPU调度优先级。优先级范围与所选择的调度策略有关。对 于实时调度策略,优先级为1~99之间的数值。 修改sshd服务调度器策略为RR、实时调度器,优先级为10,然后创 建/etc/systemd/system/sshd.service.d/10-scheduler.conf文件,内容如下:

1.修改完之后需要systemctl daemon-reload 2.重启服务将会生效 3.Nice,CPUSchedulingPolicy,CPUSchedulingPriority不能使用systemctl setproperty动态修改

六、查看进程调度统计

/proc/sched_debug包含影响任务调度器行为的所有内核可调项的当前值、统计信息以及与所有 可用处理器上的各种调度策略相关的运行队列的信息。 /proc/schedstat显示与运行队列相关的统计信息。 /proc/PID/sched显示进程的调度信息,其中PID为进程ID。

七、锁定进程

通常,内核决定进程运行的cpu。每次调度程序重新调度一个进程时,它都可以转到任何可用的 cpu上。虽然这对于大多数工作负载都是可行的,但有时最好限制允许进程运行的CPU数量。例 如,将内存密集型进程限制为一个或两个cpu可以增加缓存命中的机会,从而提高整体性能 

基于systemd的服务提供了一种方便的方式,通过在单元定义的[service]部分中的 CPUAffinity设置来限制服务可用的cpu数量。此设置采用一个以空格分隔的CPU索引列表,该服 务允许在其上运行,第一个CPU是索引O,第二个索引1。当服务单元定义多个CPUAffinity参数 时,它们的值会被合并。将CPUAffinity设置为空字符串会将服务重置为使用所有cpu: [Service] CPUAffinity=""

1、使用Cgroup管理CPU Affinity

在NUMA体系结构的系统上,限制可用的cpu和内存节点可以确保进程总是能够以最快的速度访问内 存。系统默认自动管理业务的内存和CPU放置,用户也可以手动组织业务放置。下面的显示了一个 具有2个NUMA节点的系统。

对于较大的系统,将进程固定为使用属于同一个NUMA节点的特定CPU和内存可以减少内存访问时间 和CPU争用。一个示例用例是NUMA系统,该系统运行一个具有高性能应用程序的大型高性能集群。 一种可扩展的CPU和内存放置方式是使用cpuset cgroup。cpuset cgroup控制器将多核系统上 的单个cpu和内存节点分配给cgroup中的任务。cpuset目录在/sys/fs/cgroup虚拟文件系统 下。/sys/fs/cgroup/cpuset目录下的文件:

每个正在运行的进程在/proc中都有一个cpuset文件,它列出了cgroup层次结构中相关的目录。 默认为/,即层次结构中的顶级目录。 管理员可以手动读写“/sys/fs/cgroup cgroup”虚拟文件系统中的控制文件。libcgrouptools包中提供了cgcreate、cgexec、cgclassify等用于管理cgroup的工具。 每个cpuset cgroup定义的参数是强制性的,必须在将任务移动到cgroup之前设置。以下是一些 与CPU和内存亲和性相关的参数: 1.cpuset.cpus:该参数指定了cgroup中任务可以访问的cpu数量。列表可以用逗号分隔,也可以 用“-”分隔,也可以用“-”和“-”组合。 2.cpuset.mems:该参数指定cgroup中的任务可以访问的NUMA内存节点。列表范围可以用“-”分 隔,也可以用“-”和“-”的组合分隔。 3.cpuset.cpu_exclusive和cpuset.mem_exclusive:该参数指定除了当前的cpuset及其父节 点和子节点之外,cpuset是否可以共享为该cpuset指定的CPU和内存节点。该参数为可选参数, 默认值为“0”,表示不允许共享CPU和内存节点。设置为1可以在父节点和子节点之间共享CPU和内 存节点。cpuset.mems在没有NUMA架构的系统上,参数的值为0。 目前,systemd服务不直接管理cpuset控制器。cpuset控制器既可以手动管理,也可以使用 libcgroup-tools包提供的工具进行管理。管理cpuset的一种方法是在单元内使用 ExecstartPost脚本。

2、示例

下面的过程将httpd服务分配给一个名为cpuset0的新的cpuset cgroup: 1.创建/usr/local/bin/cpuset0脚本,以创建名为cpuset0的cpuset。该脚本将2到8的cpu和 NUMA节点O到1的内存分配给新的cpuset。

2.设置systemd文件

3.加载新的systemd配置文件重启服务

4.查看/proc/PID/status文件内容,列出已分配的cpu和内存,其中PID为进程ID。 CPU亲和性用十六进制的bitmask表示,由n位组成,其中每一位表示内核是否将给定进程引到相 应的CPU上。要计算与特定CPU相关的值,可以使用以下公式:value = 2的n次幂,其中n是CPU编 号,从0开始。例如,要将进程固定在CPU O-1、3和5-8上,CPU亲和性掩码的计算如下所示:

八、平衡中断

中断是由硬件(硬中断)或软件(软中断)发送给cpu的信号,表示需要立即关注的事件。中断有时也 被称为IRQ,它代表中断(Interrupt)请求(ReQuest)。内核通过选择一个CPU来执行相应的应用 程序代码来处理中断。在多处理器系统中,内核将中断均匀地分布在cpu上。当跨CPU写入新数据 和指令缓存时,中断处理的延迟会与发生在CPU上的其他处理产生冲突。为了克服跨CPU写操作的 问题,内核允许管理员将时间关键型中断和进程固定到特定的CPU或一堆CPU上。 /proc/interrupts文件详细说明了内核在特定CPU上处理特定中断的频率。 内核使用/proc/irq/number/smp_affinity文件(其中的number是IRQ号)在CPU上执行给定的 中断处理程序。该文件将CPU指定为bitmask值,用十六进制数表示。对于每一个处理中断的 CPU,对应的位设置为1。当位设置为0时,内核不分配给定的CPU用于中断处理。 例如,要将中断的值限制为50到cpu O、2和7,请计算:2**0 + 2**2 + 2**7 = 133 = 0x85。

或者,在/proc/irq/number/smp_affinity_list文件中编辑亲和bitmask。这个文件使用逗号 分隔的CPU索引列表(从O开始),可以用来处理中断。 在Red Hat Enterprise Linux中,irqbalance服务在新安装时默认启用。irqbalance服务每 10秒为所有中断调整smp_affinity文件。在基于NUMA的系统中,这使得中断处理程序在执行期间 获得缓存命中的几率最高。在共享L2缓存的单核系统和双核系统上,irqbalance发挥的作用不 大。 管理员在/etc/sysconfig/irqbalance文件中使用以下设置来调整irqbalance服务的行为: IRQBALANCE_ONESHOT: 设置为yes, irqbalance服务在启动后休眠一分钟,重新平衡一次中 断,然后退出。这个变量对于避免每10秒唤醒服务的开销非常有用。 IRQBALANCE_BANNED_CPUS:如果设置为cpu bitmask,irqbalance服务不会为列出的cpu分配 任何中断。该值是CPU的十六进制bitmask,irqbalance服务在决定使用哪个CPU进行特定中断时 忽略它。例如,将该值设置为000000fe,以禁止32位系统上的CPU 1-15进行中断处理,只允许 CPU0进行中断处理(以及任何索引为16或更高的CPU)

九、CPU分区

实时调优的一个关键技术是隔离一组CPU内核,以便在系统上运行一个或多个实时应用程序。CPU 分区考虑了CPU拓扑结构,因此相关进程线程驻留在NUMA节点的同一个核心上,从而减少了抖动和 内核中断。Red Hat Enterprise Linux提供了CPU分区调优配置文件,该配置文件在引导时自 动对CPU进行分区。安装tuned-profiles-cpu-partitioning包,将调优配置文件部署到系统 上。使用/etc/tuned/cpu-partitioning-variables.conf文件定制cpu-partitioning调优 配置文件。有两个配置选项: isolated_cores:需要隔离的cpu列表。这个选项是必须的。其余不在列表中的cpu将被考虑用于 运行内务管理进程。 no_balance_cores:当进程负载均衡时,内核将忽略的cpu列表。在大多数场景中,这个列表与 isolated_cores相同。此选项不是必需的。

1、CPU缓存介绍

计算机系统使用不同的内存层来确保处理器在准备开始处理时尽可能接近它们的数据。在任何系统 上最快的存储是处理器上的内存寄存器,它以处理器的时钟速度运行。处理器寄存器提供的存储空 间非常有限,而且就每美元的字节数而言,存储空间相当昂贵。系统设计人员必须使用比处理器寄 存器更慢的内存来存储更大量的数据。 高速缓存比主存快。主存的访问时间为8纳秒以上,而缓存的访问时间只有几个CPU时钟周期。大 多数系统都有两到三层缓存。一级(L1)缓存非常小,只有几个KiB的量级,通常位于处理器芯片本 身。2级(L2)缓存比L1缓存大(通常有数百个KiB),而且稍微慢一些。一些系统可能会实现处理器 外部的第三级甚至第四级缓存,它比L2缓存更慢、更大(通常是几个MiB的大小),但仍然比主存 快。 例如,Intel i7 CPU,每个核可能有自己的私有L1和L2缓存,所有四个可能共享一个大的公共L3 缓存。下图是lstopo--no-legend--no-io命令的输出结果,显示了系统的硬件拓扑结构。

lscpu lshw-class memory 1、cache访问延迟 多级别的CPU缓存有助于处理器提供大小和延迟的最佳配置。L1 cache的数据访问时延为1ns。较 大的L2缓存的访问延迟通常是10纳秒,而主存的访问延迟大约是60纳秒。上述值是一个粗略的估 计,取决于核心频率和内存速度。 在多处理器体系结构中,处理器使用共享的系统总线或专用互连连接。共享总线(也称为前端总线)的使用在早期的多处理器体系结构中非常普遍。随着NUMA(Non-Uniform Memory Architecture)的出现,CPU互连连接了多个处理器和I/O控制器,例如Intel的UPI(Ultra Path interconnect)和AMD的HyperTransport(HyperTransport)。与共享系统总线相比, 处理器之间的互连允许更高的带宽和不满足的访问。

2、缓存架构

高速缓存被组织成高速缓存行(cache line)。每条缓存行都可以用于缓存内存中的特定位置。缓 存行的存储是一定范围的字节,定义为缓存行大小(cache line size),编译器使用它来优化程 序性能。大多数计算机系统都有单独的处理器指令缓存、i-cache、数据缓存和d-cache。这有时 被称为哈佛内存架构(Harvard memory architecture)。 在多处理器系统上,每个CPU都有自己独立的缓存。每个缓存都有一个相关联的缓存控制器。当处 理器引用主存时,缓存控制器首先检查请求的地址是否在缓存中,以满足处理器的请求。这被称为 缓存hit。如果请求的内存不在缓存中,那么就会发生缓存miss;请求的位置必须从主存读取,处 理器将数据存储在缓存中。这被称为缓存线fill。 在多处理器系统上,需要保持缓存一致性。也就是说,如果一个处理器更新了内存中的一行缓存, 它必须让系统上的其他处理器知道内存中的位置已经更新,以防它们也在缓存它。这被称为缓存窥 (cache snooping),在系统硬件中执行。 NUMA系统将内存分组为节点,然后将这些节点分配给单独的节点CPU插座。

缓存控制器为每一行缓存包含一个缓存条目数组。除了缓存的内存内容之外,每个缓存条目都由一 个标记和标志组成,这些标记和标志描述了该缓存条目的状态。缓存控制器使用标记来识别哪个主 内存位置已经缓存了一个条目。 处理器对高速缓存进行读写操作。在写操作的情况下,缓存内存可以配置为透写(writethrough)或回写(write-back)。如果启用了透写缓存,那么当缓存内存的某一行被更新时,对 应的位置在主存也必须更新。如果启用了回写缓存,在重新分配缓存行之前,对缓存行的写入不会 被写回主存。回写缓存比透写缓存更有效。在x86平台上,内存的每一页都包含控制位,这些控制 位可用于禁用页的缓存和禁用回写缓存。Linux内核在所有内存页上清除这两个位,因此所有内存 访问都用回写缓存进行缓存。

缓存关联性: 缓存关联是一种缓存特性,描述了在缓存中查找存储新条目的位置的约束。替换策略决定在缓存中 的何处复制主存的特定条目。缓存关联性主要有三种类型: 1.直接映射缓存:直接映射缓存是最便宜的缓存类型。直接映射缓存的每一行只能缓存主存中的特 定位置。使用直接映射缓存,搜索时间更快,因为缓存数据映射到一个特定的内存位置,但缓存命 中率较低。 2.完全关联缓存:全关联缓存是最灵活的缓存类型,因此也是最昂贵的,因为它需要最多的电路来 实现。完全关联的高速缓存线路可以高速缓存主存中的任何位置。使用全关联缓存,搜索时间非常 长,因为CPU在搜索主存之前必须遍历整个缓存来确定数据是否存在,但缓存命中率很高。 3.关联设置缓存:设置关联缓存内存在直接映射缓存和完全关联缓存之间提供了很好的折衷。这种 高速缓存通常被称为n-way关联集,其中n是2的某个幂。Set associative cache memory允许 将一个内存位置缓存在n行缓存中的任意一行中。大多数系统妥协并使用集合关联缓存存储器。

3、分析CPU缓存利用率

特定程序的运行时性能很大程度上取决于缓存使用的效率,因为缓存比系统内存快。要确定两个程 序中哪一个具有最好的运行时性能,比较它们的缓存使用效率是有帮助的。在L1缓存中读取一条指 令缓存相当于一条执行的指令,分析工具可以帮助开发人员找出每一行执行了多少条指令,这对于 分析和测试覆盖率非常有用。 1、使用valgrind分析CPU缓存 valgrind实用工具集合提供了一组用于内存调试和分析的工具。valgrind工具集中提供的工具之 一是cachegrind工具。cachegrind工具允许用户进行缓存模拟,并使用缓存未命中的次数来注 释源代码。该工具记录了以下内容: L1指令缓存read和misses。 L1数据缓存read负载、read misses、write load、write misses。 L2缓存read load和read misses,以及write load和write misses。 要使用valgrind命令运行程序,程序需要调试信息。Red Hat Enterprise Linux为与操作系统 绑定的所有依赖于体系结构的rpm提供了packagename-debuginfo包。使用带有-g选项的gcc命 令生成程序的调试信息。 使用valgrind命令和--tool=cachegrind选项来显示cache1程序的缓存性能:与性能相关的数字 是应用程序的缓存失误率。该命令还会逐行收集cachegrind中的信息,PID,其中PID是程序的进 程ID。 

在上面的输出中,首先总结了L1 I-cache,其中I表示L1 I-cache, LLi表示last level cache指令,即在层次结构中L1以上的cache。下面总结L1数据缓存,其中D表示L1 D-cache, LLd表示last level data指令。 2、使用Perf分析CPU缓存 另一个用于分析内存性能和缓存使用情况的工具是perf。perf命令利用硬件计数器来确定缓存统 计信息。在虚拟机中硬件计数器是不可用的。因此,perf不能用于跟踪虚拟机内的硬件性能计数 器,而必须直接在裸金属安装上运行。 perf list命令用来显示可用的事件列表。对于跟踪缓存miss,执行perf stat命令需要缓存丢 失硬件事件的名称。 使用perf stat命令查询使用tar命令创建归档文件时缓存失败的情况。

在上面的输出中,perf命令除了测量指令和周期外,还测量以下硬件缓存事件: L1-dcache-load-misses:表示L1 D-cache miss次数。 LLC-load-misses: 表示最后一级(last level)缓存的缺失,这是一个距离CPU核心最远的更 大的缓存。L1-dcache-load-misses和LLC-load-misses之间的区别提供了CPU缓存的有效性。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 13:18:12 HTTP/2.0 GET : https://f.mffb.com.cn/a/481822.html
  2. 运行时间 : 0.156648s [ 吞吐率:6.38req/s ] 内存消耗:5,026.89kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=20b59df7d9f46a03c648a2718848ec7e
  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.000920s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001114s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000327s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000265s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000581s ]
  6. SELECT * FROM `set` [ RunTime:0.000226s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001899s ]
  8. SELECT * FROM `article` WHERE `id` = 481822 LIMIT 1 [ RunTime:0.001660s ]
  9. UPDATE `article` SET `lasttime` = 1774588693 WHERE `id` = 481822 [ RunTime:0.010426s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.005329s ]
  11. SELECT * FROM `article` WHERE `id` < 481822 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000705s ]
  12. SELECT * FROM `article` WHERE `id` > 481822 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003109s ]
  13. SELECT * FROM `article` WHERE `id` < 481822 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000979s ]
  14. SELECT * FROM `article` WHERE `id` < 481822 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005255s ]
  15. SELECT * FROM `article` WHERE `id` < 481822 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.017888s ]
0.158322s