Optimisation côté client

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907

Bonjour, je présente ici certains conseils publiés sur des sites au sujet de l’optimisation du système pour jouer. On distingue deux grandes catégories : utiliser au mieux les ressources en calcul du micro-processeur et optimiser le protocole TCP au niveau de la carte réseau.

Avertissement:
Je n’ai testé aucunes de ces recettes. Certaines sont peut-être même obsolètes dans la mesure où elles ont été rédigées avant la sortie de Windows8.
De plus, vous êtes bien entendu au courant que toute intervention sur la base de registre Windows est suceptible de vous empêcher de redémarrer le système : il faut donc créer un point de restauration et être près à utiliser le CD de démarrage/dépannage.
Je finis avec des conseils prodigués pour des systèmes GNU ; j’ai préféré les recopier tels quels plutôt que de tenter de les adapter à Windows sans les tester, mais vous pourrez peut-être y voir des astuces intéressantes (quand elles ne correspondent pas à celles données explicitement pour Windows).

Si vous trouvez certains de ces conseils discutables ou inutles parce que vraiment obsolètes, n’hésitez pas à commenter.
N’hésitez pas non plus à communiquer leurs éventuels effets sur votre configuration : gain en stabilité (vs. déconnexions), gain en IPS, lissage des IPS (vs. phénomène de yo-yo).

Liens internes :
Accorder une priorité d’exécution haute au client
Choisir le coeur utilisé par une application mono-coeur

Désactiver ou contourner l’hyperthreading
Diminuer la latence réseau inhérente au protocole TCP
Divers
Optimisation sous GNU

(Modéré par Haaznahnuff.1907)

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907


Multi-coeur
Les micro-processeurs actuels possèdent plusieurs coeurs ou unités de calcul et le système peut donc lui faire effectuer plusieurs opérations en parallèle : il s’agit vraiment de multi-tâche. Pour cela, les processus doivent être également optimisés de façon à envoyer plusieurs tâches en parallèle plutôt qu’à la file (pour tirer partie du parallélisme) ; on parle d’application “threaded” (multi-tâche ?). Selon le couple système/application, l’utilisation des multi-coeur sera donc plus ou moins efficace.
[Note: ne pas confondre ces tâches/“threads” qui sont des requêtes faîtes au processeur, avec les “tâches” du gestionnaire Windows qui sont des processus, c’est à dire les modules applicatifs actuellement actifs, et qui soumettent les tâches.]
De plus, il semble que les micro-processeurs Intel sont réputés pour leur coeurs individuellement plus rapides, tandis que les processeurs AMD sont réputés pour la coordination entre leurs coeurs et leur meilleur parallèlisme. Ainsi, pour les applications mono-coeur et même pour les autres, vu les capacités de gestion des systèmes et l’optimisation des applications actuelles, les tests de performance tendent à préférer la marque Intel lorsqu’il s’agit de jeux gourmands (c’est à dire une seule grosse application prioritaire tournant sur le système).
Le nombre de coeurs peut être de 2, 4 ou 6. Ils sont numérotés en commençant à 0 : c0, c1, c2, c3 pour un QuadCore. En général, le coeur par défaut, c’est à dire utilisé en priorité par le système, est le c0.
Il est possible de préciser au système quel(s) coeur(s) utiliser pour telle application.


