3. 软件栈与评估环境搭建

在 Layerscape 平台上做性能基准与容量评估,第一步不是跑分,而是把“可复现的软件栈”和“可信的观测通道”搭起来。同一块 LS1046A 或 LX2160A 板卡,换一个 U-Boot 版本、换一个内核配置、换一个 DPDK 版本,测出来的包转发率、内存带宽、时延抖动可能相差百分之几十。因此本节的目标是:明确 LSDK、U-Boot、Linux 内核、DPDK、用户态驱动与工具链之间的版本对应关系,并完成目标板卡与主机之间的网络、串口、调试通道搭建,使后续每一组数据都能追溯到确定的软硬件组合。

一、软件栈的版本选择逻辑

NXP 的 LSDK(Layerscape Software Development Kit)是整条软件栈的“锚点”。它把 U-Boot、Linux 内核、RCW(Reset Configuration Word)、设备树、根文件系统以及 DPAA/DPAA2 相关固件打包成一个可编译、可烧写的整体。选择版本时,应遵循“以 LSDK 发布版本为准,其余组件尽量与其对齐”的原则,而不是各自取最新。

以 LSDK 21.08 为例,它对应的典型组合是:U-Boot 2021.04、Linux 内核 5.10 LTS、DPDK 20.11 LTS、GCC 9.3(aarch64-linux-gnu 交叉工具链)。如果评估任务需要更新的 DPDK 特性,例如某些 DPAA2 队列管理或加密卸载接口,可以单独升级 DPDK,但必须同步确认内核中的 fsl-mc 总线驱动、restool 工具与 MC 固件版本兼容,否则会出现 DPAA2 对象创建失败或网口无法绑定到 VFIO 的问题。

版本选择可以按下面的判断顺序进行:先确定评估目标(纯内核转发、DPDK 用户态转发、还是带加密/压缩卸载),再确定必须使用的 DPDK 与内核特性,最后反查哪个 LSDK 版本同时满足这些特性。若目标只是验证基础吞吐与容量,优先选择 LTS 组合,减少非必要变量。

二、U-Boot、内核与设备树的配置要点

U-Boot 阶段最关键的是启动介质与 RCW 的匹配。Layerscape 的 SerDes 通道、以太网 MAC 与 PHY 连接方式由 RCW 决定,U-Boot 必须使用与板卡硬件一致的 RCW 二进制。常见做法是在 LSDK 的 flexbuild 框架下执行:

source setup.env
flex-builder -c rcw -m ls1046ardb
flex-builder -c uboot -m ls1046ardb -b nor
flex-builder -c linux -m ls1046ardb -a arm64

内核配置方面,性能评估场景建议关闭不必要的调试选项(如 CONFIG_DEBUG_INFO、动态调试、lockdep),保留 CONFIG_PREEMPT_NONE 或按需选择 PREEMPT,并确认 CONFIG_FSL_DPAA、CONFIG_FSL_DPAA2、CONFIG_VFIO、CONFIG_UIO 等与用户态驱动相关的选项已打开。设备树需要核对每个以太网节点的 phy-handle、phy-mode(如 sgmii、xgmii、2500base-x)以及 fsl,fman 或 fsl-mc 节点是否与实物连接一致。

建议在首次启动后执行 dmesg | grep -i -E "fman|dpaa|mc|eth",确认所有预期网口均被探测到,且没有 PHY 链路协商失败或 MC 固件加载超时的报错。这是后续所有网络性能数据可信的前提。

三、DPDK 与用户态驱动的构建

DPDK 在 Layerscape 上通常有两种使用路径:DPAA1(LS1043A/LS1046A 等)通过 fslmc 或 dpaa 总线,DPAA2(LS1088A/LX2160A 等)通过 fslmc 总线配合 VFIO。构建时需指定交叉工具链与目标平台:

meson build --cross-file config/arm/arm64_dpaa_linux_gcc
ninja -C build
# 运行前绑定网口到 VFIO
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
dpdk-devbind.py --bind=vfio-pci dpmac.5

