Aller au contenu

[TUTO]L'optimisation sous GNU/Linux


Messages recommandés

L'optimisation sous GNU/Linux

Bon, je vais faire court: le principe est de faire en sorte que votre machine tourne le "mieux" possible, qu'elle soit la plus réactive possible, sans pour autant jouer avec sa stabilité.

On va s'attaquer à différents points: disques durs, services, CPU, ordonnanceur d'entrées-sorties, modules, et enfin, pour ceux qui aiment ça, au prelink et à la recompilation des programmes eux-même.

L'ordre de présentation ci-desssus est (selon moi), par priorité décroissante, sauf pour le prelink et la recompilation des programmes.

Par contre, je vais essayer de les présenter par "difficulté" croissante, histoire que les newbies ne fassent pas de conneries.

Enfin, je ne suis pas un geek, je ne veux pas risquer de bousiller mon système ou d'en compromettre la stabilité pour gagner 1/10éme de seconde au lancement d'OOo. Les "astuces" données ici sont donc éprouvées, et si elles sont suivies correctement, il ne devrait y avoir aucun problème.

Voilà, on est parti.

I. Les services

Un service est processus qui tourne en tâche de fond, et qui est généralement lancé au démarrage

du système, selon le runlevel considéré.

Or, toute tâche consomme de la mémoire et du temps processeur. L'idée est donc simple: on vire ce dont on n'a pas besoin.

Par exemple, sur une installe de Debian par défaut, on se retrouve avec pas mal de services lancés par défaut. Outre le problème de ressources, se pose le problème de la sécurité.

Pour identifier les services, un simple:

# ps aux

Là, on voit un certain nombre de choses.

Par exemple, on peut voir une ligne qui contient

"sshd": c'est un serveur ssh. Si vous ne savez pas ce que c'est, c'est que vous n'en avez pas besoin.

"exim4", ou "postfix": un serveur de mail. A moins d'héberger un serveur mail, celui-ci ne sert à rien (enfin il peut servir pour le mail au sein du système, mais je m'en passe très bien.

"cupsd": serveur d'impression. Si vous n'avez pas d'imprimante...

[liste à compléter]

C'est bien beau, il y a des services inutiles qui tournent. Mais qu'est-ce que j'en fais?

Là, cela dépend de la distribution. Comme je tourne sous Debian (c'est pareil pour les distribution basée dessus, comme Ubuntu), je fais:

/etc/init.d/nom_service stop 

Pour l'arrêter.

Pour le rendre définitif:

update-rc.d -f nom_service remove

[Pour les autres distributions, à compléter]

Voilà, on n'a plus de services inutiles.

II. Le disque dur (hdparm)

Bon, on va passer au disque dur, qui est souvent le goulot d'étranglement dans un pc.

hdparm est un outil qui permet de régler très finement son disque dur.

La première chose à faire, c'est obtenir des informations:

# hdparm /dev/hda

/dev/hda:
multcount    = 16 (on)
IO_support   =  0 (default 16-bit)
unmaskirq    =  0 (off)
using_dma    =  1 (on)
keepsettings =  0 (off)
readonly     =  0 (off)
readahead    = 256 (on)
geometry     = 16383/255/63, sectors = 78140160, start = 0

Le paramètre le plus important est sans doute la ligne using_dma = 1 (on). Cela montre que le DMA est activé sur le disque, ce qui permet d'accélérer les entrées-sorties, et de soulager le processeur.

Si ce n'est pas activer, faire un:

hdparm -d 1 /chemin_vers_disque

Ensuite, on peut regarder la ligne readahead : si c'est sur off, on l'active avec:

hdparm -A 1 /chemin_vers_disque

Ensuite, on peut mettre une valeur, entre 8 et 264, par:

hdparm -a n /chemin_vers_disque

Oui, mais quelle valeur mettre?

Là, cela dépend de votre utilisation: pour ne pas réinventer la roue, voici ce que dit le man:

Get/set sector count for filesystem read-ahead.  This is used to

improve performance in  sequential  reads  of  large  files,  by

prefetching  additional  blocks  in  anticipation  of them being

needed by the running  task.   In  the  current  kernel  version

(2.0.10)  this  has  a default setting of 8 sectors (4KB).  This

value seems good for most purposes, but in a system  where  most

file  accesses are random seeks, a smaller setting might provide

better performance.  Also, many IDE drives also have a  separate

built-in  read-ahead  function,  which alleviates the need for a

filesystem read-ahead in many situations.

Pour information, Debian choisit 256 par défaut, et cela me convient.

III. L'ordonnanceur d'entrées-sorties

-Bon, c'est quoi ce machin?

-Pour faire simple, c'est ce qui répartit l'accès aux disques aux différents processus. C'est très important dans un système multi-utilisateurs.

-D'accord, et comment je l'améliore?

-On ne va pas l'améliorer, on va le changer!

Oui. En fait, linux comporte plusieurs ordonnanceurs d'entrées-sorties (I/O schedulers), et utilise anticipatory. Seulement voilà, il semblerait que pour une utilisation desktop, cfq soit plus réactif, ce qui exactement ce que l'on recherche! Si vous ne me croyez pas, regardez l'aide dans la catégorie I/O schedulers du noyau, on y lit que cfq convient particulièrement aux desktops.

Enfin, cfq a été réécrit pour le noyau 2.6.13, et est encore plus performant: à tel point qu'on commence à dire qu'il devrait devenir le scheduler par défaut. Comme sur PCI on est toujours en avance ;-) et bah on le fait maintenant!

