Optimiser vos périphériques IDE avec hdparm

Article écrit par Arnaud Fontaine et wikisé par Pierre Chignac.

Introduction

Lorsque vous faites des copies de fichiers de grosse taille d'un disque dur à un autre ou que vous copiez le contenu d'un cédérom vers un disque dur, vous avez pu constater un ralentissement conséquent de votre système. Lors du transfert, la musique commence à grésiller par exemple ou la lecture des dévédéroms est particulièrement lente.

Convention : Pour cet article, nous considérons que votre disque dur se trouve en maître sur la première interface IDE, c'est à dire qu'il correspond sous GNU/Linux à /dev/hda.

Prérequis

L'outil que nous allons utiliser afin de tester et d'optimiser le taux de transfert du disque dur se nomme hdparm ; il correspond au paquet du même nom. Nous installons donc ce paquet :

# apt-get install hdparm

Notez aussi que certaines options doivent impérativement être activées dans le noyau afin de pouvoir activer le canal DMA de vos périphériques IDE. Tous les noyaux disponibles dans Debian GNU/Linux ont ces options activées mais si c'est un noyau que vous avez compilé vous même il vaut mieux vérifier que les options suivantes sont présentes :

ATA/IDE/MFM/RLL support
-> IDE, ATA and ATAPI Block devices
--> [Y] Generic PCI IDE chipset support
--> [Y] Generic PCI bus-master DMA support
--> [Y] Use PCI DMA by default when available
--> [Y] VIA82CXXX chipset support

Si vous ne savez pas sur quelle chipset repose votre carte mère, vous pouvez toujours utiliser la commande lspci. Ce qui donne par exemple :

# lspci | grep "IDE"
00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 06)

Améliorer le taux de transfert de vos disques durs

Pour vérifier le taux de transfert de votre disque dur il vous suffit de taper la commande suivante :

# hdparm -tT /dev/hda

Avant l'optimisation vous devriez avoir quelque chose de similaire à ça :

/dev/hda:
Timing buffer-cache reads: 128 MB in 1.06 seconds = 120.75 MB/sec
Timing buffered disk reads: 64 MB in 35.70 seconds = 1.79 MB/sec

La vitesse d'un disque dur est généralement comprise entre 10 et 30 Mo/s pour le deuxième test. Vous pouvez constater qu'ici le disque dur est horriblement lent. Nous allons donc remédier à ce problème en activant le contrôleur DMA et le transfert 32 bits de votre disque dur. Le contrôleur DMA (acronyme de Direct Memory Access ou accès directe à la mémoire) est une puce spéciale qui permet d'accéder à la mémoire vive sans passer par le processeur. J'ai activé cela sans aucun souci, à l'aide de hdparm, sur plusieurs disques durs de capacités et de marques totalement différentes, donc ne craignez rien : ces deux options sont sans danger.

Il suffit de taper la commande suivante pour activer ces deux options :

# hdparm -c 1 -d 1 /dev/hda
/dev/hda:
setting 32-bit I/O support flag to 1
setting using_dma to 1 (on)
I/O support = 1 (32-bit)
using_dma = 1 (on)

-c 1 correspondant à l'activation du transfert 32 bits et -d 1 à l'activation du canal DMA. Nous allons ensuite vérifier de nouveau le taux de transfert du disque dur afin de nous rendre compte de la nette augmentation de ce taux de transfert :

/dev/hda:
Timing buffer-cache reads: 128 MB in 0.96 seconds =133.33 MB/sec
Timing buffered disk reads: 64 MB in 2.44 seconds = 26.23 MB/sec

On remarque donc que le taux de transfert a été multiplié par 15. Vous ne devriez plus avoir de problème de lenteur avec vos disque durs désormais. Notez que les optimisations que vous avez faites sur un disque dur concernent toutes les partitions de ce disque quel que soit leur système de fichier.

Améliorer le taux de transfert de votre lecteur de cédérom ou de dévédérom

L'optimisation d'un lecteur de cédérom ou de dévédérom peut se faire quels que soient les pilotes que vous utilisez pour gérer vos lecteurs de cédérom. Ainsi pour faire des copies de cédéroms à cédéroms, l'émulation SCSI s'avère absolument indispensable. Pourant, que vous disposiez de l'émulation SCSI ou non, vous devrez taper la commande suivante :

# hdparm -c 1 -d 1 /dev/hdc
/dev/hda: setting 32-bit I/O support flag to 1
setting using_dma to 1 (on)
I/O support = 1 (32-bit)
using_dma = 1 (on)

Normalement votre taux de transfert a dû être multiplié par deux et vous pouvez constater que la lecture de dévédéroms est bien plus fluide. De plus afin de réduire le bruit que fait le lecteur de cédérom ou dévédérom, vous pouvez choisir sa vitesse de lecture grâce à cette commande (où 40 correspond à la vitesse choisie, c'est à dire à 40 fois) :

# hdparm -E 40 /dev/hdc

Pour que vos optimisations soient définitives

Les optimisations que vous venez d'effectuer sont certes intéressantes mais au prochain redémarrage il faudra tout refaire. Pour pallier à ce problème nous allons les inscrire dans le fichier de configuration du programme hdparm

Vous devez éditer le fichier /etc/hdparm.conf. Ce fichier contient dans une première partie l'ensemble des options que vous pouvez utiliser. Vous devez ensuite définir pour chacun de vos disques la liste des options que vous souhaitez activer.

Le bloc suivant active le DMA et l'accès 32 bit pour le disque /dev/hda.

/dev/hda {
  quiet
  dma = on
  io32_support = 1
}

Paramètre quiet : Le parametre quiet permet de rendre silencieuse la modification des propriétés du disque dur. Sans ce paramètre vous obtiendrez dans la console des informations sur l'état des modifications effectuées sur le disque dur.

Si vous avez un lecteur de CD-ROM vous pouvez vous inspirer du bloc ci-dessous :

/dev/hdc {
  quiet
  dma = on
  io32_support = 1
  cd_speed = 40
}

Pour activer de suite ces changements vous pouvez exécuter la commande :

# /etc/init.d/hdparm start

Pour activer ces changements à chaque démarrage, vous pouvez utiliser la commande update-rc.d dont le fonctionnement est expliqué plus en détail dans l'article Gérer les services lancés au démarrage, ce qui simplifie grandement la tâche car il vous suffit de taper une seule commande :

# update-rc.d hdparm start 10 2 3 4 5 .
Adding system startup for /etc/init.d/hdparm ...
/etc/rc2.d/S10hdparm -> ../init.d/hdparm
/etc/rc3.d/S10hdparm -> ../init.d/hdparm
/etc/rc4.d/S10hdparm -> ../init.d/hdparm
/etc/rc5.d/S10hdparm -> ../init.d/hdparm

Le mot de la fin

Je tiens à remercier Patrice et Ptitlouis pour leurs suggestions constructives et j'espère que cet article vous aura été utile. Je vous conseille aussi de lire la page de manuel de hdparm afin d'en apprendre plus sur cette commande :

# man hdparm

Liens sur le sujet :

 
materiel/optimiser-vos-peripheriques-ide-avec-hdparm.txt · Dernière modification: 11/12/2010 18:53 par orgrim