Hdparm : Optimiser les accès disques
Contents
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 dévédéroms est particulièrement lente.
- Considérations
Tout au long de 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 est connecté au point d'entrée /dev/hda.
2 Prérequis
2.1 La configuration du noyau
Votre noyau doit pouvoir supporter le DMA. Vous devez avoir les options suivantes lors de la compilation de votre noyau :
Section Option du noyau En module ou en dur ?
Section | Option du noyau | En module ou en dur ? |
---|---|---|
ATA/IDE/MFM/RLL support | IDE, ATA and ATAPI Block devices / Generic PCI IDE chipset support | en dur |
ATA/IDE/MFM/RLL support | IDE, ATA and ATAPI Block devices / Generic PCI bus-master DMA support | en dur |
ATA/IDE/MFM/RLL support | IDE, ATA and ATAPI Block devices / Use PCI DMA by default when available | en dur |
Vous devez remplacer XXXXXXXX par la reférence du chipset de votre carte mère. Reférez vous au manuel d'utilisation de votre matériel pour trouver cette référence.
2.2 Le package hdparm
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 pour 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 :
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
Sans optimisation vous devriez obtenir 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 un une procédé permet d'accéder à la mémoire vive sans passer par le processeur. Vous pouvez activer cette option sans aucun soucis, à l'aide de hdparm.
Pour activer cette optimisation :
hdparm -c1 -d1 /dev/hda
Ce qui produit le résultat suivant :
/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)
Dans la commande ci-dessus :
- -c1 correspondant à l'activation du transfert 32 bits
- -d1 correspondant à l'activation à l'activation du canal DMA
Vous pouvez tester a nouveau votre disque dur pour vérifier que l'optimisation produit bien un gain de performance. Le taux est en moyenne multiplié par 15. Cette valeur peut cependant varier en fonction de votre matériel !
4 Améliorer le taux de transfert de votre lecteur de CD-ROM ou de DVD-ROM
L'optimisation d'un lecteur de CD-ROM ou de DVD-ROM peut se faire quelque soit les pilotes que vous utilisez pour gérer vos lecteurs de cdrom. Ainsi pour faire des copies de CD-ROM à CD-ROM, 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 -c1 -d1 /dev/hdc
Vous devriez ensuite obtenir le résultat suivant :
/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 2 et vous pouvez constatez que la lecture de DVD-ROM est bien plus fluide. De plus afin de réduire le bruit que fait le lecteur de CD-ROM ou de DVD-ROM, vous pouvez choisir sa vitesse de lecture grâce à cette commande (où 40 correspond à la vitesse choisi, c'est à dire à 40X) :
hdparm -E 40 /dev/hdc
5 Pour que vos optimisations soient définitives
Les optimisations que vous venez d'effectuées 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 disque 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 }
- Parametre quiet
Le parametre quiet permet de rendre silencieuse la modification des propriétées du disque dur. Sans ce parametre vous obtiendrez dans la console des informations sur l'état des modifications effecutés sur le disque dur.
Si vous avez un lecteur de CD-ROM vous pouvez vous inspirez 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 :
6 Annexe : paramètres pour le fichier /etc/hdparm.conf
Voici les premières ligne du fichier /etc/hdparm.conf qui décrivent les différentes options possibles pour les blocs que vous pouvez définir pour chacun de vos disques.
# -q be quiet #quiet # -a sector count for filesystem read-ahead #read_ahead_sect = 12 # -A disable/enable the IDE drive's read-lookahead feature #lookahead = on # -b bus state #bus = on # -c enable (E)IDE 32-bit I/O support - can be any of 0,1,3 #io32_support = 1 # -d disable/enable the "using_dma" flag for this drive #dma = on # -D enable/disable the on-drive defect management #defect_mana = off # -E cdrom speed #cd_speed = 40 # -m sector count for multiple sector I/O #mult_sect_io = 32 # -P maximum sector count for the drive's internal prefetch mechanism #prefetch_sect = 12 # -r read-only flag for device #read_only = off # -S standby (spindown) timeout for the drive #spindown_time = 24 # -u interrupt-unmask flag for the drive #interrupt_unmask = on # -W Disable/enable the IDE drive's write-caching feature #write_cache = off # -X IDE transfer mode for newer (E)IDE/ATA2 drives #transfer_mode = 34 # -y force to immediately enter the standby mode #standby # -Y force to immediately enter the sleep mode #sleep # -Z Disable the power-saving function of certain Seagate drives #disable_seagate # -M Set the acoustic management properties of a drive #acoustic_management
/etc/init.d/hdparm start