Improving Hard Disk Performance with hdparam LG #79

![[ Prev ]](../gx/navbar/prev.jpg)
![[ Table of Contents ]](../gx/navbar/toc.jpg)
![[ Front Page ]](../gx/navbar/frontpage.jpg)
![[ Talkback ]](../gx/navbar/talkback.jpg)
![[ FAQ ]](./../gx/navbar/faq.jpg)
![[ Next ]](../gx/navbar/next.jpg)
"Linux Gazette...making Linux just a little more fun!"
Improving Hard Disk Performance with hdparam
Nowadays the IDE devices already have a high transfer rate (by UltraDMA technology), but there are still other ways to improve your hard-disks performance and we'll show how to do it with the hdparm utility.
1. Introduction
hdparm is an utility which provides us a powerful tunning control over
HDs (HD PARaMeters) and this is what we'll be discussing in this document.
Sometimes your HD is set not to use its maximum power as it could and that's
why you may get anoyed with its performance. With hdparm we can magically
change this to reach its maximum performance using all of its features.
2. Looking the hard disk
The first thing to do, is to gather all information about your hard drive
and the current settings. These information will be used as a base for us
while configuring the hard disks. Be extremely careful in all the steps you
take because any misconfiguration may damage your disk partially (data) or
entirely (hardware).
By now, lets assume /dev/hda as our disk. Take the command:
darkstar:~$ hdparm -i /dev/hda
You should get some info like:
/dev/hda:
Model=QUANTUM FIREBALLlct20 20, FwRev=APL.0900, SerialNo=552114732078
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=32256, SectSize=21298, ECCbytes=4
BuffType=DualPortCache, BuffSize=418kB, MaxMultSect=8, MultSect=off
CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=39876480
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no
Drive Supports : ATA/ATAPI-5 T13 1321D revision 1 : ATA-1 ATA-2 ATA-3
ATA-4 ATA-5
But, you may ask yourself "What the hell is this?". Heah, don't be afraid
this information will make you happy soon. Here we have many important and
useful information...let's look at some:
- MaxMultSect: This field tell us what is the maximum number of sectors
your hard disk can read at a time.
- MultSect: This one says the current number of sectors being read at a
time.
- PIO and DMA modes: These are the modes supported by your hard drive. The
one marked with an asterisk (*) is the currently set.
- AdvancedPM: If 'yes', means that your drive supports APM (Advanced Power
Management).
Another command issued to get other information is:
darkstar:~$ hdparm /dev/hda
This one brings:
/dev/hda:
multcount = 0 (on)
I/O support = 0 (16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 2482/255/63, sectors = 39876480, start = 0
In a brief description...
- multcount is the number of sectors being read at a time;
- I/O support indicates the operating mode of your hard disk (16/32/32sync);
- using_dma tell us whether the drive is using the DMA feature or not;
- keepsettings keeps the settings after a soft reset (don't touch unless you
know what it is);
- readonly is normally set to 1 only for CD-ROMs, this setting tells the system
whether the device is read-only or not;
- readahead shows how many sectors ahead will be read when you access the
hard drive;
If you didn't understand some of these don't get bored, you are not a dumb,
and we will discuss them as you read this document. Some of these parameters
are related to your hard drive hardware physically and not logically, soh you
cannot change them unless you change the hardware (and if you do it, you will
probably cry for damaging your hard disk and destroy all your data, =] ).
3. Device setup
And now...the show! We are going to setup our HD. REMEMBER: Mistakes during
the setup process may damage your hard disk and all of its data. The
information provided by 'hdparm -i ' now, is your driver. Follow them
and you must not get any problems.
3.1. I/O Support
Well, unless you have a (E)ISA IDE interface card, the rest (PCI/VLB), all
support 32bits mode. If your box is newer than a 486, probably you have a
PCI IDE controller. If it's not, check for it...
- hdparm -c0 // Set operating mode to 16-bits.
- hdparm -c1 // Set operating mode to 32-bits.
- hdparm -c3 // Set operating mode to 32-bits synchronized.
The mode '3' only is needed for some chipsets. People often use mode '1'
for best performance. We didn't find any info about mode '2' (supposed to be
16-bit sychronized).
3.2. MultSect or Multcount
This one is simple. Check your HD's MaxMultSect info for what you can do.
We set our MultSect to 8 since our HD supports that, so...
# hdparm -m 8 /dev/hda
Remember to change /dev/hda to YOUR device and '8' to the MaxMultSect
supported by your hard disk as provided by 'hdparm -i '.
3.3 Activating DMA
The most simple of all. Simply type:
# hdparm -d 1
to set your DMA mode to ON. Your card must supportd the DMA mode.
3.4 PIO and DMA modes
You can set both of these using the same flag '-X'. This one, if not used
with EXTREME care may eject your hard drive (BELIEVE IT!) and make it the
first HD to arrive the Moon by itself. Set just the modes supported by
your hard disk.
Hmm, it works like this...for normal DMA modes (multiword DMA or mdma),
use -X32 + (DMA identifier number). For mdma2 it would be:
# hdparm -X34 /dev/hda // 32 + 2 (from mdma2)
For the PIO and UltraDMA modes the process is almost the same. The
difference is that the base number for the PIO modes is 8 and for the
UltraDMA modes it is 64. The hard disk used while writing this document
supports ATA100, so it was put in udma5 mode using:
# hdparm -X69 /dev/hda
Keep in mind that the highest DMA modes are available just for some
chipsets.
The ATA66 and ATA100 modes requires a 80-way IDE cable. Think that put you
disk in ATA100 without these cables will not work.
3.5 Readahead
The option readahead IS NOT the same as multcount. The multcount refers to
the possibility of the hardware to read more than one sector at a time while
the readahead option is the number of sectors ahead your computer should
read. The readahead feature is great when reading big-size files but it
brings down the performance for short-size files. A good idea is to leave
the value of readahead the same as the multcount so it will not be needed to
make more than an access per time to read more sectors ahead.
If you are going to access big files you can set the readahead to a
greater value. The default value is 8 sectors/read access (something like
4kb).
Now the syntax:
# hdparm -a N /dev/hda
N is the number of sectors for readahead.
4. Final comments
There are many other features you can set using hdparm. Most of them are
covered in the hdparm manpage. These ones we covered are just the most
common.
The configuration will be reset when you reboot your machine (the keep
settings will not work as it covers just soft reboots). Put the commands in
your rc.local (maybe, for large configuration, it would be a good idead to
have a rc.hdparm or something like this).
Any doubts on this documents can be sent to: piterpk@terra.com.br.
Problems with this translation can be sent to wzanatta@uol.com.br.
Copyright © 2002, Piter Punk.
Copying license http://www.linuxgazette.net/copying.html
Published in Issue 79 of Linux Gazette, June 2002

![[ Prev ]](../gx/navbar/prev.jpg)
![[ Table of Contents ]](../gx/navbar/toc.jpg)
![[ Front Page ]](../gx/navbar/frontpage.jpg)
![[ Talkback ]](../gx/navbar/talkback.jpg)
![[ FAQ ]](./../gx/navbar/faq.jpg)
![[ Next ]](../gx/navbar/next.jpg)