pour connaître l'I/O scheduler utilisé:

# cat /sys/block/hda/queue/scheduler

Celui utilisé est entre crochets.

pour le changer:

# echo cfq > /sys/block/hda/queue/scheduler

Pour rendre ce changement permanent, ajouter :

elevator=cfq

à la fin de la ligne "kernel" de grub (ou LILO)

[si quelqu'un connaît un moyen ne passant pas par le bootloader, je suis preneur]

IV. Modules et noyau

[à compléter]

[options:

en fonction de l'architecure, de la quantité de mémoire, "4kB stacks",etc]

V. Prelink

[à compléter]

VI. Pour les Gentooistes...

[à compléter]

Lien vers le commentaire
Partager sur d’autres sites

Génial ce topic. :yes:

J'ai une question :

j'utilise gentoo :pleure: et j'ai essayé de suivre ta méthode pour changer le scheduler.

Voila ce que j'ai :

#cat /sys/block/hdb/queue/scheduler
noop [deadline]
#uname -a
Linux tux 2.6.12-gentoo-r10 #1 SMP Sun Oct 2 15:24:22 UTC 2005 i686 Intel(R) Pentium(R) 4 CPU 1500MHz GenuineIntel GNU/Linux

(j'ai compilé mon noyau avec les gentoo-sources et genkernel)

Et donc j'aimerais savoir lequel je dois utiliser ou si il vaut mieux que j'en mette un autre.

(tu as petit problème de mise en page dans ton post dans la partie ordonanceur d'entrèes sortie, je pense que tu as mal fermé ta balise [/code] )

Lien vers le commentaire
Partager sur d’autres sites

Génial ce topic. :-D

J'ai une question :

j'utilise gentoo ;) et j'ai essayé de suivre ta méthode pour changer le scheduler.

Voila ce que j'ai :

#cat /sys/block/hdb/queue/scheduler
noop [deadline]
#uname -a
Linux tux 2.6.12-gentoo-r10 #1 SMP Sun Oct 2 15:24:22 UTC 2005 i686 Intel(R) Pentium(R) 4 CPU 1500MHz GenuineIntel GNU/Linux

(j'ai compilé mon noyau avec les gentoo-sources et genkernel)

Et donc j'aimerais savoir lequel je dois utiliser ou si il vaut mieux que j'en mette un autre.

(tu as petit problème de mise en page dans ton post dans la partie ordonanceur d'entrèes sortie, je pense que tu as mal fermé ta balise [/code] )

Ouais, tu as oublié d'inclure le support pour anticipatory et cfq lors de la configuration du noyau.

Ce doit être dans device driver > block device > I/O scheduler, en tout cas c'est dans le coin

Tu recompiles, et normalement tu l'auras dans la liste.

Je l'incluerai en détail dans la section noyau.

neo

Lien vers le commentaire
Partager sur d’autres sites

exim, c'est un MTA.

http://en.wikipedia.org/wiki/Mail_transport_agent

Ca ressemble quand même à un serveur de mail, non?

Ils utilisent le protocole smtp pour envoyer/recevoir les mails...

Si tu veux vraiment le rendre définitif : aptitude remove ssh :mdr:

Effectivement, mais ça peut toujours servir...

Par contre, je n'ai pas très bien compris ce que tu voulais dire avec le inittab ? :ouioui:

C'est là qu'on spécifie le nombre de terrminaux à lancer à chaque runlevel

Lien vers le commentaire
Partager sur d’autres sites

bon alors je vais recompiler mon noyau... :transpi:

sinon, pour l'idée de ne lancer qu'une seule console, ça me parait pas très utile : j'utilise X et pourtant, je passe assez souvent sur une des consoles pour lancer des trucs en arrière plan.

agetty n'est pas très gourmand, il utilise très peu de mémoire et ne prend pas de temps processeur vu qu'il bloque en attendant que tu appuie sur une touche.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...