DOCA 文档 v2.10.0

DOCA Firefly 服务指南

本指南提供关于如何在 NVIDIA® BlueField® DPU 之上使用 DOCA Firefly 服务容器的说明。

DOCA Firefly 服务为 BlueField DPU 提供基于精确时间协议 (PTP) 的时间同步服务。

PTP 是一种用于同步网络中时钟的协议。当与硬件支持结合使用时,PTP 能够实现亚微秒级的精度,这远优于通常通过网络时间协议 (NTP) 获得的效果。PTP 支持分为内核空间和用户空间。ptp4l 程序实现了 PTP 边界时钟和普通时钟。借助硬件时间戳,它用于将 PTP 硬件时钟同步到主时钟。

arch-diagram-version-1-modificationdate-1736363593823-api-v2.png

Firefly 提供的某些功能需要特定的 BlueField DPU 硬件功能

  • PTP – 所有 BlueField DPU 均支持

  • PPS – 需要具有 PPS 功能的 BlueField DPU

  • SyncE - 需要融合卡 BlueField DPU

由于缺少硬件支持而导致 PPS 运行失败将在服务输出中注明。但是,该服务将继续运行它可以在提供的硬件上提供的计时服务。

固件版本

固件版本必须为 24.34.1002 或更高版本。

BlueField BSP 版本

支持的 BlueField 镜像版本为 3.9.0 及更高版本。

嵌入式模式

在 DPU 上配置嵌入式模式的固件设置

  1. 将 DPU 设置为嵌入式模式(默认模式)

    复制
    已复制!
                

    sudo mlxconfig -y -d 03:00.0 s INTERNAL_CPU_MODEL=1

  2. 启用实时时钟 (RTC)

    复制
    已复制!
                

    sudo mlxconfig -d 03:00.0 set REAL_TIME_CLOCK_ENABLE=1

  3. 平稳关机 并重启 DPU 以应用配置。

  4. 您可以使用以下命令检查 DPU 模式

    复制
    已复制!
                

    sudo mlxconfig -d 03:00.0 q | grep INTERNAL_CPU_MODEL # Example output         INTERNAL_CPU_MODEL                  EMBEDDED_CPU(1)

确保 OVS 硬件卸载

DOCA Firefly 要求在 Open vSwitch (OVS) 中激活硬件卸载。默认情况下,这已作为安装在 DPU 上的 BFB 镜像的一部分启用。

要验证 OVS 中的硬件卸载配置

复制
已复制!
            

sudo ovs-vsctl get Open_vSwitch . other_config | grep hw-offload # Example output         {hw-offload="true"}

如果未激活

  1. 通过运行以下命令激活硬件卸载

    复制
    已复制!
                

    sudo ovs-vsctl set Open_vSwitch . other_config:hw-offload=true;

  2. 重启 OVS 服务

    复制
    已复制!
                

    sudo /etc/init.d/openvswitch-switch restart

  3. 平稳关机 并重启 DPU 以应用配置。

辅助脚本

Firefly 的部署包含一个脚本,以帮助完成嵌入式模式下网络接口所需的配置步骤

  • scripts/doca_firefly/<firefly-version>/prepare_for_embedded_mode.sh

  • scripts/doca_firefly/<firefly-version>/set_new_sf.sh

最新的 DOCA Firefly 版本是 1.5.0

这两个脚本都作为 DOCA 容器资源的一部分包含在内,可以根据 NVIDIA DOCA 容器部署指南 中的说明下载。有关 DOCA 容器资源结构的更多信息,请参阅部署指南中“NGC 资源结构”部分。

注意

由于 NGC 资源的技术限制,这两个脚本均在未执行 (+x) 权限的情况下提供。这可以通过运行以下命令来解决

复制
已复制!
            

