3 KiB
3 KiB
Resource Governor Lardon3D
Responsabilité
Le Resource Governor est l'unique propriétaire des budgets (RAM, GPU, CPU, IO). Il arbitre les ressources disponibles et calcule les lots adaptatifs pour chaque tâche.
API principale
Création et destruction
lardon3d_resource_governor_create()- Créer un gouverneurlardon3d_resource_governor_destroy()- Détruire un gouverneur
Configuration
lardon3d_resource_governor_set_policy()- Définir la politique
Décision
lardon3d_resource_governor_decide()- Décider de l'admission d'une tâche
Réservation
lardon3d_resource_governor_reserve()- Réserver des ressourceslardon3d_resource_governor_reserve_available()- Réserver les ressources disponibleslardon3d_resource_governor_release()- Libérer une réservationlardon3d_resource_governor_reservation_is_valid()- Vérifier la validité
Métriques
lardon3d_resource_governor_availability()- Obtenir la disponibilitélardon3d_resource_governor_record_batch()- Enregistrer les métriques d'un lotlardon3d_resource_governor_generation()- Obtenir la génération actuellelardon3d_resource_governor_wait_for_change()- Attendre un changement
Invariants
- Le scheduler ne décide jamais des ressources
- Le Resource Governor est l'unique propriétaire des budgets
- Les réservations sont obligatoires avant toute exécution
- Les réservations sont libérées exactement une fois
- Les estimations de ressources sont immuables
- L'historique des métriques est strictement borné (8 entrées par classe)
Cycle de vie
1. Capture d'un snapshot de ressources
2. Décision d'admission
3. Réservation opaque
4. Exécution de la tâche
5. Enregistrement des métriques
6. Libération de la réservation
Adaptation dynamique
Calcul de lots adaptatifs
- Basé sur la consommation mémoire historique
- Mise à jour à chaque exécution
- Conservative (sous-estimation plutôt que sur-estimation)
Historique borné
- 8 entrées par classe de tâche
- Buffer circulaire
- Mise à jour FIFO
Réserves
- Sous-estimation temporaire possible avec des estimations statiques
- Pas d'adaptation basée sur le débit (duration_ns non encore utilisé)
- L'import
import.imagesest admis avec 128 Kio fixes, un coût borné par item, un thread CPU, un slot I/O et des lots de 1 à 32. Il enregistre le nombre d'images nouvellement publiées dans le manifeste et la durée réelle du lot. Cela inclut une copie orpheline identique adoptée, même si aucun octet n'est recopié.peak_memory_bytes == 0signifie explicitement « mesure inconnue » : l'échantillon peut conserver taille/durée mais n'alimente jamais l'adaptation mémoire. - Pas de communication inter-classes de tâches
Limites actuelles
- Worker unique (pas de pools multiples)
- Pas de priorités entre tâches
- Pas de persistance des métriques
- Pas de communication avec d'autres gouverneurs