Cette page traite de l'optimisation des disques durs
IDE. Les disques durs SCSI n'ont pas ce problème d'optimisation
"à la main".
Par défaut, les disques durs IDE ne sont pas toujours très
bien optimisés au niveau performance sous Linux. Il faut donc connaître
les caractéristiques de son disque dur et de sa carte mère pour
optimiser ses disques à l'aide du programme hdparm. L'idée est
de créer un script shell avec des commandes hdparm pour optimiser les
disques durs et de configurer le système pour que ce script soit lancé à
chaque démarrage. Nous prendrons comme exemple un ordinateur qu'il n'a
qu'un seul disque dur IDE, branché en Primary Master, donc accessible
par /dev/hda.
- Installer et utiliser hdparm
Il faut d'abord installer le programme :
apt-get install hdparm
Les options les plus intéressantes de hdparm sont :
- -i et -I pour avoir des informations sur le disque dur,
- -c pour connaître et régler le support I/O 32 bits,
- -d pour connaître et régler le support du DMA,
- -X pour régler le mode du DMA,
- -t pour faire un test de performance de lecture du disque dur sans utilisation du cache,
Nous allons donc commencer par recueillir des informations sur
le disque dur :
hdparm -I /dev/hda
Il faut regarder en particulier dans la section "Capabilities" ce
qui concerne le DMA. Par exemple, pour mon disque-dur, j'ai :
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 *udma4 udma5
L'étoile sur "udma4" signifie que mon disque dur supporte le DMA et que, si
le DMA est activé, il se mettra en mode UDMA 4.
Maintenant, nous allons regarder si le DMA est activé :
hdparm -d /dev/hda
/dev/hda:
using_dma = 1 (on)
Ici, le DMA est activé, donc le disque dur est configuré en UDMA 4. Ceux
qui ont mis l'option "Use PCI DMA by default when available" dans la
configuration du noyau (menu ATA/IDE/MFM/RLL support) ont probablement
le DMA activé par défault, mais ce n'est pas toujours le cas.
Faisons le test de performance pour pouvoir ensuite faire
des comparaisons avec les performances que l'on aura avec de meilleurs
réglages. Il faut réaliser ce test à un moment où le système n'est
pas entrain d'utiliser le disque dur et le refaire plusieurs fois (le
premier test n'est généralement pas significatif). En root :
hdparm -t /dev/hda
Si ton disque dur support le DMA et que celui-ci n'était pas
activé, alors il faut absolument le faire, tu gagnera énomément en
performance. Pour cela, en root :
hdparm -d1 /dev/hda
Tu peux alors refaire le test de performance : chez moi, le débit
du disque dur est multiplié par 7 !
Si ton disque dur n'est plus tout jeune et ne support par le
DMA, alors il faut s'intéresser à l'I/O : est-il configuré en 16 bits
ou en 32 bits ? Par défault, il est toujours configuré en 16 bits par
le noyau. Seuls les disques durs très très vieux ne supportent sont
pas 32 bits. Le fait de le passer de 16 à 32 bits peut améliorer les
performances d'un facteur 2 environ.
Pour voire dans quel mode il est :
hdparm -c /dev/hda
Pour le passer en mode 32 bits, tape en root :
hdparm -c1 /dev/hda
puis refais le test de performance pour voire l'amélioration.
Si ton disque dur supporte le DMA et que tu l'as activé, cela
ne fera aucune différence que l'I/O soit en 16 bits ou en 32 bits.
Tu dois maintenant savoir quelle commande hdparm taper pour
que ton disque dur soit optimisé. Si ton disque dur se met par défault
en DMA, tu n'as rien à faire, et tu n'as donc pas besoin de lire la suite.
- Ecrire le script
Nous allons écrire un script shell appellé hdparm.sh
que l'on mettra dans le répertoire /etc/init.d avec les droits
d'exécution.
En root, avec ton éditeur de texte préféré, tu vas créer le
fichier /etc/init.d/hdparm.sh qui contiendra simplement les
commandes de réglage des disques durs avec quelques commentaires en
plus. Par exemple, si tu as un disque dur qui supporte le DMA et qu'il
n'est pas activé par défault, tu devras mettre :
#! /bin/sh
# Optimisation de mon disque dur IDE avec hdparm
/sbin/hdparm -d1 /dev/hda
Puis on rajoute les droits d'éxécution :
chmod 755 /etc/init.d/hdparm.sh
- Lancer le script à chaque démarrage
Tout d'abord, il faut comprendre la notion de
"runlevel". Quand le système boote, il commence par exécuter tout
ce qui est dans le répertoire /etc/rcS.d. Dans ce répertoire,
on trouve des liens symboliques vers des scripts du répertoire
/etc/init.d. Ces liens ont une syntaxe bien précise :
- d'abord la lettre "S" (comme "start") ou "K" (comme "kill"),
- puis un numéro,
- enfin un nom qui correspond au nom du script dans /etc/init.d vers lequel pointe le lien.
Le système, au moment du boot, va exécuter les scripts du répertoire
/etc/rcS.d dans l'ordre des numéros et avec comme argument
"start" si le lien commence par la lettre "S" ou "stop" si
le lien commence par la lettre "K".
Une fois cette tâche accomplie, il entre dans le runlevel
numéro 2. C'est le runlevel "normal" dans lequel le système se trouve
presque tout le temps. Entrer dans le runlevel 2 signifie exécuter tous
les scripts dans /etc/rc2.d comme précédemment.
Il existe 3 autres runlevels intéressants :
- le runlevel 0 dans lequel on bascule quand on tape "halt" pour éteindre le système,
- le runlevel 6 dans lequel on bascule quand on tape "reboot" ou qu'on fait Ctrl+Alt+Suppr pour rebooter le système,
- le runlevel 1 qui est le runlevel "single-user" qui peut être utile dans certains cas particuliers (par exemple pour être sûr d'être le seul à accéder au disque dur). On y accède en tapant
telinit 1
.
Je ne sais pas trop à quoi correspondent les runlevels 3, 4, et 5...
:-) Toute la configuration des runlevels se fait dans le fichier
/etc/initab que je t'invite à lire.
Dans notre cas, on veut exécuter le script
/etc/init.d/hdparm.sh à chaque démarrage. Il va donc falloir
placer un lien symbolique dans /etc/rcS.d. Ensuite, nous voulons
que le script s'exécute tout au début, juste après le réglage du
clavier. On va donc lui donner le numéro "7" par exemple. Enfin, on
commence le nom du lien par la lettre "S"... même si le "start" qui
sera donné en argument ne sert à rien car notre script ne prend pas
d'arguements !
Pour créer le lien symbolique, il suffit de taper en root :
ln -s /etc/init.d/hdparm.sh /etc/rcS.d/S7hdparm.sh
Précédent
Index
Suivant