chmod +x scripts/doca_firefly/<firefly-version>/*.sh

prepare_for_embedded_mode.sh

此脚本自动化了“为嵌入式模式设置网络接口”部分中提到的所有步骤,并将新安装的 BFB 镜像配置为 DOCA Firefly 所需的设置。

注意事项

脚本参数

  • SF 编号(检查是否已存在)

示例

  • 使用索引为 4 的 SF 准备 OVS 设置

    复制
    已复制!
                

    chmod +x ./*.sh ./prepare_for_embedded_mode.sh 4

该脚本使用 set_new_sf.sh 作为辅助脚本。

set_new_sf.sh

创建新的受信任 SF 并将其标记为“受信任”。

脚本参数

  • PCIe 地址

  • SF 编号(检查是否已存在)

  • MAC 地址(如果不存在,则生成随机地址)

示例

  • 在 DPU 的端口 0 上创建编号为“4”的 SF

    复制
    已复制!
                

    ./set_new_sf.sh 0000:03:00.0 4

  • 在 DPU 的端口 0 上创建编号为“5”的 SF 和特定的 MAC 地址

    复制
    已复制!
                

    ./set_new_sf.sh 0000:03:00.0 5 aa:bb:cc:dd:ee:ff

  • 在 DPU 的端口 1 上创建编号为“4”的 SF

    复制
    已复制!
                

    ./set_new_sf.sh 0000:03:00.1 4

前两个示例应可直接用于 BlueField-2 设备,并分别创建 SF4 和 SF5。

为 DPU 模式设置网络接口

  1. 根据可扩展功能设置指南,创建要供服务使用的受信任 SF。

    注意

    以下说明假定 SF 已使用索引 4 创建。

  2. 创建所需的 OVS 设置,如架构图所示

    复制
    已复制!
                

    $ sudo ovs-vsctl add-br uplink $ sudo ovs-vsctl add-port uplink p0 $ sudo ovs-vsctl add-port uplink en3f0pf0sf4 # This port is needed to ensure we have traffic host<->network as well $ sudo ovs-vsctl add-port uplink pf0hpf

  3. 验证 OVS 设置

    复制
    已复制!
                

    sudo ovs-vsctl show Bridge uplink Port pf0hpf Interface pf0hpf Port en3f0pf0sf4 Interface en3f0pf0sf4 Port p0 Interface p0 Port uplink Interface uplink type: internal

  4. 在 SF 接口(而不是代表器)上启用 TX 时间戳

    复制
    已复制!
                

    # tx port timestamp offloading sudo ethtool --set-priv-flags enp3s0f0s4 tx_port_ts on

  5. 启用接口并为其设置 IP 地址

    复制
    已复制!
                

    # configure ip for the interface: sudo ifconfig enp3s0f0s4 <ip-addr> up

  6. 配置 OVS 以支持此 SF 上的 TX 时间戳和常规多播流量

    复制
    已复制!
                

    # Multicast-related definitions $ sudo ovs-vsctl set Bridge uplink mcast_snooping_enable=true $ sudo ovs-vsctl set Bridge uplink other_config:mcast-snooping-disable-flood-unregistered=true $ sudo ovs-vsctl set Port p0 other_config:mcast-snooping-flood=true $ sudo ovs-vsctl set Port p0 other_config:mcast-snooping-flood-reports=true # PTP-related definitions $ sudo ovs-ofctl add-flow uplink in_port=en3f0pf0sf4,udp,tp_src=319,actions=output:p0 $ sudo ovs-ofctl add-flow uplink in_port=p0,udp,tp_src=319,actions=output:en3f0pf0sf4 $ sudo ovs-ofctl add-flow uplink in_port=en3f0pf0sf4,udp,tp_src=320,actions=output:p0 $ sudo ovs-ofctl add-flow uplink in_port=p0,udp,tp_src=320,actions=output:en3f0pf0sf4

    注意

    如果您的 OVS 网桥使用的名称不是 uplink,请确保所用名称反映在 ovs-vsctlovs-ofctl 命令中。例如

    复制
    已复制!
                

    $ sudo ovs-vsctl set Bridge <bridge-name> mcast_snooping_enable=true

分离模式

在 DPU 上配置分离模式的固件设置

  1. 将 BlueField 的运行模式设置为“分离”

    复制
    已复制!
                

    sudo mlxconfig -y -d 03:00.0 s INTERNAL_CPU_MODEL=0

  2. 启用 RTC

    复制
    已复制!
                

    sudo mlxconfig -d 03:00.0 set REAL_TIME_CLOCK_ENABLE=1

  3. 平稳关机 并重启 DPU 以应用配置。

  4. 您可以使用以下命令检查 BlueField 的运行模式

    复制
    已复制!
                

    sudo mlxconfig -d 03:00.0 q | grep INTERNAL_CPU_MODEL # Example output          INTERNAL_CPU_MODEL                  SEPARATED_HOST(0)

为分离模式设置网络接口

  1. 确保 p0 未连接到 OVS 网桥

    复制
    已复制!
                

    sudo ovs-vsctl show

  2. p0 接口上启用 TX 时间戳

    复制
    已复制!
                

    # TX port timestamp offloading (assuming PTP interface is p0) sudo ethtool --set-priv-flags p0 tx_port_ts on

  3. 启用接口并为其设置 IP 地址

    复制
    已复制!
                

    # Configure IP for the interface sudo ifconfig p0 <ip-addr> up

基于主机的部署

基于主机的部署需要与“分离模式”部分下描述的相同配置。

DPU 部署

有关在 BlueField DPU 之上部署 DOCA 容器的信息,请参阅 NVIDIA DOCA 容器部署指南

特定于服务的配置步骤和部署说明可以在服务的容器页面下找到。

注意

DOCA Firefly 也可以部署在未连接到互联网的 DPU 上。有关说明,请参阅 NVIDIA DOCA 容器部署指南 中的相关部分。


主机部署

DOCA Firefly 具有适用于基于主机部署的版本。有关在主机之上部署 DOCA 容器的更多信息,请参阅 NVIDIA BlueField DPU 容器部署指南

以下是在主机上部署 DOCA Firefly 的 docker 命令

复制
已复制!
            

sudo docker run --privileged --net=host -v /var/log/doca/firefly:/var/log/firefly -v /etc/firefly:/etc/firefly -e PTP_INTERFACE='eth2' -it nvcr.io/nvidia/doca/doca_firefly:1.4.0-doca2.7.0-host /entrypoint.sh

其中

  • 其他 YAML 配置可以作为环境变量以额外的 -e 键值对传递,如上面的 PTP_INTERFACE 一样

  • 确切的容器标签应为 DOCA Firefly 的 NGC 页面上选择的所需标签

服务中的所有模块都具有配置文件,允许自定义各种设置,包括常规设置和 PTP 相关设置。

内置配置文件

每个配置概况都有其自己的 ptp4l 基本 PTP 配置文件。例如,媒体配置概况 PTP 配置文件是 ptp4l-media.conf

内置 PTP 配置文件可以在“PTP 配置概况默认配置文件”部分中找到。为了便于使用,这些文件作为从 NGC 下载的 DOCA 容器资源的一部分提供,并放置在 Firefly 的 configs 目录 (scripts/doca_firefly/<firefly version>/configs) 下。

注意

当使用内置配置文件时,Firefly 使用存储在容器本身 /etc/linuxptp 目录中的文件。NGC 资源中包含的配置文件仅为便于访问而提供。修改它们不会影响容器在实践中使用的配置。相反,配置的更新应按照以下部分中的描述进行。


自定义配置文件

用户可以为每个模块创建自己的文件,而不是使用配置概况的基本配置文件。

要设置自定义配置文件,用户应在 /etc/firefly 目录中找到其配置文件,并在 DOCA Firefly 的 YAML 文件中设置配置文件名称。

例如,要设置自定义 linuxptp 配置文件,用户可以在 YAML 文件中设置参数 PTP_CONFIG_FILE

复制
已复制!
            

- name: PTP_CONFIG_FILE   value: my_custom_ptp.conf

在此示例中,my_custom_ptp.conf 应放置在 /etc/firefly/my_custom_ptp.conf

注意

配置文件不得为 UDS 相关端口(/var/run/ptp4l/var/run/ptp4lro)定义值,因为这些值将影响容器内部行为。此类设置将提示警告,并在准备最终配置时被忽略(请参阅下一节中的更多信息)。

覆盖特定配置文件参数

用户可以选择覆盖特定参数,而不是替换整个配置文件。这可以使用 YAML 文件中的以下变量语法完成:CONF_<TYPE>_<SECTION>_<PARAMETER_NAME>

  • TYPEPTPMONITORPHC2SYS、SYNCE 或 SERVO 之一

  • SECTION – 参数应放置在配置文件中的部分

    注意

    如果指定的节在配置文件中尚不存在,则会创建一个新节,除非它引用了未包含在 PTP_INTERFACE YAML 字段中的 PTP 网络接口。

  • PARAMETER_NAME – 应放置在配置文件中的配置参数名称

    注意

    如果参数名称已存在于配置文件中,则根据 .yaml 文件中提供的值更改该值。如果参数名称尚不存在于配置文件中,则会添加该参数。

例如,YAML 文件定义中的以下变量将 PTP 配置文件中 global 部分下的参数 priority1 的值更改为 64

复制
已复制!
            

- name: CONF_PTP_global_priority1   value: "64"

注意

由于表的结构(即,多个条目共享同一个键),不支持通过 YAML 文件配置 unicast_master_table


确保和调试配置文件的正确性

前面的章节描述了配置文件定义的 2 个层

  • 基本配置文件 – 内置配置文件或自定义配置文件

  • 向 YAML 文件添加值/从 YAML 文件覆盖值

实际上,有稍微更多的层到位,优先级如下(按升序排列)

  • PTP 程序(例如 ptp4l)的默认配置值 – 保存所有可用配置选项的值

  • 您选择的配置文件 – 包含选项的子集

  • YAML 文件中的定义 – 更窄的子集

  • Firefly 强制值

当将提供的配置文件与 YAML 文件中的定义结合使用时,Firefly 会遍历这些定义,并根据预定义的配置选项集检查它们

  • 仅警告 – 如果某个值在支持的部署场景中导致已知问题,则发出警告

  • 覆盖 – 不应由用户设置且将由 Firefly 覆盖的容器内部定义

在这两种情况下都提供了合适的日志消息

复制
已复制!
            

# Example for a warning 2023-01-31 11:55:13 - Firefly - Config - INFO - Missing explicit definition "fault_reset_interval", verifying default value instead: "4" 2023-01-31 11:55:13 - Firefly - Config - WARNING - Value "4" for definition "fault_reset_interval" will be invalid in Embedded Mode, expected a value lesser or equal to "1" 2023-01-31 11:55:13 - Firefly - Config - WARNING - Continuing with invalid value # Example for an override 2023-01-31 11:21:00 - Firefly - Config - WARNING - Invalid value "/var/run/ptp4l2" for definition "uds_address", expected "/var/run/ptp4l" 2023-01-31 11:21:00 - Firefly - Config - INFO - Setting definition "uds_address" value to the following: "/var/run/ptp4l"

在此过程结束时,Firefly 生成一个更新的配置文件,供稍后由各种时间提供程序使用。为了避免意外修改用户提供的配置文件或权限问题,最终文件在容器内的 /tmp 目录下生成。

例如,如果在 DPU 上的 /etc/firefly 目录下使用名为 my_custom_ptp.conf 的自定义配置文件,则更新后的文件将位于容器内的以下路径:/tmp/my_custom_ptp.conf

为了排除配置文件可能存在的问题,可以执行以下操作之一

  • 直接连接到容器,如“故障排除”下的“调试最终配置文件”要点中所述。

  • 使用 YAML 文件中的内置支持将容器的 /tmp 目录映射到 DPU

    • 更改前

      复制
      已复制!
                  

      # Uncomment when debugging the finalized configuration files used - Part #1 #- name: debug-firefly-volume # hostPath: # path: /tmp/firefly # type: DirectoryOrCreate containers: ... volumeMounts: - name: logs-firefly-volume mountPath: /var/log/firefly - name: conf-firefly-volume mountPath: /etc/firefly # Uncomment when debugging the finalized configuration files used - Part #2 #- name: debug-firefly-volume # mountPath: /tmp

    • 更改后

      复制
      已复制!
                  

      # Uncomment when debugging the finalized configuration files used - Part #1 - name: debug-firefly-volume hostPath: path: /tmp/firefly type: DirectoryOrCreate containers: ... volumeMounts: - name: logs-firefly-volume mountPath: /var/log/firefly - name: conf-firefly-volume mountPath: /etc/firefly # Uncomment when debugging the finalized configuration files used - Part #2 - name: debug-firefly-volume mountPath: /tmp

注意

最终配置文件保持节和配置选项与原始文件中出现的顺序相同,但文件中去除了多余的换行符或注释行。在调试会话期间直接访问它时,应考虑这一点。


提供程序

DOCA Firefly 服务使用以下第三方提供程序来提供时间同步服务

  • Linuxptp - 版本 v4.2

    • PTP – PTP 服务,由 PTP4L 程序提供

    • PHC2SYS – 操作系统时间校准,由 PHC2SYS 程序提供

  • Testptp

    • PPS - PPS 设置服务

此外,DOCA Firefly 服务还使用以下 NVIDIA 模块

  • SyncE

    • SYNCE – 同步以太网守护程序 (synced)

  • Firefly

    • MONITOR - Firefly PTP 监控器

  • Firefly

    • SERVO - Firefly PTP 伺服

每个提供程序都可以启用、禁用或设置为使用配置概况定义的设置

  • YAML 设置 – <provider name>_STATE

  • 支持的值 – enabledisabledefined_by_profile

注意

有关每个提供程序的默认配置概况设置,请参阅“配置概况”部分下的表格。

以下是专门禁用 phc2sys 提供程序的 YAML 设置示例

复制
已复制!
            

- name: PHC2SYS_STATE   value: "disable"

注意

defined_by_profile 设置仅适用于明确定义的配置概况。因此,当选择 custom 配置概况时,无法使用它。有关配置概况设置的更多信息,请参阅“配置概况”部分下的表格。


配置概况

DOCA Firefly 服务包含配置概况,这些配置概况代表 Firefly 服务的常见用例,每个配置概况提供不同的默认配置

默认

媒体

电信 (L2)

自定义

用途

需要 PTP 的任何用户

媒体制作

电信网络

针对专用用户场景的自定义配置

PTP

已启用

已启用

已启用

无默认值。应由用户设置启用/禁用。

PTP 配置概况

PTP 默认配置概况

SMPTE 2059-2

G.8275.1

由用户设置

PTP 客户端/服务器 1

两者

仅客户端

两者

由用户设置

PHC2SYS

已启用

已启用

已启用

无默认值。应由用户设置启用/禁用。

PPS(输入/输出)

已启用

已启用

已启用

无默认值。应由用户设置启用/禁用。

PTP 监控器

已禁用

已禁用

已禁用

无默认值。应由用户设置启用/禁用。

SyncE

已禁用

已禁用

已启用

无默认值。应由用户设置启用/禁用。

伺服

已禁用

已禁用

已禁用

无默认值。应由用户设置启用/禁用。

  1. 仅客户端仅与单个 PTP 接口相关。如果在 YAML 文件中提供了多个 PTP 接口,则会启用两种模式。    

输出

容器输出

运行时,可以使用以下命令查看 DOCA Firefly 服务容器的完整输出

复制
已复制!
            

sudo crictl logs <CONTAINER-ID>

其中 CONTANIER-ID 可以使用以下命令检索

复制
已复制!
            

sudo crictl ps

例如,在以下输出中,容器 ID 为 8f368b98d025b

复制
已复制!
            

$ sudo crictl ps CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD 8f368b98d025b       289809f312b4c       2 seconds ago       Running             doca-firefly        0                   5af59511b4be4       doca-firefly-some-computer-name

容器的输出取决于硬件支持的服务、配置启用的服务以及选择的配置概况。但是,请注意,任何配置都运行 PTP,因此当 DOCA FireFly 成功运行时,预计会看到行“Running ptp4l”。

以下是在支持 PPS 的 DPU 上运行默认配置概况时,预期的容器输出示例

复制
已复制!
            

2023-09-07 14:04:23 - Firefly - Init - INFO - Starting DOCA Firefly - Version 1.4.0 2023-09-07 14:04:23 - Firefly - Init - INFO - Selected features: 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PTP - Enabled - ptp4l will be used 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] MONITOR - Enabled - PTP Monitor will be used 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PHC2SYS - Enabled - phc2sys will be used 2023-09-07 14:04:23 - Firefly - Init - INFO - [-] SyncE - Disabled 2023-09-07 14:04:23 - Firefly - Init - INFO - [-] SERVO - Disabled 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PPS - Enabled - testptp will be used (if supported by hardware) 2023-09-07 14:04:23 - Firefly - Init - INFO - Going to analyze the configuration files 2023-09-07 14:04:23 - Firefly - Init - INFO - Requested the following PTP interface: p0 2023-09-07 14:04:23 - Firefly 2023-09-07 14:04:23 - Firefly - Init - INFO - Starting PPS configuration 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PPS is supported by hardware 2023-09-07 14:04:23 - Firefly - Init - INFO - set pin function okay 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PPS in - Activated 2023-09-07 14:04:23 - Firefly - Init - INFO - set pin function okay 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PPS out - Activated 2023-09-07 14:04:23 - Firefly - Init - INFO - name mlx5_pps0 index 0 func 1 chan 0 2023-09-07 14:04:23 - Firefly - Init - INFO - name mlx5_pps1 index 1 func 2 chan 0 2023-09-07 14:04:23 - Firefly - Init - INFO - periodic output request okay 2023-09-07 14:04:23 - Firefly 2023-09-07 14:04:23 - Firefly - Init - INFO - Running ptp4l 2023-09-07 14:04:23 - Firefly - Init - INFO - Running Firefly PTP Monitor 2023-09-07 14:04:23 - Firefly - Init - INFO - Running phc2sys

以下是在不支持 PPS 的 DPU 上运行默认配置概况时,预期的容器输出示例

复制
已复制!
            

2023-09-07 14:04:23 - Firefly - Init - INFO - Starting DOCA Firefly - Version 1.3.0 2023-09-07 14:04:23 - Firefly - Init - INFO - Selected features: 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PTP - Enabled - ptp4l will be used 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] MONITOR - Enabled - PTP Monitor will be used 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PHC2SYS - Enabled - phc2sys will be used 2023-09-07 14:04:23 - Firefly - Init - INFO - [-] SyncE - Disabled 2023-09-07 14:04:23 - Firefly - Init - INFO - [-] SERVO - Disabled 2023-09-07 14:04:23 - Firefly - Init - INFO - [+] PPS - Enabled - testptp will be used (if supported by hardware) 2023-09-07 14:04:23 - Firefly - Init - INFO - Going to analyze the configuration files 2023-09-07 14:04:23 - Firefly - Init - INFO - Requested the following PTP interface: p0 2023-09-07 14:04:23 - Firefly 2023-09-07 14:04:23 - Firefly - Init - INFO - Starting PPS configuration 2023-09-07 14:04:23 - Firefly - Init - WARNING - [-] PPS capability is missing, seems that the card doesn't support PPS 2023-09-07 14:04:23 - Firefly - Init - INFO - capabilities: 2023-09-07 14:04:23 - Firefly - Init - INFO - 50000000 maximum frequency adjustment (ppb) 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 programmable alarms 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 external time stamp channels 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 programmable periodic signals 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 pulse per second 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 programmable pins 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 cross timestamping 2023-09-07 14:04:23 - Firefly 2023-09-07 14:04:23 - Firefly - Init - INFO - Running ptp4l 2023-09-07 14:04:23 - Firefly - Init - INFO - Running Firefly PTP Monitor 2023-09-07 14:04:23 - Firefly - Init - INFO - Running phc2sys


Firefly 输出

除了容器的日志之外,Firefly 还定义了一个额外的非易失性日志,可以在 /var/log/doca/firefly/firefly.log 中找到。

此文件包含“容器输出”部分中描述的相同输出,并且在容器停止执行时,对于调试部署错误很有用。

注意

为了避免磁盘空间问题,/var/log/doca/firefly/firefly.log 文件仅包含 Firefly 初始化时的日志,而不包含其余模块(ptp4l、phc2sys 等)或 PTP 监控器的日志。后者仍包含在容器日志中,可以使用命令 sudo crictl logs <CONTAINER-ID> 进行检查。


ptp4l 输出

ptp4l 输出可以在文件 /var/log/doca/firefly/ptp4l.log 中找到。

示例输出

复制
已复制!
            

ptp4l[192710.691]: rms 1 max 1 freq -114506 +/- 0 delay -15 +/- 0 ptp4l[192712.692]: rms 6 max 9 freq -114501 +/- 3 delay -15 +/- 0 ptp4l[192714.692]: rms 7 max 9 freq -114511 +/- 3 delay -13 +/- 0 ptp4l[192716.692]: rms 5 max 7 freq -114502 +/- 1 delay -13 +/- 0 ptp4l[192718.693]: rms 4 max 6 freq -114509 +/- 2 delay -13 +/- 0 ptp4l[192720.693]: rms 3 max 3 freq -114506 +/- 2 delay -13 +/- 0 ptp4l[192722.694]: rms 4 max 6 freq -114510 +/- 3 delay -12 +/- 0 ptp4l[192724.694]: rms 5 max 7 freq -114510 +/- 5 delay -12 +/- 1 ptp4l[192726.695]: rms 4 max 5 freq -114508 +/- 3 delay -11 +/- 0 ptp4l[192728.695]: rms 6 max 9 freq -114504 +/- 4 delay -11 +/- 0


phc2sys 输出

phc2sys 输出可以在文件 /var/log/doca/firefly/phc2sys.log 中找到。

示例输出

复制
已复制!
            

phc2sys[1873325.928]: reconfiguring after port state change phc2sys[1873325.928]: selecting CLOCK_REALTIME for synchronization phc2sys[1873325.928]: selecting enp3s0f0s4 as the master clock phc2sys[1873325.928]: CLOCK_REALTIME phc offset 1378 s2 freq -165051 delay 255 phc2sys[1873326.928]: CLOCK_REALTIME phc offset 1378 s2 freq -163673 delay 240 phc2sys[1873327.928]: port 62b785.fffe.0c9369-1 changed state phc2sys[1873327.929]: CLOCK_REALTIME phc offset 14 s2 freq -164624 delay 255 phc2sys[1873328.936]: CLOCK_REALTIME phc offset 89 s2 freq -164545 delay 240


SyncE 输出

SyncE 输出可以在文件 /var/log/doca/firefly/synced.log 中找到。

示例输出

复制
已复制!
            

INFO [05/09/2023 05:11:01.493414]: SyncE Group #0: is in TRACKING holdover acquired mode on p0, frequency_diff: 0 (ppb) INFO [05/09/2023 05:11:02.502963]: SyncE Group #0: is in TRACKING holdover acquired mode on p0, frequency_diff: -113 (ppb) INFO [05/09/2023 05:11:03.512491]: SyncE Group #0: is in TRACKING holdover acquired mode on p0, frequency_diff: 37 (ppb)

注意

SYNCE 模块输出的详细程度默认受到限制。要将输出设置为更详细,请将 verbose 选项设置为 1(真)。

之前

复制
已复制!
            

# Example #4 - Overwrite the value of verbose in the [global] section of the SyncE configuration file. #- name: CONF_SYNCE_global_verbose # value: "1"

之后

复制
已复制!
            

# Example #4 - Overwrite the value of verbose in the [global] section of the SyncE configuration file. - name: CONF_SYNCE_global_verbose value: "1"


Firefly 伺服输出

Firefly 伺服输出可以在文件 /var/log/doca/firefly/servo.log 中找到。

示例输出

复制
已复制!
            

2024-03-18 09:04:22 - Firefly - SERVO - INFO - offset +8 +/- 2 freq -5.66 +/- 0.41 delay -48 +/- 2 2024-03-18 09:04:24 - Firefly - SERVO - INFO - offset +4 +/- 2 freq -6.35 +/- 0.36 delay -47 +/- 2 2024-03-18 09:04:26 - Firefly - SERVO - INFO - offset +2 +/- 2 freq -6.75 +/- 0.41 delay -47 +/- 1 2024-03-18 09:04:28 - Firefly - SERVO - INFO - offset +0 +/- 2 freq -6.97 +/- 0.35 delay -47 +/- 1 2024-03-18 09:04:30 - Firefly - SERVO - INFO - offset +0 +/- 3 freq -7.30 +/- 0.60 delay -47 +/- 1 2024-03-18 09:04:33 - Firefly - SERVO - INFO - offset +1 +/- 2 freq -6.93 +/- 0.41 delay -47 +/- 1 2024-03-18 09:04:35 - Firefly - SERVO - INFO - offset +1 +/- 2 freq -6.81 +/- 0.48 delay -47 +/- 1 2024-03-18 09:04:37 - Firefly - SERVO - INFO - offset +2 +/- 2 freq -6.76 +/- 0.52 delay -48 +/- 2

DPU 模式下的 Tx 时间戳支持

当 BlueField 在 DPU 模式下运行时,需要额外的 OVS 配置,如“为 DPU 模式设置网络接口”部分的步骤 6 中所述。此配置实现以下目的

  • 正确支持传入/传出多播流量

  • 启用 Tx 时间戳

仅当传出 PTP 消息(Tx 时间戳)卸载到硬件时,Firefly 才会获得数据包时间戳。因此,当与 OVS 一起使用时,用户必须确保此流量流得到正确识别和卸载。如果未发生卸载,Firefly 会陷入故障循环,同时等待接收 Tx 时间戳事件

复制
已复制!
            

ptp4l[2912.797]: timed out while polling for tx timestamp ptp4l[2912.797]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug ptp4l[2912.797]: port 1 (enp3s0f0s4): send sync failed ptp4l[2923.528]: timed out while polling for tx timestamp ptp4l[2923.528]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug ptp4l[2923.528]: port 1 (enp3s0f0s4): send sync failed

此问题的解决方案

  • 在 OVS 中激活硬件卸载

  • OpenFlow 规则,确保 OVS 正确识别流量并将其卸载到硬件

  • 修改 fault_reset_interval 配置值,以确保从始终由软件处理的第一个数据包引起的故障中及时恢复(直到规则卸载到硬件)。因此,Firefly 要求 fault_reset_interval 值小于等于 1。如果检测到不正确的值,则会发出适当的警告。该值会在内置配置概况中相应更新。

当这些配置就绪后,Firefly 会在启动期间包含单个故障报告,但会从中恢复并照常继续

复制
已复制!
            

ptp4l[3715.687]: timed out while polling for tx timestamp ptp4l[3715.687]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug ptp4l[3715.687]: port 1 (enp3s0f0s4): send delay request failed

排除 Tx 时间戳问题

如前所述,需要多个层来确保 Tx 时间戳按 Firefly 的要求工作。以下是调试每一层状态的命令列表

  1. 检查 OpenFlow 规则

    复制
    已复制!
                

    $ sudo ovs-ofctl dump-flows uplink cookie=0x0, duration=4075.576s, table=0, n_packets=2437, n_bytes=209582, udp,in_port=en3f0pf0sf4,tp_src=319 actions=output:p0 cookie=0x0, duration=4075.549s, table=0, n_packets=1216, n_bytes=109420, udp,in_port=p0,tp_src=319 actions=output:en3f0pf0sf4 cookie=0x0, duration=4075.521s, table=0, n_packets=13, n_bytes=1242, udp,in_port=en3f0pf0sf4,tp_src=320 actions=output:p0 cookie=0x0, duration=4074.604s, table=0, n_packets=3034, n_bytes=297376, udp,in_port=p0,tp_src=320 actions=output:en3f0pf0sf4 cookie=0x0, duration=4075.856s, table=0, n_packets=184, n_bytes=12901, priority=0 actions=NORMAL

  2. 在 DOCA Firefly 部署时检查硬件 TC 规则(规则在没有流量的情况下 10 秒后老化)

    复制
    已复制!
                

    $ sudo tc -s -d filter show dev en3f0pf0sf4 egress filter ingress protocol ip pref 4 flower chain 0 filter ingress protocol ip pref 4 flower chain 0 handle 0x1 eth_type ipv4 ip_proto udp src_port 320 ip_flags nofrag in_hw in_hw_count 1 action order 1: mirred (Egress Redirect to device p0) stolen index 3 ref 1 bind 1 installed 7 sec used 7 sec Action statistics: Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 cookie bec8bd6ede4e86341e9045a6edb58ca2 no_percpu   filter ingress protocol ip pref 4 flower chain 0 handle 0x2 eth_type ipv4 ip_proto udp src_port 319 ip_flags nofrag in_hw in_hw_count 1 action order 1: mirred (Egress Redirect to device p0) stolen index 4 ref 1 bind 1 installed 6 sec used 6 sec Action statistics: Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 cookie c568d97efd400de98608fbbf86ccdf3c no_percpu

    注意

    如果在 Firefly 运行时不存在 TC 规则,这通常表示硬件卸载在 OVS 级别被禁用,在这种情况下,应按照“确保 OVS 硬件卸载”下的说明激活硬件卸载。

PTP

Firefly 使用 ptp4l 实用程序来处理精确时间协议 (IEEE 1588)。

通过 YAML 文件,用户可以配置用于协议的网络接口

复制
已复制!
            

# Network interfaces to be used (For multiple interfaces use a space (" ") separated list) - name: PTP_INTERFACE # Set according to used interfaces on the local setup value: "p0"

在部署容器之前,用户应配置此字段以指向先前步骤中配置的所需网络接口。

PHC2SYS

Firefly 使用 phc2sys 实用程序将 OS 的时钟同步到 ptp4l 接收的精确时间戳。

通过 YAML 文件,用户可以配置 phc2sys 程序使用的命令行参数

复制
已复制!
            

- name: PHC2SYS_ARGS value: "-a -r"

Firefly 在用户选择的标志之上添加以下命令行参数

  • 使用选择的配置文件(默认情况下为空配置文件,或者如果 YAML 文件中指定了用户提供的文件)

  • 使用 -m 命令行选项将输出重定向到日志文件

注意

phc2sys 必须使用与 ptp4l 使用的相同的 domainNumber 设置。如果用户未设置相同的 domainNumber,Firefly 会自动执行此操作。

注意

仅当禁用其他计时服务(如 NTP)时,phc2sys 才能准确同步托管环境(通常是 DPU,但也可能是主机(如果部署在那里))的时钟。

因此,例如,在 Ubuntu 22.04 上,用户必须通过运行以下命令来确保禁用 NTP 计时服务

复制
已复制!
            

systemctl stop systemd-timesyncd


SYNCE

Firefly 使用专有的 synced 实用程序来实现 同步以太网 协议,旨在确保时钟频率与参考时钟同步。一旦实现,两个时钟都声明为“同步”。

通过 YAML 文件,用户可以配置用于协议的网络接口

复制
已复制!
            

# Network interfaces to be used (For multiple interfaces use a space (" ") separated list) - name: SYNCE_INTERFACE # Set according to used interfaces on the local setup value: "p0"

在部署容器之前,应配置此字段以指向先前步骤中配置的所需网络接口。

DOCA 包括对 "dpll" 后端(默认)的 synced 支持,这增加了对 SF 和 VF 的支持。"dpll" 后端是使用的默认后端。如果 DOCA 检测到系统不支持它,它将自动回退到 "mft" 后端。

注意

在内核 6.8 或 BlueField 平台软件 2.8.0 之前的版本中,仅支持 PF,并且仅使用 "mft" 后端。

可以使用 YAML 文件通过取消注释以下行来显式设置后端选项

之前

复制
已复制!
            

# Example #5 - Explicitly specify the used backend in the [global] section of the SyncE configuration file. #- name: CONF_SYNCE_global_backend # # Options are "mft"/"dpll". If nothing is specified in YAML, "dpll" is taken as the default # value: "mft"

之后

复制
已复制!
            

# Example #5 - Explicitly specify the used backend in the [global] section of the SyncE configuration file. - name: CONF_SYNCE_global_backend # Options are "mft"/"dpll". If nothing is specified in YAML, "dpll" is taken as the default value: "mft"

以下是使用 "dpll" 后端在 SF 之上路由 SyncE 相关流量所需的 OVS 命令示例

复制
已复制!
            

$ sudo ovs-ofctl add-flow uplink dl_dst=01:80:c2:00:00:02,in_port=en3f0pf0sf4,actions=p0 $ sudo ovs-ofctl add-flow uplink dl_dst=01:80:c2:00:00:02,in_port=p0,actions=en3f0pf0sf4 $ sudo ovs-ofctl add-flow uplink dl_dst=01:80:c2:00:00:02,actions=controller

信息

此示例使用指南前面使用的相同 OVS 设置

  • uplink – 网桥名称

  • en3f0pf0sf4 – SF 代表器

  • p0 – 我们正在工作的 PF 接口(端口 0)

如果您的部署使用不同的值,请确保相应地调整上述命令。

如果内核版本尚不支持此功能,并且使用了 SF/VF,则会打印以下错误

复制
已复制!
            

... mlx5 DPLL kernel support appears to be missing Falling back to MFT tools backend ...

如果显示此错误,则只能使用 PF,并且 synced 会回退到使用 "mft" 后端。

PTP 监控器

PTP 监控器定期查询各种 PTP 相关信息,并将其打印到容器的日志中。

以下是此工具的示例输出

复制
已复制!
            

gmIdentity: 48:B0:2D:FF:FE:5C:4D:24 (48b02d.fffe.5c4d24) portIdentity: 48:B0:2D:FF:FE:5C:53:44 (48b02d.fffe.5c5344-1) port_state: Active domainNumber: 2 master_offset: avg: 1 max: -8 rms: 3 gmPresent: true ptp_stable: Recovered UtcOffset: 37 timeTraceable: 0 frequencyTraceable: 0 grandmasterPriority1: 128 gmClockClass: 248 gmClockAccuracy: 0x6 grandmasterPriority2: 128 gmOffsetScaledLogVariance: 0xffff ptp_time (TAI): Thu Sep 7 11:22:50 2023 ptp_time (UTC adjusted): Thu Sep 7 11:22:13 2023 system_time (UTC): Thu Sep 7 11:22:13 2023 error_count: 1 last_err_time (UTC): Thu Sep 7 09:55:48 2023

除其他外,此监控提供以下信息

  • 关于 DPU 与之同步的主时钟的详细信息

  • 当前 PTP 时间戳

  • 运行期间的连接错误以及是否已从中恢复等运行状况信息

PTP 监控默认禁用,可以通过将 disable 值替换为要使用的监控服务器的 IP 地址来激活

复制
已复制!
            

- name: MONITOR_STATE Value: "<IP address for the monitoring server>"

激活后,可以使用以下命令从容器中查看信息

复制
已复制!
            

sudo crictl logs --tail=20 <CONTAINER-ID>

建议使用以下 watch 命令来主动监控 PTP 状态

复制
已复制!
            

sudo watch -n 1 crictl logs --tail=20 <CONTAINER-ID>

在诊断部署问题时,可以在监视器的开发者日志中找到额外的日志信息:/var/log/doca/firefly/firefly_monitor_dev.log

注意

监控功能连接到 ptp4l 的本地 UDS 服务器以查询必要的信息。 这就是配置管理器阻止用户修改容器内 ptp4l 使用的 uds_addressuds_ro_address 字段的原因。

配置

PTP 监视器支持配置选项,这些选项像 DOCA Firefly 的其余模块一样,通过专用的配置文件传递。 内置监视器配置文件可以在“PTP 监视器”部分中找到。 为了便于使用,该文件也作为从 NGC 下载的 DOCA 容器资源的一部分提供。

Firefly 模块配置选项”包含对每个配置选项及其默认值的完整解释。

要设置自定义配置文件,用户应在 /etc/firefly 目录中找到其配置文件,并在 DOCA Firefly 的 YAML 文件中设置配置文件名称。

复制
已复制!
            

- name: MONITOR_CONFIG_FILE   value: my_custom_monitor.conf

在此示例中,my_custom_monitor.conf 应放置在 /etc/firefly/my_custom_monitor.conf

时间表示 (PTP 时间 vs 系统时间)

在大多数部署场景中,监视器显示的 PTP 时间根据国际原子时 (TAI) 标准显示,而系统时间通常使用协调世界时 (UTC)。 由于这些时间表示模型之间的差异,监视器提供 2 种不同的时间读数(每种都相应地标记)。

复制
已复制!
            

... UtcOffset: 37 ... ptp_time (TAI): Thu Sep 7 11:22:50 2023 ptp_time (UTC adjusted): Thu Sep 7 11:22:13 2023 system_time (UTC): Thu Sep 7 11:22:13 2023

这种差异(在上面的示例中为 37 秒)是故意的,并且源于自 epoch 以来的闰秒数。 这由 UtcOffset 字段指示,该字段也包含在监视器的报告中。

监控服务器

除了将监控数据打印到可通过容器日志访问的容器标准输出外,监控数据还通过 gRPC 服务器公开,客户端可以订阅该服务器。 这允许主机上的监控客户端订阅 DPU 之上运行的服务中的监控事件,从而提供更好的可见性。

下图展示了将监控客户端(在主机上)连接到监控服务器(在 DPU 上)的推荐部署架构。

monitor-arch-version-1-modificationdate-1736363593557-api-v2.png

基于以上内容,当激活监视器功能时,用户必须提供监视器服务器要使用的 IP 地址。

复制
已复制!
            

- name: MONITOR_STATE value: "<IP address for the monitoring server>"

用户可以选择仅通过容器日志查看监控事件,而无需连接到监控服务器。 在这种情况下,建议在 YAML 文件中配置本地主机 IP 地址 (127.0.0.1),以避免将其暴露给不需要的网络。

监控客户端

监视器客户端所需的文件在服务的专用 NGC 资源“scripts”目录下提供。

从 Linux 主机执行基于 python 的监视器客户端的命令行示例

复制
已复制!
            

$ sudo pip3 install click protobuf grpcio $ ./doca_firefly_monitor_client.py <ip-address-for-the-monitoring-server>

注意

Firefly 监视器使用的参考源文件和 .proto 文件放置在 NGC 资源内的 src/ 下。


遥测导出

除了允许客户端订阅监控事件的馈送之外,PTP 监视器服务器还支持将事件主动导出到 DOCA Telemetry Service (DTS)。 在这种情况下,用户应将 DTS 部署到部署 DOCA Firefly 的机器(主机/DPU)上,然后使用以下步骤激活“遥测导出”

  1. 通过 YAML 文件启用所需的文件挂载

    之前

    复制
    已复制!
                

    ... # Uncomment when using the telemetry features with DTS - Part #1 #- name: ipc-sockets-volume # hostPath: # path: /opt/mellanox/doca/services/telemetry/ipc_sockets # type: DirectoryOrCreate #- name: shared-memory # hostPath: # path: /dev/shm/telemetry # type: DirectoryOrCreate containers: - name: doca-firefly ... # Uncomment when debugging the finalized configuration files used - Part #2 #- name: debug-firefly-volume # mountPath: /tmp # Uncomment when using the telemetry features with DTS - Part #2 #- name: ipc-sockets-volume # mountPath: /opt/mellanox/doca/services/telemetry/ipc_sockets #- name: shared-memory # mountPath: /dev/shm ...

    之后

    复制
    已复制!
                

    ... # Uncomment when using the telemetry features with DTS - Part #1 - name: ipc-sockets-volume hostPath: path: /opt/mellanox/doca/services/telemetry/ipc_sockets type: DirectoryOrCreate - name: shared-memory hostPath: path: /dev/shm/telemetry type: DirectoryOrCreate containers: - name: doca-firefly ... # Uncomment when debugging the finalized configuration files used - Part #2 #- name: debug-firefly-volume # mountPath: /tmp # Uncomment when using the telemetry features with DTS - Part #2 - name: ipc-sockets-volume mountPath: /opt/mellanox/doca/services/telemetry/ipc_sockets - name: shared-memory mountPath: /dev/shm ...

  2. 通过配置将 1 的配置值传递给 telemetry_export。 这可以很容易地直接通过 YAML 文件完成

    之前

    复制
    已复制!
                

    ... # Example #7 - Activate the monitor telemetry export feature (export through DTS). #- name: CONF_MONITOR_global_telemetry_export # value: "1" ...

    之后

    复制
    已复制!
                

    ... # Example #7 - Activate the monitor telemetry export feature (export through DTS). - name: CONF_MONITOR_global_telemetry_export value: "1" ...

    激活后,日志消息应指示导出功能的可用性(该功能使用 DOCA Telemetry Exporter 库)

    复制
    已复制!
                

    ... 2024-09-05 06:22:08 - Firefly - MONITOR - INFO     - Monitor records will also be exported via DOCA Telemetry Exporter ...

注意

当通过 DTS 在本地调试遥测信息时,务必记住激活数据写入器(存储输出),如 DOCA Telemetry Service Guide 中所述。

信息

有关可视化通过 DTS 导出的信息的更多信息,请参阅有关将 Grafana 与 DTS 一起使用的示例。

Firefly 伺服

Firefly 的 Servo 模块可以看作是 linuxptp 提供的内置伺服系统的扩展。 激活后,linuxptp 会自动设置为“自由运行”,并且对物理硬件时钟 (PHC) 的控制权将移交给 Firefly 自己的伺服系统。

以下是使用 l2-telco 配置文件(每秒 16 条消息)时,此工具的示例输出

复制
已复制!
            

2024-03-18 07:46:45 - Firefly - SERVO - INFO - Detected new master clock: 48b02d.fffe.5c4d24-1 2024-03-18 07:46:45 - Firefly - SERVO - INFO - Transition from servo state IDLE to FREE_RUNNING 2024-03-18 07:46:47 - Firefly - SERVO - INFO - Estimated a logSyncInterval of: -4 2024-03-18 07:46:47 - Firefly - SERVO - INFO - Measured offset 18691 delay -47 2024-03-18 07:46:48 - Firefly - SERVO - INFO - Transition from servo state FREE_RUNNING to LOCKED 2024-03-18 07:46:50 - Firefly - SERVO - INFO - offset +164 +/- 164 freq -1.50 +/- 0.00 delay -48 +/- 1 2024-03-18 07:46:52 - Firefly - SERVO - INFO - Transition from servo state LOCKED to LOCKED_STABLE 2024-03-18 07:46:52 - Firefly - SERVO - INFO - offset +0 +/- 1 freq -1.41 +/- 0.47 delay -48 +/- 1 2024-03-18 07:46:54 - Firefly - SERVO - INFO - offset -8 +/- 4 freq -4.21 +/- 1.40 delay -47 +/- 1 2024-03-18 07:46:57 - Firefly - SERVO - INFO - offset -12 +/- 2 freq -5.46 +/- 0.73 delay -47 +/- 1 2024-03-18 07:46:59 - Firefly - SERVO - INFO - offset -13 +/- 2 freq -6.13 +/- 0.65 delay -47 +/- 1 2024-03-18 07:47:01 - Firefly - SERVO - INFO - offset -13 +/- 3 freq -6.19 +/- 1.23 delay -47 +/- 2 2024-03-18 07:47:03 - Firefly - SERVO - INFO - offset -19 +/- 2 freq -8.04 +/- 0.96 delay -47 +/- 1 2024-03-18 07:47:06 - Firefly - SERVO - INFO - offset -14 +/- 3 freq -6.46 +/- 1.11 delay -47 +/- 1 2024-03-18 07:47:08 - Firefly - SERVO - INFO - offset -16 +/- 2 freq -7.32 +/- 0.78 delay -48 +/- 2 2024-03-18 07:47:10 - Firefly - SERVO - INFO - offset -15 +/- 2 freq -7.11 +/- 0.87 delay -47 +/- 2 2024-03-18 07:47:12 - Firefly - SERVO - INFO - offset -14 +/- 1 freq -6.74 +/- 0.57 delay -47 +/- 2 2024-03-18 07:47:15 - Firefly - SERVO - INFO - offset -12 +/- 3 freq -6.20 +/- 1.01 delay -48 +/- 1 2024-03-18 07:47:17 - Firefly - SERVO - INFO - offset -13 +/- 2 freq -6.40 +/- 0.89 delay -47 +/- 1 2024-03-18 07:47:19 - Firefly - SERVO - INFO - offset -11 +/- 2 freq -5.98 +/- 0.86 delay -48 +/- 1 2024-03-18 07:47:21 - Firefly - SERVO - INFO - offset -10 +/- 2 freq -5.75 +/- 0.87 delay -46 +/- 1 2024-03-18 07:47:24 - Firefly - SERVO - INFO - offset -8 +/- 1 freq -5.15 +/- 0.42 delay -47 +/- 1

可以看出,伺服系统的行为与 linuxptpptp4l 相似,并且由一个状态机组成,该状态机跟踪活动 PTP 端口的状态(FREE_RUNNINGLOCKEDLOCKED_STABLE 等)。

Firefly 的 Servo 默认禁用(在所有配置文件中),可以通过将 define_by_profile 值替换为 enable 来激活

复制
已复制!
            

# Activation status - name: SERVO_STATE # Options are "enable"/"disable"/"defined_by_profile" value: "enable"

激活后,可以从模块的日志文件 /var/log/doca/firefly/servo.log 中查看信息。

Firefly 伺服配置

Firefly 的 Servo 当前旨在用于与电信相关的部署,使用 l2-telco 配置文件,包括使用 SyncE。 因此,内置配置文件中的默认值针对这些场景进行了优化。

伺服系统支持配置选项,这些选项像 DOCA Firefly 的其余模块一样,通过专用的配置文件传递。 内置伺服系统配置文件可以在“Firefly Servo”部分中找到。 为了便于使用,该文件也作为从 NGC 下载的 DOCA 容器资源的一部分提供。

Firefly 模块配置选项”包含对每个配置选项及其默认值的完整解释。

要设置自定义配置文件,用户应在 /etc/firefly 目录中找到其配置文件,并在 DOCA Firefly 的 YAML 文件中设置配置文件名称。

复制
已复制!
            

- name: SERVO_CONFIG_FILE   value: my_custom_servo.conf

在此示例中,my_custom_servo.conf 应放置在 /etc/firefly/my_custom_servo.conf

动态数据包速率支持

伺服系统能够动态检测 PTP 主时钟使用的包速率,以便根据需要校准自身,以防其与建议的每秒 16 个数据包不同。

复制
已复制!
            

2024-03-18 07:46:45 - Firefly - SERVO - INFO - Transition from servo state IDLE to FREE_RUNNING 2024-03-18 07:46:47 - Firefly - SERVO - INFO - Estimated a logSyncInterval of: -4 2024-03-18 07:46:47 - Firefly - SERVO - INFO - Measured offset 18691 delay -47

如果消息速率是恒定的并且事先已知,则可以禁用动态估计,而支持提供的消息速率

复制
已复制!
            

- name: CONF_SERVO_global_servo_const_log_sync_interval value: "-2"

在上面的示例中,将使用每秒 4 个数据包的固定消息速率(logSyncInterval 为“-2”)。

注意

虽然伺服系统经过测试可以在各种数据包速率(2、4、8、16、32、64、128)下产生稳定的结果,但仅正式建议在使用每秒 16 个数据包的数据包速率的部署中使用。

VLAN 标记

DOCA Firefly 原生支持启用 VLAN 标记的网络接口。

分离模式

启用 VLAN 的网络接口的名称应是通过 YAML 文件在 PTP_INTERFACE 字段中传递的名称。

嵌入式模式

除了在前一部分列出的通过 YAML 传递启用 VLAN 的接口之外,用户还需要配置 DPU 内的网络路由以支持 VLAN 标记

  1. 以下示例将 VLAN 标签 10 配置到 enp3s0f0s4 接口

    复制
    已复制!
                

    $ sudo ip link add link enp3s0f0s4 name enp3s0f0s4.10 type vlan id 10 $ sudo ip link set up enp3s0f0s4.10 $ sudo ifconfig enp3s0f0s4.10 192.168.104.1 up

    在此示例中,enp3s0f0s4.10 是要传递给 DOCA Firefly 的接口。

  2. 在 DPU 内路由流量的其他命令

    复制
    已复制!
                

    $ sudo ovs-ofctl add-flow uplink in_port=en3f0pf0sf4,dl_vlan=10,actions=output:p0 $ sudo ovs-ofctl add-flow uplink in_port=p0,dl_vlan=10,actions=output:en3f0pf0sf4

多个接口

DOCA Firefly 可以通过以下 YAML 文件语法支持多个网络接口

复制
已复制!
            

- name: PTP_INTERFACE value: "<space (' ') separated list of interface names>"

例如

复制
已复制!
            

- name: PTP_INTERFACE value: "p0 p1"

注意

仅当启用 clientOnly 配置时,才支持多接口的监控功能。

注意

使用多个接口时,不支持 phc2sys 的自动模式 (-a)。 建议在此模式下禁用 phc2sys


在对容器部署问题进行故障排除时,强烈建议遵循NVIDIA DOCA Container Deployment Guide的“查看容器部署”部分中的部署步骤和技巧。

要调试 Firefly 使用的最终配置文件,用户可以按如下方式连接到容器

  1. 使用容器 ID 在正在运行的容器上打开 shell 会话

    复制
    已复制!
                

    sudo crictl exec -it <container-id> /bin/bash

  2. 连接到容器后,可以在 /tmp 目录下找到最终的配置文件,文件名与原始配置文件相同。

    信息

    有关配置文件的更多信息,请参见“确保和调试配置文件的正确性”部分。

Pod 标记为“就绪”但未列出容器

错误

部署容器时,pod 的 STATE 标记为 Ready,列出了映像,但看不到容器正在运行

复制
已复制!
            

$ sudo crictl pods POD ID CREATED STATE NAME NAMESPACE ATTEMPT RUNTIME 06bd84c07537e 4 seconds ago Ready doca-firefly-my-dpu default 0 (default)   $ sudo crictl images IMAGE TAG IMAGE ID SIZE k8s.gcr.io/pause 3.2 2a060e2e7101d 251kB nvcr.io/nvidia/doca/doca_firefly 1.1.0-doca2.0.2 134cb22f34611 87.4MB   $ sudo crictl ps CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD


解决方案

在大多数情况下,容器已启动,但立即退出。 可以使用以下命令进行检查

复制
已复制!
            

$ sudo crictl ps -a CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD 556bb78281e1d 134cb22f34611 7 seconds ago Exited doca-firefly 1                  06bd84c07537e doca-firefly-my-dpu

如果容器失败(即,状态为 Exited),建议检查 Firefly 的主日志 /var/log/doca/firefly/firefly.log

此外,在终止后的短时间内,也可以使用容器的 ID 查看容器日志

复制
已复制!
            

$ sudo crictl logs 556bb78281e1d Starting DOCA Firefly - Version 1.1.0 ... Requested the following PTP interface: p10 Failed to find interface "p10". Aborting

未找到自定义配置文件

错误

当使用自定义配置文件部署 DOCA Firefly 时,会发生部署错误,并显示以下日志消息

复制
已复制!
            

... 2023-09-07 14:04:23 - Firefly - Init - ERROR - Custom config file not found: my_file.conf. Aborting ...


解决方案

检查 YAML 文件中写入的自定义文件名,并确保已将该名称的文件正确放置在 DPU 的 /etc/firefly/ 目录下。

不支持配置概况

错误

当部署 DOCA Firefly 时,会发生部署错误,并显示以下日志消息

复制
已复制!
            

... 2023-09-07 14:04:23 - Firefly - Init - ERROR - profile <name> is not supported. Aborting ...


解决方案

验证 YAML 文件中选择的配置文件是否与配置文件表中列出的受支持配置文件之一匹配。

注意

配置文件名称区分大小写。 名称必须以小写字母指定。

缺少 PPS 功能

错误

当部署 DOCA Firefly 并配置为使用 PPS 模块时,会发生部署错误,并显示以下日志消息

复制
已复制!
            

... 2023-09-07 14:04:23 - Firefly - Init - INFO - Starting PPS configuration 2023-09-07 14:04:23 - Firefly - Init - WARNING - [-] PPS capability is missing, seems that the card doesn't support PPS 2023-09-07 14:04:23 - Firefly - Init - INFO - capabilities: 2023-09-07 14:04:23 - Firefly - Init - INFO - 50000000 maximum frequency adjustment (ppb) 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 programmable alarms 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 external time stamp channels 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 programmable periodic signals 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 pulse per second 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 programmable pins 2023-09-07 14:04:23 - Firefly - Init - INFO - 0 cross timestamping ...


解决方案

此日志表明 DPU 硬件不支持 PPS。 但是,PTP 仍然可以在此硬件上运行,您应该在容器日志中看到 Running ptp4l 行,表明 PTP 正在成功运行。

轮询 Tx 时间戳时超时

错误

当 BlueField 在 DPU 模式下运行时,DOCA Firefly 在等待接收 Tx 时间戳事件时卡在故障循环中

复制
已复制!
            

ptp4l[2912.797]: timed out while polling for tx timestamp ptp4l[2912.797]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug ptp4l[2912.797]: port 1 (enp3s0f0s4): send sync failed ptp4l[2923.528]: timed out while polling for tx timestamp ptp4l[2923.528]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug ptp4l[2923.528]: port 1 (enp3s0f0s4): send sync failed

信息

DOCA Firefly 存在一个已知缺陷,导致此错误出现一次,之后 ptp4l 会从中恢复。 本节仅涵盖出现故障循环且未发生恢复的情况。


解决方案

DOCA Firefly 的配置已经过调整,以适应 Tx 端口时间戳。 有关此错误的原因以及为此设计的恢复机制的更多信息,请参阅“DPU 模式下的 Tx 时间戳支持”部分。

警告 – 时间向后跳跃

错误

当使用 Firefly 的 Servo 模块时,启动时会遇到以下警告日志消息

复制
已复制!
            

2024-01-01 14:04:23 - Firefly - SERVO - WARNING - Clock is going to jump backwards in time - this might have a system-wide impact


解决方案

此警告消息指示系统时间向后跳跃了至少一分钟。 Firefly 记录此事件是因为此类跳跃可能具有系统范围的影响。 有关更多信息,请参阅DOCA Troubleshooting中的“无法保留 Sandbox 名称”部分。

此类跳跃仅可能发生在 Firefly 启动期间,在 Servo 实现与参考时钟的初始时间同步之前。

媒体配置概况

复制
已复制!
            

# # This config file contains configurations for media & entertainment alongside # DOCA Firefly specific adjustments. #   [global] domainNumber 127 priority1 128 priority2 127 use_syslog 1 logging_level 6 tx_timestamp_timeout 30 hybrid_e2e 1 dscp_event 46 dscp_general 46 logAnnounceInterval -2 announceReceiptTimeout 3 logSyncInterval -3 logMinDelayReqInterval -3 delay_mechanism E2E network_transport UDPv4 # Value lesser or equal to 1 is required for Embedded Mode fault_reset_interval 1 # Required for multiple interfaces support boundary_clock_jbod 1


默认配置概况

复制
已复制!
            

# # This config file extends linuxptp default.cfg config file with DOCA Firefly # specific adjustments. #   [global] # Value lesser or equal to 1 is required for Embedded Mode fault_reset_interval 1 # Required for multiple interfaces support boundary_clock_jbod 1


电信 (L2) 配置概况

复制
已复制!
            

# # This config file extends linuxptp G.8275.1.cfg config file with DOCA Firefly # specific adjustments. #   [global] dataset_comparison G.8275.x G.8275.defaultDS.localPriority 128 maxStepsRemoved 255 logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 G.8275.portDS.localPriority 128 ptp_dst_mac 01:80:C2:00:00:0E network_transport L2 domainNumber 24 # Value lesser or equal to 1 is required for Embedded Mode fault_reset_interval 1 # Required for multiple interfaces support boundary_clock_jbod 1


PTP 监视器

monitor-default.conf

复制
已复制!
            

# # Default values for all of Firefly's PTP monitor configuration values. #   [global] # General report_interval 1000 # Debugging & Logging doca_logging_level 50 telemetry_export 0


配置选项

  • report_interval – 监视器应将报告发布到所有定义的输出提供程序(标准输出、gRPC 客户端等)的时间间隔(以毫秒为单位)。 默认值:1000(1 秒)。

  • doca_logging_level – 模块的日志记录级别,基于 DOCA 的日志记录级别。 默认值为 50 (INFO)。 有效选项

    • 10=DISABLE

    • 20=CRITICAL

    • 30=ERROR

    • 40=WARNING

    • 50=INFO

    • 60=DEBUG

  • telemetry_export – 指示是否应通过 DOCA Telemetry Service 导出监视器信息。 有效选项

    • 0=禁用(默认)

    • 1=启用

Firefly Servo

servo-default.conf

复制
已复制!
            

# # Default values for all of Firefly's servo configuration values #   [global] # Time thresholds init_offset_from_master_threshold 10000000 offset_from_master_min_threshold -1500 offset_from_master_max_threshold 1500 init_max_time_adjustment 0 max_time_adjustment 1500 step_adjustment_threshold 0 hold_over_timer 0 # Sampling Window & servo logic warmup_period 1500 sync_filter_length 6 delay_request_filter_length 6 servo_adjustment_interval 4 servo_init_adjustment_interval 24 servo_const_log_sync_interval 0xFF servo_window_min_samples 2 servo_num_offset_values 5 servo_pi_cutoff_frequency 0.0159 servo_pi_dumping_factor 7.85   # Debugging & Logging summary_interval 2000 doca_logging_level 50 free_running 0


配置选项

  • init_offset_from_master_threshold – 在初始化时切换到 PI 伺服系统的最小阈值(以纳秒为单位)。 默认值为 10000000(10 毫秒)。

  • offset_from_master_min_threshold – 将与主时钟的时间偏移声明为“稳定”的最小阈值(以纳秒为单位)。 默认值为 -1500(-1.5 微秒)。

  • offset_from_master_max_threshold – 将与主时钟的时间偏移声明为“稳定”的最大阈值(以纳秒为单位)。 默认值为 +1500(+1.5 微秒)。

  • init_max_time_adjustment – 激活后,定义伺服系统达到“锁定”状态之前的最大允许时间(步进)调整(以纳秒为单位)。 默认值为 0(禁用)。

  • max_time_adjustment – 激活后,定义伺服系统达到“锁定”状态后允许的最大参考时间调整(以纳秒为单位)。 默认值为 1500(1.5 微秒)。

  • step_adjustment_threshold – 激活后,定义即使在伺服系统达到“锁定”状态后也允许时间(步进)调整的阈值(以纳秒为单位)。 默认值为 0(禁用)。

  • hold_over_timer – 激活后,定义伺服系统保持“保持”模式的时间(以秒为单位),直到恢复为“自由运行”。 默认值为 0(“保持”状态已禁用)。

  • warmup_period – 收集样本以估计 logSyncInterval 值(数据包速率)的时间跨度(以毫秒为单位)。 默认值为 1500(1.5 秒)。

  • sync_filter_length – 伺服系统历史记录缓冲区中 SYNC 消息的数量。 默认值为 6。

  • delay_request_filter_length – 伺服系统历史记录缓冲区中 DELAY_REQUEST 消息的数量。 默认值为 6 条消息。

  • servo_adjustment_interval – 在伺服系统至少一次达到“锁定”状态后,PHC 更新的 SYNC 消息数量。 默认值为 4 条消息。

  • servo_init_adjustment_interval – 在伺服系统从未达到“锁定”状态之前,PHC 更新的 SYNC 消息数量。 默认值为 24 条消息。

  • servo_const_log_sync_interval – 要用作 logSyncInterval 的已知固定值,而不是尝试在运行时对其进行估计。 默认值为 0xFF(禁用)。

  • servo_window_min_samples – 伺服系统计算所需的最小样本数。 默认值为 2 条消息。

  • servo_num_offset_values – “与主时钟的偏移”阈值内所需的连续时间戳的数量,以便从“锁定”状态过渡到“锁定稳定”状态。 默认值为 5 个偏移值。

  • servo_pi_cutoff_frequency – PI 伺服系统的截止频率值。 默认值为 0.0159。

  • servo_pi_dumping_factor – PI 伺服系统的阻尼系数值。 默认值为 7.85。

  • summary_interval – 伺服系统应发布报告日志事件的时间间隔(以毫秒为单位)。 默认值为 2000(2 秒)。

  • doca_logging_level – 模块的日志记录级别,基于 DOCA 的日志记录级别。 默认值为 50 (INFO)。 有效选项

    • 10=DISABLE

    • 20=CRITICAL

    • 30=ERROR

    • 40=WARNING

    • 50=INFO

    • 60=DEBUG

  • free_running – 告诉伺服系统仅记录操作,而不实际调整 PHC。 默认值为 0(禁用)。

© 版权所有 2025, NVIDIA。 上次更新时间:2025 年 2 月 12 日。