5. Divers

5.1. Registres d'intervalles mémoire

À partir des processeurs de classe Pentium (y compris Athlon, K6-2 et d'autres CPU), ces registres (Memory Type Range Registers, MTRR) contrôlent la façon dont le processeur accède aux intervalles d'adresses mémoire. Pour résumer, ce mécanisme remplace plusieurs petites écritures séparées sur la carte vidéo par une seule écriture (une rafale). Cela améliore l'efficacité des écritures sur la carte vidéo et peut accélérer le rendu graphique de 250 % voire plus !

Voyez /usr/src/linux/Documentation/mtrr.txt pour les détails. Notez que, depuis que ce fichier a été écrit, XFree86 a été amélioré pour détecter automatiquement l'adresse de base et la taille de votre RAM vidéo et configurer les MTRR.

5.2. Exploiter au maximum les ressources de votre système

  • Si pour une raison quelconque, vous utilisez X 3.3, suivez les instructions données dans mtrr.txt (voyez la Section 5.1, « Registres d'intervalles mémoire ») pour configurer les MTRR. X 4.0 fait cela automatiquement pour vous.

  • Si vous jouez sous X, n'exécutez pas de gestionnaire de fenêtres, et certainement pas de gestionnaire de bureau comme GNOME ou KDE. Voyez la Section 4.2, « Jouer à des jeux sous X sans gestionnaire de fenêtres » pour plus de détails.

    Arrêtez tous les processus non essentiels (en tant que root) en utilisant les scripts de démarrage de votre système. Sous Debian, les scripts de démarrage pour le niveau d'exécution 2 sont situés dans /etc/rc2.d/. Vous pouvez arrêter un service d'une manière ordonnée en envoyant à son script de démarrage la commande « stop » :

        # cd /etc/rc2.d
        # ./ntpd stop
        

    Une autre possibilité (radicale) est de simplement vous placer en mode mono-utilisateur avec

        # telinit 1
        

    Cela vous débarrassera même de getty ; votre système s'exécutera avec uniquement ce qui est absolument crucial pour son fonctionnement. Il y aura quelque chose comme 10 processus en cours d'exécution. L'inconvénient est que vous devez jouer en tant que root. Mais votre table de processus sera une ville fantôme, et tous les cycles CPU supplémentaires bénéficieront à votre jeu.

5.3. À propos des bibliothèques sous Linux

Un problème souvent rencontré est un fichier de bibliothèque non trouvé. Ils sont quelque peu mystérieux et ont des noms bizarres ; nous en parlerons donc un peu. Il y a deux types de bibliothèques, les statiques et les dynamiques. Quand vous compilez un programme, gcc utilise par défaut les bibliothèques dynamiques, mais vous pouvez lui faire utiliser des bibliothèques statiques en utilisant l'option -static. À moins que vous n'ayez l'intention de compiler des jeux à partir du code source, vous serez principalement intéressés par les bibliothèques dynamiques.

5.3.1. Bibliothèques dynamiques

Les bibliothèques dynamiques, aussi appelées « bibliothèques partagées », fournissent du code objet à une application alors qu'elle s'exécute, c.-à-d. que le code est lié à l'exécutable au moment de l'exécution, et non à celui de la compilation. Elles sont analogues aux .dll utilisées sous Windows. Le programme responsable de la liaison du code « au vol » est appelé /etc/ld.so, et les bibliothèques dynamiques elles-mêmes se terminent habituellement par .so avec un numéro de version, comme :

    /usr/lib/libSDL.so
    /lib/libm.so.3
      

Quand vous utilisez gcc, vous référencez ces bibliothèques en enlevant les chaînes de caractères lib, .so et tous les numéros de version. Donc, pour utiliser ces deux bibliothèques, vous devriez passer les options -lSDL -lm à gcc. Celui-ci placera alors une marque dans l'exécutable indiquant d'examiner les fichiers /usr/lib/libSDL.so et /lib/libm.so.3 à chaque fois qu'une fonction SDL ou une fonction mathématique est utilisée.

5.3.2. Bibliothèques statiques

Contrairement aux bibliothèques statiques qui fournissent du code alors que l'application s'exécute, les bibliothèques statiques contiennent du code qui est lié (inséré) dans le programme lors de sa compilation. Aucun code n'est inséré au moment de l'exécution : le code est complètement autonome. Les bibliothèques statiques se terminent habituellement par .a suivi d'un numéro de version, comme :

    /usr/lib/libSDL.a
    /usr/lib/libm.a
      

Les fichiers .a forment réellement des archives de fichiers .o (objet), à la manière d'un fichier tar. Vous pouvez utiliser nm pour lister les fonctions contenues dans une bibliothèque statique :

    % nm /usr/lib/libm.a
    ...
    e_atan2.o:
    00000000 T __ieee754_atan2
    
    e_atanh.o:
    00000000 T __ieee754_atanh
    00000000 r half
    00000010 r limit
    00000018 r ln2_2
    ...
      

Quand vous utilisez gcc, vous référencez ces bibliothèques en enlevant les chaînes de caractères « lib », « .a » et tous les numéros de version. Donc, pour utiliser ces deux bibliothèques, vous devriez passer les options -lSDL -lm à gcc. Celui-ci importera alors du code de /usr/lib/SDL.a et /usr/lib/libm.a à chaque fois qu'il rencontre une fonction mathématique lors du processus de compilation.

5.3.3. Localisation des fichiers de bibliothèques

Si vous compilez vos propres jeux, le problème principal avec les bibliothèques sera soit que gcc ne trouve pas une bibliothèque statique, soit que la bibliothèque n'est pas présente sur votre système. Quand vous jouez à des jeux à partir du binaire, le problème sera soit que ld.so ne trouve pas la bibliothèque, soit que la bibliothèque n'est pas présente sur votre système. Il est donc opportun de d'abord parler de la façon dont gcc et ld.so s'y prennent pour trouver les bibliothèques.

gcc recherche les bibliothèques dans les « répertoires système standard » ainsi que dans ceux spécifiés avec l'option -L. Vous pouvez déterminer la liste des répertoires système standard avec gcc -print-search-dirs.

ld.so examine un condensé binaire contenu dans un fichier nommé /etc/ld.so.cache pour y trouver une liste de répertoires contenant les bibliothèques dynamiques disponibles. Puisqu'il contient des données binaires, vous ne pouvez pas modifier directement ce fichier. Néanmoins, le fichier est généré à partir d'un fichier texte /etc/ld.so.conf que vous pouvez éditer. Ce fichier contient la liste des répertoires où ld.so doit rechercher les bibliothèques dynamiques. Si vous voulez ajouter des bibliothèques dynamiques dans /home/joecool/privatelibs, il faut ajouter ce répertoire dans /etc/ld.so.conf. Votre modification n'est prise en compte dans /etc/ld.so.cache qu'après avoir exécuté ldconfig ; une fois fait, ld.so commencera à rechercher des bibliothèques dans votre répertoire privé.

De plus, même si vous ne faites qu'ajouter de nouvelles bibliothèques à votre système, vous devez mettre à jour ld.so.cache pour qu'il reflète la présence des nouvelles bibliothèques.

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:17