ATA, UDMA and hdparm
![]() |
Have you bought a modern and fast IDE-based system and are wondering why Linux can't handle it? Speed up Linux by setting the correct parameters for the IDE-bus. |
Speed vs. Compatibility
Please read the liability disclaimer!
Nearly all Linux distributions prefer
compatibility and stability over speed. They want the
installation to be as easy as possible and that's fine, but
slowing down the PC to achive this? Users want stability,
compatibility with their latest hardware and, of course, speed.
Most users configure Linux so it must not boot Apache
(WWW-Server) nor ProFTPD (FTP-Server) nor Squid (Proxy) because
they don't need them. These services only increase the boot-up
time and are not needed by the average user.
Althought fast hard disc drives are the main aspect in speed, an
operating system being able to handle them is required. And, be
honest, you thought Linux can handle your hardware.
Here's the system used in this tuning-process:
| reference system | ||||||||
|
Setting up your hardware
If your PC is home-built, be sure to correct even minor
errors. Most high-end low-cost pc's are also full off small
errors which block the use of UDMA in Linux. First, take a look
at the IDE-connection cable and the HDD.
The IDE-cable should apply the specifications of the
ATA-66 standard.;
| Cable | ||||
|
The HDD should NOT be mounted near the power supply due to fan issues. The fan in the supply causes the HDD to misinterpret CRC-checksums and produces CRC-errors. Also, high-speed CD drives should not be near the HDD. See below for two examples:
| Samples | ||
|
The red area in the right image is to indicate the connector cable. As you can see, it's not twisted and is connected properly. Looking further, you'll also recognize the hdd is not near the power supply nor to the CD-drives. Running with this setup is recommended and would result in fast and functional CRC-checking.
How to configure Linux?
As always, a special program can help us do
the job and this magic program is called hdparm.
This neat GNU program allows you to configure your ide-controller
while the system is running!
The syntax is kind of strange, so here's a short table to show
you what parameters you have to pass to the program:
| Parameters | |||||||||||||||||||||||||||||||||||||||
If you're looking for further information,
type: man hdparm
| |||||||||||||||||||||||||||||||||||||||
These are the common parameters of hdparm. Let's go testing and configuring.
testing and configuring
As you'd guess, you should know what your hardware can
handle. Please take a look at the user's manual of your hard disk
drive and your mainboard/IDE-card.
If you collected all the required information, you can continue.
First, we'll need to open two terminals (xterm)
and log in as root on both (command: su).
The first terminal is used to run commands and the 2nd is used to
keep track of the syslogs.
Run this command on the second terminal to start tracking:
>> tail -f /var/log/messages
The other terminal is mainly intended to run hdparm with various
parameters. To see how Linux behaves after the test, take a look
at the second terminal. Please test with caution - don't push the
frontier of your hardware limits! So let's start:
HDPARM's first issue prints the current settings:
>> hdparm -v -i /dev/hda
All we need to know is now on your screen; what parameters are currently in use and what your hdd is capable. A line similar to this one
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 *udma3 udma4 udma5
is directly read from your hard disk. The asterisk marks the currently transfer mode. In this example it's UDMA3 (Ultra DMA mode 3 (ATA33)). Stay on the first terminal and try:
>> hdparm -d1 -Xzz -i -v -t /dev/hda
with zz replaced by appropiate parameters.
Please note to set the switch -d1 always because this switch
enables DMA. The timing switch (-t) will measure your
current speed after setting up the new configuration. The higher
the zz variable the faster you system will be and the
more error are to be expected. So keep tracking on the second
terminal to prevent too many CRC errors.
If you notice errors like these slow down:
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x84 { DriveStatusError BadCRC }
reboot
If you ever reboot your PC (or switch it off) Linux must set the parameters again to reach proper speed. You must tell Linux which drive to tune (in the example it's /dev/hda) and pass the parameters. Copy the command line into the start-up file "/etc/rc.sysinit" and save it. Of course, you need root access to do this. On every reboot, Linux will tweak your hardware and you'll enjoy the speed benefit.Misc stuff
After the installation of Mandrake Linux 8.1, the system ran
in the mdma1-mode (MultiWord-DMA mode1) and a throughput of 10.76
MB/sec. After this tuning process, it runs stable and fast in
the uDMA4-mode (Ultra-DMA mode4 (ATA66)) with a throughput of 51.20
MB/sec. The throughput was increased by a factor of almost
5!
The program "hdparm" may force your system to use higher values than avaible on your hardware. Therefor there's a risk in using this program. The use can cause data corruption and damage your hardware! So be sure to back up all your data and think twice before issuing any co mmand! Use extreme caution! WE TAKE NO RESPONSIBILITY FOR DAMAGED HARDWARE OR CORRUPTED DATA!
Talkback Area
Enter Own Comment


