Quickshell : réduire le polling permanent du verrouillage et de Keepawake sans affaiblir la sécurité #21
Labels
No labels
Agent/Autonomous OK
Agent/Demeter
Agent/Hermes
Agent/Human
Agent/Needs Review
Area/API
Area/Auth
Area/CLI
Area/Data
Area/Docs
Area/Infra
Area/UI
CI/Failing
CI/Flaky
CI/Green
CI/Needs Runner
CI/Needs Workflow
Compat/Backward Compatible
Compat/Breaking
Compat/Migration
Deploy/Ansible
Deploy/Blocked
Deploy/Homelab
Deploy/Needs Config
Deploy/Needs Secret
Deploy/Ready
Deploy/Rollback
Kind/Bug
Kind/Chore
Kind/Design
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Refactor
Kind/Security
Kind/Spike
Kind/Testing
Ops/Backup
Ops/Incident
Ops/Maintenance
Ops/Monitoring
Ops/Upgrade
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Priority
Someday
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Risk
Critical
Risk
High
Risk
Low
Risk
Medium
Security/Auth
Security/Disclosure
Security/Hardening
Security/Secret
Size
L
Size
M
Size
S
Size
XL
Size
XS
Stack/Ansible
Stack/Docker
Stack/Forgejo
Stack/Hermes
Stack/Node
Stack/Postgres
Stack/Python
Stack/Systemd
Status
Abandoned
Status
Blocked
Status
In Progress
Status
In Review
Status
Need More Info
Status
Ready
chantier-racine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
mathieu/dotfiles#21
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Optimisation proposée, coût établi par le code
mathieu/NotificationRuntime.qml:63–79lance Python puisloginctltoutes les secondes lorsque le serveur est actif.SessionService.qml:11–28,48–50lance Python puissystemctltoutes les deux secondes, y compris panneau fermé ; le statut relit aussi la politique hypridle.La revue n’a pas quantifié un gain CPU/énergie ni établi de fuite mémoire. L’objectif est de supprimer du travail périodique inutile, pas d’introduire une nouvelle infrastructure permanente.
Résultat attendu
Validation
Articulation
Coordonner avec #6 et #8 si leurs contrats de cycle de vie/Keepawake évoluent ; ces citations ne font pas de ces anciens tickets des descendants du présent chantier.
Référence
Revue du code au commit
5e350a8, avec Quickshell 0.3.2. Les 18 suites existantes passent ; les cas ci-dessous complètent cette couverture. Chantier : #11.Phase de conception acceptée par le parent ; implémentation du producteur uniquement autorisée dans
pi/quickshell-session-events(basee8ec9ad). Propriétaire exclusif : nouveauxsession-events.pyettest-session-events.py. Le parent attend le contrat/test signé avant d’intégrer le consommateur QML ; aucun changement des commandes explicites ni des unités.Contrat v1 : snapshots JSONL complets <=4096 octets, défaut verrouillé/inconnu, deux domaines système/utilisateur invalidés indépendamment. Un seul processus Python dbus/GLib/Gio lié au shell ; abonnements logind/systemd et surveillance des deux fichiers, sans sous-processus de polling. Heartbeat de cache2s, watchdog consommateur6s, requêtes async3s, reconnexion1/2/4/8s ; ces délais ne sont pas une garantie instantanée de sécurité. Replies tardives/générations incohérentes écartées. NoSuchUnit confirmé par le gestionnaire courant => inactif, pas preuve d’installation du service ; aucun LoadUnit/StartUnit/StopUnit.
Baseline isolée du concepteur : sur30s, 45 lancements Python,30 faux loginctl et15 faux systemctl. Fenêtre chaude25s :2,56 CPU-s pour shell+enfants réapés contre0,00 pour ShellRoot vide ; médiane PSS shell seul34 104Kio contre29 764. Ce sont des mesures synthétiques courtes avec commandes factices, pas un coût de production ni un gain après correction. Le comparatif final doit inclure l’arbre complet du nouvel observateur, ses requêtes D-Bus et les éventuelles régressions mémoire.
Les tests producteur utilisent deux bus privés et faux gestionnaires, avec assertions d’absence de requête mutante et de polling caché. Le helper d’actions/expiration reste inchangé.
Intégré sur main a1e4e1d, tous les fichiers distants vérifiés. Producteur signé619dfc91 (avec correctiff3507166 de filtrage des événements parasites), consommateur28350ba ; revues indépendantes propres après correction. Gate parent combiné 23/23 suites passent, dont27 tests producteur sur deux bus privés et11 tests QML (vrai producteur aussi),0 action/service personnel.
Un observateur partagé, zéro loginctl/systemctl périodique. Framing ASCII JSON borné avant publication, pas de buffer natif de ligne illimité ni de tail EOF accepté ; défaut verrouillé/inconnu, watchdog6s, PID positif avant signal, ni retry ni optimisme d’action. Contrôles d’expiration pidfd et confirmation de suspension restent inchangés dans le helper. Métadonnées/fichiers/bus invalidés indépendamment avec reprises testées.
Compromis mesuré et accepté pour cet objectif CPU/processus, pas une optimisation mémoire : trois paires isolées old/new de30s (fenêtre chaude25s), sources gelées, arbre complet et enfants réapés inclus : médiane2,54→0,01 CPU-s ;45→1 Python et30/15→0/0 loginctl/systemctl. Le backend fait6 appels initiaux puis6 au total malgré12 heartbeats : pas de polling D-Bus caché. La PSS médiane d’arbre augmente32 194→49 446Kio (+17 252Kio) ; pics échantillonnés se recouvrent, pas de gain pic démontré. Ce n’est pas une mesure du bureau réel ni une promesse de pourcentage CPU/énergie en production.
Latences sur faux services, hors fenêtres CPU : événement LockedHint vers état connu
6,7ms (n5), invalidation2,2ms, remplacement de politique53ms ; reprise de propriétaire1,34s inclut backoff. Le watchdog6s est testé fonctionnellement, pas une garantie temps réel/écran physique.Dépendances existantes vérifiées : python-dbus1.5.0 et python-gobject3.58.1. Source/commande/résultats reproductibles conservés hors dépôt (
wave4/session-performance.mdet script associé) ; données synthétiques exclusivement. Le checkout actif n’est pas avancé/rechargé : publication et activation restent distinctes.