乐于分享
好东西不私藏

vllm v1 源码精读(三):KV Cache 管理、Chunked Prefill 与异步架构

vllm v1 源码精读(三):KV Cache 管理、Chunked Prefill 与异步架构

本文基于 vllm ba22152(2026-07-06),源码链接均指向该 commit 的固定行号。代码浏览入口:github.com/vllm-project/vllm/tree/ba22152

系列文章

  • (一)为什么要重写,以及 LLM() 这行代码背后发生了什么
  • (二)generate() 计算流——model.forward() 在哪里被调用?
  • (三)KV Cache 管理、Chunked Prefill 与异步架构
    (本文)
  • (四)插件系统——用 Python entry_points 实现零侵入扩展 (todo)
  • (五)从 generate() 到 Speculative Decoding 的完整计算流 (todo)

1. 前言

上一篇把 EngineCore.step() 的调用链走了一遍:调度 → GPU forward → 采样 → 状态更新。"调度"这一步内部发生了什么,上一篇故意跳过了——这篇专门把它拆开。

这篇文章围绕三块:KV Cache 怎么管(PagedAttention 的工程实现)、Chunked Prefill 怎么工作(prefill 和 decode 如何混排)、HTTP serving 的异步架构(为什么要独立进程 + ZMQ)。

先给整体,再往细节走。


2. 整体模块关系与调用时序

2.1 三个模块的分工

KV Cache 相关的核心逻辑分布在三个模块:

  • KVCacheManager
    :纯 CPU 侧的逻辑块管理器,维护哪些物理块空闲、哪些被占用、前缀缓存里有什么。不接触 GPU,只管块的分配、释放、查找
  • Scheduler
    :持有 KVCacheManager,每步决定哪些请求进 running 队列、分配多少 KV 块
  • GPUModelRunner
    :执行侧,把调度器输出的逻辑块编号转换成 GPU 物理槽位,喂给 FlashAttention

三者的职责边界很清晰:KVCacheManager 管逻辑,GPUModelRunner 管物理,Scheduler 在中间做决策。连接逻辑层和物理层的桥梁是 block_table——一个 CPU numpy 数组,调度后异步 H2D 拷贝到 GPU。

2.2 一个请求从进队到完成的完整时序

先看全貌,后面各节再拆细节。下图展示了一个请求从入队到 KV 块释放的完整生命周期:

KV Cache 分配与释放完整时序

几个关键节点:

① 入队时:请求进 waiting 队列,此时没有任何 KV 块。

② 调度时Scheduler.schedule() 先查前缀缓存——如果 system prompt 之前算过,对应的 KV 块直接复用,num_computed_tokens 跳过这段,只 prefill 新增部分。没有缓存就从 FreeKVCacheBlockQueue 分配新块。分配失败(显存不够)则抢占低优先级请求。

③ 执行时GPUModelRunner 把 block_table 翻译成 slot_mapping,attention kernel 按 slot_mapping 把新计算的 K/V 写入对应物理槽,同时从 block_table 读历史 KV 做 attention。

④ 完成时:请求结束,KV 块归还 FreeKVCacheBlockQueue。有 hash 的块(内容完整)进队尾(LRU 保留,供后续前缀缓存复用);无 hash 的块进队头(优先被再分配)。

有了这个时序图,后面各节讲的数据结构和逻辑就都有了落脚点。


3. KV Cache 为什么要分块管理

在看数据结构之前,先把 PagedAttention 要解决的问题说清楚。

LLM 推理的显存大头是 KV Cache,不是模型权重。以 LLaMA-3-8B(GQA,8 个 KV head,head_dim=128,fp16)为例:

  • 每层每个 token 的 KV Cache:
  • 32 层合计: bytes ≈ 128 KB/token
  • 一个 4K 上下文的请求:

batch 里有 10 个这样的请求,仅 KV Cache 就需要 5 GB。更头疼的是,不同请求的序列长度差异极大。如果每个请求都预分配"最长可能序列"的显存,内存碎片极其严重——可能 80% 的显存空闲着,却没法给其他请求用。

PagedAttention 的思路和 OS 虚拟内存分页几乎一模一样:把 KV Cache 切成固定大小的"页"(块),物理上不连续,用地址表(block table)维护逻辑序列到物理块的映射。


