Holoscan 传感器桥数据延迟
HSB 设备在接收到每个数据帧后发送一个元数据块。该元数据包括
frame_number
此数据通道上观察到的帧结束中断次数计数timestamp_s
和timestamp_ns
是当前帧的第一个数据到达 FPGA 时的 PTP 时间戳。metadata_s
和metadata_ns
是元数据包发送出去时记录的 PTP 时间戳,它紧随接收到的数据帧中的最后一个字节之后。
当主机 PTP 支持配置正确时,此时间与主机时间同步到微秒级精度。HSDK 运算符可以使用 Holoscan SDK 提供的 API 访问此元数据。注释
时间戳与从
clock_gettime(CLOCK_REALTIME, ×pec)
API 读取的时钟值相当。接收器运算符根据该实现的独特特性生成不同的元数据集。例如,特定于 RoceReceiverOp 的数据可能不会出现在 LinuxReceiverOperator 提供的元数据中。应用程序可以选择使用
metadata.get("parameter_name", 0)
访问元数据,以便在框架未设置特定命名的元数据时提供有用的默认值。请务必在初始化时调用应用程序
is_metadata_enabled(true)
方法;否则,每个运算符都只会看到一个空的元数据结构。
在 examples/imx274_latency.py
中,您可以看到一个记录额外时间戳并使用这些时间戳发布延迟报告的管道
operator_s
和operator_ns
由网络接收器运算符之后的运算符记录。这是管道运算符实际可以访问接收到的传感器数据的时间。completed_s
和completed_ns
由示例管道中的最后一个运算符在可视化完成后记录。
接收器运算符还记录 received_s
和 received_ns
,这些时间是在 CPU 因帧结束中断而被唤醒时记录的。这发生在独立于管道的后台线程中。下面列出的时间是通过将 (name)_s
和 (name)_ns
组合成一个浮点秒值来计算的。显示的时间值都是典型的,但会有所不同。
frame_end - frame_start
是传感器将整个数据帧传输到 FPGA 所需的时间。对于 4k RAW10 模式下的 IMX274,这通常为 15.8 毫秒。received - frame_end
显示由于帧结束指示,CPU 在后台线程中唤醒所需的时间。在具有加速网络的 IGX 上,这通常为 120 微秒。operator - received
是下一个管道运算符使用当前接收到的数据执行所需的时间。在 IGX 上,如果管道空闲,则此时间通常约为 1 毫秒。completed - operator
是管道其余部分完成所需的时间。对于 IGX,执行简单的示例 ISP 和可视化工具,此时间通常约为 2.4 毫秒。
因此,示例应用程序显示,对于每个视频帧,几乎有 16 毫秒的数据采集时间,然后是几乎 4 毫秒的处理时间,总延迟不到 20 毫秒。在此应用程序中,帧以 60FPS 的速度传递,这意味着每个新帧都以 16 毫秒的间隔开始;当当前帧处理正在进行时,下一个帧的接收在后台继续进行。