Annexe F. Optimiser ses périphériques IDE

1. Installer et utiliser hdparm
2. Lancer hdparm à chaque démarrage si nécessaire

Cette annexe traite de l'optimisation des périphériques IDE. Les périphériques SCSI n'ont pas ce problème d'optimisation "à la main".

Par défaut, les périphériques IDE ne sont pas toujours optimisés au niveau performance sous Linux. Il faut donc connaître les caractéristiques de ses périphériques IDE et de sa carte mère : si vous voyez que vos périphériques IDE ne sont pas bien optimisés par défaut au démarrage, il faudra créer un script shell avec des commandes hdparm pour optimiser les périphériques et configurer le système pour que ce script soit exécuté à chaque démarrage. Nous prendrons comme exemple un ordinateur qui n'a qu'un seul périphérique IDE : un disque dur branché en Primary Master, donc accessible par /dev/hda. Cet exemple s'applique également aux lecteurs de CD, DVD et graveurs IDE.

1. Installer et utiliser hdparm

Il faut d'abord installer le paquet :

# aptitude install hdparm

Les options les plus intéressantes de hdparm sont :

  • -i et -I pour avoir des informations sur le périphérique,

  • -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 périphérique sans utilisation du cache.

Vous allez commencer par recueillir des informations sur votre périphérique :

# hdparm -I /dev/hda
[Note] Note

Si vous utilisez hdparm sur des périphériques IDE qui utilisent l'émulation SCSI, il faut quand même les désigner par leur nom de device IDE classique (/dev/hda, /dev/hdb, /dev/hdc et /dev/hdd, comme expliqué au Chapitre 9).

Il faut regarder en particulier dans la section Capabilities ce qui concerne le DMA. Par exemple, pour notre disque-dur, nous avons :

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, regardez si le DMA est activé :

% hdparm -d /dev/hda
/dev/hda:
 using_dma    =  1 (on)

Ici, le DMA est activé, donc le périphérique est configuré en UDMA 4.

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 périphérique et le refaire plusieurs fois (le premier test n'est généralement pas significatif) :

# hdparm -t /dev/hda

Si votre périphérique supporte le DMA et que celui-ci n'était pas activé, alors il faut absolument le faire, vous gagnerez énormément en performance :

# hdparm -d1 /dev/hda

Vous pouvez alors refaire le test de performance : chez moi, le débit du disque dur est multiplié par 7 !

Si votre périphérique n'est plus tout jeune et ne supporte par le DMA, alors il faut s'intéresser à l'I/O : est-il configuré en 16 bits ou en 32 bits ? Par défaut, il est toujours configuré en 16 bits par le noyau. Seuls les périphériques IDE très très vieux ne supportent pas le mode 32 bits. Le fait de le passer de 16 à 32 bits peut améliorer les performances d'un facteur 2 environ.

Pour voir dans quel mode il est :

# hdparm -c /dev/hda

Pour le passer en mode 32 bits :

# hdparm -c1 /dev/hda

Puis refaites le test de performance pour mesurer l'amélioration.

Si votre périphérique supporte le DMA et que vous l'avez activé, cela ne fera aucune différence que l'I/O soit en 16 bits ou en 32 bits.

Vous devez maintenant savoir quelles commandes hdparm taper pour que vos périphériques IDE soient optimisés. Si vos périphériques IDE se mettent par défaut en DMA, vous n'avez rien à faire, et vous n'avez donc pas besoin de lire la suite.

2. Lancer hdparm à chaque démarrage si nécessaire

2.1. Ecrire le script

Si vos périphériques IDE ne se mettent pas par défaut dans leur configuration optimisée, il va falloir que vous écrivez un script shell contenant les commandes nécessaires à leur optimisation et faire en sorte que ce script s'exécute à chaque démarrage.

Le script sera appellé hdparm.sh et sera plaçé dans le répertoire /etc/init.d/ avec les droits d'exécution.

Créez le fichier /etc/init.d/hdparm.sh à partir de mon script modèle :

# cp ~/fichiers-config/hdparm.sh /etc/init.d/

ou :

% wget http://formation-debian.via.ecp.fr/fichiers-config/hdparm.sh
# mv hdparm.sh /etc/init.d/

Personnalisez mon script modèle /etc/init.d/hdparm.sh en y mettant la liste des commandes hdparm nécessaires à l'optimisation de tous vos périphériques IDE en ajoutant l'option -q (comme quiet) pour que la sortie standard de la commande ne s'affiche pas à l'écran (seules les erreurs éventuelles s'afficheront) :

#! /bin/sh
# /etc/init.d/hdparm.sh
# Script d'optimisation des périphériques IDE avec hdparm
# Formation Debian GNU/Linux par Alexis de Lattre
# http://formation-debian.via.ecp.fr/

# Plus d'informations sur hdparm dans "man hdparm".

echo -n "Optimizing IDE periphericals with hdparm:"

# DEBUT de la liste des commandes hdparm

/sbin/hdparm -q -d1 /dev/hda
/sbin/hdparm -q -d1 /dev/hdc

# FIN de la liste des commandes hdparm

echo " done."

Rajoutez les droits d'exécution sur le script :

# chmod 755 /etc/init.d/hdparm.sh

2.2. Lancer le script à chaque démarrage

Dans notre cas, on veut exécuter le script /etc/init.d/hdparm.sh à chaque démarrage. On a donc besoin d'un lien symbolique dans le répertoire /etc/rcS.d/. Ensuite, nous voulons que le script s'exécute vers la fin de la série ; nous lui donnerons donc le numéro d'ordre 60 par exemple. Enfin, le nom du lien doit commencer par la lettre S, même si le start qui sera donné en argument ne sert à rien car le script ne prend pas d'arguements.

Pour créer le lien symbolique, il faut passer par le script Debian update-rc.d :

# update-rc.d hdparm.sh start 60 S .

Si vous voulez retirer le lien symbolique, il faut passer par le même script Debian :

# update-rc.d -f hdparm.sh remove