沪深 Level-2 SDK 环境检查
本页提供一个面向沪深 Level-2 C++ SDK 的环境检查脚本。脚本会读取当前主机的系统和 SDK 配置,帮助你在接入前快速发现明显问题;脚本不会修改 sysctl、网卡参数或大页内存配置。
脚本下载地址:check_env.sh
建议的使用顺序
在实际运行 SDK 的 Linux 主机上检查接收行情的网卡。根据结果完成配置后重新运行脚本,再继续 SDK 或 Demo 接入。脚本输出中的 PASS、WARN 和 FAIL 反映当前主机的检查结果,驱动兼容性和现场网络仍需人工确认。
1. 下载并运行
建议在 SDK 交付包根目录(包含 conf 的目录)运行,以便脚本找到配置文件。先用 ip link show 查看网卡,将示例中的 eth0 替换为接收行情的实际网卡名称,例如 enp1s0f0。
curl -fL -o check_env.sh https://haha-sg.oss-cn-shenzhen.aliyuncs.com/check_env.sh
sh check_env.sh eth0
如果主机没有 curl,也可以使用 wget:
wget -O check_env.sh https://haha-sg.oss-cn-shenzhen.aliyuncs.com/check_env.sh
sh check_env.sh eth0
脚本不会自动修改配置。检查完成后,可以根据提示回到接入前检查清单逐项处理。
2. 命令用法
用法: check_env.sh IFACE [选项]
IFACE 必填,要检查的网卡名称,例如 eth0
-c, --config FILE SDK 配置文件,默认查找 conf/ah_sdk_sf.conf
-i, --interface IFACE 以选项形式指定网卡(兼容写法)
--require-onload 强制要求 Onload 版本在 8.0 至 9.1.1 之间
--strict 将所有警告也视为失败
-h, --help 显示帮助
常用示例:
# 指定 SDK 配置文件
sh check_env.sh enp1s0f0 --config /opt/annhoo/conf/ah_sdk_sf.conf
# Solarflare 模式:要求安装并使用指定范围内的 Onload;警告也返回失败
sh check_env.sh enp1s0f0 --require-onload --strict
# 查看帮助
sh check_env.sh --help
帮助参数为 -h 或 --help,不支持 -help。网卡也可以通过 sh check_env.sh -i enp1s0f0 指定。未使用 --config 时,脚本相对当前工作目录依次查找 conf/ah_sdk_sf.conf 和 ./ah_sdk_sf.conf;找不到时会警告并跳过配置文件及绑核检查。
脚本会提示人工确认 SDK 主机和 FPGA 是否处于同一网络;网卡链路状态由脚本检查。未指定 --require-onload 时,普通网卡模式可以忽略 Onload 警告。
3. 检查内容
脚本将运行环境与系统配置中的手工检查整理为自动检查,主要内容如下:
| 检查项 | 脚本检查内容 | 建议或通过条件 |
|---|---|---|
| 操作系统 | uname、/etc/os-release | Linux;发行版和版本在脚本识别范围内 |
| CPU 架构 | uname -m | x86_64 |
| Linux 内核 | 输出 uname -r 的内核版本 | SDK、Onload 和网卡驱动的兼容组合需人工核对,脚本不自动判断 |
| 网络链路 | ip link 检查指定网卡状态 | 指定网卡处于 UP;SDK 主机和 FPGA 处于同一网络需人工确认 |
| Socket 接收缓冲区 | net.core.rmem_default、net.core.rmem_max | rmem_default >= 268435456,rmem_max >= 536870912 |
| 网卡 RX 环形缓冲区 | ethtool -g IFACE | 当前 RX 值达到网卡支持的最大值;读取不到时给出警告 |
| 大页内存 | /proc/meminfo | HugePages_Total > 0 |
| CPU 与 NUMA | 在线 CPU 数、NUMA 拓扑 | 建议至少能规划 6 个接收线程和 3 个分发线程,接收线程尽量位于同一 NUMA 节点 |
| SDK 配置文件 | 查找配置文件并读取 recv_np、index_np、snapshot_np、tick_np | 脚本检查已找到的绑核值是否为非负整数且小于在线 CPU 数 |
| Onload(Solarflare) | onload --version | 当前脚本接受 8.0 至 9.1.1(含边界);加上 --require-onload 后,未安装或版本不符会失败 |
当前脚本对 Onload 的版本检查上限为 9.1.1,而主手册写明的最低版本为 8.0。使用更高版本时应按交付包确认兼容性;脚本报告版本超出范围不等于该组合已经过不兼容验证。普通网卡模式不要求安装 Onload,但缺少 Onload 仍会产生 WARN,使用 --strict 时也会因此返回失败。
CPU 检查只核对在线逻辑 CPU 数、NUMA 拓扑可读性和已找到的绑核编号,不验证 9 个线程的配置是否齐全、核心是否重复或被其他进程占用,也不验证绑核是否位于同一 NUMA 节点。SDK 主机和 FPGA 是否处于同一网络仍需结合现场网络规划和实际组播收包测试确认。
需要调整系统参数时,请参阅运行环境与系统配置。
4. 支持的操作系统与工具
4.1 操作系统和架构
以下区分主手册的适配范围和当前脚本的版本判断规则;发行版检查通过不代表 SDK、Onload 与驱动组合已完成适配验证。
| 系统 | 脚本行为 | 手册中的适配说明 |
|---|---|---|
| RHEL / Red Hat | 版本 ≥ 7.4 时通过,低于此版本失败 | 推荐 RHEL 7.4 x64 及以上 |
| CentOS | 版本 ≥ 7.4 时通过,低于此版本失败 | 已适配 CentOS 7.9 |
| Rocky Linux | 版本 ≥ 7.4 时通过,低于此版本失败 | 已适配 Rocky Linux 8.5+ |
| AlmaLinux | 版本 ≥ 7.4 时通过,低于此版本失败 | 主手册未列为已适配发行版,需人工确认 |
| Ubuntu | 版本 ≥ 22.04 时通过,低于此版本失败 | 已适配 Ubuntu 22.04 和 Ubuntu 24.04.4 LTS |
| 其他 Linux 发行版 | 输出警告,要求人工确认 | 不在当前脚本的明确适配清单中 |
| Windows、macOS 等非 Linux 系统 | 不支持作为本检查脚本的目标环境;非 Linux 系统检查失败 | SDK 运行环境要求 Linux |
x86_64 / amd64 | 通过架构检查 | 手册推荐 x86_64 |
| 其他 CPU 架构 | 输出警告 | 需要联系技术支持确认 SDK、网卡驱动和 Onload 是否支持 |
脚本使用 POSIX sh 编写,依赖 Linux 的 /proc、/sys 和系统工具。AlmaLinux 即使发行版检查显示 PASS,也应结合交付包确认;其他 Linux 发行版或非 x86_64 架构出现 WARN 时同样需要人工核对。
4.2 检查工具
ip 缺失时无法检查网卡并会导致失败;/proc/meminfo 不可读时无法检查大页并会导致失败。建议准备 ip、ethtool、numactl,以及系统通常自带的 sh、awk、sed、grep、uname 等工具。软件包名称因发行版而异:Ubuntu 的 ip 通常由 iproute2 提供,RHEL 系列通常由 iproute 提供。
ethtool 缺失或无法读取网卡 RX 参数时会警告;没有 numactl 时,脚本会尝试通过 sysfs 检测 NUMA 拓扑。请使用能够读取网卡、系统参数和 SDK 配置的账号运行,读取失败时由运维人员确认工具、驱动和权限。
5. 如何解读结果
脚本结尾会打印汇总表,并通过退出码表示结果:
| 状态 | 含义 |
|---|---|
PASS | 已满足脚本对应的检查条件 |
WARN | 未达到建议值、缺少可选信息,或需要结合现场条件人工确认 |
FAIL | 检查到明确不满足 SDK 运行要求的条件 |
默认情况下,只要没有 FAIL,脚本就会以成功退出,并提示仍需处理的警告。加上 --strict 后,任何 WARN 都会使脚本以失败退出,适合在部署流水线中作为门禁使用。
| 退出码 | 含义 |
|---|---|
0 | 检查没有硬性失败(默认模式下可能仍有警告);显示帮助也返回 0 |
1 | 有失败项,或 --strict 模式下有警告项 |
2 | 命令参数错误,例如缺少网卡、未知选项或选项缺少参数 |
可在执行结束后运行 echo $? 查看退出码。
典型输出结构如下;实际检查项目和警告数量会随主机配置、网卡能力及命令行选项变化:
检查结果汇总:
NO | STATUS | RESULT
-----+--------+------------------------------------------------------------
1 | PASS | 操作系统为 Linux
2 | PASS | CPU 架构为 x86_64
3 | WARN | SDK 与 FPGA 是否处于相同网络需人工确认
...
=== 检查结束:通过项已逐项标记 ===
结果:未发现硬性失败(警告若干项,请按提示人工确认)
如果检查结果包含 FAIL,或者在 --strict 模式下包含 WARN,请先处理对应项目,再运行脚本复查。对于网络是否同网、Onload 是否必须启用等现场相关问题,仍以实际部署模式和交付要求为准。