====Améliorer la réactivité générale du système====

Debian est une distribution réputée pour sa stabilité et le sérieux de son contrôle qualité, souvent utilisée sur des serveurs Debian choisit la sécurité plutôt que l'optimisation à tout prix. 

Ce choix est adaptée au plus grand nombre, cependant pour un usage " desktop " il est possible de rendre son système nettement plus réactif, soit en allégeant la charge sur une machine ancienne, soit en optimisant l'utilisation d'un matériel récent et performant.

Les " trucs " donnés ici marcheront souvent dans les deux cas, cependant ils sont plus dirigés vers les utilisateurs dans la seconde situation, celle d'un ordinateur performant sous-exploité.

<note important>La plupart des conseils exposés ici sont sans risque pour votre système et vos données, si ce n'est pas le cas ce sera précisé. 

D'une manière générale vous serez amenés à toucher à des points névralgiques du système, ce qui nécessite des droits root bien souvent, prudence donc dans vos manipulations : faites des sauvegardes des fichiers de configuration modifiés, faites les changements par étapes et pas en bloc afin de pouvoir identifier une réglage posant problème, ayez une sauvegarde à jour de votre système sous la main...</note>

Enfin si votre système est totalement inadapté à votre usage, toutes les optimisations du monde ne remplaceront pas une barrette de ram ou un nouveau processeur... 

==Services, Démons et dévoreurs de mémoire==

Par défaut beaucoup de services sont activés sur une machine GNU/Linux, ils sont évidement utiles dans certains contextes mais consomment également de la mémoire vive et ralentissent le démarrage. Si vous n'utilisez jamais ssh, un partage nfs ou samba désactivez les services correspondant, voir désinstallez les paquets qui s'y rapportent.

Le programme en console **sysvconfig** (à lancer en root) ou sous kde **ksysv** (paquet kde-admin) vous permettront de désactiver des services automatiquement lancés au démarrage. Encore une fois limitez-vous aux services qui vous sont familiers, dans sysvconfig vous verrez que certains services sont commentés  " Don't mess with this " (ne jouez pas avec ça), vous êtes prévenu ! Désactivez ssh, cups si vous n'avez pas d'imprimante, hddtemp ou lmsensors si la température de votre machine n'est pas un soucis de tous les instants, mais ne touchez pas à un service dont vous ignorez le rôle ...

Désinstallez les polices de caractères inutiles, ces polices sont chargées en mémoire au démarrage du serveur graphique, et de nombreux programmes parcours les polices installées au lancement.

Diminuez le nombre de bureaux virtuels, en pratique on en utilise rarement plus de deux, or le défaut est souvent quatre.

==Système graphique==

Installer les pilotes spécifiques de sa carte graphique est une bonne idée, même si on est pas joueur, cela va fortement décharger le processeur.

