Pull Request已成功合入, 合并人@ascend-robot
(感谢 ChaseChe77 的贡献)变更摘要
本 PR 为 vLLM 推理性能定位新增基于 Hook 的 Tracing 基础能力(系列变更第一部分),提供与具体 vLLM 业务埋点解耦的 Tracing Runtime、OpenTelemetry Provider 复用与 Span 旁路处理,为后续 Jaeger 接入及 Perfetto 文件导出提供公共接口。核心变更包括:新增 HookTraceRuntime 负责请求 Trace Context 注册/释放、W3C Trace Context 关联、Request ID 与 Span Link 管理及并发请求缓存;新增 OpenTelemetryHookBackend 复用 vLLM 已创建的全局 Provider(不创建私有 Provider),由 MS_TRACE_ENABLE=1 控制启用,OTel SDK 或全局 Provider 缺失时 fail-open 降级;新增基于 PerfettoSpanProcessor 与 PerfettoSocketSender 的异步旁路导出,仅处理 ms_service_profiler.hook 前缀 Scope 的 Span,队列满或 Forwarder 不可用时丢弃数据且不影响主业务;同时新增设计文档(注册到 mkdocs.yml)与 7 条 UT。本 PR 不含 vLLM 业务 Hook/YAML 配置及 Perfetto JSON Exporter、Forwarder CLI,由后续 PR 提供。
主要改动
- 新增
HookTraceRuntime(hook_runtime.py): 提供请求 Trace Context 注册/释放、start_span/activate/deactivate/end生命周期管理及 Request ID 与 Span Link 关联,并通过MAX_INFLIGHT_REQUESTS=10000、MAX_LINKS_PER_SPAN=128限制并发请求缓存与 Link 数量;start_span在未启用时返回 no-op Span,并为 Span 写入process.pid、thread.id、request.ids属性。 - 新增
OpenTelemetryHookBackend与HookTraceSpan(otel_hook.py): 通过MS_TRACE_ENABLE=1开关控制,仅复用 vLLM 全局 Provider 且不创建/关闭 Provider,SDK 缺失或 Provider 缺失时记录 warning 并 fail-open 降级;HookTraceSpan对属性数量(MAX_ATTRIBUTE_COUNT=32)、Key/Value 长度(128/1024)设限,Span 结束按成功/失败设置StatusCode。 - 新增 Perfetto 旁路导出基础(
perfetto_socket.py):PerfettoSpanProcessor仅导出 instrumentation scope 以ms_service_profiler.hook开头的 Span,PerfettoSocketSender使用有界队列(MAX_QUEUE_SIZE=10000)异步经 Linux Abstract Unix Socket 发送,serialize_readable_span输出带PERFETTO_EVENT_MAGIC的版本中立数据包,队列满或发送失败时丢弃旁路数据、不影响推理线程及 Jaeger。 - 新增 UT 看护(
test_otel_hook.py): 7 条单测覆盖全局 Provider 复用且不创建私有 Provider、关闭态不访问 Provider、OTel 依赖缺失 fail-open、Perfetto Processor 注册失败不影响 Jaeger Provider、Span 序列化及 instrumentation scope 过滤等场景。 - 注册设计文档(
mkdocs.yml): 在导航中新增vLLM Hook Tracing 详细设计入口,指向新增的docs/design/vLLM_Hook_Tracing_Detailed_Design.md。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-Ascend/msserviceprofiler | ✅ 张伟, mei-feiyao (2/2) | ✅ 张伟 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
Mad97_, thanks for your pull request. All authors of the commits have signed the CLA. 👍


compile


ascend docs pipeline is running...


ascend docs pipeline is running...


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_msserviceprofiler_arm | ✅ | >>> |
| Build_msserviceprofiler_x86 | ✅ | >>> | |
| Docs_msserviceprofiler | ✅ | >>> | |
| 恶意代码检查 | Antipoison_msserviceprofiler | ✅ | >>> |
| 编码安全与规范检查 | codecheck_pre-commit | ✅ | >>> |
| pre-commit | ✅ | >>> | |
| 开源片段检查 | SCA_msserviceprofiler | ✅ | >>> |
| 开发者测试 | UT_msserviceprofiler | ✅ | >>> |
| 流水线 | PR-pipeline_msserviceprofiler | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


/lgtm


【review】【性能】 ms_service_profiler/tracer/hook_runtime.py 第 49 行
问题:这里先对 request_ids 执行 list(request_ids or []) 再切片,若调用方传入的是生成器或包含大量 request_id 的可迭代对象,会在推理线程中完整消费并分配内存,MAX_LINKS_PER_SPAN 无法限制转换成本,极端情况下会造成明显延迟或内存抖动。
修改建议:使用 itertools.islice 在迭代阶段限制数量,避免先展开完整可迭代对象;request_links 中同类逻辑也建议同步调整。
from itertools import islice
normalized_request_ids = [str(item) for item in islice(request_ids or [], MAX_LINKS_PER_SPAN)]


【review】【错误处理】 ms_service_profiler/tracer/otel_hook.py 第 207 行
问题:即使 provider.add_span_processor(processor) 抛出异常,当前代码仍会把 provider identity 加入 _perfetto_providers,后续同一个 Provider 即使 Perfetto Forwarder 恢复也不会再尝试注册,导致 Perfetto 输出长期缺失且只有 debug 日志可见。
修改建议:仅在 add_span_processor 成功后记录 identity;失败时保持未注册状态,必要时增加退避重试,避免每个 Span 都立即重试。
try:
provider.add_span_processor(processor)
except Exception as exc:
processor.shutdown()
logger.debug("Failed to register Perfetto span processor: %s", exc)
else:
self._perfetto_providers.add(identity)


/approve


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


PR 合入模板
1. 修改描述
修改原因:
vLLM 推理性能定位仅依赖 Metrics 无法分析单个请求的执行链路,需要补充基于 Hook 的 Tracing 基础能力。本 PR 作为系列变更的第一部分,提供与具体 vLLM 业务埋点解耦的 Tracing Runtime、OpenTelemetry Provider 复用和 Span 旁路处理基础,为后续 Jaeger 接入及 Perfetto 文件导出提供公共接口。
修改内容:
HookTraceRuntime,负责:OpenTelemetryHookBackend:MS_TRACE_ENABLE=1控制基础能力是否启用。ms_service_profiler.hook开头的 Span。mkdocs.yml。tracing-jaegerPR 提供。tracingPR 提供。2. 功能验证
test_otel_hook.py:7 passed。MS_TRACE_ENABLE未开启时不访问 Provider、不创建 Span。ms_service_profiler.hook.*Scope 的 Span。check_mkdocs.sh检查通过。3. 代码检视
要求:
4. 安全自检
典型安全编码问题
5. 变更知会
资料修改:
docs/design/vLLM_Hook_Tracing_Detailed_Design.md。mkdocs.yml,增加 vLLM Hook Tracing 详细设计入口。变更通知(消息知会 + 邮件知会):
6. 冒烟修改
PR 来源: