Paillasse/docs/capacite.md

104 lines
4.5 KiB
Markdown
Raw Normal View History

# Capacité du serveur Syllabus
Mesuré le 2026-10-09 (étape 13) sur le serveur de production : Scaleway
Dedibox Start-2-L, Xeon D-1531 (6 cœurs, 12 fils), 32 Go de RAM, OpenStack
Kolla 2025.2 tout-en-un. Script : `openstack/tests/capacite.py` ; données
brutes sur le serveur : `/root/capacite-20261009/` (`hote.csv` toutes les
2 s, `demarrage.csv`, `resume.json`).
## Capacité retenue : 20 VM `eleve.petit` en même temps
Ramenée de 22 à 20 le 2026-10-12 pour la visio (Jitsi) : après une visio à
trois, Jitsi occupe ≈ 710 Mo (JVB 459, Jicofo 206, Prosody 28, web 16) ; JVB est
plafonné à 1 Go et Jicofo à 512 Mo, soit 1,5 Go réservés en plus
(`reserved_host_memory_mb` 15000 → 16500 ; (31993 − 16500) / 768 = 20).
### Historique : 22 VM (étape 13)
Sessions d'élèves et stock chaud compris. Choisie par Adam d'après les
mesures ci-dessous. Elle est appliquée à deux endroits, à garder alignés :
| Où | Réglage |
|---|---|
| Nova (refus au-delà, propre : « No valid host » → session en échec visible du prof) | `reserved_host_memory_mb = 15000` dans `kolla/config/nova/nova-compute.conf` → Placement : (31993 − 15000) Mo / 768 Mo = **22 VM** |
| Portail (plafond du stock chaud) | `LABS_CAPACITE_VM`, défaut 22 (`portail/config/labs.php`) |
| Quota du projet (filet de sécurité, au-dessus) | 40 instances, 40 vCPU, 30 Go (rôle `openstack-projet`) |
Ce que ça permet (20 VM) : une classe de 20 sur un lab à 1 VM ; 6 élèves sur le
lab 08 (3 VM chacun). Moins le stock en attente (1 stack par lab hors séance).
## Mesures
### Mémoire
| Situation | Mémoire disponible sur l'hôte |
|---|---|
| Sans VM (Kolla, portail, supervision) | ≈ 16,5 Go (Kolla seul occupe ≈ 15,5 Go) |
| 3 VM du stock au repos | 15,1 Go |
| + 20 VM démarrées, au repos | 10,1 Go → **≈ 250 Mo par VM** (RSS moyen 269 Mo) |
| + 350 Mo occupés dans chacune des 20 VM | 3,4 Go → **+332 Mo par VM**, soit **≈ 600 Mo par VM active** ; swap utilisé : 264 Mo |
Coût d'une VM `eleve.petit` (768 Mo) sur l'hôte :
| Usage | Coût réel | VM possibles (16,3 Go − 2 Go de marge) |
|---|---|---|
| Au repos | ≈ 250 Mo | ≈ 57 |
| Élève actif (mesuré ci-dessus) | ≈ 600 Mo | **≈ 23** |
| Pire cas (VM pleine + QEMU) | ≈ 870 Mo | ≈ 16 |
À 22 VM, si toutes remplissaient entièrement leur mémoire en même temps
(cas improbable dans un lab réseau ou système), l'hôte dépasserait sa
mémoire d'environ 2 Go et puiserait dans le swap (4 Go) : ralentissement
plutôt que panne. Le test n'a pas cherché à le provoquer.
### Démarrage de 20 VM lancées en même temps
20 sur 20, aucune erreur.
| | min | médiane | p95 | max |
|---|---|---|---|---|
| Passage à ACTIVE | 23,7 s | 48,8 s | 67,6 s | 71,1 s |
| Système démarré (agent invité qui répond) | 27,8 s | 53,2 s | 74,7 s | 78,2 s |
Pendant la rafale : CPU de l'hôte jusqu'à 86 %. D'où l'intérêt du stock
chaud et du pré-remplissage 10 minutes avant une séance : une classe
entière qui démarre à froid attendrait plus d'une minute.
### CPU
20 VM avec un cœur à 100 % chacune pendant 60 s (20 vCPU pour 12 fils) :
CPU de l'hôte à 89 % en moyenne, charge 14,5 au maximum. Une commande de
correction par l'agent invité répond tout de même en **0,6 s**. Le CPU n'est
pas la limite : la mémoire l'est. (Ratio par défaut de Nova : 4 vCPU par fil,
soit 48 vCPU.)
### Ouverture d'un lab pris dans le stock (critère < 5 s)
Mesurée de bout en bout par `https://syllabuslab.fr` comme un navigateur
(`portail/tests/Reels/parcours-lab.py`) : **2,80 s, 2,85 s, 2,85 s**.
Décomposition (`portail/tests/Reels/decomposer-ouverture.py`) :
| Morceau | Durée |
|---|---|
| La page élève voit l'état « actif » (interrogation chaque seconde) | 0 à 1 s |
| Rechargement de la page | 0,03 s |
| Jetons des consoles (appel Nova `remote-consoles`, ≈ 1,1 s chacun, demandés en parallèle) | 1,1 s |
| WebSocket jusqu'à l'invite `login:` | 1,0 s |
Le poste le plus coûteux est l'appel Nova pour obtenir l'adresse de la
console : piste d'optimisation si besoin (préparer ces jetons à
l'attribution plutôt qu'à l'affichage).
## Quand refaire ces mesures
Après une montée de version de Kolla, un changement d'image ou de gabarit,
l'ajout d'un service lourd, ou un changement de serveur. Commande :
```
sudo python3 /root/capacite.py --vm 20 --sortie /root/capacite-AAAAMMJJ
```
Le script s'arrête de lui-même si la mémoire disponible passe sous 3 Go. Il
crée un réseau `capacite-test` et des VM `capacite-N` à supprimer ensuite.