4. KV Cache 数据结构

vllm 的 KV Cache 数据结构分三层。下图展示了三层之间的关系:

KV Cache 块管理:PagedAttention 核心数据结构
  • 左侧(逻辑层)
    :请求视角,序列被切成逻辑块,block_table 记录每个逻辑块对应哪个物理 block_id,slot_mapping 进一步细化到每个 token 的物理槽
  • 右侧(BlockPool)
    :管理器视角,FreeKVCacheBlockQueue 维护空闲块,Prefix Cache 缓存已计算过的块
  • 底部(GPU 物理层)
    :实际的 KV Cache tensor

4.1 KVCacheBlock:最小单元

# KVCacheBlock  —  vllm/v1/core/kv_cache_utils.pyclassKVCacheBlock:    block_id: int# 物理块编号(0..num_blocks-1)    ref_cnt: int# 引用计数    _block_hash: BlockHashType | None# 内容 hash(None = 还没填满)    prev_free_block: KVCacheBlock | None# 双链表指针    next_free_block: KVCacheBlock | None

每个 KVCacheBlock 对应 GPU 上 KV Cache tensor 的一个切片:

# shape: [num_blocks, 2, block_size, num_kv_heads, head_dim]kv_cache[block_id, 0]  # K cachekv_cache[block_id, 1]  # V cache

4.2 FreeKVCacheBlockQueue:LRU 双链表

FreeKVCacheBlockQueue 维护所有 ref_cnt == 0 的块:

head → [无hash块] → [无hash块] → [有hash块] → [有hash块] → tail       ↑ 优先被分配                              ↑ 尽量保留(前缀缓存)

四种操作全是 O(1):

操作
场景
位置
popleft()
分配新块
从 head 取
appendleft()
释放无 hash 块
到 head(无缓存价值,优先再用)
append()
释放有 hash 块
到 tail(LRU 策略,尽量晚被驱逐)
remove(block)
前缀缓存命中
从中间摘出

为什么用双链表而不是 deque 前缀缓存命中时,需要把命中的块从 free list 中间移除。deque 中间移除是 O(n),双链表保存了前后指针,O(1) 就能摘出来。做过 LeetCode 146(LRU Cache)对这个模式会很熟悉。

4.3 块的生命周期

对应时序图里的各个阶段:

分配(allocate_slots):  popleft() 取块 → 如果取到有 hash 的块,先从 prefix_cache_map 移除 → ref_cnt = 1前缀缓存命中(get_computed_blocks):  if ref_cnt == 0: free_queue.remove(block)   # 从中间摘出  ref_cnt += 1释放(free_blocks):  ref_cnt -= 1  if ref_cnt == 0:      no hash  → appendleft()   # 头部,优先再用      has hash → append()       # 尾部,LRU 保留哈希注册(cache_blocks,在 update_from_output() 之后):  block._block_hash = compute_hash(token_ids, parent_hash)  prefix_cache_map[block_hash] = block

5. Block Table 和 slot_mapping:逻辑块到 GPU 物理槽

KVCacheManager 管的是"哪个逻辑块用哪个物理 block_id",但 attention kernel 需要的粒度更细——每个 token 具体写入哪个物理槽。这步转换靠 block_table 和 slot_mapping 完成。

slot_mapping 计算与 FlashAttention KV 读写

Block Table 是一个 CPU 侧 pinned numpy 数组,每步调度后异步 H2D:

block_table: np.ndarray   # shape [max_num_reqs, max_num_blocks_per_req], dtype int32# block_table[req_i][j] = 请求 i 第 j 个逻辑块对应的物理 block_id

slot_mapping 进一步细化到每个 token 的物理槽,公式如下:

 是 block_sizepos 是 token 在请求中的绝对位置,由 Triton kernel 并行计算,输出 [N_tokens] 的 1D tensor。

FlashAttention 2/3 原生支持 paged KV:

# 写:scatter 新 K/V 到物理槽ops.reshape_and_cache_flash(key, value, key_cache, value_cache, slot_mapping, ...)# 读:直接用 block_table 做 paged attention,不需要先 gather 成连续 bufferflash_attn_varlen_func(q=query, k=key_cache, v=value_cache,                       block_table=block_table_gpu, ...)

