Optimisation dans CatchChallenger

Salut,

J’ai fait de grosse optimisation dans CatchChallenger. J’ai composé le packet pour ensuite l’envoyer sur chaque client au lieu d’envoyer les variables et que chaque client compose le même packet. Cela donne un gros coup de boost sur les fonctions de type broadcast.

Ensuite j’ai fait une boucle ou j’appelle tout les clients, et j’ai connecté un QTimer dessus. Cela est bien plus efficace que de connecté ce timer sur chaque client (8x de performance).

Moins vous allez accéder à de grosse quantité de mémoire, plus il vont tenir dans un cache CPU performant, et donc vous allez gagner en performance (évitez d’allouer la mémoire aussi, si non RTT), sur mon haswell (pris grace à memtest86+):

  • 64Ko L1 202 427Mo/s
  • 256Ko L2 52 675Mo/s
  • 6144Ko L3 37 592Mo/s (répartie entre tout les cpus)
  • 8239Mo Mémoire 9 375Mo/s
Autant vous dire tout de suite, les performances pour un serveur MMORPG même bien fait, c’est:
  • à vide (<20 joueurs) utilisation du L1 trés performant
  • charge moyenne (<100 joueurs) utilisation du L2/L3
  • à forte charge (>2000 joueurs) utilisation de votre mémoire bien lente même si vous avec GDDR5/DDR4 avec un grosse fréquence en comparaison des caches interne (surement dans ce cas que votre config tirerai partie d’un mémoire rapide)
Et pourtant je fait passé sans problème le serveur de MMORPG sur un Intel Atom ou un Cortex-A9 à 1Ghz avec 6000 joueurs (charge simulé en les répartisant sur map map, avec les pires réglages, en débug, et avec génération de chat, déplacement, …). Hors mit les hash qui peuvent être consommateur de CPU, le reste de mon code utilise des variables/tableaux de variable avec presque aucun calcule dessus, donc le temps est passé à attendre la mémoire.
Pour finir, je constate même à l’heure actuelle, 99% du temps pris pas la gestion des events de Qt. Je ne sais pas encore si il y as un truc à faire pour mon cas (pas mal d’objet connecté entre eux pour un même client), ou si je vais devoir m’orienter vers un autre système d’event et donc réseau (boost?).
Limiter la fragementation mémoire aide à avoir des création d’objet et allocation mémoire plus rapide.
Bye,