已合并
【msserviceprofiler】【需求】【Tracing 1/3】支持通过Hook机制实现自定义tracing埋点 #446
【msserviceprofiler】【需求】【Tracing 1/3】支持通过Hook机制实现自定义tracing埋点 #446
已合并
ChaseChe77创建于 19 天前
ChaseChe77
ChaseChe77成员
19 天前

PR 合入模板

1. 修改描述

  • 修改原因:
    vLLM 推理性能定位仅依赖 Metrics 无法分析单个请求的执行链路,需要补充基于 Hook 的 Tracing 基础能力。本 PR 作为系列变更的第一部分,提供与具体 vLLM 业务埋点解耦的 Tracing Runtime、OpenTelemetry Provider 复用和 Span 旁路处理基础,为后续 Jaeger 接入及 Perfetto 文件导出提供公共接口。

  • 修改内容:

    1. 新增 HookTraceRuntime,负责:
      • 请求 Trace Context 注册和释放。
      • W3C Trace Context 关联。
      • Request ID 与 Span Link 管理。
      • Span 创建、激活、结束和属性设置。
      • 并发请求上下文缓存及容量限制。
    2. 新增 OpenTelemetryHookBackend
      • 复用 vLLM 已创建的全局 OpenTelemetry Provider。
      • 不创建私有 Provider,避免与 vLLM 原生 Tracing 重复初始化。
      • 通过 MS_TRACE_ENABLE=1 控制基础能力是否启用。
      • OTel SDK或全局 Provider 不可用时采用 fail-open 降级。
    3. 新增 Hook Span 的 Perfetto Processor 和异步 Socket Sender 基础:
      • 仅处理 instrumentation scope 以 ms_service_profiler.hook 开头的 Span。
      • 使用有界队列异步发送,避免阻塞推理线程。
      • 对属性数量、属性长度、Link 数量及队列容量设置上限。
      • Forwarder 不可用或队列满时丢弃旁路数据,不影响主业务及 Jaeger。
    4. 新增 vLLM Hook Tracing 详细设计文档,并注册到 mkdocs.yml
    5. 新增 7 条 UT,看护全局 Provider 复用、关闭态、依赖缺失、Processor 注册失败、Span 序列化和 Scope 过滤等场景。
    6. 本 PR 不包含 vLLM 业务 Hook/YAML 配置,相关内容由后续 tracing-jaeger PR 提供。
    7. 本 PR 不包含 Perfetto JSON Exporter、Forwarder CLI,相关内容由后续 tracing PR 提供。

2. 功能验证

    • test_otel_hook.py7 passed
    • 验证复用 vLLM 全局 OpenTelemetry Provider,不创建私有 Provider。
    • 验证 MS_TRACE_ENABLE 未开启时不访问 Provider、不创建 Span。
    • 验证 OTel SDK 缺失、Provider 缺失和 Perfetto Processor 注册失败时 fail-open。
    • 验证仅导出 ms_service_profiler.hook.* Scope 的 Span。
    • 本 PR 涉及文件 pre-commit 全部通过。
    • check_mkdocs.sh 检查通过。
    • PR 变更量为 963 行,低于 1000 行限制。
  • image.png

image.png


3. 代码检视

  • 要求:

    • 合入代码大于 200 行,需三人以上会议检视。
    • 检视密度≥2个/100行。
    • 检视缺陷密度达不到要求的需给出说明。
    • 大于 1000 行代码原则上不允许合入,需进行备案。
    • 全局 OTel Provider 复用。
    • 禁止创建私有 Provider。
    • Tracing 关闭态不访问 Provider。
    • OTel 依赖缺失时 fail-open。
    • Perfetto Processor 注册失败不影响 Jaeger Provider。
    • Hook Span 标准化序列化。
    • instrumentation scope 过滤。

4. 安全自检

典型安全编码问题

    • OTel SDK未安装。
    • vLLM 未创建全局 Provider。
    • Trace Headers 无效。
    • Span 创建、激活、结束失败。
    • Perfetto Forwarder 不可用。
    • Processor 注册或关闭失败。
    • 异步发送队列已满。
    • Socket 连接和发送失败。

5. 变更知会

  • 资料修改:

    • 新增 docs/design/vLLM_Hook_Tracing_Detailed_Design.md
    • 更新 mkdocs.yml,增加 vLLM Hook Tracing 详细设计入口。
  • 变更通知(消息知会 + 邮件知会):


6. 冒烟修改

  • PR 来源:


likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 ChaseChe77 的贡献)
ChaseChe77ChaseChe77成员
19 天前 关联了issue:[Feature]: 【推理】【DFX专项】【易用性】支持通过Hook机制实现自定义tracing埋点
atomgit-bot
atomgit-bot成员
19 天前 评论:

变更摘要

本 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 降级;新增基于 PerfettoSpanProcessorPerfettoSocketSender 的异步旁路导出,仅处理 ms_service_profiler.hook 前缀 Scope 的 Span,队列满或 Forwarder 不可用时丢弃数据且不影响主业务;同时新增设计文档(注册到 mkdocs.yml)与 7 条 UT。本 PR 不含 vLLM 业务 Hook/YAML 配置及 Perfetto JSON Exporter、Forwarder CLI,由后续 PR 提供。