6. Prefix Caching:system prompt 不用重复计算

有一个很常见的场景:所有请求都带同一个长 system prompt,每次都重新 prefill 这几百 token 既浪费又慢。

Prefix caching 的核心思路:只要两个请求的 token 前缀完全相同,对应的 KV 块直接复用

判断"前缀相同"靠滚动 hash——第 k 块的 hash 由该块的 token ids 和第 k-1 块的 hash 共同决定,所以只要前缀一致,hash 就一致,跟物理位置无关:

# 第 k 块的 hash = f(token_ids_k, parent_hash_{k-1})

查询时要求连续命中,一旦 miss 就停:

# KVCacheManager.get_computed_blocks()defget_computed_blocks(request):    computed = []for block_hash in request.block_hashes:        block = prefix_cache_map.get(block_hash)if block isNone:break# 前缀必须连续        computed.append(block)return computed

命中后,request.num_computed_tokens 直接跳到命中块数 × block_size,跳过这些 token 的 prefill。

被抢占的请求不一定从头来:被抢占后 KV 块释放,但有 hash 的块会进 LRU 尾部而不是立即消失。如果这期间显存够用,下次调度时前缀缓存可能还在,只需重新 prefill 新增部分。


7. Chunked Prefill:prefill 和 decode 同框

7.1 v0 的问题

v0 里 prefill 和 decode 是两个独立阶段,交替执行。一个长 prompt 独占 GPU 几秒,所有 decode 请求全部卡住,TTFT 被严重拖长。

7.2 v1 的解法:num_computed_tokens

v1 删掉了 prefill/decode 的阶段概念,每个请求只有一个字段 num_computed_tokens(已经过 forward pass 的 token 数)。调度器每步用 token_budget 控制总处理量:

# Scheduler.schedule()  —  vllm/v1/core/sched/scheduler.py:396(精简)for request inself.waiting:    remaining = len(request.prompt_token_ids) - request.num_computed_tokens    num_new = min(remaining, remaining_token_budget)   # 自动 chunk    remaining_token_budget -= num_new

一个 1000-token 的 prompt 被自动切成 4 步,每步和 decode 请求混在同一个 batch 里执行:

Chunked Prefill:prefill 和 decode 共享同一个 batch

Req B 的 decode 全程没有被阻塞。

token_budget 怎么设?max_num_batched_tokens 控制每步最多处理多少 token(prefill + decode 合计)。设太小 TTFT 变慢,设太大 latency 抖动。官方建议从 2048~8192 开始调。

7.3 抢占:KV Cache 不够怎么办

KV Cache 不够时,调度器抢占优先级最低的请求:

def_preempt(self, request):self.kv_cache_manager.free(request)   # 释放 KV 块    request.num_computed_tokens = 0# 重置进度self.running.remove(request)self.waiting.add(request)             # 回到等待队列# output_token_ids 保留,下次重新 prefill 时带上

调度器有 watermark 机制:只有 free_blocks > watermark 时才允许新请求准入,提前留缓冲。


8. 异步架构:AsyncLLM + ZMQ

HTTP serving 用 AsyncLLMvllm/v1/engine/async_llm.py),离线推理用 LLM。两者最大的区别是通信架构。

8.1 为什么要独立进程

HTTP server 是 asyncio 驱动(IO 密集型),EngineCore 是调度 + GPU 执行(CPU/GPU 密集型)。同一进程里两边频繁争抢 Python GIL,互相拖慢。

解法是把 EngineCore 放到独立进程,用 ZMQ(ZeroMQ)+ msgpack 通信:

AsyncLLM + ZMQ 前后端通信时序

沿着时序图从上往下走:

① HTTP 请求进来:FastAPI handler 调用 AsyncLLM.generate(),把请求序列化成 EngineCoreRequest(msgpack,array_like 格式),通过 ZMQ PUSH socket 发给 EngineCore 进程。

② WAKEUP 唤醒:如果 EngineCore 在等待中,前端同时发一条 \x05 WAKEUP 消息唤醒它,避免 EngineCore 因为没有新消息而一直轮询空转。

