Mode sans affichage Jetson
Plan-then-apply pour une réclamation de mémoire utilisateur sûre et réversible : basculer la cible systemd par défaut de graphical.target et désactiver un ensemble sélectionné de daemons non essentiels. C'est le gain mémoire le plus rentable et le plus sûr sur Jetson.
Objectif
Construire un plan mode sans affichage approuvé par l'utilisateur à partir de données d'audit en direct, puis appliquer uniquement des modifications sûres et réversibles au niveau utilisateur qui réduisent l'usage mémoire du bureau et des daemons sur Jetson.
Quand l'utiliser
- « Libère autant de mémoire que possible — je n'ai pas besoin de l'interface graphique. »
- « Je déploie ce Jetson comme appliance d'inférence / nœud edge. »
- Après que
jetson-memory-auditaffichedefault_systemd_target=graphical.targetou montre quegdm3/lightdm/sddmest actif sur un système que l'utilisateur décrit comme sans affichage.
Quand NE PAS l'utiliser
- L'utilisateur a besoin du bureau local, de la sortie affichage, d'une interface kiosk, ou d'une session X/Wayland. Dans ce cas, ne recommande pas de désactiver la cible graphique ou le gestionnaire d'affichage ; utilise
jetson-memory-auditen lecture seule et suggère plutôt des options mémoire sans GUI. - Vous n'avez pas de données d'audit actuelles. Exécutez
jetson-memory-auditen premier, ou demandez à l'utilisateur son résultat, avant de proposer des modifications ou d'estimer les économies.
Utilise les données actuelles de l'appareil comme source de vérité. La famille Jetson, le SKU/variante, les totaux de mémoire, les services d'affichage actifs, et les estimations d'économies doivent provenir de jetson-diagnostic/scripts/detect_jetson.sh, audit.json, ou une exécution nouvelle de jetson-memory-audit. Si une valeur n'est pas disponible, dis qu'elle est inconnue plutôt que de deviner. Les chiffres d'économies ci-dessous sont des limites supérieures ; le vrai delta est celui qu'un audit avant/après rapportera.
Conditions préalables
- Commencer à partir d'un snapshot JSON
jetson-memory-auditactuel. - Confirmer que l'utilisateur n'a pas besoin du bureau local, de la sortie affichage, d'une interface kiosk, ou d'une session X/Wayland.
- Les modifications mutantes nécessitent
sudoet l'approbation explicite de l'utilisateur ; exécute un dry-run en premier sauf si l'approbation a déjà été donnée dans la même invite. - Exécute sur l'hôte Jetson ou dans un sandbox visible à l'hôte avec accès à l'état systemd.
Scripts disponibles
| Script | Objectif | Arguments |
|---|---|---|
scripts/plan.sh |
Lit un JSON d'audit mémoire et émet un plan contenant des recommandations sûres et réversibles. | --audit PATH ou --audit -, plus --human. |
scripts/apply.sh |
Affiche ou applique les commandes sûres d'un JSON de plan. Dry-run par défaut. | --plan PATH ou --plan -, --apply, --reboot, --drop-caches. |
Si votre runtime d'agent supporte run_script, utilise-le pour exécuter scripts/plan.sh et scripts/apply.sh et résume la sortie renvoyée. Sinon, exécute les scripts avec bash depuis la racine du dépôt.
Instructions
- Exécute
scripts/plan.shpour lireaudit.json(dejetson-memory-audit) et émettre un plan avec uniquement des knobssafety: safe(commutation de cible, gestionnaires d'affichage, audio, impression, modem, etc.). - Affiche le plan à l'utilisateur et confirme.
- Exécute
scripts/apply.sh --plan plan.jsonpour un dry run. Réexécute avec--applypour exécuter. Ajoute--drop-cachespour vider le cache de pages après, ou--rebootpour que l'effet prenne place immédiatement. - Réexécute
jetson-memory-audit/scripts/audit.shpour vérifier le vrai delta.
Flux de travail attendu
Utilise les scripts pour les estimations et l'application afin que les recommandations soient basées sur l'état actuel de l'appareil plutôt que sur le tableau des limites supérieures statiques seul.
- Pour les invites « que économiserait le mode sans affichage », « estimer », « planifier », ou de planification en production, exécute
scripts/plan.sh --audit <audit.json>et rapporteestimated_total_savings_mb, le toprecommendations[*].knob, et si un gestionnaire d'affichage ougraphical.targetest actif. N'exécute pasapply.sh. - Pour les invites où l'utilisateur dit explicitement d'appliquer le mode sans affichage maintenant, exécute
scripts/apply.sh --plan <plan.json>une fois en dry run d'abord. Si l'utilisateur a déjà approuvé la mutation dans la même invite, réexécute la même commande avec--applyet mentionne la(les) commande(s) réversible(s). - Si l'exécution directe échoue dans un runtime d'agent, invoque les scripts avec
bash {baseDir}/scripts/<script-name> .... N'essaie pas dechmodles fichiers skill installés.
Contrat plan / apply
plan.shémet la même forme JSON quejetson-inference-mem-tune/scripts/recommend.py: un tableau derecommendationsavec{layer, knob, estimated_savings_mb, safety, command, reversible_command, rationale}.apply.shfiltre les entrées àsafety == "safe"avec uncommandnon vide, puis re-vérifie le marqueur de sécurité filtré dans la boucle shell avant l'exécution. Anything else, such as kernel command-line changes, device-tree changes, or accuracy tradeoffs, is out of scope for this skill.- Le mode par défaut est dry-run.
--applyest requis pour muter le système.
Knobs couverts
| Knob | Action | Économies estimées | Réversible ? |
|---|---|---|---|
disable-graphical-target |
systemctl set-default multi-user.target |
jusqu'à 865 MB | oui |
stop-gdm3 / gdm / lightdm / sddm / display-manager |
systemctl disable --now <svc> |
~200 MB / svc | oui |
stop-pulseaudio |
désactiver daemon audio | ~8 MB | oui |
stop-bluetooth |
désactiver stack Bluetooth | ~6 MB | oui |
stop-ModemManager |
désactiver gestionnaire WWAN | ~4 MB | oui |
stop-cups / stop-cups-browsed |
désactiver stack impression | ~5 / ~3 MB | oui |
stop-snapd |
désactiver daemon Snap | ~30 MB | oui |
stop-whoopsie / kerneloops |
désactiver rapporteurs de plantage | ~4 / ~2 MB | oui |
stop-avahi-daemon |
désactiver mDNS | ~3 MB | oui |
stop-unattended-upgrades / packagekit |
désactiver travaux de paquets en arrière-plan | ~6 / ~8 MB | oui |
NE désactive PAS ces services
nvargus-daemon— requis pour tout pipeline caméra libargus.nvgetty.service— console série ; la désactiver peut te verrouiller hors de la récupération.nvpmodel— service mode puissance ; requis pour le tuning horloge/puissance.containerd/docker— laisse actif si tu exécutes des conteneurs (la plupart des workloads d'inférence le font).- Services kernel liés à
nvfb/nvdisplay— liés à la configuration d'affichage au démarrage, donc cette skill ne les change pas.
Sécurité
- N'édite pas
/boot/extlinux/extlinux.conf, le device tree, ou les réservations mémoire au démarrage. - Ne désactive pas les services pour lesquels elle n'a pas d'entrée explicite (pas de « désactiver tout ce qui n'est pas sur liste blanche »).
- Chaque modification appliquée a une
reversible_commanddocumentée. Réexécuter le plan avec les annulations suffit à restaurer. - Dry-run par défaut.
--applyest le seul moyen de muter. - Rapporte uniquement les faits d'appareil et les chiffres d'économies qui proviennent de la détection en direct ou de la sortie d'audit.
Comportement multi-plateforme
Le même ensemble de knobs s'applique à chaque famille Jetson dans la matrice ci-dessus. Le script lit JETSON_GENERATION / JETSON_PRODUCT_LINE / JETSON_VARIANT de jetson-diagnostic/scripts/detect_jetson.sh (et exporte toujours le legacy JETSON_SKU) afin que l'agent puisse attribuer les économies correctement dans son résumé, mais il ne branche pas sur la ligne de produit.