Benchmark Comparatif Root vs Non-Root — OnePlus Pad 3
Date: 28 mars 2026 — Projet Kazeia
Configuration
- Tablette: OnePlus Pad 3 (OPD2415), Snapdragon 8 Elite (SM8750)
- OS: OxygenOS 16 (Android 16, API 36)
- RAM: 16 GB
- Root: Magisk v30.6
- QNN SDK: 2.42
- ExecuTorch: build-android (NDK r27d)
Pipeline Conversationnel Complet
Sans Root
| Étape |
Technologie |
Latence |
Status |
| VAD |
Énergie RMS |
<1ms |
Fonctionne |
| STT |
whisper.cpp (CPU) |
~1500ms |
Fonctionne |
| LLM |
Aucun |
- |
Mode écho uniquement |
| TTS |
Android TTS natif |
~200ms |
Fonctionne |
| Total |
- |
~1700ms |
Pas de LLM, pas d'IA conversationnelle |
Avec Root + NPU
| Étape |
Technologie |
Latence |
Status |
| VAD |
Énergie RMS |
<1ms |
Fonctionne |
| STT |
whisper.cpp (CPU) |
~1500ms |
Fonctionne |
| LLM |
ExecuTorch Qwen3 (NPU) |
~1-5s (selon longueur) |
NOUVEAU |
| TTS |
Android TTS natif |
~200ms |
Fonctionne |
| Total |
- |
~3-7s |
Pipeline complet fonctionnel |
Benchmarks Détaillés
STT — Whisper-Base (whisper.cpp CPU)
Identique avec ou sans root (pas d'accélération NPU pour whisper.cpp)
| Métrique |
Valeur |
| Modèle |
ggml-base.bin (148 MB) |
| Backend |
CPU ARM (Cortex-X925) |
| Chargement |
~100ms |
| Transcription (1-2s audio) |
1000-1500ms |
| RTF moyen |
0.9-1.5 |
| Mel spectrogram |
Natif C++ (whisper.cpp) |
| Auto-gain |
Oui (normalisation audio) |
LLM — ExecuTorch + QNN NPU (Root uniquement)
Qwen3-0.6B
| Métrique |
Valeur |
| Modèle |
hybrid_llama_qnn.pte (660 MB) |
| Backend |
QNN HTP v79 (NPU) |
| Chargement |
0.86s |
| Prefill |
451 tok/s (31ms pour 14 tokens) |
| Génération |
93.15 tok/s |
| TTFT (Time To First Token) |
31ms |
| RAM |
~698 MB |
| Qualité FR |
Basique, réponses courtes |
Qwen3-1.7B
| Métrique |
Valeur |
| Modèle |
hybrid_llama_qnn.pte (1.7 GB) |
| Backend |
QNN HTP v79 (NPU) |
| Chargement |
1.29s |
| Prefill |
1000 tok/s (27ms pour 27 tokens) |
| Génération |
46.6 tok/s |
| TTFT |
27ms |
| RAM |
~1712 MB |
| Qualité FR |
Bonne, réponses empathiques détaillées |
Comparaison modèles
| Modèle |
Taille |
tok/s |
TTFT |
RAM |
Qualité FR |
| Qwen3-0.6B |
660 MB |
93 |
31ms |
698 MB |
Basique |
| Qwen3-1.7B |
1.7 GB |
46 |
27ms |
1.7 GB |
Bonne |
| Mistral-Nemo 12B |
7.4 GB |
~5 |
~200ms |
~8 GB |
Excellente |
LLM — Sans Root
| Métrique |
Genie SDK |
ExecuTorch QNN |
| Status |
Erreur -7 |
Erreur 4000 (libs manquantes) |
| Cause |
SDK non installé sur device |
libQnnModelDlc.so manquant, pas d'accès DSP |
| Résultat |
Mode écho |
Mode écho |
TTS
| Métrique |
Sans Root |
Avec Root |
| Android TTS |
200ms |
200ms |
| Chatterbox |
OOM (1.4 GB) |
OOM (1.4 GB)* |
Chatterbox nécessite optimisation mémoire indépendante du root
Monitoring Système
| Métrique |
Sans Root |
Avec Root |
| CPU % |
Fonctionne |
Fonctionne |
| GPU % |
Permission denied |
Fonctionne via su |
| NPU/DSP |
N/A |
Accès possible |
| RAM |
Fonctionne |
Fonctionne |
Impact du Root — Synthèse
Gains mesurés
| Fonctionnalité |
Sans Root |
Avec Root |
Gain |
| LLM |
Indisponible |
93 tok/s (0.6B) / 46 tok/s (1.7B) |
∞ |
| Prefill |
- |
451-1000 tok/s |
∞ |
| TTFT |
- |
27-31ms |
∞ |
| Pipeline complet |
Non (écho) |
Oui (STT→LLM→TTS) |
Pipeline fonctionnel |
| GPU monitoring |
0% |
Fonctionne |
Visibilité |
| Whisper STT |
1500ms (CPU) |
1500ms (CPU) |
0% (même backend) |
Ce que le root débloque concrètement
- Accès au DSP/NPU via ExecuTorch → LLM fonctionnel sur NPU
- libs QNN chargées correctement →
libQnnModelDlc.so + Skel dans ADSP_LIBRARY_PATH
- SELinux permissive → pas de blocage d'accès
- Boot script → permissions persistantes au redémarrage
- GPU sysfs → monitoring temps réel
Ce que le root ne change pas
- Performances STT (whisper.cpp CPU identique)
- TTS Android natif (identique)
- Chatterbox TTS (OOM indépendant du root)
Recommandations pour la Production
Modèle LLM recommandé
Qwen3-1.7B — meilleur compromis qualité/vitesse :
- 46 tok/s suffisant pour conversation temps réel
- Qualité FR bonne pour l'écoute émotionnelle
- 1.7 GB RAM acceptable sur 16 GB device
- TTFT 27ms = réponse quasi instantanée
Prochaines optimisations
- Whisper sur NPU : le
qnn_whisper_runner est compilé, réduirait STT de 1500ms à ~50ms
- Chatterbox quantifié : réduire les modèles TTS pour éviter OOM
- Streaming LLM : afficher les tokens au fur et à mesure de la génération
- ExecuTorch JNI natif : intégrer directement en C++ au lieu du subprocess
su
Procédure de Déploiement (Reproductible)
1. Root de la tablette
Voir GUIDE_ROOT_ONEPLUS_PAD3.md
2. Configuration post-root
# SELinux permissive
adb shell "su -c 'setenforce 0'"
# Boot script DSP
adb shell "su -c 'mkdir -p /data/adb/service.d && cat > /data/adb/service.d/kazeia_dsp.sh << EOF
#!/system/bin/sh
chmod 666 /dev/fastrpc-cdsp
chmod 666 /dev/fastrpc-cdsp-secure
setenforce 0
EOF
chmod 755 /data/adb/service.d/kazeia_dsp.sh'"
3. Déploiement ExecuTorch
Voir DEPLOY_EXECUTORCH_NPU.md
4. Déploiement app Kazeia
cd /opt/Kazeia/kazeia-android
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
Projet Kazeia — Damien Micottis & Richard Loyer