llama.cpp b12188调整server调度:先访问非子槽位,让被唤醒子槽位同批处理
该版本合并PR #30779,将非子槽位置于活动子槽位之前访问,修复子任务落在更低槽位id时多等一个批次的问题;同时为systemone测试引入三个测试标签替代自由格式调试消息匹配。
llama.cpp发布b12188版本,主要变更为server端槽位调度顺序调整(PR #30779):非子槽位现在先于活动子槽位被访问。
据提交说明,此前槽位按id顺序访问,父槽位在完成共享提示前缀后唤醒等待的子槽位;当子任务落在比父槽位更低的槽位id上时,子槽位会先被访问,而那时父槽位尚未唤醒它,导致它多等一个批次才处理自己的后缀。
调度顺序改动针对的场景
提交说明将问题限定在带共享提示前缀的父子槽位场景:子槽位需要等父槽位完成共享前缀后被唤醒,而访问顺序由槽位id决定。改动后,先访问非子槽位、再访问活动子槽位,提交说明称这样被父槽位唤醒的每个子槽位都能加入同一批次。
- 问题触发条件:子任务被分配到比父槽位更低的槽位id。
- 原有后果:子槽位在一次访问中先于父槽位唤醒,需额外等待一个批次处理自身后缀。
- 改动效果(据提交说明):被唤醒的子槽位在同一批次内开始处理。
测试事件改用标签匹配
同一PR还调整了systemone测试的事件检查方式。提交说明称,这些测试原先匹配自由格式的调试消息,其中包含提示缓存的格式化f_keep值。server现在在特定事件发出三个测试标签。
- __TEST_TAG_WAIT_PARENT_SLOT__:子槽位等待父槽位时发出。
- __TEST_TAG_PROMPT_CACHE_RESTORE__:每次提示缓存恢复时发出。
- __TEST_TAG_PROMPT_CACHE_FULL_RESTORE__:整个缓存提示是新提示的前缀时发出,比较依据为token数。
发布包与平台
b12188发布页列出了macOS Apple Silicon(arm64)、macOS Intel(x64)、iOS XCFramework,以及Linux、Android、Windows多平台二进制包,覆盖CPU、CUDA 12.8/13.5、Vulkan、ROCm 10.0、SYCL FP32/FP16、OpenVINO 2026.4.1、Snapdragon(CPU/Adreno GPU/Hexagon NPU)等后端,另提供UI包。
- macOS Apple Silicon的KleidiAI启用版本标注为DISABLED。
- openEuler相关构建项同样标注为DISABLED。
- 提交说明未给出该调度改动带来的性能数据或适用范围之外的结论。