《爛裝置想跑 AI》全系列架構導覽:百元晶片的極限壓榨與破局地圖

「當硬體成本被砍到骨折,剩下的每一毫秒與每一 KB,都是軟體架構師用命換來的。」

這是一個關於如何在百元級高通低階晶片(4 顆 Cortex-A53 @ 1.3GHz、2GB RAM、無 NPU、Android 開機直接吃掉 1.3GB)極度受限的硬體上,扛起金融級 BCTC 活體人臉辨識、要求小於 1 秒開門、99.99% 精度且 7×24 小時不死機的真實工程實錄。

在邊緣工控終端的世界裡,沒有「加記憶體」或「換高階晶片」這種選項——硬體 BOM Cost 每壓低一美元,出貨萬台就是幾十萬的淨利。當公司選型拍板了這顆連滑桌面都會喘的晶片時,我們唯一的活路,就是從 Android 系統層級開始動刀,把整個系統壓榨到極致。

本導覽將這趟長達數百天的「軟硬兼施」榨汁歷程,整理為五大破局階段與 17 篇核心實戰長文。


一、 全系列 5 大階段破局架構圖

[ 物理死局 ] 2048MB 實體 RAM - 1300MB 系統常駐 - 950MB 雙鏡高頻 Buffer = -202MB (直接死機)
    │
    ├── 階段 1:系統減磅與水線治理 (淨奪回 520MB+ 實體記憶體)
    │     ├── 算力與記憶體儀表板建立 (USS / PSS / RSS 精準量測)
    │     ├── AOSP 裁剪:go_defaults 與 Kiosk 20+ 無用系統服務徹底拔除
    │     └── 內核抗壓:ZRAM 壓縮、SWAP 禁忌與 KSM 功耗取捨
    │
    ├── 階段 2:底層抗壓、LMKD 與 GC 決戰 (720 小時穩態 0 GC Thrashing)
    │     ├── LMKD 自定義進程水線殺手與防 OOM 策略
    │     ├── 大內存全面下沉 C++ Native,Java Heap 恆定 15MB
    │     ├── 三路高頻影像流 DirectBuffer 跨層零拷貝
    │     └── 物理世界 Watchdog:GPIO 電擊與顯式靜態廣播拉活
    │
    ├── 階段 3:影像演算法極限榨汁 (150ms ➔ 3ms,百倍提速)
    │     ├── QFastCV + ARM NEON 向量指令集:YUV 轉碼 < 1ms
    │     └── ARM Compute Library (ACL) SGEMM:5,000 人矩陣特徵比對 3ms
    │
    ├── 階段 4:雙鏡時空同步與 3D 空間感知 (Sony iToF 30fps 即時點雲)
    │     ├── RGB 與 iToF 跨感測器毫秒級時空同步與非阻塞隊列
    │     └── RAW12 深度圖轉 3D 空間點雲與 OpenGL ES 即時著色
    │
    └── 階段 5:邊緣工控連線與近場配網 (工業級穩固連線)
          ├── WebSocket 雙向長連線、Protobuf 序列化與離線雙寫架構
          ├── 永遠不關相機:WebRTC 視訊免切換 0ms 搶相機黑屏解決方案
          └── 門禁機當 BLE Peripheral 近場配網與 31-Byte 廣播拆分

二、 全系列 17 篇核心文章導讀與閱讀路徑

階段 1:硬體瓶頸量測與系統減磅


階段 2:底層記憶體防線、LMKD 與 GC 決戰

  • 第 4 篇:記憶體控場師 LMKD
    從 In-kernel LMK 演進到 Userspace LMKD;修改 ProcessList.java 快取上限(32 ➔ 3);可用 Free RAM 從瀕危的 64MB 暴增至 470MB。
  • 第 5 篇:GC 是唯一會關心你 OOM 的好人
    深度剖析 ART GC Log(for alloc vs background vs NativeAlloc);第一性原理將大記憶體全面下沉 C++ Native,讓 Java Heap 恆定維持在 15MB 舒適圈。
  • 第 6 篇:三路高頻影像流:三倍蓋亞,趕快 GC
    RGB (13.8MB/s) + ToF (55.3MB/s) 總量 69.1MB/s 原始灌入!透過「0-new 鐵碗隊列」、「DirectBuffer 跨層零拷貝」與「雙層背壓 Drop-Oldest」,待機 CPU 負載從 100% 降至 15%~20%。
  • 第 7 篇:物理世界需要 watchdog
    獨立 MCU 遭閹割後的軟體自救:顯式靜態廣播冷啟動拉活進程;Linux NUD (ARP) 0 CPU 監控網卡硬體死鎖;相機斷流兩段式 GPIO 500ms 電擊重啟機制。
  • 補充篇:GC Thrashing 思路補充
    揭露每 20ms 觸發一次 GC 清理 1KB 的瀕死現場;揪出第三方庫殘留 finalize() 塞爆 FinalizerDaemon 獨木橋,全面邁向顯式生命週期。

階段 3:影像演算法極限榨汁與異質運算


階段 4 & 5:雙目 3D 視覺、ToF 點雲與工控通訊


三、 核心工程心法總結

  1. 先把系統壓到剩骨頭,AI 才能長肌肉:不要期待在臃腫的 AOSP 預設系統上跑重型神經網路,系統裁剪是邊緣運算的第一道防線。
  2. 記憶體是物理世界的有限資源:Java Heap 只是表面,DMA Buffer、ION 記憶體、Native Alloc 與 Page Cache 才是引發 OOM 的深水區。
  3. 零拷貝是唯一的高頻通道:DirectBuffer 貫穿 Java、JNI、C++ 與 GPU,消滅所有無意義的 memcpy
  4. 永遠懷疑硬體的穩定性:Watchdog、GPIO 硬體電擊、斷線重連狀態機,是在工控現場安穩睡覺的唯一依靠。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *