Moteur source : la grande explication

 

Réponses aux légendes...

 

Les FPS serveur sont inutiles !

 

Le moteur Source à la base de jeux tels que CS:S ou TF2 obéit à plusieurs indicateurs de performance. Le plus connu d’entre eux, le tickrate, mesure le nombre de mises à jour maximum communiquées aux joueurs chaque seconde.

L’utilisation du tickrate est donc directement liée à des variables telles que sv_maxupdaterate et sv_maxcmdrate qui régissent la fréquence des mises à jour envoyées et reçues par le client (ici elles limitent le maximum, d’où l’importance de fixer la valeur en fonction du tickrate ou en dessous de cette dernière si on souhaite le limiter).

 

Derrière cette logique de mises à jour et de leur acheminement aux clients se cache une deuxième logique : les FPS serveur.

 

Avant toute chose, l’acronyme FPS (= frames per second) peut désigner des notions tout à fait différentes : le nombre d’images par seconde ou le nombre de calculs par seconde pour ne citer que ces 2 là.

Les FPS côté client font donc référence aux images / seconde tandis que les FPS côté serveur désigne le nombre de calculs effectués chaque seconde pour déterminer la position des joueurs, leur point de vue, la trajectoire des balles et autres projectiles, etc.

 

Il est évident que si les FPS descendent en dessous du tickrate, le tickrate va chuter avec lui. En effet, le serveur ne peut envoyer plus de mises à jour qu’il en calcule ! Essayez de mettre fps_max 20 sur un tickrate 66, vous aurez un tickrate 20.

 

 

Avoir plus de FPS que le tickrate ne sert donc à rien ?

 

Pas tout à fait. Pour faire une analogie avec les mathématiques, cela revient à dire que la précision des décimales (chiffres après la virgule) n’a pas d’importance or pour des mesures de calcul de performances dans le cas qui nous intéresse, ça l’est.

Quoi de plus rageant qu’une imprécision d’une poignée de millisecondes lorsque je vise la tête d’un adversaire ?

 

Nous pouvons donc dire que plus de FPS il y a, plus la précision de tous les calculs est importante.

 


Plus de 1000 FPS, une légende ?!

 

Les moteurs Half-Life et Source/Orangebox ne sont, à l’origine, pas prévus pour fonctionner au-delà de 1000 FPS. A l’époque de leur conception, il était clair que la puissance de calcul n’était pas suffisante pour aller au-delà dans des proportions acceptables. A ce niveau, Valve a eu raison de son choix : un serveur CS:S avec 10 joueurs consomme environ 50% d’un coeur de processeur daté de 2006, rendant irréaliste de dépasser les 1000 FPS !

 

Depuis, les processeurs ont évolué et supportent des charges processeur supérieures tout en permettant de paralléliser davantage (passage de 2 à 4 cœurs, puis 6 ou 8 plus récemment). Ces évolutions permettent plusieurs possibilités : implémenter plus de serveurs de jeux par processeur ou employer plus de puissance pour chaque serveur.

 

ATTENTION : Les binaires serveur n’étant pas multi-threadés, ils ne peuvent utiliser qu’un seul cœur de processeur simultanément ! Sur une machine avec 1 seul et unique serveur, avoir 2 cœurs ne donne pas  2 fois plus de performance qu’1 seul cœur (on suppose que chaque cœur est ici aussi performant).

 

Le deuxième choix a été à l’origine de diverses recherches pour agir sur le moteur afin d’exploiter davantage la puissance.

Agir sur le moteur ? Mais comment ?

 

Chaque serveur de jeu demande l’utilisation du processeur pour ses calculs à des intervalles de temps réguliers. Ces intervalles sont définis par des fonctions qui agissent comme des timers. Ces timers indiquent les temps de pause durant ces cycles. La modification de ceux-ci implique des changements dans la fréquence de calcul :

  • plus j’augmente les temps de pause, plus les cycles sont longs, moins la fréquence est importante
  • plus je diminue les temps de pause, plus les cycles sont courts, plus la fréquence est importante

 

 Qu’est-ce que la fréquence dans tout ça ? La partie visible est tout simplement, les fameux FPS !

 

En conclusion, un serveur 10 000 FPS aura donc des cycles de calcul environ 10 fois plus courts qu’un serveur 1000 FPS, les calculs seront environ 10 fois plus précis, rendant les conditions de jeu meilleures.

 


Génial ! Alors tous les serveurs supérieurs à 1000 FPS touchent mieux ?!

 

Dans le meilleur des mondes, ce serait le cas. Malheureusement, comme dit précédemment, Valve n’a pas conçu le moteur de manière à officiellement supporter ce type d’utilisation.

