news 2026/8/12 15:06:37

NewAPI -安卓 全平台性能压测报告

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NewAPI -安卓 全平台性能压测报告

NewAPI 全平台性能压测报告

2026-07-03

测试设备总览

项目HaiNaSi 机顶盒Xiaomi 23049RAD8CXiaomi M5 Note 7.0Xiaomi M5 Note 6.0POT-AL00a 华为畅享10CM201-2 机顶盒RM2100 路由器XR3 小米路由器R3
CPU4×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-2RM2100XR3
10t340/s773/s1297/s509/s476/s722/s468/s308/s211/s26/s
20t-614/s-758/s---497/s150/s25/s
30t--------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 仅测试到 30t(126MB 内存上限)。XR3 单核 385MHz,10t 即饱和。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 饱和(~100t)
3M5 Note 6.0 MIUI1,132/sCPU 饱和(~150t)
423049RAD8C WiFi997/sWiFi 网卡(50t 拐点)
5POT-AL00a APK761/sKirin 710 CPU 限制
6HaiNaSi585/sCPU 4×A53 1.5GHz 满载
7CM201-2497/sLinux 3.18 内核调度 + Android 进程争抢 CPU
8RM2100~150/sCPU MIPS 880MHz + 126MB RAM
9XR3~26/sCPU MIPS 24KEc 385MHz 单核

同 CPU 不同性能:HaiNaSi vs CM201-2

CM201-2(Hi3798MV300 4×A53 @ 1.5GHz)和 HaiNaSi(4×A53 @ 1.5GHz)的 CPU完全相同,但 CM201-2 峰值 497/s(20t)比 HaiNaSi 的 566/s(50t)低约 15%。

是不是内存不足?

MemTotal: 1048576 kB (1GB) MemFree: 108968 kB MemAvailable: 555236 kB ← 空闲可用 542MB

NewAPI 二进制 50MB,SQLite DB 仅 708KB(one-api.db),Go RSS 约 44MB(PID 15011 的 VSIZE 544644kB)。可用 542MB 远未耗尽,RAM 不是瓶颈。

真正原因

因素HaiNaSiCM201-2影响
内核版本Linux 5.4+ (Ubuntu 20.04)Linux 3.18.24★ 最大差距
内核编译器GCC 9+GCC 4.9.4代码优化程度不同
后台进程零(headless)system_server, surfaceflinger, servicemanager 等争抢 CPU 时间片
C 库glibc 2.31bionic libc (Android)内存分配策略差异

内核 3.18 → 5.4 的关键改进:

  1. CFS 调度器— 3.18 到 5.4 之间,CFS 重写了负载跟踪算法(PELT → EEVDF),上下文切换开销显著降低。高并发场景下,旧内核的调度器本身变成瓶颈。
  2. epoll— 5.4 引入了 EPOLLEXCLUSIVE(避免惊群效应),3.18 没有。Go 的 netpoller 依赖 epoll,旧内核多线程 accept 时锁竞争更严重。
  3. futex 锁— 3.18 的 futex 实现较朴素,高竞争下内核态等待/唤醒开销高。
  4. 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?

理论上刷 Armbian(Linux 5.4+/6.x,headless)后:

  • 去掉 Android 框架的 CPU 争抢
  • 现代内核调度器 + epoll
  • 性能应与 HaiNaSi 拉平到550-580/s

但 CM201-2 的 bootloader 锁死,无法刷机,仅作理论参考。


同机型不同系统:M5 Note Flyme 7.0 vs MIUI 6.0

两台 M5 Note 都是MT6755M(8×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.18
10t476/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 原生)的双重影响:

  1. CFS 调度器— 3.18 引入了sched_autogroup和调度组负载跟踪改进,多线程竞争时更公平
  2. epoll— 3.10 的 epoll 实现较老,3.18 修复了若干惊群和锁竞争问题
  3. TCP 栈— 3.18 的 TCP 快速重传和tcp_slot调度改进
  4. 内存管理— 3.18 的compact_control和页回收优化,减少了高并发下的内存抖动
  5. 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 适配问题(关键发现)

跑分上 23049RAD8C(4×2.3GHz + 4×556MHz)远强于 M5 Note(8×1.8GHz),但 NewAPI 跑起来 M5 Note 反超 25%。

原因:Go GMP 调度器 × big.LITTLE = 短板效应

23049RAD8C 跑 Geekbench: 4× big @ 2.3GHz ─── 100% 满载 ─── 跑分超高 ✓ 4× little @ 556MHz ── 空载/辅助 23049RAD8C 跑 NewAPI 50t(Go GMP 视角): 50 个 goroutine 随机分配到 8 个 OS 线程 → ~25 个落在 big 上(快) → ~25 个落在 little 上(慢) → 慢核上的请求响应慢 → 拖死整体吞吐 M5 Note 跑 NewAPI 50t(Go GMP 视角): 8×A53 @ 1.8GHz ─── 全部一样 → goroutine 落哪都一样快 → 8 核均匀满载,线性扩展

量化

设备快核慢核有效算力50t RPS利用率
23049RAD8C4×2.3GHz4×0.556GHz11.4GHz997/s慢核拖腿
M5 Note 7.08×1.8GHz14.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 原生支持GOOS=linuxGOARCH=arm go build-tagsno_web-ldflags="-s -w"

通过go.mod replace github.com/glebarez/sqlite => ./sqlite-stub绕过modernc.org/libc的架构限制。运行时连接远程 MySQL。

适用设备:所有平台,适合长期部署。
二进制大小:~55MB(UPX 后 ~10MB)。
局限:压测数据受 MySQL 网络延迟影响。

