Enabling DMA for disks in Redhat 3.4
Michael Kearey
mkearey at redhat.com
Mon May 9 05:13:58 UTC 2005
On Sun, 2005-05-08 at 15:15 -0400, Mike Ault wrote:
> I am attempting to increase the PIO bus speed from 33 to 66 and to turn on
> DMA using ATA/EIDE drives. I used to be able to do this with the idebus
> setting and the hdparm
> command. So far I have not been able to achieve this I get:
>
> [root at aultlinux3 ~]# hdparm -X66 -d1 -u1 -m16 -c3 /dev/hdd
>
> /dev/hdd:
> setting 32-bit IO_support flag to 3
> setting multcount to 16
> setting unmaskirq to 1 (on)
> setting using_dma to 1 (on)
> HDIO_SET_DMA failed: Operation not permitted
> setting xfermode to 66 (UltraDMA mode2)
> multcount = 16 (on)
> IO_support = 3 (32-bit w/sync)
> unmaskirq = 1 (on)
> using_dma = 0 (off)
>
> When I try. I have also tried adding the options lines for the various
> drivers (ide1, ata_piix, libata) but it seems to have no affect.
>
> Anyone been able to set up DMA for ATA/EIDE drives or to set the bus speed
> in RedHat 3.0 release 4?
>
> On older, slower drives I was able to get speed up to 14.92 mb/sec using
> these methods, on these newer, faster drives I can only get to 5.1 mb/sec
>
> On Old RedHat:
>
> [root at aultlinux2 root]# hdparm -m16 -c3 -X mdma2 -d1 -a8 -u1 /dev/hdb
>
> /dev/hdb:
> setting fs readahead to 8
> setting 32-bit IO_support flag to 3
> setting multcount to 16
> setting unmaskirq to 1 (on)
> setting using_dma to 1 (on)
> setting xfermode to 34 (multiword DMA mode2)
> multcount = 16 (on)
> IO_support = 3 (32-bit w/sync)
> unmaskirq = 1 (on)
> using_dma = 1 (on)
> readahead = 8 (on)
> [root at aultlinux2 root]# hdparm -Tt /dev/hdb
>
> /dev/hdb:
> Timing buffer-cache reads: 128 MB in 1.56 seconds = 82.05 MB/sec
> Timing buffered disk reads: 64 MB in 4.29 seconds = 14.92 MB/sec
>
> On New improved RedHat with newer, faster drives:
>
> [root at aultlinux3 ~]# hdparm -X66 -d1 -u1 -m16 -c3 /dev/hdd
>
> /dev/hdd:
> setting 32-bit IO_support flag to 3
> setting multcount to 16
> setting unmaskirq to 1 (on)
> setting using_dma to 1 (on)
> HDIO_SET_DMA failed: Operation not permitted
> setting xfermode to 66 (UltraDMA mode2)
> multcount = 16 (on)
> IO_support = 3 (32-bit w/sync)
> unmaskirq = 1 (on)
> using_dma = 0 (off)
> [root at aultlinux3 ~]# hdparm -tT /dev/hdc
>
> /dev/hdc:
> Timing cached reads: 3820 MB in 2.00 seconds = 1909.34 MB/sec
> Timing buffered disk reads: 16 MB in 3.11 seconds = 5.15 MB/sec
>
>
> This is using the SATA drive (can't set it using hdparm) as the boot drive
> with two EIDE drives chained off of IDE1, the EIDE drives are where I want
> to set it.
>
> So far the only light is rebuilding the kernel to support DMA as it seems
> the RedHat folks in their wisdom decided we really didn't want DMA support
> in the IDE interface as a default.imagine that, actually wanting the best
> performance. However, I haven't had much luck with rebuilding the kernel for
> firewire (read no luck at all) and had to download a prebuilt kernel with
> firewire enabled in order to use it (not this server). If no one has any
> ideas, how about a pointer to a prebuilt kernel rpm with DMA turned on?
>
> Thanks.
>
> Mike
>
>
>
Hi there Mike. I am Mike too :)
- Changing DMA mode 'on the fly' has been disabled for some time. It is
set at boot time only. It was determined that changing DMA modes on a
live system was hazardous.
- There is usually no need to rebuild any kernel. DMA mode is available
and usually enabled by default for most controllers. hdparm /dev/hda
will tell you if it is ( using_dma = 1 (on) <--- means it is ON ).
Have a look in /etc/sysconfig/harddisks for a line :
# USE_DMA=1
This causes the kernel to set DMA mode on - it's commented out because
as I have said, it's enabled by default. If for some reason the kernel
decides that the IDE bus/controller cannot manage DMA mode properly, you
have an opportunity to override this using the USE_DMA = 1 option.
The EXTRA_PARAMS line can be used to add extra parameters like X66 .
However it is very rare to actually need to do this.
The /etc/sysconfig/harddisks file is for global settings for all HD's.
You are able to set things for specific devices too.
Leave the /etc/sysconfig/harddisks file as it is, and create a
file /etc/sysconfig/harddiskhd[a-h] .
For example, if you want to set DMA on for /dev/hdc create a file :
/etc/sysconfig/harddiskhdc
Add a line USE_DMA=1 to the file and it will hint the kernel to use DMA
for that device at boot time.
But first check with hdparm to see what settings it's already using - if
it's already using DMA mode, no changes will be seen.
Cheers,
Michael
More information about the redhat-list
mailing list