En résulte, des dysfonctionnements et surtout des irrégularités !

 

Pour que ces FPS supplémentaires soient efficaces, tout le système d’exploitation doit être adapté et notamment l’interface entre le matériel et le système d’exploitation appelée le noyau. Ce terme de noyau revient très souvent chez les divers concurrents, notamment sur Linux.

Beaucoup revendiquent avoir développé un noyau Linux optimisé, ce qui en soit n’a rien d’exceptionnel pour tout novice Linux. L’important ici est de faire les bonnes optimisations !

 

Pour en revenir au sujet, ce noyau est le point central des optimisations qui concernent les performances, c’est lui qui permet de justement d’agir sur les fréquences de calcul, les cycles, etc.

 

Obtenir plus de 1000 FPS de façon réelle demande donc certaines optimisations poussées.

 


Si mon serveur a plus de 1000 FPS, il est donc bien optimisé ?

 

Pas nécessairement, c’est même souvent faux. Comme je le disais plus haut, le moteur n’est pas prévu pour. Si le système n’est pas non plus pour, le moteur n’y verra que du feu et va donc considérer que les cycles de calculs sont réels alors qu’ils ne sont pas effectués ! En résulte un nombre de FPS normal dans la console du serveur sans pour autant davantage solliciter le processeur.

 


Et mTxServ dans tout ça ?

 

Notre noyau Linux est spécialement conçu dans l’optique d’adapter l’ensemble du système à ce genre d’utilisation. Nos machines sont capables de traiter des cycles de calculs infiniment courts et donc d’atteindre des fréquences énormes, au prix d’une consommation processeur importante.

De manière expérimentale, nous avons réussi à atteindre 277 000 FPS mais sans joueur et 100% de consommation processeur…

 

Mais la meilleure preuve de nos compétences en matière d’optimisation est notre vitrine : le serveur FFA Free For Fun 18 slots -> 88.191.78.37:27018

 

Celui-ci est constamment rempli et ravit tous les joueurs avec seulement un processeur mobile Intel T7200 2 Ghz. La qualité de ce serveur en a surpris plus d’un, même parmi l’élite de l’esport.

La maîtrise de la puissance est bien plus importante que la puissance elle-même !

 


Ok ok… Pouvez-vous en apporter des preuves ?

 

Hé bien, je risque de casser quelques mythes instaurés par certains concurrents mais allons-y !

Prenons l’exemple d’un de nos serveurs réservé aux matchs. Celui-ci est un serveur comme les autres, est présent sur une machine avec d’autres clients ordinaires, les conditions de test sont donc normales.

 

Conditions de test :

  • serveur 16 slots
  • tickrate 66
  • fps_max 0
  • exécution de la commande « stats » depuis HLSW
  • consommation processeur mesuré depuis un outil linux spécialisé

 

 

Note : la consommation CPU de la commande « stats » est totalement erronée car programmée pour une évaluation de la consommation d’un processeur d’un seul cœur, ce qui n’a pas vraiment de signification sur un processeur à 4 cœurs par exemple…

 

1er test : 1000 FPS classique

 

Dans ce premier test, nous démarrons le serveur en mode classique. La sortie de la commande stats donne les indications suivantes :

Source Engine

Nous avons donc 984 FPS environ. Quid de la consommation CPU à vide ?

Source Engine

La consommation processeur est d’environ 2%, consommation mémoire environ 1,9%.

 

Amusons nous à baisser le fps_max à 300 (valeur souvent intégrée dans les server.cfg).

 

Source Engine

Les FPS sont bornés à 300 et l’effet est même bien pire car la limite semble même être aux alentours des 250 FPS !!!

 

Source Engine

La consommation processeur, elle, a tendance à baisser.

 

2ème test : 10 000 FPS

 

On redémarre en 10 000 FPS, fps_max 0 et on refait le test.

 

Source Engine

Les FPS sont donc ok à ce niveau, les FPS promis sont bien là. Quid de la consommation ?

 

Source Engine

La consommation à vide atteint les 15% soit plus de 7 fois plus la consommation à 1000 FPS !!!

Le processeur est donc en effet nettement plus sollicité.

 

On remet un coup de fps_max 300 pour voir :

Source Engine

 

Les FPS sont bien bornés mais cette fois-ci un peu plus haut que dans les réglages de base. Ceci s’explique par les timers plus serrés qui permettent de se rapprocher plus près de la valeur limite des FPS définie.

Source Engine

 