Hyperthreading
Certains coeurs n’étant pas utilisés de manière optimale même lorsqu’on leur soumet des calculs à la chaîne (les Intel ?), les fondeurs ont imaginé de commencer à leur soumettre une nouvelle tâche (thread) avant que la précédente ne soit finie d’être traitée ; pour ce faire, les processeurs font croire au système qu’ils possèdent deux fois plus de coeurs qu’ils n’en ont : ce sont les coeurs virtuels, qui s’intercalent entre les coeurs physiques. De là provient le terme “coeur logique”
Cette configuration permet d’accélérer le traitement lorsque les applications ne sont pas trop limitées par les performances du processeur (non CPU-bound), mais pour les autres, les deux tâches d’un même processus peuvent entrer en concurrence dans tous les éléments du coeur qui étaient déjà utilisés à 100% sans “hyperthreading”, puisqu’il n’y a pas en réalité deux coeurs physiques mais un seul. C’est en quelque sorte analogue à la différence entre utiliser pour le stockage des données des volumes logiques situés sur deux disques physiques différents ou bien sur le même disque dans deux partitions différentes.
L’"hyperthreading" fait ainsi passer le nombre de coeurs logiques à 4, 8, 12. Dans la numération des coeurs, un coeur virtuel se place juste après le coeur physique correspondant. Ainsi pour un QuadCore HT, c0 et c1 correspondent au premier coeur, c2 et c3 au deuxième, c4, c5, c6, c7 aux deux derniers. C1, c3, c5 et c7 sont les coeurs virtuels et il y a 8 coeurs logiques en tout.
L’"hyperthreading" peut être activé/désactivé dans le BIOS.
Il est possible de préciser au système quel(s) coeur(s), virtuel(s) ou physique(s), utiliser pour telle application.

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907

  • Accorder une priorité d’exécution haute au client :
    • Pourquoi :
      Rendre les tâches soumises par le client prioritaires sur la plupart des autres tâches. Assigner une priorité haute n’a évidemment une importance que si l’application n’est pas la seule à tourner, ou si le système gère mal le multi-coeur.
      Mais c’est quand même le cas pour un DualCore où une application “threaded” doit partager le premier coeur avec le système (Qui a dit anti-virus ?).
      Certaines tâches du système restent tout de même prioritaires.
    • Comment :
      - ouvrir le gestionnaire de tâches une fois le client GW2.exe lancé.
      - sélectionner le client et cliquer droit pour changer la priorité : Basse (défaut) -> Haute.
    • Note :
      Lorsque l’on consulte le gestionnaire de tâche, le client de jeu se met sans doute temporairement en priorité faible quels que soient ces réglages.
  • Choisir le coeur utilisé par une application mono-coeur :
    “Mono-coeur” est ici synonyme de “mono-threaded” ou “non threaded”.
    • Pourquoi :
      Si ce réglage était indispensable sous Windows XP car celui-ci assignait par défaut toutes les applications au premier coeur, il semble qu’à partir de Windows 7, le système répartit normalement tous les processus lancés sur tous les coeurs physiques d’abord, puis utilise l’"Hyperthreading" le cas échéant.
      Moins le processeur a de coeurs et plus l’application est “multi-threaded”, plus il faudra tester différents réglages et trouver le juste équilibre entre laisser l’application soumettre le maximum de tâches en parallèle, et réserver un ou deux coeurs pour le système (le seul problème étant la concurrence sur un même coeur physique ou virtuel entre une tâche du jeu et une tâche “système” plus prioritaire).
      De plus, une application peut ne savoir utiliser qu’1, 2 ou 3 coeurs en même temps (3 pour WoW), et cela, le système ne le sait pas : aidez-le en assignant 1, 2 ou 3 seuls coeurs à l’application. GW2 semble être réellement “multi-threaded” (d’après les témoignages, 6 coeurs physiques sur un HexCore 3930K et 8 coeurs sur un i7-2600K HT sont utilisés en même temps).
    • Comment :
      - ouvrir le gestionnaire de tâches une fois le client Gw2.exe lancé.
      - sélectionner le client et cliquer-droit pour changer l’affinité :
      - décocher “Tous les coeurs” et ne conserver que 1 ou 2 coeurs les plus éloignés du 1er.
      DualCore: choisir le CPU1 (et pas le CPU0) ou bien les deux coeurs.
      QuadCore: choisir CPU3 et CPU4, ce qui laissera les deux premiers pour le système et le multi-tâche.
      - cette manipulation est également possible sous Windows8, et prend en compte les coeurs virtuels (dans ce cas, CPU1 est le premier coeur virtuel).

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907

  • Désactiver l’"Hyperthreading" :
    • Pourquoi :
      Éviter qu’une application (le jeu) ne soumette deux tâches au même coeur physique. Les tests montrent qu’il est plus efficace de ne laisser que deux coeurs physiques à l’application, plutôt que ces deux coeurs plus les deux coeurs virtuels associés. Il doit se produire un engorgement dû à une concurrence entre tâches d’une même application exigeant beaucoup de calculs rapides (CPU-bound).
    • Comment :
      Les BIOS récents détectent la capacité d’HT des micro-processeurs et permettent de la désactiver.
      Il est peut-être également possible de la désactiver en manipulant la base de registre (ne s’applique qu’au prochain démarrage), mais il faudrait que je me documente d’avantage (sous réserve donc).
      Certains joueurs rapportent qu’ils utilisent un compte utilisateur dédicacé au jeu, ce qui permet d’utiliser l’HT sur un autre compte.
      Une solution alternative est de laisser l’HT activé dans le BIOS, mais de le contourner pour seulement les quelques applications qui posent problème comme GW2.
  • Contourner l’hyperthreading :
    et également définir les coeurs utilisés (voir aussi ci-dessus).
    Note : il semble qu’avec Windows8, il ne soit pas utile d’agir sur la base de registre et le gestionnaire de tâche suffit à définir les affinités (voir ci-dessus).
    • Pourquoi :
      Éviter le premier coeur (coeur par défaut) si possible (sur un QuadCore par exemple), et éviter d’utiliser les coeurs virtuels (ou désactiver l’hyperthreading).
      Si l’application peut tirer parti d’un processeur multi-coeur et de l’hyperthreading, on dit qu’elle est “threaded” ; par exemple, WoW peut soumettre 3 tâches à la fois.
      Il y alors intérêt dans ce cas à non seulement lui interdire d’utiliser le coeur par défaut (si c’est possible), mais aussi de ne pas utiliser l’"hyperthreading" ou les coeurs virtuels car cela entrerait en concurrence avec les coeurs physiques.
      Même si l’application n’est pas “threaded”, il est préférable de lui assigner un autre coeur (2,3 ou 4) (en supposant que le système n’utilise que le premier).
      Enfin, un moyen de ralentir une application ancienne quoique “threaded”, tournant trop rapidement car elle utilise trop de threads, est de réduire à 1 le coeur utilisé.
    • Comment :
      L’affinité de chaque application peut être réglée en modifiant la valeur d’une clé de registre (ou en la créant si elle n’existe pas).
      Valeur de la CVAR (ou Console VARiable) dans le registre:
      Ex. : SET processAffinityMask “14”
      Dans cet exemple, le masque d’affinité de l’application a été choisi égal à 14 (en décimal).
      Calcul du masque d’affinité :
      Exemples (b:binaire, d:décimal):
      - avec un DualCore et les coeurs logiques 4,3,2,1 = [Coeur2 virtuel][Coeur2][Coeur1 virtuel][Coeur1], choisir comme masque b101 ou d5
      - avec un QuadCore et les coeurs logiques 8,7,6,5,4,3,2,1 = [Coeur4 virtuel][Coeur4][Coeur3 virtuel][Coeur3][Coeur2 virtuel][Coeur2][Coeur1 virtuel][Coeur1], choisir comme masque b1010100 ou d84 (le premier coeur n’est pas utilisé par l’application).
      Sans hyperthreading (le nombre de coeurs logiques est égal au nombre de coeurs physiques), les masques seraient plutôt:
      - DualCore : b11 ou d3
      - QuadCore : b1110 ou d14 (le premier coeur n’est pas utilisé par l’application).

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907

  • Diminuer la latence réseau inhérente au protocole TCP (partie 1) :
    (acquiescement des paquets reçus)
    Note : cela ne serait pas nécessaire à partir de Windows7/VISTA ?
    • Pourquoi :
      Windows règle par défaut TCPackfrequency à 2, c’est à dire qu’un paquet d’acquiescement (signal de bonne réception) est envoyé tous les 2 paquets de données reçus.
      Mais certaines applications ou certains réglages d’optimisation peuvent avoir modifié cette valeur.
      Or, plus cette valeur est élevée, plus la machine client fait attendre le serveur car celui-ci attend un acquiescement de bonne réception avant de continuer l’envoi (et passé un certain délai, il recommence la même émission).
    • Comment :
      - exécuter la commande : regedit
      - rechercher la clé de registre :
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
      - sélectionner la clef de registre qui correspond à l’interface réseau (NIC) qui est utilisée pour jouer (et se connecter à l’Internet).
      - ajouter une valeur avec un clic-droit dans le panneau de droite :
      DWORD TcpAckFrequency et modifier sa valeur à 1.
      - en cas de problème avec les autres applications utilisant l’Internet, il est possible de la même façon de revenir à la valeur 2 en re-sélectionnant la clef et en modifiant la valeur TCPAckFrequency à 2.
  • Diminuer la latence réseau inhérente au protocole TCP (partie 2) :
    (mise en tampon à l’émission):
    • Pourquoi :
      Par défaut, Windows attend un peu avant d’envoyer un paquet sur le réseau. Il attend d’avoir plusieurs paquets, les ré-ordonne afin d’équilibrer la charge réseau qu’il va générer en envoyant d’un coup.
      Lorsque seul un PC et un MMOG utilisent la connexion, le seul intérêt pourrait être de lisser les pics d’envoi, mais ils ne sont pas bien importants dans le sens ascendant, et la latence peut être sensiblement impactée.
      Il faut donc désactiver cette prioritarisation/mise en tampon de TCP.
      Ainsi, dès qu’un paquet de données est délivrée à la carte réseau, il sera traité et émis sur le réseau local (ou vers la box).
    • Comment :
      - exécuter la commande : regedit
      - rechercher la clé de registre :
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters
      - créer une nouvelle valeur par clic droit dans le panneau de droite:
      DWORD TCPNoDelay et la modifier à la valeur 1
      - sauvegarder le registre (et créer un point de récupération avant).
      - redémarrer le système.
    • Note :
      Sur Windows VISTA/7 HOME, la clef MSMQ n’est pas présente dans la base de registre et il faut alors la rajouter en entier:
      Chercher la clef MSMQ comme ci-dessus. Si elle est présente, cf. ci-dessus; si elle est absente, la créer:
      - écrire les lignes suivantes dans un fichier texte (notepad):
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ]
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters]
      “TCPNoDelay”=dword:00000001
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\OCMsetup]
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security]
      “SecureDSCommunication”=dword:00000000
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\setup]
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Setup]
      - sauvegarder le fichier avec l’extension .reg
      - exécuter ce fichier (double clic) et confirmer.
      - redémarrer le système.

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907

  • Forcer l’utilisation de DirectX11 sous Windows 7/VISTA :
    (Pour info)
    • Pourquoi :
      Si l’application utilise l’API DX11 et si la carte graphique la supporte, des gains de +20-30% IPS ont été constatés avec WoW.
    • Comment :
      - localiser le ficher de configuration DirectX de l’application (WoW: …\WTF\config.wtf) et l’ouvrir avec notepad.
      - ajouter la ligne : SET gxApi “d3d11”
      Cela débloque la compatibilité DX11 expérimentale sur WoW.
      Problème avec GW2 :
      - est-ce applicable à GW2 ?
      - il n’y a pas de fichier de configuration GW2 modifiable.
      Cependant :
      -existe t-il un logiciel tiers qui permettrait de tirer partie des cartes compatibles DX11 d’une manière ou d’une autre (si cela présente un intérêt).
      Quoiqu’il en soit, cette astuce pourra peut-être servir si GW2 commence à utiliser DX11 ?
  • Utiliser un unité de stockage à état solide (SSD) pour les fichiers de jeu :
    Ne pas oublier dans ce cas de limiter les écritures sur ce disque au minimum de façon à optimiser sa durée de vie.
    Sous GNU/Linux par exemple, le système de fichiers étant “bavard”, l’option de montage -noatime est grandement conseillée.

