CPU 分析未涵盖 Dataflow 上 Apache Beam 管道的所有 vCPU 时间

CPU profiling not covering all the vCPU time of Apache Beam pipeline on Dataflow

我们的管道是基于 Apache Beam Go SDK 开发的。我正在尝试通过设置标志 --cpu_profiling=gs://gs_location 来分析所有工人的 CPU:https://github.com/apache/beam/blob/master/sdks/go/pkg/beam/runners/dataflow/dataflow.go

完成工作花费了 16.636 vCPU 小时和最多 104 个工人:

结果在指定的GCS位置,记录了一堆名为“profprocess_bundle-*”的文件:

然后我下载了这些文件,将它们全部解压缩,并用 pprof 可视化结果 (https://github.com/google/pprof):

所以这是我的问题:

  1. 分析结果中的总时间是如何收集的?采样时间(1.06 小时)比 Dataflow 报告的 vCPU 时间(16.626 小时)短得多。

  2. 文件名“profprocess_bundle-*”中的数字是多少?我在想它可能对应于一个工人的指数。但是数的最大值大于worker数,数不连续。最大数量为122,但只有66个文件。

当您设置 --cpu_profiling=true 时,分析会在 SDK worker 开始处理一个包时开始(一批输入元素将通过您的管道 DAG 的子图,有时也称为工作项)并结束当处理完成时。一个作业可以包含多个包。这就是为什么 vCPU 总时间会大于样本周期的原因。

如前所述,profprocess_bundle-* 中的数字表示正在分析的包 ID。