用户态驱动(如 vfio-pci、uio_pci_generic)的选择直接影响中断处理与内存映射方式。VFIO 更安全、支持 IOMMU,是 DPAA2 场景的首选;若平台 IOMMU 配置受限,可退回 UIO,但需注意其对 DMA 隔离的弱化。绑定后应通过 dpdk-devbind.py --status 确认网口已从内核驱动解绑并挂到目标驱动上。

四、主机与目标板卡的通道搭建

评估环境通常由一台 x86 主机(运行交叉编译、抓包、结果汇总)和一块 Layerscape 目标板组成。两者之间需要三类通道:串口控制台、调试网络、以及被测数据网络。

  • 串口通道:使用 USB 转 TTL 线连接板卡 UART,主机侧 minicom -D /dev/ttyUSB0 -b 115200 或 picocom -b 115200 /dev/ttyUSB0。串口用于 U-Boot 交互、内核启动日志观察和紧急恢复,是“最后一条可信通道”。
  • 调试网络:主机与板卡管理口通过千兆交换机或直连,主机侧配置 192.168.1.10/24,板卡侧 192.168.1.20/24,用于 SSH、文件传输(scp、tftp)和 iperf3 控制连接。
  • 被测数据网络:DPDK 绑定的高速口与主机上的打流网卡(如 Intel X710 或 Mellanox ConnectX)对接,建议使用独立网段,避免管理流量干扰。打流工具可用 TRex、pktgen 或硬件测试仪。

通道搭建完成后,应按“串口可见启动日志 → 管理网可 SSH → 数据网可收发指定帧”的顺序逐级验证。任何一级不通,都不应继续做性能测试,否则数据无法解释。

Layerscape 评估环境:软件栈与三类通道 x86 主机 交叉工具链 aarch64-linux-gnu LSDK flexbuild / 源码仓库 TRex / pktgen 打流工具 minicom / picocom / ssh Layerscape 目标板 U-Boot + RCW + 设备树 Linux 5.10 LTS + DPAA/DPAA2 DPDK 20.11 + VFIO 绑定口 MC 固件 / restool 串口 115200 8N1 调试网 192.168.1.0/24 被测数据网 10G/25G 版本对齐链:以 LSDK 为锚点 LSDK 21.08 发布锚点 U-Boot 2021.04 + 匹配 RCW Linux 5.10 LTS DPAA/DPAA2 使能 DPDK 20.11 LTS + VFIO/UIO 兼容性检查:fsl-mc 总线驱动 ↔ MC 固件 ↔ restool ↔ DPDK PMD 版本一致 任一环节不匹配 → DPAA2 对象创建失败 / 网口无法绑定 / 性能数据不可解释 验证 dmesg

五、环境验证与基线固化

软件栈与通道就绪后,应做一次“空载基线”记录,作为后续所有性能数据的参照。建议至少采集以下信息并归档:

项目采集方式示例值(教学示例)
U-Boot 版本串口 versionU-Boot 2021.04
内核版本uname -a5.10.35-rt
DPDK 版本dpdk-testpmd --versionDPDK 20.11.3
网口绑定状态dpdk-devbind.py --statusdpmac.5 → vfio-pci
大页内存grep Huge /proc/meminfo2048 kB × 1024
串口连通minicom 可见登录提示正常
管理网连通ping 192.168.1.200% 丢包
数据网连通testpmd 收发包计数RX/TX 均增长

这张基线表的意义在于:当后续测得的吞吐或时延出现异常时,可以快速判断是软件栈版本漂移、通道故障,还是被测配置本身的问题。例如,若 dpdk-devbind.py --status 显示网口仍挂在 fsl_dpaa2_eth 内核驱动上,那么 testpmd 必然无法接管,此时任何“DPDK 性能数据”都是无效的。

不要在同一块板卡上混用不同 LSDK 版本的 U-Boot、内核与根文件系统。RCW、设备树与内核驱动之间存在隐式耦合,混用可能导致网口时通时断,使性能数据失去可比性。