方案 B:CGo 静态 + 本地 SQLite(适用于所有架构)

# 需要对应架构的交叉编译器CGO_ENABLED=1CC=<cross-gcc>\GOOS=linuxGOARCH=<arch>\go build-tagsno_web-ldflags="-s -w -linkmode=external -extldflags=-static"

通过go.mod replace github.com/glebarez/sqlite => ./sqlite-cgo将 SQLite 替换为 CGo 实现的mattn/go-sqlite3

适用设备:需要本地 SQLite 的压测场景。
二进制大小:~56MB(UPX 后 ~10.5MB)。
局限:musl 工具链需静态链接(-static),否则与 glibc 固件不兼容。

方案 C:Android 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-musl
I/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-components=1

最终编译命令

exportPATH=/usr/local/go/bin:/opt/mipsel-tc/bin:$PATHexportCGO_ENABLED=1CC=mipsel-linux-muslsf-gccexportGOOS=linuxGOARCH=mipsleGOMIPS=softfloat go build-tagsno_web\-ldflags="-s -w -linkmode=external -extldflags=-static"\-onewapi-mipsle-sqlite.

部署说明

RM2100 部署

# 清理 /tmp,腾出 61MB 空间sshadmin@192.168.123.1"rm -rf /tmp/*"# 上传二进制(建议不压缩,避免 OOM)scpnewapi-mipsle-sqlite admin@192.168.123.1:/tmp/newapi# 运行(本地 SQLite)SQLITE_PATH=/tmp/bench.db /tmp/newapi--port3000

Android 部署

使用oneapi-android-apk/newapi/build_from_source.ps1构建 APK,安装后通过 env.conf 配置环境变量。

Android 4.x 部署(CM201-2 机顶盒)

Android 4.4.2(API 19)的 bionic libc 缺少sigfillset符号,Go 的GOOS=android编译的.so无法执行。

解决方案:GOOS=linux GOARCH=arm编译纯 Go 静态 ELF 二进制(CGO_ENABLED=0),放到 APK 的jniLibs/armeabi-v7a/目录中。Android 4.x 的ProcessBuilder可以像执行 Linux ELF 一样执行它。

GOOS=linuxGOARCH=armGOARM=7CGO_ENABLED=0\go build-tagsno_web-ldflags="-s -w"\-oapp/src/main/jniLibs/armeabi-v7a/liboneapi.so.

注意:

  • GOOS=android不适用于 API < 21 的旧版 Android,必须改用GOOS=linux
  • GOARCH=arm+GOARM=7兼容所有 ARMv7 Android 设备
  • CGo 二进制(GOOS=android必须 CGO)不支持 API 19,纯 Go 二进制无此限制

HaiNaSi / Linux 部署

scpnewapi-linux-arm admin@192.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 响应

设备性能远高于宽带上限。瓶颈在宽带,不在设备。

最终排名

设备峰值 RPS
23049RAD8C (USB)1,297
M5 Note 7.0 (WiFi)1,253
M5 Note 6.0 (WiFi)1,132
23049RAD8C (WiFi)997
POT-AL00a (APK)761
HaiNaSi (WiFi)585
CM201-2 (WiFi)497
RM2100 (WiFi)~150
XR3 (WiFi)~26
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 15:05:24

如何在3分钟内实现iOS虚拟定位:iFakeLocation完全指南

如何在3分钟内实现iOS虚拟定位&#xff1a;iFakeLocation完全指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 你是否曾想在地图上任意穿梭&#xff0c…

作者头像 李华
网站建设 2026/8/12 15:05:11

Java Timer与TimerTask深度解析:从核心机制到生产环境避坑指南

1. 从一次线上故障说起&#xff1a;被遗忘的Timer那天晚上&#xff0c;系统监控突然告警&#xff0c;一个核心服务的CPU使用率在几分钟内从20%飙升到95%&#xff0c;并且居高不下。登录服务器一看&#xff0c;top命令显示一个Java进程几乎吃满了一个核心。紧急线程Dump后&#…

作者头像 李华
网站建设 2026/8/12 15:04:48

如何快速提升围棋水平:KaTrain围棋AI训练工具完全指南

如何快速提升围棋水平&#xff1a;KaTrain围棋AI训练工具完全指南 【免费下载链接】katrain Improve your Baduk skills by training with KataGo! 项目地址: https://gitcode.com/gh_mirrors/ka/katrain 围棋作为东方智慧的瑰宝&#xff0c;其复杂程度让无数爱好者望而…

作者头像 李华
网站建设 2026/8/12 15:04:25

电商客服沟通系统:150份话术资料构建高效服务与转化体系

1. 从“话术”到“沟通系统”&#xff1a;为什么你需要这150份资料如果你在电商行业待过&#xff0c;无论是自己做老板、做运营还是做客服&#xff0c;一定都经历过这样的时刻&#xff1a;面对顾客千奇百怪的问题&#xff0c;大脑突然一片空白&#xff0c;不知道该回什么&#…

作者头像 李华
网站建设 2026/8/12 15:03:24

从点击到接收:深入解析网络数据传输的分层模型与核心协议

1. 从点击发送到对方接收&#xff1a;一次数据旅行的全景拆解我们每天都在进行无数次的数据交换&#xff1a;发送一条微信消息、浏览一个网页、观看一段在线视频。每一次看似瞬间完成的动作背后&#xff0c;都隐藏着一场精密、复杂且环环相扣的数据传输接力赛。这个过程&#x…

作者头像 李华