logo
           ANDESI                      BREVES           

Optimiser vos périphériques IDE

par Arnaud Fontaine

Juillet 2003

Table des matières

1  Introduction

Lorsque vous faîtes des copies de fichiers de grosse taille d'un disque dur à un autre ou que vous copiez le contenu d'un cdrom 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 dvdroms est particulièrement lente.

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.

2  Prérequis

L'outil que nous allons utiliser afin de tester et d'optimiser le taux de transfert du disque dur se nomme hdparm qui 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és 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 (adaptez suivant votre carte mère, ici une carte mère basée sur un chipset VIA) :
ATA/IDE/MFM/RLL support
    IDE, ATA and ATAPI Block devices
        [*] Generic PCI IDE chipset support
        [*] Generic PCI bus-master DMA support
        [*] Use PCI DMA by default when available
        [*] VIA82CXXX chipset support

3  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 canal DMA et le transfert 32 bits de votre disque dur. J'ai activé sans aucun soucis, à 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 se 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 faîtes sur un disque dur concernent toutes les partitions de ce disque et quelque soit leur système de fichier.

4  Améliorer le taux de transfert de votre lecteur de cdrom ou de dvdrom

L'optimisation d'un lecteur de cédérom ou de dvdrom peut se faire quelque soit les pilotes que vous utilisez pour gérer vos lecteurs de cdrom. Ainsi pour faire des copies de cdroms à cdroms, l'émulation SCSI s'avère absolument indispensable. Ainsi, 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 constatez que la lecture de dvdroms est bien plus fluide. De plus afin de réduire le bruit que fait le lecteur de cdrom ou dvdrom, vous pouvez choisir sa vitesse de lecture grâce à cette commande (où 40 correspond à la vitesse choisi, c'est à dire à 40 fois) :
# hdparm -E 40 /dev/hdc

5  Pour que vos optimisations soient définitives

Les optimisations que vous avez effectué sont certes intéressantes mais au prochain redémarrage il n'en restera plus rien. Pour pallier à ce problème nous allons écrire un script de démarrage dans /etc/init.d en shell que je vais commenter et qui va vous permettre d'exécuter les commandes que vous désirez :
#! /bin/sh
# /etc/init.d/hdparm
# Script destiné à optimiser vos périphériques IDE au démarrage du système

# Quelques chemins utiles définissant respectivement le chemin vers la commande
# hdparm, vers le script de démarrage et le nom que portera le service

PATH=/sbin
DAEMON=/etc/init.d/hdparm
NAME=hdparm

# vérifie que le script de démarrage est bien exécutable sinon on quitte le script
test -x $DAEMON || exit 0

set -e

case "$1" in
    # Le script se lancera uniquement au démarrage du système
    start)
        echo -n "Optimize : $NAME"
        # Optimisation pour le disque dur /dev/hda, répéter cette même commande pour X
        # disques durs IDE

        hdparm -c 1 -d 1 /dev/hda
        # hdparm -c 1 -d 1 /dev/hdX

        # Optimisation du lecteur de cdrom et éventuellement réglage de la vitesse à 40 fois
        # pour qu'il soit plus silencieux, répéter cette commande pour X lecteurs de cdrom
        # et/ou lecteurs de dvdroms

        hdparm -c 1 -d 1 /dev/hdc
        hdparm -E 40 /dev/hdc
        # hdparm -c 1 -d 1 /dev/hdX
        echo "."
        ;;
    *)
        echo "Usage: /etc/init.d/hdparm start" >&2
        exit 1
        ;; esac

exit 0
Une fois que ce script est bien enregistré dans /etc/init.d, il vous suffit de taper :
# ln -s /etc/init.d/hdparm /etc/rc1.d/S10hdparm
# ln -s /etc/init.d/hdparm /etc/rc2.d/S10hdparm
# ln -s /etc/init.d/hdparm /etc/rc3.d/S10hdparm
# ln -s /etc/init.d/hdparm /etc/rc4.d/S10hdparm
# ln -s /etc/init.d/hdparm /etc/rc5.d/S10hdparm


Vous pouvez également 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

6  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 : Modifications du document :
- Mises à jour effectuées le 20 juillet 2003 : corrections de fautes d'orthographe, ajout d'une ligne dans la section « Améliorer le taux de transfert de vos disques durs », modification de la section « Améliorer le taux de transfert de votre lecteur de cdrom ou de dvdrom », enfin ajout et modifications des « liens sur le sujet ».
- Mises à jour effectuées le 27 juillet 2003 : ajout de la partie concernant les options à activer dans le noyau pour activer le canal DMA et ajout de la section « Prérequis ».


[Format Latex] [Format PDF] [Format HTML seule]




   Debian    Valid CSS!