
NewAPI 全平台性能压测报告2026-07-03测试设备总览项目HaiNaSi 机顶盒Xiaomi 23049RAD8CXiaomi M5 Note 7.0Xiaomi M5 Note 6.0POT-AL00a 华为畅享10CM201-2 机顶盒RM2100 路由器XR3 小米路由器R3CPU4×A53 1.5GHz4×2.3GHz 4×556MHzMT6755M 8×A53 1.8GHz (Helio P10)MT6755M 8×A53 1.8GHz (Helio P10)4×A73 2.2GHz 4×A53 1.7GHz (Kirin 710)Hi3798MV300 4×A53 1.5GHzMIPS 1004Kc 880MHz ×2MIPS 24KEc 385MHz (单核)RAM723MB15GB3GB3GB4GB1GB126MB123MB内核Linux 5.4 (Ubuntu 20.04)Android 14 (GKI)Android 7.0 (Linux 3.18)Android 6.0 (Linux 3.10)Android 10 (Linux 4.x)Linux 3.18.24Linux 3.4Linux 5.4 (OpenWrt)系统Ubuntu 20.04 armv7lAndroid 14Android 7.0 FlymeAndroid 6.0 MIUIAndroid 10 (EMUI)Android 4.4.2Padavan (Linux 3.4)OpenWrt 5.4二进制55MB linux/arm68MB APK arm6468MB APK arm6468MB APK arm6471MB APK arm6450MB linux/arm (APK内)56MB linux/mipsle56MB linux/mipsle数据库SQLiteSQLiteSQLiteSQLiteSQLiteSQLite (CGo 静态)SQLite (CGo 静态)SQLite (CGo 静态)测试端点GET /api/statusGET /api/statusGET /api/statusGET /api/statusGET /api/statusGET /api/statusGET /api/statusGET /api/status吞吐对比并发HaiNaSi23049RAD8C WiFi23049RAD8C USBM5 Note 7.0M5 Note 6.0 WiFiM5 Note 6.0 ADBPOT-AL00a APKCM201-2RM2100XR310t340/s773/s1297/s509/s476/s722/s468/s308/s211/s26/s20t-614/s-758/s---497/s150/s25/s30t--------151/s-50t566/s997/s675/s1035/s935/s393/s761/s368/s--100t384/s597/s493/s1253/s1098/s347/s461/s---200t275/s459/s450/s1133/s1132/s318/s402/s---全部 0% 错误率。RM2100 仅测试到 30t126MB 内存上限。XR3 单核 385MHz10t 即饱和。CM201-2 在 20t 达峰497/s后 50t 回落至 368/s。性能排名峰值排名设备峰值 RPS瓶颈123049RAD8C USB RNDIS1,297/sUSB 2.0 单队列10t 极限2M5 Note 7.0 Flyme1,253/sCPU 8×A53 饱和~100t3M5 Note 6.0 MIUI1,132/sCPU 饱和~150t423049RAD8C WiFi997/sWiFi 网卡50t 拐点5POT-AL00a APK761/sKirin 710 CPU 限制6HaiNaSi585/sCPU 4×A53 1.5GHz 满载7CM201-2497/sLinux 3.18 内核调度 Android 进程争抢 CPU8RM2100~150/sCPU MIPS 880MHz 126MB RAM9XR3~26/sCPU MIPS 24KEc 385MHz 单核同 CPU 不同性能HaiNaSi vs CM201-2CM201-2Hi3798MV300 4×A53 1.5GHz和 HaiNaSi4×A53 1.5GHz的 CPU完全相同但 CM201-2 峰值 497/s20t比 HaiNaSi 的 566/s50t低约 15%。是不是内存不足MemTotal: 1048576 kB (1GB) MemFree: 108968 kB MemAvailable: 555236 kB ← 空闲可用 542MBNewAPI 二进制 50MBSQLite DB 仅 708KBone-api.dbGo RSS 约 44MBPID 15011 的 VSIZE 544644kB。可用 542MB 远未耗尽RAM 不是瓶颈。真正原因因素HaiNaSiCM201-2影响内核版本Linux 5.4 (Ubuntu 20.04)Linux 3.18.24★ 最大差距内核编译器GCC 9GCC 4.9.4代码优化程度不同后台进程零headlesssystem_server, surfaceflinger, servicemanager 等争抢 CPU 时间片C 库glibc 2.31bionic libc (Android)内存分配策略差异内核 3.18 → 5.4 的关键改进CFS 调度器— 3.18 到 5.4 之间CFS 重写了负载跟踪算法PELT → EEVDF上下文切换开销显著降低。高并发场景下旧内核的调度器本身变成瓶颈。epoll— 5.4 引入了 EPOLLEXCLUSIVE避免惊群效应3.18 没有。Go 的 netpoller 依赖 epoll旧内核多线程 accept 时锁竞争更严重。futex 锁— 3.18 的 futex 实现较朴素高竞争下内核态等待/唤醒开销高。TCP 栈— 5.4 的 TCP 保活、backlog 处理、TIME_WAIT 回收都有显著优化。量化验证10t低竞争HaiNaSi 340/s vs CM201-2 308/s → 差距仅 10%。低并发时调度和锁竞争影响小。50t高竞争HaiNaSi 566/s vs CM201-2 368/s → 差距拉大到 35%。高并发时内核调度和 epoll 开销被放大。50t 回落幅度CM201-2 从 20t 峰值 497/s 降到 368/s-26%HaiNaSi 50t 仍是峰值566/s—— 说明 CM201-2 在更低并发就开始内耗。如果 CM201-2 刷 Armbian理论上刷 ArmbianLinux 5.4/6.xheadless后去掉 Android 框架的 CPU 争抢现代内核调度器 epoll性能应与 HaiNaSi 拉平到550-580/s但 CM201-2 的 bootloader 锁死无法刷机仅作理论参考。同机型不同系统M5 Note Flyme 7.0 vs MIUI 6.0两台 M5 Note 都是MT6755M8×A53 1.8GHz, Helio P10 3GB RAM但系统不同对比项M5 Note MIUI 6.0M5 Note Flyme 7.0系统Android 6.0 MIUIAndroid 7.0 Flyme内核Linux 3.10Linux 3.1810t476/s509/s(7%)50t935/s1035/s(11%)100t1098/s1253/s(14%)峰值1,132/s (200t)1,253/s (100t)(11%)分析差距来自内核版本3.10 → 3.18 系统优化MIUI 定制 vs Flyme 原生的双重影响CFS 调度器— 3.18 引入了sched_autogroup和调度组负载跟踪改进多线程竞争时更公平epoll— 3.10 的 epoll 实现较老3.18 修复了若干惊群和锁竞争问题TCP 栈— 3.18 的 TCP 快速重传和tcp_slot调度改进内存管理— 3.18 的compact_control和页回收优化减少了高并发下的内存抖动MIUI 后台负担— MIUI 的 system_server、安全中心、云服务等后台进程比 Flyme 占用更多 CPU 时间片关键发现差距随并发递增10t 7% → 100t 14%说明内核改进和系统优化在高竞争下价值更大Flyme 7.0 在100t 就达峰1253/s而 MIUI 6.0 要到200t 才达峰1132/s—— 新内核调度效率更高更早填满 CPU两台 M5 Note 都碾压 23049RAD8C骁龙 4×2.3GHz 4×556MHz在 WiFi 下的 997/s ——八核对称 A53 跑 NewAPI 比 big.LITTLE 异构 CPU 更稳定因为 Go 的 goroutine 调度在对称核心上更高效big.LITTLE 适配问题关键发现跑分上 23049RAD8C4×2.3GHz 4×556MHz远强于 M5 Note8×1.8GHz但 NewAPI 跑起来 M5 Note 反超 25%。原因Go GMP 调度器 × big.LITTLE 短板效应23049RAD8C 跑 Geekbench 4× big 2.3GHz ─── 100% 满载 ─── 跑分超高 ✓ 4× little 556MHz ── 空载/辅助 23049RAD8C 跑 NewAPI 50tGo GMP 视角 50 个 goroutine 随机分配到 8 个 OS 线程 → ~25 个落在 big 上快 → ~25 个落在 little 上慢 → 慢核上的请求响应慢 → 拖死整体吞吐 M5 Note 跑 NewAPI 50tGo GMP 视角 8×A53 1.8GHz ─── 全部一样 → goroutine 落哪都一样快 → 8 核均匀满载线性扩展量化设备快核慢核有效算力50t RPS利用率23049RAD8C4×2.3GHz4×0.556GHz11.4GHz997/s慢核拖腿M5 Note 7.08×1.8GHz无14.4GHz1035/s满载均衡23049RAD8C 的 4 个弱核556MHz只有强核2.3GHz的 24% 性能。当 goroutine 随机分布到弱核时整个请求链路被拖慢。这就是Go 在非对称 CPU 上的适配问题——GMP 调度器不知道哪个核快哪个核慢一视同仁地分配 goroutine。结论跑分看单核峰值NewAPI 看多核均衡。对称多核如 8×A53比 big.LITTLE 更适合 Go 服务因为 GMP 调度器天然偏好同构 CPU。部署 NewAPI 时优先选同构核心的设备而非跑分高但非对称的旗舰 SoC。编译方法总览方案 A纯 Go 远程 MySQL适用于 arm/arm64/amd64# 无需交叉编译器Go 原生支持GOOSlinuxGOARCHarm go build-tagsno_web-ldflags-s -w通过go.mod replace github.com/glebarez/sqlite ./sqlite-stub绕过modernc.org/libc的架构限制。运行时连接远程 MySQL。适用设备所有平台适合长期部署。二进制大小~55MBUPX 后 ~10MB。局限压测数据受 MySQL 网络延迟影响。方案 BCGo 静态 本地 SQLite适用于所有架构# 需要对应架构的交叉编译器CGO_ENABLED1CCcross-gcc\GOOSlinuxGOARCHarch\go build-tagsno_web-ldflags-s -w -linkmodeexternal -extldflags-static通过go.mod replace github.com/glebarez/sqlite ./sqlite-cgo将 SQLite 替换为 CGo 实现的mattn/go-sqlite3。适用设备需要本地 SQLite 的压测场景。二进制大小~56MBUPX 后 ~10.5MB。局限musl 工具链需静态链接-static否则与 glibc 固件不兼容。方案 CAndroid APK适用于 arm64 手机Android 项目在oneapi-android-apk/newapi/中构建通过build_from_source.ps1编译 Go 源码为 android/arm64 二进制再打包为 APK。特点支持 env.conf 配置环境变量前台服务模式性能最佳。RM2100 编译全记录关键障碍问题原因解决modernc.org/libc无 mipsle 标签纯 Go SQLite 不支持 MIPSgo.mod replace绕过stdlib.h: No such file or directoryclang 缺 mipsle sysroot下载 musl.cc 工具链sh: newapi: not found动态链接需 musl ld-musl-static静态编译Bus errormusl libc 与 kernel 3.4 不兼容静态编译不使用 musl ld-muslI/O error 写入闪存SPI NOR ext4 不稳定改用 /tmp (tmpfs)OOM killed126MB 内存不足不使用 UPX 压缩预留 /tmp 空间工具链获取musl.cc 的 mipsel-linux-muslsf-cross约 102MB部署到 WSL 的/opt/mipsel-tc/curl-L-omipsel-cross.tgz https://musl.cc/mipsel-linux-muslsf-cross.tgzsudotarxzf mipsel-cross.tgz-C/opt/mipsel-tc --strip-components1最终编译命令exportPATH/usr/local/go/bin:/opt/mipsel-tc/bin:$PATHexportCGO_ENABLED1CCmipsel-linux-muslsf-gccexportGOOSlinuxGOARCHmipsleGOMIPSsoftfloat go build-tagsno_web\-ldflags-s -w -linkmodeexternal -extldflags-static\-onewapi-mipsle-sqlite.部署说明RM2100 部署# 清理 /tmp腾出 61MB 空间sshadmin192.168.123.1rm -rf /tmp/*# 上传二进制建议不压缩避免 OOMscpnewapi-mipsle-sqlite admin192.168.123.1:/tmp/newapi# 运行本地 SQLiteSQLITE_PATH/tmp/bench.db /tmp/newapi--port3000Android 部署使用oneapi-android-apk/newapi/build_from_source.ps1构建 APK安装后通过 env.conf 配置环境变量。Android 4.x 部署CM201-2 机顶盒Android 4.4.2API 19的 bionic libc 缺少sigfillset符号Go 的GOOSandroid编译的.so无法执行。解决方案用GOOSlinux GOARCHarm编译纯 Go 静态 ELF 二进制CGO_ENABLED0放到 APK 的jniLibs/armeabi-v7a/目录中。Android 4.x 的ProcessBuilder可以像执行 Linux ELF 一样执行它。GOOSlinuxGOARCHarmGOARM7CGO_ENABLED0\go build-tagsno_web-ldflags-s -w\-oapp/src/main/jniLibs/armeabi-v7a/liboneapi.so.注意GOOSandroid不适用于 API 21 的旧版 Android必须改用GOOSlinuxGOARCHarmGOARM7兼容所有 ARMv7 Android 设备CGo 二进制GOOSandroid必须 CGO不支持 API 19纯 Go 二进制无此限制HaiNaSi / Linux 部署scpnewapi-linux-arm admin192.168.31.82:/opt/newapiSQLITE_PATH/opt/data/newapi.db /opt/newapi--port3000最终结论设备选择建议用途推荐设备理由个人/家庭低并发RM2100 路由器 / CM201-2 机顶盒现成设备功耗低150-500/s 够用多人分享10人HaiNaSi / 任意手机500 RPS绰绰有余高并发10人M5 Note 7.0/ 骁龙 625 手机1000-1250 RPS极限性能23049RAD8C USB 网卡1300 RPS真正瓶颈家庭宽带上行 10-50 Mbps ≈ 同时 2-3 个流式 AI 响应设备性能远高于宽带上限。瓶颈在宽带不在设备。最终排名设备峰值 RPS23049RAD8C (USB)1,297M5 Note 7.0 (WiFi)1,253M5 Note 6.0 (WiFi)1,13223049RAD8C (WiFi)997POT-AL00a (APK)761HaiNaSi (WiFi)585CM201-2 (WiFi)497RM2100 (WiFi)~150XR3 (WiFi)~26