La consommation est 3 fois moins élevée qu’à 10 000 FPS mais est plus élevée qu’avec des réglages par défaut. Là encore, les timers y jouent un grand rôle puisque les cycles de calcul bien que limités sollicitent encore et toujours le processeur de manière agressive.

 

Petit test supplémentaire, et si on mettait tout simplement fps_max 1000 ?

Source Engine

 

On s’approche du 1000 mais le moteur a ici du mal à s’en approcher, nous pouvons interpréter ceci comme un bug par rapport aux timers associés au moteur.

 

Source Engine

 

Niveau consommation, c’est un peu du pareil au même qu’à fps_max 300…

 


Des mythes s’effondrent !

 

1 – Plus de 1000 FPS, chez mTxServ ça fonctionne !

 

Malgré les avertissements lancés à grand renfort de news techniques remplies d’hypothèses, la réponse à la question « Plus de 1000 FPS : réalité ou argument commercial ? » est bien une réalité technique chez mTxServ.

10k

 

ATTENTIO N : Ceci ne s’obtient que dans certaines conditions techniques particulières au prix de nombreuses optimisations. Il existe des méthodes malsaines connues afin d’obtenir des faux FPS en trompant le moteur… Le serveur ne calcule alors rien de plus mais renvoie la valeur FPS désirée, trompant ainsi le client final. Il croit bénéficier d’une précision supérieure mais ne l’a finalement pas.

 

2 – Sans optimisation, la puissance est inutile !

 

Nombre de nos concurrents vous servent constamment la puissance de leurs tout nouveaux processeurs top moumoutte alors qu’en fait ils ne servent à rien si le système n’est pas optimisé en conséquence…

La preuve en est, un serveur 18 slots public avec tickrate stable et 990 FPS stables ne consomment pas la totalité d’un cœur de processeur T7200, processeur relativement dépassé et alors réservé aux ordinateurs portables (ceux-ci sont relativement moins performants que les versions de bureau en raison des contraintes de chaleur imposées par les chassis réduits).

 

Créer l’amalgame entre la puissance d’un processeur et la qualité d’un serveur n’a donc absolument aucun sens… Essayez de mettre des pneus de Ferrari sur une 4L. C’est plus permissif en terme de vitesse mais votre 4L ne roulera pas plus vite J

 

3 – Les Core i5 et i7 s’overclockent tout seul, super cool !

 

Encore une bien belle légende… Cette superbe fonction que vous pouvez voir dans les publicités n’est en fait pas applicable à un serveur de jeu, pourquoi ?

La fonction évoquée est le Turbo Boost.

 

Son principe : lorsque 1 cœur processeur a besoin de puissance supplémentaire et qu’un autre n’est pas utilisé, le cœur inutilisé est mis en sommeil et le cœur très utilisé est temporairement overclocké.

 

Le pourquoi du comment : tout processeur possède une spécification appelée enveloppe thermique (mesurée en Watts) qui est une mesure non seulement de consommation mais également de dissipation de chaleur thermique. Overclocker un processeur revient à augmenter sa fréquence de calcul et nécessite donc plus d’énergie. Qui dit plus d’énergie dit plus de chaleur. Pour pallier à ces problèmes, le processeur équilibre donc la surconsommation d’un cœur par le sommeil d’un autre.

 

La réalité du terrain : les serveurs de jeu ont rarement besoin de plus de consommation. On peut estimer qu’un Core i7 supporte jusqu’à 50 joueurs / core, ce qui est largement suffisant ! Et si on a besoin de plus, on pioche sur un autre cœur ? En théorie oui, en pratique, les autres cœurs sont quasiment toujours utilisés et ne peuvent donc pas être mis en sommeil…

La solution reviendrait à n’avoir que 2 cœurs utilisés sur toute la machine, ce qui économiquement n’est pas viable (qui paierait son serveur 80€/mois pour cela ?!).

Oubliez donc tout de suite cette idée, d'autant plus que comme nous le disons bien souvent : la maîtrise de la puissance est bien plus importante que la puissance elle-même !

 

 

Conclusion

 

Cet article n'est qu'une simple réponse à des articles vus par ci par là sur divers sites soi-disant connaisseurs... Il est parfois bon de donner son avis sur ce type de questions et faire tomber des mythes stupides ou du moins qui nous apparaissent comme tels.

Nos compétences techniques accumulées après de longues recherches nous permettent aujourd'hui de pouvoir répondre au mieux à ce genre de problématique, sans pour autant briser le contact avec l'utilisateur final qui bien souvent ne s'intéresse pas à toutes ces questions !

Si vous avez toutefois des questions poussées à ce niveau, n'hésitez pas à nous consulter, nous nous ferons un plaisir d'y répondre :)