③ EngineCore 步进:EngineCore 收到请求后,调用 step() 做调度 + GPU forward + 采样,每步完成后把所有请求的新 token 打包成 EngineCoreOutputs,通过 ZMQ PUB socket 广播出去。

④ 前端 SUB 接收:前端进程的 subscriber socket 收到 EngineCoreOutputs,立即拆包,找到对应 request_id 的新 token,调 IncrementalDetokenizer 解码成文字。

⑤ SSE 推流:解码结果通过 async for output yield 给 HTTP handler,HTTP handler 用 SSE 把每次 yield 的内容立刻推给客户端。这就是 stream=True 时逐 token 输出的底层实现,全链路事件驱动,没有轮询。

8.2 ZMQ 消息协议

类型字节
含义
方向
\x00
 ADD
新请求
前端 → EngineCore
\x01
 ABORT
中止请求
前端 → EngineCore
\x05
 WAKEUP
唤醒 EngineCore
前端 → EngineCore
(PUB)
EngineCoreOutputs
EngineCore → 前端

EngineCore 用 PUB/SUB 模式:每完成一个 step 就 publish 新 token,前端 subscriber 收到后立即 detokenize 并推给 HTTP client。

8.3 流式输出

asyncdefgenerate(self, prompt, sampling_params, request_id):awaitself.engine_core.add_request(EngineCoreRequest(...))asyncfor output inself._result_handler.get_output(request_id):yield output   # 每生成一个 token 就推一次

这是 OpenAI API stream=True 逐 token 输出的底层实现。全链路事件驱动,没有轮询。


9. 小结

KV Cache 管理KVCacheManager 维护逻辑块(CPU 侧),GPUModelRunner 把逻辑块翻译成 GPU 物理槽(slot_mapping)。FreeKVCacheBlockQueue 是 LRU 双链表,O(1) 支持分配/释放/前缀缓存命中。

Chunked Prefill:v1 用 num_computed_tokens 替代 prefill/decode 阶段标记,prefill 和 decode 在同一个 batch 混排,解决了长 prompt 饿死 decode 请求的问题。

异步架构:EngineCore 独立进程 + ZMQ PUB/SUB,绕开 Python GIL,HTTP server 和 GPU 执行真正并行。

遇到问题去哪找

问题场景
代码位置
显存不够 / KV Cache 分配失败
EngineCore._initialize_kv_caches()
OOM during forward
GPUModelRunner.execute_model()
,检查 max_num_batched_tokens
Attention 报错
vllm/v1/attention/backends/flash_attn.py
HTTP server 延迟高
AsyncLLM
 的 ZMQ 通信,检查 EngineCore 进程是否正常
Chunked prefill 相关
vllm/v1/core/sched/scheduler.py
,检查 max_num_batched_tokens
前缀缓存没有命中
KVCacheManager.get_computed_blocks()
,检查 block_hashes 计算

另外,我们团队最近出版了《动手学 AutoML:从 NAS 到大语言模型优化实战》,感兴趣的话可以看看。

动手学AutoML书籍封面
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-15 16:04:19 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/861217.html
  2. 运行时间 : 0.127994s [ 吞吐率:7.81req/s ] 内存消耗:4,998.85kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=5cd528d701704dadfbf579d2904b0fe3
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000586s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000870s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000328s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000290s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000516s ]
  6. SELECT * FROM `set` [ RunTime:0.000210s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000569s ]
  8. SELECT * FROM `article` WHERE `id` = 861217 LIMIT 1 [ RunTime:0.000493s ]
  9. UPDATE `article` SET `lasttime` = 1784102659 WHERE `id` = 861217 [ RunTime:0.000864s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000302s ]
  11. SELECT * FROM `article` WHERE `id` < 861217 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000647s ]
  12. SELECT * FROM `article` WHERE `id` > 861217 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000769s ]
  13. SELECT * FROM `article` WHERE `id` < 861217 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.018537s ]
  14. SELECT * FROM `article` WHERE `id` < 861217 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.017062s ]
  15. SELECT * FROM `article` WHERE `id` < 861217 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004170s ]
0.129703s