Optimisation Système Simple
Un article de Wiki de la communauté Mandriva.
Lorsque l'on installe une distribution Linux, on dispose par défaut d'un ensemble de processus standards gérant certains aspects du système, ces processus particuliers sont appelés des « services ». Or ceux-ci ne sont pas forcément adaptés ou utiles à notre activité informatique, voire même à notre matériel. Ainsi, de la même manière que l'on désactive les services inutiles de Windows, on reprend la même logique d'optimisation avec Linux afin d'obtenir un système plus adapté à nos besoins et donc plus rapide.
Sommaire |
[modifier] Les processus sous Linux
[modifier] Définitions
- Sous Unix, tout programme est exécuté sous la forme d'un ou plusieurs processus. Certains processus sont appelés « démons » (anglais daemons = disk and execution monitor). Même si tous les processus ne sont pas des démons, nous utiliserons parfois l'un des termes pour l'autre. Les démons sont des programmes (ou processus ou scripts...) qui tournent en tâche de fond et qui sont à l'écoute des événements relatifs à la machine, à d'autres processus, à l'horloge, ou encore au réseau. Les « services » que nous évoquions en introduction sont souvent (mais pas toujours !) des « démons ». Afin que tout le monde s'y retrouve et par souci de simplicité, nous utiliserons plutôt le mot processus.
- Un processus est un programme en cours d'exécution ou en attente d'exécution (on peut donc « suspendre » un processus).
- Le noyau Linux lance et gère les processus.
- - Il contrôle leurs échanges avec les périphériques.
- - Il tient à jour une table des processus en cour d'exécution.
- - Le premier processus, ancêtre de tous les autres, est le processus init.
- - Chaque processus est identifié par un numéro unique, son PID. Il peut être important de connaître le PID d'un processus, ne serait-ce pour pouvoir le « tuer », s'il ne répond plus ou qu'il bloque une console.
- - Les systèmes UNIX sont des systèmes multitâches préemptifs, c'est-à-dire que chaque programme ou processus tourne indépendamment. Lorsqu'un processus est planté, le système continue à tourner car les processus sont séparés. La destruction d'un processus n'a pas d'effet sur l'exécution des autres processus.
Les utilisateurs avertis du monde Linux trouveront sans doute les explications de cet article peu « académiques ». Celui-ci étant avant tout adressé aux utilisateurs de Microsoft Windows habitués à optimiser leur système et qui souhaitent en faire de même dans le monde Linux... Pour plus d'informations, quelques liens à la fin de cet article permettent de plonger plus profondément dans les arcanes d'une distribution linux.
[modifier] Beaucoup trop de processus !
On peut faire ce simple (mais subjectif) constat en installant un outil de monitoring : Gkrellm. Cet outil permet de connaître un certain nombre d'informations en temps réel : température, nombre de processus, vitesse des ventilateurs, météo, etc. Pour l'installer, vous pouvez consulter le tutoriel suivant sur le site Trustonme.net.
Une fois l'outil de monitoring installé, on peut par exemple constater avec surprise que l'on a 126 processus en cours sur le système. Si vous avez l'habitude d'optimiser Windows, vous trouverez sans doute ce nombre conséquent !(même si Windows « triche » puisqu'il ne montre pas tous les processus réels du noyau. Ils sont en fait regroupés au sein de svchost.exe qui peut cacher plus de 30 services à lui tout seul.)
Si vous êtes sous KDE vous trouverez un remarquable outil de gestion des processus en faisant Menu > Outils > Outils système > Surveillance du système
Mais par où commencer ?
[modifier] Suivez le guide du débutant ;)
Pour optimiser un peu sa distribution, il y a plusieurs possibilités. Voici un aperçu de ce que l'on peut faire facilement sans être un pro Linux :
- Connaître les commandes de base et les outils spécifiques à votre disposition.
- Ajuster les processus en fonction de vos besoins.
- Changer de Window Manager pour économiser des ressources.
- Compiler votre noyau. (C'est l'étape ultime qui requiert déjà un niveau un peu plus avancé).
Vous devriez maintenant logiquement vous demandez : "Mais qu'est-ce qui tourne sur votre système ?"
[modifier] Les commandes utiles
Les quelques commandes que je vais présenter vont nous permettre de mieux comprendre et manipuler les processus.Nous allons commencer par apprendre comment consulter la table des processus.
Outre les commandes classiques décrites ci-dessous, si vous êtes sous KDE vous trouverez un remarquable outil graphique de gestion des processus en faisant Menu > Outils > Outils système > Surveillance du système
[modifier] La commande ps
La commande ps avec des arguments permet de lister les processus :
- ps -fe : donne tous les processus, avec leur numéro PID.
- ps --help : indique toutes les options de cette commande (elles sont nombreuses).
Le résultat de cette commande nous donne une série de lignes (incompréhensibles quand on débute sous Linux :P). Pas de panique ! Ce n'est pas le gestionnaire des tâches de Windows (attention pas tache hein ;-) ). Sous Linux, on n'a rien à cacher à ses utilisateurs et la commande ps donne simplement les processus lancés à l'instant où vous lancez la commande. Comme disait Napoléon, un dessin vaut mieux qu'un long discours alors voici quelques explications en image :
- UID : Numéro d'utilisateur (User IDentification) ayant lancé le processus
- PID : Numéro unique du processus (Process IDentification)
- PPID : Numéro du processus parent (Parent Process IDentification)
- C : cpu utilization , pourcentage de CPU utilisé
- STIME : correspond à l'heure de lancement du processus
- TTY : correspond au nom du terminal
- TIME : correspond à la durée de traitement du processus
- CMD : correspond à la ligne de commande ayant généré le processus
Avec cette commande, la liste peut être très longue. Comme vous pouvez le constater sur l'image ci-dessous, les différents processus sont classés en zones qui nous permettrons par la suite de l'article, de voir et d'optimiser certains d'entre eux.
[modifier] La commande pstree
Afin de connaître le processus parent d'un autre processus, on utilise la commande pstree. La commande pstree permet d'afficher les processus sous forme d'arborescence : pratique pour voir la hiérarchie entre les divers processus !
[modifier] La commande top
La commande top permet d'afficher des informations en continu sur l'activité du système (quantité de RAM et pourcentage de CPU utilisés par les processus). Pour quitter la commande top, il suffit de taper la lettre q.
L'intérêt de cette commande réside dans le fait que vous pouvez observer en temps réel les processus les plus gourmands et ainsi trouver des solutions pour optimiser ou déboguer le système.
[modifier] La commande kill
Pour donner des ordres à un processus, on peut lui envoyer différents signaux. Un ordre en particulier va nous intéresser, c'est la commande kill :
- kill PID : met fin normalement à la tâche.
- kill -9 PID : force la fin de la tâche (action encore plus radicale si nécessaire ! à n'utiliser que si la commande précédente, qui permet au processus de « faire le ménage » avant de s'arrêter, n'a pas été suivie d'effet).
Maintenant que nous avons listé les processus qui tournent sur votre système, voyons ensemble quelques explications sur le fonctionnement de Linux.
[modifier] Comment les processus fonctionnent sous Linux
[modifier] Le premier processus : init
Lorsque la machine démarre, le noyau du système est chargé et décompressé en mémoire vive (RAM), il s'exécute et s'initialise :
- réservation de la mémoire,
- prise en compte de la zone d'échange (swap),
- détection du matériel et chargement des pilotes des périphériques,
- montage du système de fichiers,
- et enfin lancement du 1er processus /sbin/init.
L'exécution effective de ce processus fondamental est entièrement contrôlée par le contenu du fichier de configuration /etc/inittab qui va déterminer le niveau d'exécution par défaut du système et charger le niveau S qui correspond au minimum vital avant de commencer à exécuter le script correspondant au niveau choisi.
Ici, c'est le niveau 2 qui a été paramétré par défaut.
[modifier] Les Niveaux d'Exécution
Le système linux dispose de 7 niveaux d'exécution numérotés de 0 à 6 :
- 0 : correspond à la procédure d'extinction de la machine (tapez telinit 0 en root dans une console pour arrêter la machine en utilisant le runlevel 0, ...)
- 6 : correspond à la procédure de redémarrage de la machine (idem)
- 1 : correspond au mode d'administration qui charge un minimum de choses et se conclut par l'accès à un shell root direct si la distribution est peu sécurisée ou avec demande de mot de passe dans le cas contraire
- 2, 3, 4 et 5 : permettent de déterminer différents niveaux d'exécution avec différents services chargés
- 2 : est normalement multi-utilisateur sans serveur X
- 5 : sous Mandriva, est associée à un système multi-utilisateur avec serveur X
Ces niveaux d'exécution permettent au système de déterminer dans quel répertoire rcX.d piocher les scripts de démarrage.
- Sous Mandriva, ces scripts se retrouvent dans les répertoires /etc/rc.d/rc[0-6].d.
- Sous Debian, ces scripts se retrouvent dans les répertoires /etc/rc[0-6].d.
En regardant de plus près ces répertoires, on s'aperçoit qu'ils ne contiennent que des liens symboliques vers les scripts du même nom contenus dans le répertoire /etc/rc.d/init.d (Mandriva) ou /etc/init.d (Debian).
Ces liens sont tous formés selon la même syntaxe [S|K]XXnom_du_script.
- S indique au système que le script doit être lancé avec l'opérande start (démarrage du service).
- K indique au système que le script doit être lancé avec l'opérande stop (arrêt du service).
- XX est un numéro qui détermine l'ordre de lancement (ou d'arrêt) du script par rapport aux autres, par exemple, S18sound et S24messagebus impliquent que le script sound sera lancé avant le script messagebus, tandis que K08lisa et K09dm impliquent que le script lisa sera arrêté avant que le script dm ne soit lui-même arrêté.
Le dossier /etc/init.d qui contient tous les processus :
[modifier] Getty et les terminaux « virtuels »
- Le programme getty, ou l'une de ses innombrables variantes, est le programme qui vous demande votre nom d'utilisateur sur les terminaux virtuels. Plus précisément, getty initialise le terminal, demande le nom d'utilisateur et lance le programme login en lui fournissant le nom saisi afin que celui-ci demande le mot de passe de cet utilisateur.
- En mode multi-utilisateur, la console est partagée entre plusieurs terminaux dits « virtuels », parce qu'ils simulent la présence de plusieurs terminaux sur la même console. Ces terminaux virtuels se partagent le clavier et l'écran, mais seulement un de ces terminaux peut accéder à la console à chaque instant : celui qui traite les caractères saisis au clavier et qui réalise l'affichage.
- Chaque terminal virtuel utilise un fichier spécial de périphérique du répertoire /dev/. Le nom de ce fichier commence toujours par « tty » et est complété par le numéro du terminal. Ainsi, le fichier spécial de périphérique /dev/tty0 correspond au premier terminal virtuel, etc.
- Si vous utilisez très peu les terminaux virtuels (ce qui est tout à fait normal si vous utilisez un mode graphique), il est possible d'en désactiver quelques-uns, en éditant le fichier /etc/inittab et en ajoutant un # devant les lignes (# est le caractère qui sert à signaler des commentaires). Gardez-en au moins 1, c'est toujours utile de passer sur un terminal, ne serait-ce que pour mettre à jour son Window Manager. Le fichier /etc/inittab :
[modifier] Les outils pour gérer les services du système
Chaque distribution possède son propre outil, les outils de gestion peuvent être préinstallés ou non pour gérer les services de votre système. Vous verrez que c'est très simple sous Mandriva. En voici quelques-uns.
[modifier] Drakconf
Sous Mandriva, il suffit de lancer le Centre de Contrôle. Pour accéder à cet outil :
- Menu > Exécuter une commande...
- tapez : drakconf
- tapez votre mot de passe root et pressez le bouton Exécuter
- puis faites : Système > Gérer les services système en les (dés)activant.
Cet outil, très facile d'utilisation, vous permet de gérer vos services, de les lancer au démarrage du système, de les arrêter, etc. (un vrai clicodrome).
[modifier] Rcconf
Un autre outil "graphique" que l'on trouve principalement sous Debian rcconf :
Cet outil beaucoup, plus rudimentaire que drakconf, permet de gérer les services qui se lancent au démarrage du système, et c'est tout ! Pour le reste, il faudra le faire en passant par la console ;)
S'il n'est pas présent sur votre système debian, tapez la commande suivante : apt-get install rcconf
Ensuite, ouvrez une console puis tapez simplement rcconf en root.
[modifier] En console
En ligne de commande dans une console, on va tout simplement aller démarrer le service à partir de l'endroit où il se trouve !
- Sous Mandriva, ces scripts se retrouvent dans les répertoires /etc/rc.d/rc[0-6].d.
- Sous Debian, ces scripts se retrouvent dans les répertoires /etc/rc[0-6].d.
Ce sont des raccourcis de /etc/init.d (ou respectivement pour debian /etc/rc.d/init.d), ce qui nous donne :
- Démarrer un service
- Arrêter un service
On peut aussi noter qu'en ce qui concerne les commandes de service sous Mandriva, vous disposez de la commande service qui évite de taper /etc/initrd/...
- Par exemple pour arrêter le serveur graphique :
- Ou encore pour le démarrer :
[modifier] Ajuster les services
Maintenant que nous avons vu comment gérer les processus, il est important de connaître les plus courants.
Voici un tableau des principaux services que l'on peut trouver dans une distribution (une Mandriva). Il n'est pas complet, il en existe beaucoup d'autre, c'est en fonction des divers outils que vous installez sur votre système. En fonction de vos activités informatique et de votre matériel, c'est à vous de décider si le service vous sera utile ou pas, difficile de donner les bonnes valeurs car chaque utilisateur le fera en fonction de ses désirs et de son matériel.
| Services | Désignations | Options | Remarques |
|---|---|---|---|
| acpi | gestion de l'énergie | activé | Plus utile sur PC portable que sur PC fixe |
| alsa | serveur de son ALSA | activé | Si vous voulez du son ... |
| atd | création de tâches | désactivé | Utile pour programmer des tâches manuellement à une heure précise |
| autofs | montage des partitions | activé | Indispensable ! |
| bluetooth | gestion des appareils bluetooth | désactivé | sauf bien sûr si vous avez de la connectique bluetooth. |
| cron | planificateur de tâches | activé | n'est pas indispensable mais est recommandé. |
| cups | Service d'impression | désactivé | sauf si vous avez une/des imprimantes(s) |
| cvs | dépôt de fichiers sources | désactivé | A n'activer que si vous voulez utiliser les version les plus à jour de vos logiciels préférés (version de développement). |
| dkms | services de lancement dkms (drivers) | activé | sauf si vous n'avez aucun module dkms dans votre noyau |
| dm | Gestionnaire graphique de login | activé | Indispensable ! |
| dund | établissement d'une connexion réseau point-à-point | désactivé | Rarement utile pour une utilisation "standard" |
| fam | demon de surveillance | automatique | |
| harddrake | détection matérielle | activé | si vous le désactiver votre nouveau matériel ne sera pas détecté (il faut l'activer manuellement et redémarrer à chaque fois que vous ajouter un périphérique nouveau). |
| hidd | gestionnaire de "input devices" USB | activé | sauf si vous n'avez pas de souris/clavier USB |
| hotplug | le service qui permet de connecter à chaud des périphériques et de les utiliser immédiatement | activé | recommandé: sauf, comme toujours, si vous estimez que vous n'en avez pas besoin. |
| hpoj | Service imprimante HP | désactivé | à moins que vous ayez une imprimante HP ... |
| httpd | serveur apache | désactivé | sauf si vous hébergez/développer votre propre site web/serveur local. |
| iptables | parefeu | activé | c'est mieux qd même ... |
| ipvadm | serveur virtuel | désactivé | |
| keytable | contrôle du clavier | désactivé | normalement inutile |
| kheader | régénération automatique de fichier dans le noyau | désactivé | |
| linuxconf | effectue des tâches au démarrage de la machine | désactivé | |
| linuxconfweb | idem en serveur | désactivé | |
| lisa | information lan | activé | sauf si pas de réseau |
| lm_sensors | gestion des températures, vitesse des fan, etc | activé | sauf si vous ne voulez pas suivre les données de votre carte mère. |
| messagebus | indication de system event | activé | sauf si vous ne voulez pas avoir de messages systèmes |
| mtink | service imprimante Epson | désactivé | sauf si vous avez une imprimante Epson |
| mysql | service de base de données | désactivé | sauf pour ceux qui programment avec mysql |
| netfs | montage des partages en réseau | désactivé | sauf si vous partagez des données dans votre réseau |
| netplugd | manage les interfaces réseau | désactivé | |
| network | gestion des connexions | activé | |
| nfs | serveur de partage NFS | désactivé | sauf si vous partagez des données via NFS |
| nfslock | verrouillage des partages NFS | désactivé | sauf si vous partagez des données via NFS |
| numlock | activation de la touche verrouillage numérique | activé | |
| oki4daemon | support imprimante winprinter | désactivé | sauf si vous avez une imprimante correspondante
|
| pand | service pan bluetooth | désactivé | |
| partmon | vérifie si les partitions sont pleines | désactivé | |
| pcscd | service pour les smart card | désactivé | |
| portmap | service RPC | activé | obligatoire si connexion par routeur |
| postfix | serveur de courrier pour domaine ou réseau local | désactivé | |
| postgresql | serveur base de données | désactivé | idem que pour mysql |
| proftpd | serveur FTP | désactivé | |
| proftpd-xinetd | idem | désactivé | |
| rawdevices | périphérique de type bloc en accès direct | automatique | |
| routed | mise a jour des tables de routage | désactivé | |
| rsync | synchronisation des serveurs FTP | désactivé | |
| shorewall | parefeu en frontend de mandriva | activé | fonctionne avec iptables |
| smb | serveur samba | désactivé | sauf si vous partagez vos données en réseau hétérogène (linux/windows, linux/mac). |
| sound | gestion du son | activé | sauf si vous ne voulez pas de son |
| sshd | serveur ssh | désactivé | sauf si vous voulez accéder à votre machine depuis un autre ordinateur (accès distant et sécurisé) |
| ssh-xinetd | idem au serveur ssh | désactivé | |
| swat | configuration de samba | désactivé | |
| switchprofile | configuration des profiles | désactivé | |
| syslog | journal des évènements système | activé | |
| tmdns | utiliser par zeroconf | désactivé | sauf si vous avez un réseau local |
| upsmon | gestion onduleur | désactivé | |
| webmin | gestion d'administration en local ou a distance de machine linux | désactivé | |
| xfs | serveur de polices | activé | |
| xinetd | le super daemon gère le lancement et l'arrêt d'un certain nombre de serveurs | activé | indispensable |
- A vous de savoir si vous devez laisser démarrer un service ... il s'agit ici d'optimisation donc il faut prendre en compte vos besoins et votre matériel qui ne peuvent être identiques aux miens ou à ceux du copain.
- Garder en mémoire que la sécurité est toujours importante (pare-feu) et éviter l'optimisation mal placée.
- Si vous utilisez un service qu'une seule fois par semaine, n'oubliez pas qu'une simple ligne de commande suffit pour les activer.
- A vous de jouer !
[modifier] Changer de Window Manager
L'optimisation d'un système passe obligatoirement par la gestion des ressources, les Window Manager sont pour certains, très vorace en CPU... Ici, difficile de faire plus simple, il suffit simplement de changer de Window Manager. Comme des images sont plus parlantes qu'un long discours, vous allez pouvoir juger par vous-même.
La base est identique pour chaque bureau, mêmes services démarrés, applications identiques : Gkrellm + Gimp pour la copie d'écran.
| Bureaux | ||||
|---|---|---|---|---|
| KDE | E17 | Fluxbox | Gnome | Icewm |
| 103 processus | 86 processus | 85 processus | 111 processus | 87 processus |
Le choix de son bureau est avant tout une affaire de goût, mais pour celui qui utilise une petite configuration matérielle, il est important de se tourner vers des bureaux plus légers en ressources ou en assistances.
- Assistances ou apelets :
- - contrôles du son, du clavier, des erreurs, etc.,
- - rapport météo,
- - surveillance système,
- - klipper...
- Certains d'entre eux sont souvent placés dans votre barre des tâches par défaut. On peut comprendre effectivement que le nouveau linuxien trouve qu'un système Linux est lent avec tout ces gadgets aussi importants qu'inutiles.
Regardons ce que charge KDE (sans les gadgets) comparé à Enlightenment grâce à la commande ps -fe :
- KDE charge environ une quinzaine de processus pour fonctionner. Rien de plus normal, il embarque un certain nombre d'assistants et d'outils pratiques et conviviaux, c'est pourquoi de nombreux utilisateurs plébiscitent KDE.
- Enlightenment est beaucoup moins gourmand puisqu'il ne démarre qu'un seul processus :
C'est identique pour d'autres bureaux (Fluxbox, Blackbox, etc.). Après, ce n'est qu'une question d'habitude et d'utilisation d'outils différents à connaître. Pas la peine d'utiliser Konqueror si vous changez KDE pour passer à Blackbox, il faut se tourner vers d'autres programmes plus light (Endeavour, Rox, Entropy, mc, etc.).
Si vous souhaitez installer Enlightenment ou pour plus de détails sur cet environnement qui vaut le détour, voici un article en français sur le sujet. Et si vous voulez tout savoir, ça se passe ici.
[modifier] Et l'optimisation dans tout ça ?
Si vous avez tranquillement lu cet article jusqu'ici, vous avez sans doute remarqué que certains processus n'avaient pas besoin d'être démarrés en continu sur votre distribution, que vous utilisez très peu les terminaux, que vous démarrez votre imprimante une fois tous les 36 du mois, ou encore que les assistances des bureaux ne sont pas obligatoire ou vous sont superflus. Vous pouvez alors optimiser votre système sans aucun souci et ainsi avoir un système plus véloce. Voilà, on arrive au bout et si tout se passe bien, on peut se retrouver avec un environnement beaucoup plus léger qu'au début (pour rappel : 126 processus).
|
Nous avons ici 28 processus, avec en prime, la température extérieure, l'outil de monitoring "Conky" et le processus lancé pour prendre une copie d'écran, soit 4 fois moins de processus qu'au début de l'article !! Ne vous inquiétez pas, ceci ne s'est pas fait en une journée, il faut un bon bout de temps pour se documenter, comprendre et optimiser la bête ! Il est possible de faire beaucoup mieux, l'objectif final est que le système soit pleinement fonctionnel, ce qui est le cas ici. |
Ce qui donne ceci avec la commande ps -fe sur une Debian :
La liste est nettement plus courte qu'au début de l'article, n'est-ce pas ?
[modifier] Compilation du noyau
Nous avons parlé des processus noyau au début de l'article. Si vous souhaitez optimiser cette partie, il vous faudra compiler votre noyau.
La compilation du noyau en elle-même n'est pas très difficile, ce ne sont que quelques lignes de commande. C'est surtout la configuration du noyau qui est délicate. Nous n'allons pas entrer dans les détails dans cet article. Il existe de nombreuses pages sur la Toile qui traitent du sujet, en voici deux pour vous aider dans cette démarche :
Dans la même optique, voici un article très sympa que vous pouvez découvrir sur le site de Trustomne : Alléger son "initrd".
[modifier] Pour conclure
Quel plaisir d'avoir un système qui répond de suite à la première sollicitation, qui n'est pas englué par une multitude de processus et qui dès le départ s'octroie 250 Mo de Ram sans avoir ouvert un seul logiciel pour travailler. C'est tout l'art et la manière d'optimiser votre système comme le font les équipes de Formule 1, l'optimisation est un sujet passionnant et sans limite...
Pour approfondir :
Merci à l'auteur de l'article original que j'ai plus que largement utilisé.
--Neije 21 avril 2008 à 11:05 (CEST)

























