lardon3d/docs/architecture/resource_governor.md

2.5 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 gouverneur
  • lardon3d_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 ressources
  • lardon3d_resource_governor_reserve_available() - Réserver les ressources disponibles
  • lardon3d_resource_governor_release() - Libérer une réservation
  • lardon3d_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 lot
  • lardon3d_resource_governor_generation() - Obtenir la génération actuelle
  • lardon3d_resource_governor_wait_for_change() - Attendre un changement

Invariants

  1. Le scheduler ne décide jamais des ressources
  2. Le Resource Governor est l'unique propriétaire des budgets
  3. Les réservations sont obligatoires avant toute exécution
  4. Les réservations sont libérées exactement une fois
  5. Les estimations de ressources sont immuables
  6. 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é)
  • 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

Statut : IMPLEMENTED