Optimisation côté client

in Problèmes de compte et assistance technique

Posted by: Haaznahnuff.1907

Haaznahnuff.1907

  • Optimisation pour les jeux tournant sous GNU (avec Wine) :
    Cette section peut aussi donner des idées au utilisateurs de Windows ?
    • Faire tourner le jeu en mode de compatibilité XP/Vista/Seven :
      Tester le réglage le plus efficace.
    • Désactiver le SLI :
      Les pilotes nVidia proposent une position “auto” qui ralentit le jeu. Si le SLI peut améliorer les IPS dans certains cas, le but recherché est quand même plus d’avoir une valeur minimale d’IPS non fluctuante en deça d’une certaine limite, que d’avoir le maximum d’IPS dans certaines situations privilégiées uniquement.
    • GW2 est conçu pour exploiter au mieux un QuadCore mais au travers de Wine, il n’utilise jusqu’en 2013 qu’un seul coeur. Cela veut dire que les joueurs sous GNU/Linux ont plutôt intérêt à privilégier la rapidité individuelle des coeurs plutôt que l’efficacité de leur gestion : choisir Intel.
    • Over-clock :
      Gain de 5-10 IPS / 200 MHz aux dépends de la stabilité.
    • Pilote nVidia 310.14+ :
      Il permet d’optimiser les “pthreads” pour les fonctions graphiques d’OpenGL mais il est encore expérimental.

Les “pthreads” sont une API de gestion des threads/tâches au standard POSIX qui n’est pas native sous Windows.
Cette API prend la forme d’une bibliothèque C (pthread.h). En forçant la position d’un drapeau, on oblige GW2 à utiliser les “pthreads”.
Cela améliore un peu les performances et rend le jeu plus stable, mais il faut se rappeler que sous GNU/linux, on part de loin avec GW2…

  • Exemple d’optimisation (Octobre 2013 avec Wine):

Gw2 graphics options :
Resolution : 1680×1050
Animations: Low
Anti-aliasing: None
Environnement: Low
LOD : Terrain & Sky
Textures : Medium
Render : Native
Shadow : Low ( important in large events !)
Post Process : Low
WvW Character Limit : Low
WvW Character Quality : Low

Bios :
HyperThreading OFF ( I’ve found this helps to be less laggy on my hardware. )

Regedit :
UseGLSL : disable
PixelShaderMode : enable
VideoMemorySize=1024 <— dépend de la carte vidéo ? (Geforce 560 GTX Ti)

Nvidia-settings :
OpenGL settings : quality
Allow Flipping : On
Powermizer : adaptive
Anti-aliasing : All off