Page 1 sur 1

Optimisation sur GNU/Linux

Posté : dim. 06 sept. 2009, 20:42
par tuxshake
Le but de ce post est principalement de donner des pistes concrètes
sur l'optimisation de la saga baldur's gates sous linux.
Cela sous entend que vous avez déjà un jeu fonctionnel.

Premièrement, il est conseillé d'utiliser un deuxième serveur graphique,
exclusivement dédié au jeu.

Je vais essayer de rester le plus clair possible,
sans trop réduire la syntaxe, pour que cela reste accessible à tous.

Pour commencer, on va simplement vérifier que tmpfs est bien présent sur le systeme :
On tape dans une console :

Code : Tout sélectionner

cat /proc/filesystems | grep tmpfs
-Si cette commande ne retourne rien, vous n'avez pas tmpfs, il faudra l'installer.
-Si vous avez un noyau 2.6 ou plus ca devrait donner :

Code : Tout sélectionner

> nodev tmpfs 
Pour gagner du temps, on va regarder si il n'y a pas un systeme de fichier déjà monté qui pourrait convenir :

On tape dans une console : ou si on veut une liste plus réduite/lisible

Code : Tout sélectionner

df | grep tmpfs
Il faut chercher une ligne similaire dans la liste :

Code : Tout sélectionner

> tmpfs                 1,7G   76K  1,6G   1% /dev/shm
Dans l'exemple,
J'ai donc un disque virtuel d'une taille totale de 1,7 Go :
Il est quasiment vide avec un malheureux fichier qui fait 76ko et il me reste 1.6Go d'espace disponible, largement de quoi s'amuser.
Sachant que généralement la mémoire vive devrait être quelque chose comme 200 fois plus rapide qu'un disque.
Le faux geek avec ses deux raptors en raid 0 peut aller courir s'acheter de la ram.

Trois choses importantes à savoir :
- On peux considérer /dev/shm comme étant l’inverse du SWAP qui lui est utilisé comme de la RAM mais stocke les données sur le disque.

- /dev/shm est configuré par défaut pour disposer de la moitié de la ram reconnue par le système.

- Le gros avantage de tmpfs par rapport à ramfs est l’allocation dynamique de la mémoire permettant ainsi de ne pas utiliser cette espace si cela n’est pas nécéssaire.

Si vous ne trouvez pas de point de montage /dev/shm
Il vaut mieux créer manuellement un point de montage tmpfs,
vous pouvez aller jeter un coup d'oeil par la, ca sera juste un peu plus long et il vous faudra adapter la chaine /dev/shm dans ce qui va suivre.

Si on jette un coup d'oeil au répertoire de jeu d'une installation de BGT par ex,
on remarque directement :
3 répertoires temporaires, respectivement : tempsave, cache, temp

On va commencer doucement en ouvrant une console dans le repertoire du jeu, ensuite :

- J'efface les 3 répertoires cache du repertoire du jeu.

Code : Tout sélectionner

rm -rfv tempsave cache temp
- J'en cree 3 nouveaux sur le disque virtuel

Code : Tout sélectionner

mkdir -p /dev/shm/BGII/tempsave /dev/shm/BGII/cache /dev/shm/BGII/temp
- Il reste à créer 3 liens symboliques qui pointeront vers la mémoire vive :

Code : Tout sélectionner

ln -s /dev/shm/BGII/tempsave /tempsave
ln -s /dev/shm/BGII/temp /temp
ln -s /dev/shm/BGII/cache /cache
A ce stade, meme en prenant en compte l'utilisation des repertoires cache,
il me reste encore pas mal d'espace disponible.
On peut aussi choisir de mettre en cache les répertoires CD ou les fichiers utilisés le plus fréquement,
repérés à l'aide de la journalisation.
Si on a énormément de ram on peut imaginer pouvoir copier la totalité.

Il vaut mieux éviter de déplacer ce qui suit si on ne veut pas perdre les modifications à chaque reboot :
Le fichier bardur.ini pour la configuration
Le réperoire save qui contient les sauvegardes
Le repertoire characters ou on peut sauver les personnages

Ce qui va suivre depend un peu de la ram que vous avez,
ici j'ai assez pour m'occuper de la totalité du repertoire override.
Toujours dans le répertoire du jeu, j'ouvre ma console :
Je renome mon repertoire override

Code : Tout sélectionner

mv override override_
Ensuite, même chose que tout a l'heure... On crée le répertoire en mémoire et son lien symbolique :

Code : Tout sélectionner

mkdir -p /dev/shm/BGII/override
ln -s /dev/shm/BGII/override /override
Par contre le répertoire est toujours vide, on va copier override_ en mémoire vive :

Code : Tout sélectionner

cp -rfv override_/ /dev/shm/BGII/override/
Apres quelques secondes et ici les 14000 fichiers copiés, on peut enfin lancer la bête :)

Par contre il ne faut pas oublier qu'au prochain reboot de la machine, le disque virtuel sera vidé.
Il faut donc utiliser votre éditeur de texte favori et créer un petit fichier batch pour automatiser un peu.
On va lui faire charger en mémoire vive ce qu'on a deplacé avant de lancer le jeu.

Code : Tout sélectionner

#! /bin/sh
# Ficher : baldur.sh
# Lancement de Baldur's Gate II

