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 → 数据网可收发指定帧”的顺序逐级验证。任何一级不通,都不应继续做性能测试,否则数据无法解释。
五、环境验证与基线固化
软件栈与通道就绪后,应做一次“空载基线”记录,作为后续所有性能数据的参照。建议至少采集以下信息并归档:
| 项目 | 采集方式 | 示例值(教学示例) |
|---|---|---|
| U-Boot 版本 | 串口 version | U-Boot 2021.04 |
| 内核版本 | uname -a | 5.10.35-rt |
| DPDK 版本 | dpdk-testpmd --version | DPDK 20.11.3 |
| 网口绑定状态 | dpdk-devbind.py --status | dpmac.5 → vfio-pci |
| 大页内存 | grep Huge /proc/meminfo | 2048 kB × 1024 |
| 串口连通 | minicom 可见登录提示 | 正常 |
| 管理网连通 | ping 192.168.1.20 | 0% 丢包 |
| 数据网连通 | testpmd 收发包计数 | RX/TX 均增长 |
这张基线表的意义在于:当后续测得的吞吐或时延出现异常时,可以快速判断是软件栈版本漂移、通道故障,还是被测配置本身的问题。例如,若 dpdk-devbind.py --status 显示网口仍挂在 fsl_dpaa2_eth 内核驱动上,那么 testpmd 必然无法接管,此时任何“DPDK 性能数据”都是无效的。