# 沪深 Level-2 SDK 环境检查 来源:https://doc.annhoo.cn/hushensdk/env-check.html 摘要:使用安湖提供的 check_env.sh 检查沪深 Level-2 C++ SDK 的 Linux 操作系统、网络、缓冲区、大页、CPU 绑核、配置文件和 Onload 环境。 本页提供一个面向沪深 Level-2 C++ SDK 的环境检查脚本。脚本会读取当前主机的系统和 SDK 配置,帮助你在接入前快速发现明显问题;脚本不会修改 sysctl、网卡参数或大页内存配置。 脚本下载地址:check_env.sh 建议的使用顺序 在实际运行 SDK 的 Linux 主机上检查接收行情的网卡。根据结果完成配置后重新运行脚本,再继续 SDK 或 Demo 接入。脚本输出中的 PASS、WARN 和 FAIL 反映当前主机的检查结果,驱动兼容性和现场网络仍需人工确认。 建议在 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 脚本不会自动修改配置。检查完成后,可以根据提示回到接入前检查清单逐项处理。 用法: 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 警告。 脚本将运行环境与系统配置中的手工检查整理为自动检查,主要内容如下: 检查项 | 脚本检查内容 | 建议或通过条件 | 操作系统 | 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 是否处于同一网络仍需结合现场网络规划和实际组播收包测试确认。 需要调整系统参数时,请参阅运行环境与系统配置。 以下区分主手册的适配范围和当前脚本的版本判断规则;发行版检查通过不代表 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 时同样需要人工核对。 ip 缺失时无法检查网卡并会导致失败;/proc/meminfo 不可读时无法检查大页并会导致失败。建议准备 ip、ethtool、numactl,以及系统通常自带的 sh、awk、sed、grep、uname 等工具。软件包名称因发行版而异:Ubuntu 的 ip 通常由 iproute2 提供,RHEL 系列通常由 iproute 提供。 ethtool 缺失或无法读取网卡 RX 参数时会警告;没有 numactl 时,脚本会尝试通过 sysfs 检测 NUMA 拓扑。请使用能够读取网卡、系统参数和 SDK 配置的账号运行,读取失败时由运维人员确认工具、驱动和权限。 脚本结尾会打印汇总表,并通过退出码表示结果: 状态 | 含义 | 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 是否必须启用等现场相关问题,仍以实际部署模式和交付要求为准。