Performances du serveur


  • Membre du bureau

    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 mission TRAD de Couby utilise gentiment à peine quelque % de CPU, c’est presque obscène 😉

    221f1d71-d067-4895-9ace-f5a60d4d8259-image.png

    J’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.
    e6b5ed03-f72c-4a4f-ae4f-9dd182451706-image.png

    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) :
    68cd00ca-eb7c-409d-8632-0178307f4631-image.png

    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.
    8fce9eed-eb5c-4878-bf1b-3c2ddc59263e-image.png

    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 !


  • Membre VEAF

    Pour mon info, c’est quoi les specs du serveur ? Windows directement installé sur du physique ?


  • Membre du bureau

    @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)

  • Membre du bureau

    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 cul ce 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 cul dans 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 et stop-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 :
    e6b5ed03-f72c-4a4f-ae4f-9dd182451706-image.png
    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é 😉


  • Membre VEAF

    Merci @Zip. On dirait que je suis au taf en lisant ton rapport.


  • Membre du bureau

    @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 ? 😄


  • Membre VEAF

    En tout cas encore merci pour ton TAF! en résumer on ne peut pas faire d’un âne un cheval de course…


  • Membre du bureau

    @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


  • Membre VEAF

    Merci à vous deux @Zip et @Mitch ! C’était effectivement très intéressant et tout à fait compréhensible pour un étranger de l’informatique 👍


  • Membre du bureau

    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 logindans 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.


  • Membre VEAF

    @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 ! 😜


  • Membre du bureau

    merci pour ce gros boulot. 👍


  • Membre VEAF

    Merci pour ce taf et bravo pour votre persévérance !


Log in to reply