Si vous utilisez Gnome choisissez soigneusement votre moteur de rendu, par exemple xfce2 a des performances deux fois meilleures que Murrine par exemple... Google vous indiquera plusieurs tests sur le sujet, comme [[http://artisan.karma-lab.net/node/1328|celui-ci]] .

Pour tous les environnements graphiques ne pas afficher le contenu des fenêtres pendant un déplacement ou un redimensionnement est une source d'économie importante.

Même si on est réfractaire ;-) au bureau "3D", cubes tournoyant et autres gadgets, installer compiz-fusion est une bonne idée si votre matériel le permet. N'installez et n'activez aucun "plug-in", de cette manière vous bénéficierez juste de ce qui est agréable comme la vraie transparence par exemple, mais surtout vous déchargerez le processeur de manière notable et utiliserez mieux votre carte graphique.

==Preload==

Après avoir fait le tris des services, pourquoi ne pas en ajouter un ! Le plus souvent on utilise toujours le même groupe de programmes sur sa machine, et à chaque lancement ces programmes vont nécessiter la mise en mémoire de librairies. 

Si vous disposez d'une quantité confortable de mémoire **preload** va examiner vos habitudes et pré-charger en mémoire les librairies les plus souvent sollicitées. Ces librairies ne vont occuper que quelques Mo de mémoire vive au maximum, mais peuvent diminuer de moitié le temps de lancement d'applications lourdes comme Gimp, Cinelerra ou OpenOffice.

<code> apt-get install preload </code> 
Ça suffira pour la mise en place, ensuite donnez lui un peu de temps pour s'adapter à vos habitudes. Le fichier de configuration /etc/preload.conf vous permet d'ajuster quelques options, mais les réglages d'origine semblent performant.

Un autre mécanisme nommé "prelink" (fichier de configuration /etc/prelink.conf) est également utilisable, c'est celui par défaut sur OpenSuse par exemple, mais son impact ne m'a pas paru significatif, et sur Debian le paquet preload est mieux adapté. De manière schématique prelink va reconstruire les binaires des programmes que vous lui indiquerez, en incluant les librairies à l'exécutable lui même. Cela va consommer de l'espace disque, le mécanisme de reconstruction des exécutables consomme lui même des ressources, et doit être refait à chaque mise à jour du programme ou des librairies dont il dépend. Enfin cela ne fonctionne pas pour tous les programmes et peut parfois occasionner des conflits...
 
==Swappiness==

Par défaut le noyau Linux, et par conséquent les distributions GNU/Linux utilisent un mécanisme d'allocation de la mémoire vive qui consiste à faire croire aux exécutables qu'ils disposent toujours d'une quantité suffisante de mémoire vive pour s'exécuter, voire d'une quantité supérieure à la mémoire vive réelle ([[http://en.wikipedia.org/wiki/Virtual_memory|virtual memory]] sur wikipedia). Ce tour de passe-passe prend en compte l'allocation dynamique de la mémoire qui fait que lorsqu'un programme passe au premier plan il lui est alloué une plus grande quantité de mémoire vive, même si lors de son lancement celle-ci était occupée par d'autres tâches. Pour se faire le noyau utilise une partie de la mémoire d'échange (swap) sur le disque pour déplacer des blocs de mémoire peu ou pas utilisés. Comme ces accès disques sont considérablement plus lent que les accès à la mémoire vive, le noyau essaye d'anticiper le swapping, c'est ce paramètre que l'on peut modifier par le biais du coefficient de swappiness.
Selon votre cas la marche à suivre est opposée :

Systèmes avec peu de mémoire vive : augmenter la swappiness au niveau maximum (100), cela va libérer autant de mémoire vive que possible, au prix d'accès disques plus fréquents et d'une charge processeur plus élevée. Dans ce cas c'est un plâtre sur une jambe de bois, acheter de la mémoire vive est plus judicieux.

Système avec beaucoup de mémoire vive : diminuer la valeur pour limiter les accès disques et la charge processeur, au prix d'une utilisation de la mémoire plus importante.

La valeur par défaut est 60, si vous disposez de plus de 1Go de mémoire n'hésitez pas à descendre à 20, voir aussi bas que 5 au-dessus de 2Go. De toute façon même si la valeur 0 est utilisée et que du swapping soit nécessaire, le noyau outrepassera le réglage, simplement il ne le fera qu'en dernier recours et non systématiquement en avance. Personnellement j'utilise la valeur 10 qui me donne satisfaction, la mémoire vive est plus utilisée et je n'ai jamais de swap, les applications et l'environnement de bureau sont plus réactifs, en particulier après une courte période d'inutilisation.

Pour changer ce réglage éditez le fichier /etc/sysctl.conf en root et ajoutez à la fin du fichier les lignes :

#swappiness perso\\ 
vm.swappiness=10

pour choisir une valeur de 10.

Pour rendre le changement effectif utilisez :

<code>sudo /sbin/sysctl -p</code>

note : je dois vous prévenir que ce sujet est ouvert à débat, et fait régulièrement l'objet d'échanges musclés entre " la vieille école " menée par Andrew Morton, orienté vers les serveurs et se fichant pas mal des utilisateurs particuliers, et la nouvelle garde qui suit la voie représentée par Con Kolivas (dont l'approche se retrouve dans Ubuntu par exemple).
Un exemple de discussion sur [[http://kerneltrap.org/?q=node/3000|kerneltrap.org]]
Une [[http://linuxfr.org/~patrick_g/24982.html|interview de Con Kolivas]] qui explique pourquoi il jète l'éponge, et son approche de l'optimisation de Linux comme système de bureau.

==Système de fichiers==

Sur un système moderne avec un processeur rapide et une bonne quantité de mémoire vive le principal facteur de ralentissement est le disque dur. Il est lent, très lent comparé au flux d'instructions du processeur, aux I/O de la mémoire vive, et même aux réseaux gigabytes ou fibres qui se multiplient.
L'optimisation des disques est hors sujet ici, voyez le manuel de **hdparm** ou commencez par [[http://gentoo-wiki.com/HOWTO_Use_hdparm_to_improve_IDE_device_performance|cette page du wiki Gentoo]] consacrée à hdparm.
Sur les disques sata les paramètres par défaut sont bons en général, veillez à choisir le bon mode dans le bios et à ne pas laisser le cavalier que certains fabricants s'acharnent à laisser sur 1.5gb/s sur des disques prévus pour du 3gb/s  (grrr).
L'utilisation d'un ensemble [[http://fr.wikipedia.org/wiki/Raid_(informatique)|RAID]] augmente nettement les performances également.

Pour ce qui est des options propres au système d'exploitation, avec un système journalisé comme ext3 ou reiserfs le système va enregistrer l'heure précise d'accès à un fichier lors de sa création, modification ou simplement de son ouverture. Ce dernier point est un gâchis de ressources sur un poste de travail (sur un serveur il peut se justifier par la nécessiter de pouvoir effectuer des contrôles sur les accès à un fichiers donné, mais le premier pirate venu modifiant ce paramètre d'un simple " touch " on peut douter de son efficacité...). Pour supprimer ce comportement ajoutez l'option **noatime** dans votre fichier / etc/fstab. Un exemple de lignes modifiées :

<code>LABEL=debhome     /home        ext3    defaults,noatime        0       2</code>
<code>/dev/sda1      	/       ext3    defaults,noatime,errors=remount-ro 0   1</code>

Cette option est applicable à la partition root et /home, mais également aux autres partitions contenant des données si vous avez un partitionnement plus élaboré (/usr ; /tmp ; ...), l'option n'est pas utile sur /boot, et pas utilisable sur /swap.

L'option **nodiratime** limite la modification aux répertoires et non aux fichiers, elle est implicite avec **noatime** donc nul besoin de la rajouter.

Supprimer la journalisation et passer de ext3 à ext2 va provoquer un léger gain de performances également, mais au prix de la sécurité des données en cas d'extinction brutale de l'ordinateur. Il est fortement conseillé d'utiliser un système de fichier journalisé comme ext3 ou reiserfs/reiser4.
De la même manière l'option de montage **data=writeback** va augmenter les performances d'accès aux fichiers, mais cette option revient à annuler les avantages de la journalisation. Cette option est :!: DANGEREUSE :!:


==Options noyau==

Nota : il n'y a qu'un noyau Linux, c'est celui des sources officielles de kernel.org, cependant aucune distribution (sauf Slackware ?) n'utilise les sources brutes, elles y appliquent toutes des patchs et correctifs " maison ". Nous travaillerons sur les sources du noyau officiel Debian, pas sur les sources dites " vanilla " (brutes). Il est cependant aujourd'hui possible d'utiliser ces sources facilement pour compiler un noyau Debian, en réappliquant des patchs Debian ou non.
Le noyau évolue vite, la fusion actuelle des architecture x86 et x86_64 en est un exemple, tenez vous au courant avant de vous lancer dans une recompilation, je n'ose pas dire lisez le manuel... en l'occurence le " read me " inclus dans les sources.


Jusqu'ici nous n'avons fait qu'optimiser à la marge, à la surface de ce qui est possible, mais c'est dans le noyau que ce joue la majeure partie des optimisations possibles. Mauvaise nouvelle : il va falloir recompiler le noyau. Bonne nouvelle : c'est très facile sur Debian !

Par défaut le noyau Debian est assez conservateur dans son paramétrage, et très prudent. On se focalisera ici sur les options qui vont apporter un gain de réactivité pendant une session, il en existe beaucoup d'autres qui apporteront un gain de temps significatif au démarrage, mais ce point est secondaire par rapport à l'utilisation de l'ordinateur au quotidien. Il pourra faire l'objet d'un complément (avis aux amateurs...) 

Commencez par installer l'environnement de compilation, c'est à dire les sources du noyau que vous souhaitez utiliser (linux-source-2.6.24 dans cet exemple), kernel-package, fakeroot, bzip2 et libncurse5-dev (menuconfig) ou libqt3-mt-dev (xconfig). Si vous êtes sous Gnome et voulez utiliser Gconfig il faut aussi libglib2.0-dev , libglade2-dev et libgtk2.0-dev.
L'objet n'est pas la compilation du noyau, je fais la version courte, je pars du principe que vous recompilez les sources du noyau que vous utilisez actuellement :

<code>mkdir ~/kernel && cd ~/kernel
tar xjf /usr/src/linux-source-2.6.4.tar.bzip2
cp /boot/config-$(uname -r) ~/kernel/linux-source-2.6.24/.config
cd linux-source-2.6.24
make xconfig</code>

Le choix des options dépend en partie de votre matériel, vous vous renseignerez avec :

 <code>cat /proc/cpuinfo   <== cpu
cat /proc/meminfo  <== mémoire vive</code>

et pour le reste :

<code>update-pciids
lspci -v</code>.

 Je m'en tiens à des options génériques, par défaut ces options sont orientées pour une machine récente, avec processeur multi-core et beaucoup de mémoire vive (core2duo et 4Go sur la machine de test).

L'interface de xconfig en action

{{ deb:debian:astuces:xconfig.png?580 }}

  * **General Setup**
    * Décocher " cpuset support "
    * Décocher " create deprecated sysfs files "

  * **Enable the block layer**
    * Tout décocher à moins de remplir une des conditions : disque de plus de 2Tb, ou manipulation de fichiers de plus de 2Tb.

  * **Processor type and features**
    * Laisser " PC Compatible "
    * Choisir le bon type de processeur (pour c2duo, " Core2/newer Xeon " au lieux de l'architecture i686 générique)
    * Décocher " generic x86 support "
    * Cocher " HPET Timer Support " et indiquer le nombre correct de cpu (ou de core)

  * **Preemption Model**
    * Deux choix possibles :   Pour une station de travail soumise à de fortes charges " Voluntary Kernel Preemption " . Pour un ordinateur personnel " Preemptible Kernel "
    * Cocher " Preempt The Big Kernel Lock "

  * **Machine Check Exception**
    * Ne conserver que ce qui est relatif à votre architecture

  * **High Memory Support**
    * Choisir la valeur adaptée, à un bémol près : si vous utilisez 4Go de ram sur une machine 32 bits (x86), vous devez choisir l'option 64GB et non 4GB pour en tirer partie. Activer l'option 64GB va automatiquement activer la fonction de gestion de mémoire étendue " Intel PAE ", or si votre processeur ne la supporte pas votre machine ne démarrera pas (pas de soucis avec un c2duo ou quad). Si vous êtes dans cette situation vous devez utiliser un noyau x86_64.

  * **Memory Model**
    * Cocher "Allocate 3rd-level pagetables from highmem" (+ de 1Gb ram)
    * Cocher "Enable Kernel irq balancing"

  * **Timer Frequency**
    * Cocher "1000 HZ"
    * Décocher "Compat VDSO Support" (pour Lenny et Etch à jour, libc > 2.3.3)

  * **Kernel Hacking**
    * Cocher uniquement "Magic SysRq key" , "Detect  Soft Lockups"

  * **Security Options**
    * Si vous ne l'utilisez pas, ne savez pas de quoi il s'agit, ne travaillez pas pour la [[http://www.nsa.gov/selinux/index.cfm|NSA]], décochez "NSA Selinux Support" ( vous pourrez ensuite également désinstallez les paquets qui s'y rapportent).

Une fois satisfait enregistrez la configuration, et de retour en console tapez :

<code>fakeroot make-kpkg --initrd --append-to-version -speedy --revision 1 kernel-image</code>

À la place de "-speedy" mettez le nom qui vous plait,  ce sera le nom de votre noyau.

:!: Important : si vous voulez pouvoir compiler des modules externes au noyau (pilote nvidia ou ati par exemple), vous devez créer un paquet source (ou "headers" au minimum) pour votre noyau personnalisé également. Dans ce cas ajoutez **kernel-source** (et/ou "kernel-headers") à la fin de la ligne de commande précédente.

Lorsque la compilation est finie il vous reste à installer le noyau qui a été créé sous forme de paquet .deb dans le répertoire de niveau supérieur :

<code>cd ../
sudo dpkg -i linux-image-2.6.4-speedy_1_i386.deb</code> (le nom du paquet sera diffèrent en fonction de vos choix)

Voilà, c'est fini, au démarrage suivant vous aurez le choix de booter sur votre nouveau noyau, et si ça se passe mal vous pourrez toujours redémarrer sur l'ancien et recommencer votre configuration...
N'oubliez que votre fichier de configuration a été copier dans /boot, vous pouvez le réutilisez pour une nouvelle tentative. Partez de sources "fraîches" si vous devez recommencer plusieurs fois (effacez le répertoire des sources déjà utilisées et décompresser à nouveau les sources originales et un moyen simple).

Un programme comme **kdiff3** vous permet d'avoir un aperçu rapide des changements effectués sur un fichier de configuration du noyau. Ici à gauche le fichier original Debian, à droite celui modifié.

{{ deb:debian:astuces:kdiff.png?580 }}

Si tout va bien vous devrez encore recompiler les modules externes que vous utilisez éventuellement : pilote de carte graphique, de carte wifi, programmes compilés depuis les sources svn ...etc

Ce tuto est née du fait que sur une machine neuve à base de c2duo et avec 4Go de ram et disques sata, je notais bien une différence par rapport aux anciennes machines pour les traitements lourds, mais quasiment aucun gain pour l'utilisation quotidienne : frustrant !
Après avoir appliqué ces modifications (et quelques autres pour le démarrage) j'ai divisé par deux le temps de démarrage, suis venu à bout de tous les messages étranges durant le boot, et j'ai surtout obtenu un lancement des applications et une interaction avec le bureau graphique beaucoup plus fluide. Ooo démarre instantanément , Gimp, Lives ou Cinepaint en deux secondes, Cinlerra instantanément de même que Blender, plus aucun délai dans l'apparition des menus et sous-menus kde, même en utilisant kbfx. Plus de ralentissement lors d'une compilation de noyau, lorsqu'un deamon comme "updatedb" tourne en tâche de fond ou lors d'une copie de nombreux/gros fichiers... Bref un ordinateur vif et agréable à utiliser au quotidien.

Nota : pour ce qui est du choix entre x86 et x86_64 je laisse les intégristes des deux camps se taper dessus... En raison de difficultées pour l'installation de logiciels professionnels j'utilise un noyau x86 sur une machine qui supporte le x86_64. Cela évite aussi les problèmes avec Flash, Java, Skype...
J'ai conduit quelques tests chronomètre en main sur les applications que j'utilise au quotidien, sur la même machine, avec la même distribution en x86 ou x86_64 : je n'ai noté que des différences trop marginales pour être significatives, dans les deux sens d'ailleurs car certains programmes sont plus rapides sur x86. À l'exception de gains nets (de l'ordre de quelques secondes) sur des rendus d'effets video je n'ai pas constaté de différences. À vous de choisir et tester, de toute façon la plupart des conseils données ici sont valables dans les deux cas.

Cet article ne se veut pas exhaustif, quasiment tous les forums consacrés à GNU/Linux ou à une distribution en particulier ont une rubrique dédiée à l'optimisation, consultez les.

:?: À venir :?: : recompiler les paquets clés pour son architecture avec apt-build ; accélérer le démarrage ; détailler les options de compilation et ajouter les options plus "exotiques" ... 8-o