[gilug.org] Activació del DMA en els CDROM's o DVD's.

Jordi Pujol jordipujol arsystel com
2005-09-14 14:11:58 UTC


Ei llista !

Des de fa temps que estava fent servir versions del kernel que podien fer
l'accés al CDROM amb DMA però no era així, creia que era algun problema dels
dispositius o de la placa base, investigant sobre aixo he trobat aquesta 
solucio:

En aquesta placa hi ha aquests controladors:

# lspci | grep IDE
0000:00:1f.1 IDE interface: Intel Corp. 82801EB/ER (ICH5/ICH5R) Ultra ATA 100
Storage Controller (rev 02)
0000:00:1f.2 IDE interface: Intel Corp. 82801EB (ICH5) Serial ATA 150 Storage
Controller (rev 02)

Amb la utilitat “lsmod” comprovem que el kernel Linux els gestiona de la
manera següent:
L'Ultra ATA amb el mòdul “piix” i el Serial ATA amb el mòdul scsi “ata_piix”.

El joc de xips Intel és un estàndard i era molt estrany que el kernel no fes
l'accés amb DMA.
Quan volia activar el DMA donava lo següent:

# hdparm -d1 /dev/hdc

/dev/hdc:
  setting using_dma to 1 (on)
  HDIO_SET_DMA failed: Operation not permitted
  using_dma    =  0 (off)

Primer havia comprovat que el kernel tingués l'accés amb DMA també per el
CDROM, en els paràmetres del .config:

CONFIG_GENERIC_ISA_DMA=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_BLK_DEV_IDEDMA_FORCED=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_IDEDMA_ONLYDISK=n

i així compilava el kernel, pero no anava.

I no he conseguit mai que funcioni el DMA quan els controladors de disc estan
compilats com a mòdul, sinó que els he hagut de compilar integrats en el
kernel. Editem el fitxer .config i posem els valors següents (en el cas dels
controladors de disc d'aquesta placa base):

CONFIG_GENERIC_ISA_DMA=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_BLK_DEV_IDEDMA_FORCED=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_IDEDMA_ONLYDISK=n

# diff config-2.6.10-5-686-smp .config
< CONFIG_IDE=m   > CONFIG_IDE=y
< CONFIG_BLK_DEV_IDE=m  > CONFIG_BLK_DEV_IDE=y
< CONFIG_BLK_DEV_PIIX=m  > CONFIG_BLK_DEV_PIIX=y
< CONFIG_SCSI=m   > CONFIG_SCSI=y
< CONFIG_SCSI_ATA_PIIX=m > CONFIG_SCSI_ATA_PIIX=y

Recompilem el nostre (custom) kernel i l'instal·lem (per als no iniciats
recomano que consulteu el kernel HOW-TO o el Debian kernel compile).
Al arrancar el sistema el DMA s'activa automàticament en tots els
 dispositius, però millor de fer que el servei hdparm s'arrenqui al iniciar
 el sistema i posi una configuració amb el millor rendiment per els
 dispositius que hi hagi, (editem els serveis amb el ksysv o creem els
 enllaços en els directoris /etc/rc*.d). També editem la configuració del 
servei hdparm.

en aquest cas, hi ha dos dispositius (hda es un DVD-RW i hdc es un CD-RW),
afegim al final de “/etc/hdparm.conf”:

/dev/hda {
         mult_sect_io = 16
         dma = on
         io32_support = 1
         interrupt_unmask = on
}

/dev/hdc {
         mult_sect_io = 16
         dma = on
         io32_support = 1
         interrupt_unmask = on
}

d'aquesta manera l'augment de velocitat és espectacular, per exemple, al
gravar cd's o dvd's he comprovat que van quasi a les velocitats nominals; el 
CD ha passat de mesurar velocitats de 12X a quasi 50X i el DVD de 1,5X a 
quasi 8X.

Espero que us serveixi,

Jordi Pujol



Més informació sobre la llista de correu gilug