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