49分5s 这个数字很典型,先算一笔账:你的 --ctx-size 196608,如果前端每轮把完整历史重发、llama-server 又没复用 cache,就是全量重 prefill——196608 tokens ÷ ~67 t/s ≈ 49 分钟,和你实测几乎完全对上。优先查这三点:
打开 /health 看 slots_state 和 n_past:如果每个请求 n_past 都归零,就是每轮全量重算。保持同一 slot、别让前端清上下文,llama.cpp 同 slot 会自动复用前缀缓存;
把 --ctx-size 降到实际够用(比如 128K),196K 的 KV 和 prefill 代价都不小;
开了 --reasoning 且 effort 高的话,小改动也可能触发超长 CoT——关掉 reasoning 或降到 low 跑一次同样的请求,区分是 prefill 慢还是 decode/思考慢。
另外 q4_0 KV 在 196K 下不小,显存放不下会 spill 到内存,速度直接崩——/health 里看 kv_cache 是否全在 GPU。MTP 投机解码只加速 decode,对 prefill 没帮助,别指望它。