# Crée les repertoires cache
mkdir -p /dev/shm/BGII/tempsave /dev/shm/BGII/cache /dev/shm/BGII/temp

echo "Copie des fichiers dans la mémoire vive, veuillez patienter..."
cp -rf override_/ /dev/shm/BGII/override/   #-rfv pour le debug. 

# Lance le jeu
wine BGMain.exe

# Sortie
# Détruit les dossiers temporaires // libére la mémoire 
rm -rfv /dev/shm/BGII    
L'idéal est de placer le fichier dans le répertoire du jeu, sans oublier de le rendre executable :

Code : Tout sélectionner

chmod +x baldur.sh
Ensuite pour lancer le jeu, une fois dans le répertoire, on fera simplement :

Code : Tout sélectionner

./baldur.sh
Un autre point, le moteur de jeu utilise opengl.

J'aborderai ici uniquement le matériel nvidia,
je n'ai pas trop envie de me noyer dans la doc d'autres constructeurs sans avoir le matériel pour tester.

Le document suivant est très intéréssant, surtout le chapitre 11 qui touche opengl :
NVIDIA Accelerated Linux Graphics Driver README and Installation Guide

Dans une console, pour lister les modes disponibles pour votre carte :

Code : Tout sélectionner

nvidia-settings --query=fsaa --verbose
Vous pouvez tester par vous même ce qui passe sur votre config, en montant graduellement les options.
C'est de l'hérésie mais sur ma 8800GT,
BGT peut tourner avec l'antialiasing 2x (2xMS) et le filtrage anisotropique 16x
Coté résolution c'est du 1680x1050 vu que le jeu est patché avec le mod widescreen.

Voila le batch final.

Code : Tout sélectionner

#! /bin/sh
# Ficher : baldur.sh
# Lancement de Baldur's Gate II

# Force le driver opengl
export __GL_FSAA_MODE=1
export __GL_DEFAULT_LOG_ANISO=4

# Crée les repertoires cache
mkdir -p /dev/shm/BGII/tempsave /dev/shm/BGII/cache /dev/shm/BGII/temp

echo "Copie des fichiers dans la mémoire vive, veuillez patienter..."
cp -rf override_/ /dev/shm/BGII/override/   #-rfv pour le debug. 

# Lance le jeu
# Eventuellement rajouter le préfixe pour playonlinux ici
wine BGMain.exe

# Sortie 
# Détruit les dossiers temporaires // libére la mémoire 
rm -rf /dev/shm/BGII  
Si on veut délirer encore plus,
on peut overcloker sa carte graphique par le xorg.conf, totalement inutile mais possible.
Il faut rajouter une option Coolbits dans votre /etc/X11/xorg.conf

Section "Device"
Identifier "Card0"
Driver "nvidia"
[...]
Option "Coolbits" "1"

Il suffit ensuite de relancer votre X (ctrl +alt +backspace) Lorsque vous lancerez nvidia-settings (dans les menus ou en console), un nouvel onglet “overclock” devrait apparaître, et vous pourrez augmenter les fréquences de la RAM et du GPU de carte graphique (un outils de test est integré).

Posté : dim. 06 sept. 2009, 21:20
par Mornagest
Tutoriel intéressant mais je me permets de demander : quel type de matériel faut-il pour optimiser ? Tu parles d'une mémoire vive assez élevée ; quelle est par exemple ta propre configuration ?

Sachant que de mon côté, avec un Athlon 3200+ et 1 Gio de RAM BG2 fonctionne de façon très fluide (sans les pilotes nVidia propriétaires).

Re : Optimisation sur GNU/Linux

Posté : dim. 06 sept. 2009, 21:48
par tuxshake
Avec 1 Go de ram, ca sera pas très utile surtout avec baldur qui prend pas mal d'espace disque.
Ca donnerai 512 Mo disponible dans le meilleur des cas.
Peut être déplacer les répertoires cache, mais bon, c'est vraiment juste.

Je dirais qu'a partir du moment ou tu peux caser un cd entier en memoire ca devient intéréssant, donc 2go mini.

Ou alors il faut monter à la main le tmpfs,
( /dev/shm est monté en prennant la moitié de la ram par defaut, surement par sécurité )

Il faut regarder exactement la ram disponible pendant que tu joues et voir si tu peux en utiliser plus. Mais ça dépend des services qui sont lancés et de l'usage que tu fais de la machine. Ca risque surement de planter ou de ramer sérieusement si tu exagères.

Sur un OS 32 bits, on est limité à 3.6Go de ram sous linux.
Mais par contre en 64 bits on peut monter plus haut,
la limite étant la mémoire physique qu'on a sur la machine.

Re : Optimisation sur GNU/Linux

Posté : lun. 07 sept. 2009, 07:56
par Solaufein Khalazza
Il faut aussi préciser que le BG2FixPack détruit complètement les perfs sous linux avec ses milliers de fichiers.

Un moyen simple de regagner de la fluidité consiste à "biffer" les fichiers présents dans l'override grâce à Weidu.

Personnellement, j'ai juste réalisé cette opération et les performances sont comparables à celle sous Windows. Il ne me reste qu'un léger retard pour le déclenchement des sons, mais ce n'est pas bien grave