83 lines
3 KiB
Markdown
83 lines
3 KiB
Markdown
# 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
|
|
|
|
```text
|
|
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.images` est 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 == 0` signifie 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
|
|
|
|
## Statut : IMPLEMENTED
|