[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