主要改动

  • 新增 HookTraceRuntimehook_runtime.py: 提供请求 Trace Context 注册/释放、start_span/activate/deactivate/end 生命周期管理及 Request ID 与 Span Link 关联,并通过 MAX_INFLIGHT_REQUESTS=10000MAX_LINKS_PER_SPAN=128 限制并发请求缓存与 Link 数量;start_span 在未启用时返回 no-op Span,并为 Span 写入 process.pidthread.idrequest.ids 属性。
  • 新增 OpenTelemetryHookBackendHookTraceSpanotel_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
likedislike
不准确?
atomgit-bot
atomgit-bot成员
19 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
xzm123成员
19 天前 评论:

🤖 AIDD 文档质量检测报告

PR #446 的文档检测已全部完成。

📊 任务统计:共 1 个任务(✅ 1 完成 / ❌ 0 失败 / ⊘ 0 取消)
🐛 问题统计:共 1 个问题(致命 0 / 严重 0 / 一般 1 / 提示 0)

🔗 查看完整报告点击进入平台报告
🔗 查看 PR 检测问题点击查看问题列表

评论由 AIDD 自动生成,多次推送会增量更新本评论。

likedislike
ascend-robotascend-robot成员
19 天前 添加了label:ascend-cla/yes
ascend-robot
ascend-robot成员
19 天前 评论:

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 /approve or /lgtm
  • Commenting /approve implies 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. 👍

likedislike
ChaseChe77
ChaseChe77成员
19 天前 评论:

compile

likedislike
AtlasAccountAtlasAccount成员
19 天前 添加了label:ci-pipeline-running
ascend-robot
ascend-robot成员
19 天前 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
19 天前 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
19 天前 评论:

✅ 文档门禁通过!

检查项 检查结果 详情
markdownlint ✅ 已通过 查看详情
link-validity-check ✅ 已通过 查看详情
resource-existence-check ✅ 已通过 查看详情
tag-closed-check ✅ 已通过 查看详情
likedislike
ascend-robotascend-robot成员
19 天前 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
19 天前 添加了label:docs-ci-pipeline-success
ascend-robot
ascend-robot成员
19 天前 评论:

ascend docs pipeline is running...

likedislike
ascend-robotascend-robot成员
19 天前 删除了label:docs-ci-pipeline-success
ascend-robotascend-robot成员
19 天前 添加了label:docs-ci-pipeline-running
ascend-robot
ascend-robot成员
19 天前 评论:

✅ 文档门禁通过!

检查项 检查结果 详情
markdownlint ✅ 已通过 查看详情
link-validity-check ✅ 已通过 查看详情
resource-existence-check ✅ 已通过 查看详情
tag-closed-check ✅ 已通过 查看详情
likedislike
ascend-robotascend-robot成员
19 天前 删除了label:docs-ci-pipeline-running
ascend-robotascend-robot成员
19 天前 添加了label:docs-ci-pipeline-success
AtlasAccountAtlasAccount成员
19 天前 删除了label:ci-pipeline-running
AtlasAccountAtlasAccount成员
19 天前 添加了label:ci-pipeline-passed
AtlasAccount
AtlasAccount成员
19 天前 评论:
流水线 PR-pipeline_msserviceprofiler#1242 [ commitID:55c8c54f ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_msserviceprofiler_arm >>>
Build_msserviceprofiler_x86 >>>
Docs_msserviceprofiler >>>
恶意代码检查 Antipoison_msserviceprofiler >>>
编码安全与规范检查 codecheck_pre-commit >>>
pre-commit >>>
开源片段检查 SCA_msserviceprofiler >>>
开发者测试 UT_msserviceprofiler >>>
流水线 PR-pipeline_msserviceprofiler >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
mei-feiyao
mei-feiyao成员
19 天前 评论:

/lgtm

likedislike
jia_ya_nan成员19 天前进行代码检视1
ms_service_profiler/tracer/hook_runtime.py
@@ -0,0 +46,4 @@
46+ ) -> HookTraceSpan:
47+ if not self.enabled:
48+ return new_noop_hook_span()
49+ normalized_request_ids = [str(item) for item in list(request_ids or [])[:MAX_LINKS_PER_SPAN]]
jia_ya_nan19 天前评论:

【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)]
likedislike
jia_ya_nan成员19 天前进行代码检视1
ms_service_profiler/tracer/otel_hook.py
@@ -0,0 +204,4 @@
204+ except Exception as shutdown_exc:
205+ logger.debug("Failed to shut down Perfetto span processor: %s", shutdown_exc)
206+ logger.debug("Failed to register Perfetto span processor: %s", exc)
207+ self._perfetto_providers.add(identity)
jia_ya_nan19 天前评论:

【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)
likedislike
ChaseChe77ChaseChe77成员
19 天前 解决了最后一个问题
ChaseChe77ChaseChe77成员
19 天前 修改标题为 “【msserviceprofiler】【需求】【Tracing 1/3】支持通过Hook机制实现自定义tracing埋点”,原标题为“【msserviceprofiler】【需求】【Tracing 1/3】新增 OpenTelemetry Hook Tracing 基础能力”
MrtutuMrtutu成员
18 天前 关联了里程碑:MindStudio 26.2.0
Mrtutu
Mrtutu成员
18 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
18 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
18 天前 合入了pull request
ascend-robot
ascend-robot成员
18 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
18 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike