Alt-F4 n°41 - Chargement du titre, veuillez patienter... 09-07-2021
traduit par bev, Firerazer
Cette semaine, pour le numéro 41, oof2win2 est de retour avec un article un peu plus technique sur ce qui peut mal se passer quand on essaie de se connecter à des parties multijoueur et comment il est parfois possible de résoudre ces problèmes. Si vous vous êtes déjà demandé pourquoi Factorio ne vous autorise pas à rejoindre la partie multijoueur de vos amis, cet article pourrait vous apporter quelques explications !
Contrôle rapide des performances oof2win2
Si vous ne disposez pas d’un ordinateur de pointe, vous avez probablement déjà vu un message de ce type, indiquant que vous avez été exclu du jeu parce que votre réseau ou votre ordinateur n’était pas assez rapide. Mais qu’est-ce que cela signifie réellement ? Que pouvez-vous y faire à court et à long terme ?
Problèmes de vitesse de réseau
Il arrive parfois que votre réseau ne soit pas des plus performants. Cela peut être dû à de nombreuses choses, comme la maintenance de votre fournisseur d’accès ou une panne de courant dans les centres de données de votre DNS. Il existe cependant quelques utilitaires qui peuvent aider à atténuer ce genre de problèmes.
Expliquer le fonctionnement de la mise en réseau de Factorio est cependant une tâche plus complexe. cube a bien expliqué ce processus dans le FFF n°136. L’une des choses les plus importantes qu’ils ont faites est d’utiliser le protocole UDP, mais d’y rajouter des éléments qui sont eux en TCP. UDP a l’avantage d’être beaucoup plus rapide que le TCP conventionnel, utilisé pour la plupart des choses de la vie quotidienne. L’UDP atteint cette vitesse en ne demandant pas de “poignée de main”, c’est-à-dire que deux clients (ordinateurs) conviennent qu’ils veulent communiquer ensemble et établissent une connexion, ce qui signifie simplement qu’ils ne se soucient pas de ce qui se passe avec les données, ils se contentent de les envoyer. Cependant, cette méthode supprime également la possibilité de garantir la bonne livraison des données, en les ordonnant correctement ou en supprimant les doublons (ce qui peut parfois arriver).
Le fait que l’UDP supprime la garantie de livraison des données contredit directement la façon dont Factorio doit fonctionner en utilisant des algorithmes Lockstep entièrement déterministes, comme je l’ai expliqué dans un article précédent, puisque les données doivent arriver, sinon vous recevrez une désynchronisation. cube explique que Wube a résolu ce problème en implémentant des parties du protocole TCP dans leur version de l’UDP. Cela signifie qu’ils ont toujours la vitesse qu’ils veulent, mais qu’ils peuvent également avoir la fiabilité de TCP. Ou presque, car le protocole Factorio n’est pas disponible publiquement pour que les gens puissent l’analyser. Hornwitser s’est toutefois essayé à l’analyse du trafic avec son décodeur, qui a même permis de corriger un bug présent dans le jeu depuis la version 0.17 !
L’UDP est également très important car il permet au punching du NAT de fonctionner. Le punching du NAT est le processus par lequel votre client demande à un serveur externe (le serveur pingpong, qui est un serveur hébergé par Factorio et qui sert précisément à cela) de dire au serveur de jeu Factorio d’établir une connexion avec votre client, car certains routeurs et pare-feu peuvent bloquer les connexions “aléatoires” provenant d’IP auxquelles vous n’avez rien demandé, ce qui est une bonne chose pour empêcher quelqu’un de pirater votre ordinateur, mais constitue également un obstacle pour les développeurs de Factorio.
Maintenant, essayons de résoudre le problème de Factorio qui vous éjecte du jeu. Tout d’abord, vous pouvez essayer de tester votre vitesse pour vérifier si votre réseau est suffisamment rapide en utilisant des sites tels que Ookla’s Speedtest ou fast.com (Netflix). Les deux sites mesurent des données similaires, alors choisissez votre bonheur. Il y a cependant trois choses qui sont importantes (en se référant au speedtest d’Ookla) : la vitesse de téléchargement, la vitesse d’envoi et la latence.
Avec Factorio, vos vitesses de téléchargement et d’envoi n’ont pas besoin d’être très élevées, car la carte (le fichier de sauvegarde) vous est envoyée uniquement lorsque vous vous connectez à un serveur. La vitesse de téléchargement de la carte dépend de votre vitesse de téléchargement et de la vitesse d’envoi du serveur ; vous ne pouvez pas télécharger quelque chose plus vite qu’il ne vous l’est envoyé. En général, les fichiers de sauvegarde ne dépassent pas 50 Mo (si vous n’utilisez pas de jeux sérieusement moddés), donc avec une connexion moyenne, une sauvegarde sera téléchargée en 15 secondes. La vitesse de téléchargement d’une sauvegarde n’a pas vraiment d’importance, puisqu’il ne s’agit finalement que d’un transfert de fichier. La vitesse de téléchargement affecte cependant le nombre de ticks de rattrapage (le temps de chargement de la carte après le téléchargement). D’une manière générale, tout devrait fonctionner, mais les choses peuvent varier.
Le “rattrapage” est un processus très spécifique à Factorio. Cela signifie que vous devez rattraper les nouvelles actions dans le jeu, parce que vous avez une ancienne copie et que le serveur ne peut pas vous envoyer instantanément une toute nouvelle copie de la sauvegarde pour que vous puissiez l’utiliser directement. Au lieu de cela, le processus pour rejoindre une session multijoueur ressemble à quelque chose comme ceci :
- Le serveur sauvegarde la carte à un tick spécifique, disons le tick 100, et vous envoie la carte sauvegardée. Le serveur commence également à vous envoyer toutes les modifications à partir de maintenant (uniquement les actions des utilisateurs, comme décrit dans mon autre article à propos du mode multijoueur de Factorio).
- Vous téléchargez la carte. Cependant, comme vous ne disposez pas d’une bonne connexion Internet, le téléchargement prend 90 ticks, pendant lesquels d’autres joueurs ont agi sur le jeu et ont créé de nouvelles choses.
- Comme vous avez 90 ticks de retard sur l’état actuel de la carte, vous ne pouvez pas rejoindre la partie. Le serveur vous a cependant envoyé toutes les actions effectuées par les joueurs, votre client commence donc à simuler le jeu et ajoute les actions aux bons ticks. Lorsque le jeu est synchronisé avec la copie du serveur, vous pouvez enfin rejoindre la partie.
Il peut cependant y avoir un problème à l’étape 3. Parfois, la barre de progression appelée “rattrapage” ne bouge pas, mais reste au même endroit. Le problème est que vous simulez le jeu à la même vitesse que le serveur, et que vous ne pourrez donc jamais récupérer ces 90 ticks. Une analogie serait que vous couriez sur une piste à la vitesse exacte de 6 km/h, mais que la piste soit prolongée de 6 km toutes les heures, de sorte que vous ne parviendriez jamais à terminer la course ou à atteindre la fin de la piste, car vous courez à la même vitesse que celle à laquelle la piste est construite. Il est important de préciser que le rattrapage n’est pas lié au réseau, mais plutôt à d’éventuels goulets d’étranglement matériels, que j’expliquerai plus tard.
Un autre élément du speedtest d’Ookla est votre ping (votre latence) vers leur centre de données. Ce n’est pas toujours exact en ce qui concerne un serveur Factorio, car les serveurs Factorio peuvent se trouver n’importe où dans le monde, alors qu’Ookla vous connecte à votre centre de données le plus proche.
Fiabilité
La vitesse et la latence de votre connexion sont une chose. Cependant, la fiabilité du réseau peut être bien plus déterminante. Un exemple de mauvaise fiabilité d’un réseau est le cas où quelqu’un vous envoie 100 messages mais que seuls 10 d’entre eux vous parviennent effectivement (ce qui serait considéré comme une perte de paquets de 90%, en termes de réseau). La fiabilité du réseau peut varier. Par exemple, un jour, vos paquets peuvent voyager correctement, tandis qu’un autre jour, un requin peut dévorer vos données. La fiabilité du réseau peut être mesurée via la commande ping
ou en utilisant un logiciel tel que StarTrinity’s Constant Speed Test, qui est bien plus convivial et peut afficher des données supplémentaires. Par exemple, dans l’image ci-dessous, vous pouvez voir que le téléchargement a échoué plusieurs fois et que cela était dû à une connexion Internet non fiable (le fait de désactiver l’Internet peut simuler cela). En réalité, votre résultat pourrait être différent. Quoi qu’il en soit, le test de vitesse de StarTrinity est également un bon moyen de trouver le bon endroit pour obtenir de meilleures vitesses et fiabilité pour votre WiFi.
Un moyen de remédier à une connexion Internet peu fiable consiste à utiliser une connexion Ethernet câblée plutôt qu’une connexion sans fil. La connexion câblée est beaucoup moins susceptible d’être défaillante, car les données sont sous forme électrique et circulent dans un câble (généralement) en cuivre, alors que la connexion sans fil peut être bloquée par des murs en béton ou les renforts métalliques qui se trouvent souvent dans les murs. Si vous ne pouvez vraiment pas renoncer à l’utilisation du sans fil, vous devriez au moins envisager de passer de la 5G à la 2,4G, car la 5G a une portée beaucoup plus courte et est beaucoup plus susceptible d’être bloquée par des objets sur le trajet des ondes que la 2,4G.
Goulets d’étranglement matériels
Jusqu’à présent, je me suis concentré sur la partie “votre réseau” du message d’erreur. Cependant, la partie “ou ordinateur” constitue une autre composante de ce message. Cela signifie que c’est peut-être aussi votre matériel qui empêche le jeu de fonctionner correctement. Il y a plusieurs paramètres de débugging que vous pouvez activer pour vérifier cela, comme l’option show-fps
qui affiche vos FPS et UPS (FPS représente les images par seconde (graphiques), UPS indique les mises à jour par seconde, la vitesse de mise à jour du jeu, qui est dictée par votre processeur). Pour activer un paramètre de débugging, appuyez sur F4 -> sélectionnez ce que vous souhaitez -> appuyez à nouveau sur F4 pour masquer le menu. Le paramètre sera maintenu jusqu’à ce que vous le désactiviez.
Un paramètre très important pour voir ce qui prend du temps de processeur (UPS) sur votre sauvegarde est show-time-usage
. Cela vous montrera une liste de choses qui sont calculées dans le jeu, depuis le parcours des entités, le calcul des fluides, les réseaux électriques et les déplacements des robots. Pour que le jeu fonctionne correctement, il faut que tout soit inférieur à 16,66 ms (1/60e de seconde). Si quelque chose prend beaucoup de temps, vous devez réfléchir un peu : si ce sont des robots et que vous avez 50 000 robots qui volent quelque part, essayez de désactiver cette partie de votre usine et voyez comment évolue l’utilisation du temps après cela.
Vous pensez peut-être “Pourquoi le serveur ne calcule-t-il pas tout cela pour moi” ? Eh bien, c’est surtout parce qu’il est beaucoup plus facile d’envoyer uniquement les nouvelles données (comme je l’ai décrit dans mon article sur le mode multijoueur) plutôt que d’envoyer toutes les données à chaque tick. Dans Factorio, le client exécute la même simulation que le serveur, donc votre processeur doit être capable d’exécuter les mêmes calculs que le processeur de tous les autres participants.
Que faire de tout cela ?
Il y a certaines choses que vous pouvez faire pour améliorer les performances de votre usine, comme passer toute la production d’énergie au solaire. Mais il y a beaucoup de choses que vous pouvez faire sans modifier l’usine elle-même. Voici donc une sélection de remèdes possibles qui m’ont semblé les plus utiles pour les choses incontrôlables, comme la pollution.
La solution la plus simple pour qu’un ami puisse rattraper son retard est de mettre le jeu en pause. Vous pouvez le faire en appuyant sur Maj+Espace
. Cependant, cette solution n’est souvent que temporaire, car le jeu continuera à tourner après que vous l’ayez remis en marche, et l’ordinateur de votre ami ne pourra peut-être pas suivre.
Si vous avez beaucoup de pollution par endroits et que vous êtes à un stade plus avancé du jeu où les biters ne sont plus qu’une nuisance à l’expansion, vous pouvez exécuter cette commande :
/c for _, surface in pairs(game.surfaces) do
surface.clear_pollution()
end
game.map_settings.pollution.enabled = false
Pour chaque surface du jeu, elle supprimera toute la pollution, puis désactivera la création de pollution, ce qui peut améliorer considérablement les performances dans certains cas, car la pollution n’aura plus à être simulée.
Si, par contre, vous pensez que la pollution n’est pas la source du problème et que vous avez plutôt une grande quantité de déchiqueteurs inactifs, vous pouvez utiliser cette commande :
/c game.forces["enemy"].kill_all_units()
Elle tuera tous les déchiqueteurs de la force "enemy"
(qui, normalement, devraient correspondre aux déchiqueteurs). Cependant, elle ne supprimera que les unités mobiles, comme les mordeurs et les cracheurs, et non les nids ou les vers. Si vous souhaitez supprimer également ces unités, vous pouvez utiliser cette commande à la place :
/c local surface=game.player.surface
for key, entity in pairs(surface.find_entities_filtered({force="enemy"})) do
entity.destroy()
end
Si vous estimez encore que les déchiqueteurs sont juste ennuyeux et que votre base s’en occupe toujours bien toute seule, vous pouvez utiliser cette commande à la place :
/c local surface = game.player.surface
local mgs = surface.map_gen_settings
mgs.autoplace_controls["enemy-base"].size = "none"
surface.map_gen_settings = mgs
Elle désactivera la génération des déchiqueteurs sur votre surface uniquement, qui par défaut est Nauvis, mais elle n’affectera pas les déchiqueteurs déjà présents (vous devrez utiliser les commandes précédentes pour cela).
Si rien de tout cela ne fonctionne, la solution la plus simple est de réduire la vitesse du jeu. Tout fonctionnera plus lentement, mais vous pourrez jouer avec vos amis sans qu’ils ne se fassent éjecter :
/c game.speed = 0.8
Cette commande ralentit le jeu en modifiant sa vitesse (et donc en diminuant les UPS). La valeur par défaut est 1, mais vous pouvez descendre jusqu’à 0.01, où il ne se passe pratiquement rien. La meilleure idée est de commencer à diminuer à partir de 1 par pas de 0,1 ou 0,05, comme 0,9, 0,8, 0,7, etc. Cette commande réduira globalement la vitesse du jeu, il y aura donc moins de mises à jour par seconde à calculer. Le nombre d’UPS dans le coin de votre écran sera multiplié à partir de la valeur de référence par cette constante, de la manière suivante : $ 1 \cdot 60 = 60 $, $ 0,8 \cdot 60 = 48 $, $ 0,5 \cdot 60 = 30 $.
Toutes ces commandes proviennent du Wiki, si vous voulez voir plus de magies Lua. Pour exécuter une commande, il suffit de la copier, d’ouvrir votre barre de discussion (ou Console) et de la coller.
Optimisation par la conception
Vous avez peut-être aussi remarqué que je n’ai pas mentionné comment votre processeur graphique peut vous faire décrocher, même si le message en haut de page disait “votre ordinateur”. La raison en est que Factorio ne se soucie pas de savoir si votre processeur graphique est une 3090 Ti ou simplement une carte graphique intégrée, il lui demandera simplement “d’afficher des choses”. S’il n’y parvient pas correctement, ce n’est pas grave. Vous pouvez toujours réduire votre résolution ou modifier les paramètres graphiques de Factorio pour obtenir une amélioration.
Factorio est optimisé de par sa conception, et l’a toujours été. Therenas a disséqué les améliorations de performance de la version 1.1 dans son article et les développeurs de Factorio ont publié de nombreux articles sur l’optimisation du jeu (tous les FFF ont été soigneusement classés ici par spielsw, afin que vous puissiez facilement retrouver ceux traitant d’optimisations).
Contribuer
Comme toujours, nous attendons vos contributions pour les Alt-F4, que cela soit par la soumission d’un article ou en aidant pour les traductions. Si vous avez quelque chose d’intéressant en tête que vous souhaitez partager avec la communauté, vous êtes au bon endroit. Si vous n’êtes pas sûr, nous serons heureux de vous aider en discutant structure, contenu et idées. Donc si vous voulez vous impliquer dans les Alt-F4, rejoignez-le Discord pour ne rien rater !