Performances du serveur
-
Bonjour à tous,
Depuis quelques temps, nos serveurs ont des soucis de performance.
Hier soir, c’était le bouquet, avec des désynchros à foisons, qui nous ont forcés à battre en retraite sur TRAD, beaucoup plus légère et bien plus efficace au niveau CPU.Du coup j’ai pris le temps de faire des tests cet après-midi, sur le serveur privé.
J’ai testé la mission OT (
OT
), et même lancé toutes les zones de combat et quelques combat missions (OT + all zones
), pour voir l’impact.
Pendant ce temps la missionTRAD
de Couby utilise gentiment à peine quelque % de CPU, c’est presque obscèneJ’ai essayé d’alléger la mission OT en retirant des groupes (
light
), puis tous les véhicules des zones de combat (light2
), puis les vols des combat missions (light3
).
Toujours des pics à 25%, toujours des soucis.
Je me suis dit que le coupable était peut-être dans un des scripts VEAF, qui sont dans une version bien plus ancienne dans TRAD.
Du coup j’ai modifié TRAD (TRAD-1
) pour qu’il utilise tous les nouveaux scripts.
Pas mieux (ou plutôt pas pire) :
J’ai pensé au Roosevelt, et j’ai fait une version de l’OT sans ce bateau (
no-roosevelt
)
Et puis j’ai remarqué que bien souvent, les serveurs se bloquaient et avaient besoin d’un redémarrage pour repartir, sur un message de log émis par LotATC, et j’ai donc désinstallé ce dernier.
Constatant un mieux, j’ai remis le Roosevelt (std-OT
) pour vérifier si c’était lui ou LotATC le coupable.
Là on voit que c’est mieux !
Du coup j’étais content, et j’ai demandé à Maddog et Dilixo de m’aider à tester.Tristesse ! Consternation !
Dès qu’on se connecte à plusieurs au serveur, il repasse à 25% CPU comme avant.
Le retrait de LotATC n’a rien réglé.Du coup, si on me cherche, je suis dans Elite Dangerous et Sea Of Thieves.
Adieu ! -
Pour mon info, c’est quoi les specs du serveur ? Windows directement installé sur du physique ?
-
@Jed a dit dans Performances du serveur :
Pour mon info, c’est quoi les specs du serveur ? Windows directement installé sur du physique ?
C’est Windows installé sur du virtuel (ESX).
Serveur E3-SAT-2-32
- Intel Xeon E3-1231v3 (4c/8th)
- 32GB DDR3 ECC 1333 MHz
- SoftRaid 4x2To SATA
- VMware ESXi 6.5 U3 (64bits)
-
Bon, j’ai trouvé la cause du problème.
Enfin quand je dis “j’ai” c’est plutôt un travail d’équipe, comme toujours à la VEAF ! @Mitch est venu à mon secours, merci mon pote !
Attention, c’est long ; intéressant, mais long
Introduction - explication du contexte
Il faut comprendre le fonctionnement de
cette merde écrite avec le culce prodige de la technologie qu’on appelle communément DCS (je crois que ça veut dire “Distributed Crash System”, ou peut-être “Deviant Crap Shit”).Le code réseau est synchronisé sur les frames (il est exécuté de manière discrète à chaque calcul d’une image) ; il n’y avait pas de serveur dédié à la base, donc on partait du principe que le jeu devait faire serveur, et donc il fallait bien exécuter du code à un moment.
Même avec le “serveur dédié” (qui n’est rien d’autre qu’un artifice technique et utilise donc toujours le même vieux code) c’est la même chose.
Quand la charge CPU monte de trop, et que donc l’exécution du code dure plus longtemps, on en arrive à dépasser le temps alloué pour calculer une frame (60 fps = 16.66ms), ce qui fait que quand le serveur rame il rate des frames.
Et vu que quand on rate une frame, on rate le code réseau qui y est aussi exécuté, c’est là qu’on a des désynchronisations.
Elles se traduisent par des déplacements intempestifs des appareils (warp), des blocages en plein vol (freeze) et d’autres joyeusetés (menu radio tronqué).Et comme là, dans l’OpenTraining qui est bien complexe, on est déjà pas très loin de la limite de charge CPU, il suffit de peu de chose pour basculer.
Et c’est le drame
J’ai failli écrire "Ivre, virgule, " ; j’écoute trop Guillaume Meurice
Deux phénomènes précipitent notre serveur vers sa désynchro.
Tout d’abord, le paquet réseau qui contient le menu radio (programmé
avec le culdans les règles du lard) ne peut pas être fractionné ; sa taille maximale est donc limitée à 64kB.
Et en prime, personne n’est capable de me dire ce qu’il contient (un menu pour un client ? tous les menus ?) ni comment il est structuré (compression ? optimisation ? ah pardon ce mot n’existe pas en russe).
Résultat, dès qu’on a un peu trop de trucs dans ce menu, bam désynchro !
Or, avec les nouvelles Combat Missions, on a ajouté des éléments dans le menu. Et paf le chien !Ensuite, j’ai il y a quelques temps développé le système qui nous permet d’utiliser le chat avec SLMOD pour lancer des commandes dans le jeu (
-veaf login
par exemple).
Pour chaque Combat Mission, le système ajoute automatiquement 4 commandes (start
,stop
,start-silent
etstop-silent
).
Or récemment j’ai modifié le système des Combat Missions pour que, à chaque mission créée par le designer, on crée automatiquement des versions de cette mission en fonction du niveau d’expérience de l’IA (skill) et d’un multiplicateur du nombre d’ennemis (scale).
Il y a 5 skills et 4 scales, donc pour chaque Combat Mission on en crée en fait 20 !
Or, il y a 14 missions comme ça dans l’OpenTraining, ce qui nous fait en réalité 14x20 = 280 missions, et donc 280x4 = 1120 commandes.Normalement ça ne devrait pas poser de problème ; dans mon code en tout cas, je le gère d’une manière optimisée et donc on pourrait encore en rajouter.
Mais SLMOD, lui, crée une scheduled task (une fonction qui est appelée toutes les secondes par un minuteur) par commande ! Et du coup on se retrouve avec le minuteur qui doit déclencher toutes les secondes 1120 (plus les quelques autres commandes standard) fonctions !
Ca explique les pics dans la charge CPU :
Et ces pics nous font basculer du côté obscur de la farce…Conclusions, actions
Côté DCS, on ne peut pas faire grand-chose.
J’ai déjà signalé à maintes reprises tous ces soucis (et je ne suis pas le seul, sauf peut-être pour la limitation du menu radio que personne n’avait même imaginé avant tant elle est ridicule).Pour SLMOD, j’ai modifié mon code afin de ne plus créer de commande pour les Combat Mission, et à terme j’irai éditer le code de SLMOD pour corriger ce comportement qui ne nous convient pas.
Et pour le menu radio, je cherche des solutions pérennes. En attendant j’ai désactivé toutes les missions.
Voilà, vous pouvez retourner regarder la télé
-
Merci @Zip. On dirait que je suis au taf en lisant ton rapport.
-
@Dilixo a dit dans Performances du serveur :
Merci @Zip. On dirait que je suis au taf en lisant ton rapport.
Ah ils sont marrants comme moi à ton taf ?
-
En tout cas encore merci pour ton TAF! en résumer on ne peut pas faire d’un âne un cheval de course…
-
@Maddog a dit dans Performances du serveur :
En tout cas encore merci pour ton TAF! en résumer on ne peut pas faire d’un âne un cheval de course…
Si on peut, mais ça prend des efforts ^^
Mais t’inquiète on est dessus avec @Mitch -
-
Bon, j’ai fait des progrès et je vais déjà pousser une version sur le serveur.
Améliorations dans les commandes “remote”
Ce sont les commandes qu’on peut taper dans le chat de SLMOD.
Dorénavant les déclencheurs de combat missions ne sont plus gérés par SLMOD (jusqu’à nouvel ordre, mais c’est probablement permanent) et il faut utiliser une commande de marqueur
_remote#<mot de passe> <commande à lancer>
.
Le mot de passe est facultatif, si on est déjà en mode où la mission est authentifiée.Par exemple
_remote#PasswordDeLaVEAF -veaf start-training-radar-tu22-FL300/Excellent/4
Je précise que la commande SLMOD
-veaf login
fonctionne toujours. Il est donc possible de faire :-veaf login
dans le chat_remote# -veaf stop-silent-training-radar-tu22-FL300/Excellent/4
dans un marqueur
Améliorations dans le menu radio
A la base
Le menu radio est configuré au minimum (pas d’aide, pas de listes complexes)
- max(veafRadio.radioMenuSize)=6230
- nbCommands=6692
- nbMenus=144
Retrait des veafRadio.USAGE_ForUnit
Souvenez vous, dans certains menus il fallait préciser qui on était !
Ben c’est plus la peine, on fera juste attention que ça considère la position du leader du groupe.- max(veafRadio.radioMenuSize)=5111
- nbCommands=4748
- nbMenus=142
Limitation des Combat Missions
Je limite la génération automatique des missions à 2 skills et 3 scales quand elles sont dans le menu radio.
- max(veafRadio.radioMenuSize)=4459
- nbCommands=4700
- nbMenus=118
Conclusion
On a diminué de 30% la taille apparente du menu radio (sachant que ces valeurs sont arbitraires, je ne sais pas vraiment ce qui compte ou non), de 30% le nombre de commandes (l’élément final d’une arborescence de menu) et de 20% le nombre de sous-menus.
J’espère que ça va suffire. -
@Zip a dit dans Performances du serveur :
@Dilixo a dit dans Performances du serveur :
Merci @Zip. On dirait que je suis au taf en lisant ton rapport.
Ah ils sont marrants comme moi à ton taf ?
Oui, mais pas des comme toi !
-
merci pour ce gros boulot.
-
Merci pour ce taf et bravo pour votre persévérance !