El Mini-Cómo de Ultra-DMA en Linux

Brion Vibber, brion@pobox.com

v2.0, 7 de Agosto 1998


Este documento pretende explicar cómo usar los discos duros con interfaces Ultra-DMA, también conocidas como Ultra-ATA y Ultra33, en Linux. La última versión de este documento puede encontrarse en formato HTML en http://pobox.com/~brion/linux/Ultra-DMA.html.

1. Introducción

Este documento pretende explicar cómo usar los discos duros con interfaces Ultra-DMA, también conocidas como Ultra-ATA y Ultra33, en Linux. A pesar de que en algunos casos no encierran dificultad, pueden hacerse algunas modificaciones con el fin de aumentar las prestaciones. Además, comprobará que, en ocasiones, el uso de estos dispositivos no es tan trivial.

1.1 Renuncia de responsabilidad

La información que contiene este documento es, hasta donde llega mi conocimiento, correcta, por lo que debería funcionar. De todas maneras, a parte de la posible existencia de errores ortográficos, cabe la posibilidad de que lo descrito en este documento no funcione en su sistema, debido a algún tipo de incompatibilidad. Es por ello que le recomiendo que, antes de comenzar a manipular su disco duro, ¡HAGA COPIAS DE SEGURIDAD DE TODO AQUELLO QUE QUIERA GUARDAR! Si no acostumbra a hacerlas, esta es una buena ocasión para comenzar.

1.2 Reconocimientos

Michel Aubry - Parche UDMA para VIA en <=2.0.33 y más información, Gran Parche Unificado de UDMA para 2.0.34+

Andrew Balsa - Proveyó información general sobre UDMA y el parche udma-generic para Intel TX, SiS, y VP1 en <=2.0.33; también Gran Parche Unificado de UDMA para 2.0.34+

Maxime Baudin - Traducción al Francés

Bokonon - ``Controladora'' vs. ``interfaz''

John G. - Parche para VIA VP2 en <=2.0.33 e información

Martin Gaitan - Instalación de ide0/ide1 para Promise Ultra33

Andre M. Hedrick - Gran Parche Unificado de UDMA para 2.0.34, Artop ATP850UF

Norman Jacobowitz - Me pidió añadir información sobre VP3

John Levon - Información sobre la TX Pro mobos

Peter Monta - Información sobre el uso de dos tarjetas Ultra33

Masayoshi Nakano - Traducción al Japonés

Gadi Oxman - El parche de la Promise Ultra33 para <=2.0.34 y números secretos para el truco

Andy Pearce - Sugirió añadir información de los ficheros de dispositivo adicionales para hde-h

Andrei Pitis - Parche para LILO

Brion Vibber - Este documento

1.3 Historia del Documento

v2.0, 7 Agosto 1998: actualización y total reestructuración de la información sobre interfaces de la placa madre y tarjetas externas, información sobre el Gran Parche Unificado de UDMA (una parte del parche Jumbo) para 2.0.35, créditos en orden alfabético por el apellido, sustitución del término ``controladora'' por ``interfaz'' (más correcto desde el punto de vista técnico), nueva información sobre activación/desactivación de UDMA, añadida una lista de problemas ¡y más cosas!

v1.45, 6 Julio 1998: pequeñas actualizaciones, parche de la Promise Ultra33 para el núcleo 2.0.34 en la Red Hat 5.1 y parche que permite a LILO arrancar desde interfaces PCI como la Promise Ultra33.

v1.41, 3 Mayo 1998: arreglados unos cuantos errores ortográficos y presencia de los traductores en los créditos.

v1.4, 28 Abril 1998: parche UDMA-Generic, nueva información general y aparición de una sección sobre copias.

v1.3, 5 Marzo 1998: información sobre VIA VP3, mejores instrucciones de ``parcheado'' y enlace al parche de Promise más reciente.

v1.2, 27 Enero 1998: información adicional del truco para la Promise.

v1.1, 21 Enero 1998: nueva información acerca del chipset VIA, instalación de la Promise Ultra33 y activación de los modos de transferencia Bus Master y UDMA.

v1.0, 19 Enero 1998: primera versión escrita en SGML. Bastante completa.

1.4 Copias

Este documento puede ser copiado libremente y/o distribuido para propósitos informativos. No puede ser modificado, excepto para cambio de formato, sin la autorización del autor. Si desea traducir este documento a otro idioma lo puede hacer pero, de todas formas, deberá contactar primero con el autor para que las versiones actualizadas puedan ser enviadas a los traductores, así como al Linux Documentation Project.

2. ¿Qué es Ultra-DMA y para qué lo quiero?

Aquí tiene una breve descripción de las tecnologías de dispositivos basadas en IDE:

2.1 IDE, EIDE, y ATAPI

Estas son tecnologías antiguas. La mayoría de los discos duros e interfaces de disco que puede comprar, o que posiblemente ya esté usando, son de tipo EIDE. No obstante, abundan cada vez más aquellos discos duros que cuentan con una interfaz UDMA.

2.2 Bus Master DMA

El Bus Master DMA es una tecnología para incrementar la velocidad de las transferencias de datos en los discos duros. Dicha tecnología requiere soporte de la placa madre y la BIOS, y algún soporte adicional por parte del disco.

Puede aprender más sobre el tema en http://developer.intel.com/design/pcisets/busmastr/FAQs.htm.

2.3 Ultra-DMA o Ultra-ATA o Ultra33 o...

El Ultra-DMA tiene muchos nombres, pero nosotros lo denotaremos aquí por UDMA.

UDMA es una tecnología más avanzada y que provee unas transferencias mucho más rápidas (hasta 33.3 MB/s) que la EIDE, siendo su precio más reducido que el los dispositivos SCSI. Muchos de los nuevos ordenadores incorporan grandes discos e interfaces UDMA. Además, es posible añadir una tarjeta de interfaz UDMA (como la Promise Ultra33) a un sistema ya existente, pudiendo aumentar la velocidad de transferencia de sus discos duros incluso si estos no son UDMA.

Puede aprender más detalles sobre UDMA en http://www.quantum.com/src/whitepapers/ultraata/

Nótese que la longitud de cable para la conexión del UDMA debe ser menor que la de un cable para DMA normal. Lo ideal es que esté por debajo de los 30 cm (12").

2.4 ¿Exactamente cómo de ``Ultra'' es?

Antes de ir más lejos, aclaremos una equivocación. Los 33 MB/seg son la tasa de transferencia instantánea (burst transfer rate), y es algo que no verá muy frecuentemente. Para explicarlo, aquí hay un pequeño texto del UDMA.txt (udma-generic):

Las tasas de transferencia instantánea se supone que van
desde los 16,6MB/s (modo PIO 4) a 16,6MB/s (DMA modo 2) hasta 33MB/s
(UDMA). En su parche contra el núcleo 2.1.55, Kim-Hoe Pang realmente
analizó las tasas de transferencia instantánea en UDMA con un analizador
lógico: 60ns/palabra, lo que se traslada a 33MB/s.

Nótese que las tasas de transferencia instantánea sólo afectan a las
transferencias de datos desde/hacia la caché del disco EIDE (476kB para
el disco de 6,4GB de IBM), y no son particularmente relevantes para la
mayoría de los usuarios de Linux.

El núcleo de Linux usa tanta memoria RAM como es posible para hacer de
caché en los accesos a los datos del disco duro, y si los datos no están
en la caché del núcleo, es improbable que estén en la caché del disco duro
(mucho más pequeña).

Mucho más relevante es la tasa de transferencia sostenida (sustained transfer rate), que es la velocidad a la cual los datos pueden ser transferidos desde el disco a la memoria principal, donde pueden usarse. Una manera fácil de medir esta tasa es usar hdparm, por ejemplo ``hdparm -Tt /dev/hda'' para el primer dispositivo IDE.

Aquí hay algunos datos recogidos después de pruebas muy extensas, usando
la utilidad hdparm (escrita por Mark Lord):

Tasas de transferencia bajo Linux con PIO modo 4:   +/- 5,2MB/s

Tasas de transferencia bajo Linux con DMA modo 2:   +/- 7,2MB/s

Tasas de transferencia bajo Linux con UDMA modo 2:  +/- 9,8MB/s

Como puede comprobar, UDMA es todavía casi el doble de rápido que un EIDE normal y significativamente más rápido que el bus mastering DMA normal.

2.5 UDMA comparado con SCSI

No tengo grandes números para ofrecerle, pero el consenso generalizado es que el SCSI de alto nivel ofrece mejores prestaciones que el UDMA. De todas formas, si ha echado un vistazo últimamente a los precios de los discos duros, habrá notado que tienden a ser mucho más baratos. La relación prestaciones/precio favorece al UDMA en la mayoría de los casos.

3. Usando su disco duro UDMA con una interfaz EIDE

Es fácil de hacer. Dado que todos los discos UDMA son completamente compatibles con EIDE, sólo tiene que enchufar su disco UDMA de la misma forma que sus antiguos discos, y Linux no debería tener ningún problema en detectarlo y utilizarlo. De todas maneras, estará limitado, por supuesto, a la menor velocidad del EIDE.

4. Usando sus discos duros con una interfaz UDMA

Hay buenas y malas noticias. Las buenas noticias son que una interfaz UDMA puede ser usado tanto con discos duros UDMA como con los antiguos EIDE, y será mucho más rápido que una interfaz de este tipo.

Las malas noticias son que los núcleos actuales (como el 2.0.35) no soportan la tecnología UDMA de una forma óptima, aunque existen ya algunos parches para ellos. Por su parte, los núcleos en desarrollo (el actual es el 2.1.114) disponen de un soporte más avanzado para UDMA. Por desgracia, algunas tarjetas de expansión con interfaces UDMA necesitan, o bien un parche, o algún tipo de truco para poder ser usadas. Es por eso que este documento existe: para explicar cómo obtener estos parches y cómo aplicar estos trucos.

5. Interfaces UDMA PCI externas

Estas son interfaces UDMA sobre tarjetas PCI que pueden ser usadas para añadir esta capacidad a un ordenador existente sin tener que reemplazar la placa madre o para añadir soporte para cuatro dispositivos adicionales a un ordenador que tiene ocupados todos los que ofrece su placa madre. Pueden encontrarse preinstaladas en algunos ordenadores, especialmente en máquinas Gateway 2000 y Dell.

Muchas de ellas no están soportadas por los núcleos estables actuales (como el 2.0.35), debiendo aplicarse un parche o usar uno de los núcleos de desarrollo (2.1.x). Si necesita instalar Linux en un disco duro conectado a estas interfaces, necesitará usar algunos trucos.

5.1 Promise Ultra33

Esta es una tarjeta PCI que tiene dos canales UDMA, soportando hasta cuatro dispositivos en total. Puede ver las especificaciones y precios en http://www.promise.com.

Esta tarjeta se incluía en los sistemas Pentium II modernos modelo Gateway 2000, y puede aparecer o no en modelos más recientes.

El núcleo 2.0.35 soporta el Ultra33 explícitamente, y los núcleos en desarrollo (el actual es el 2.1.114) dispone de soporte genérico para interfaces IDE PCI que, automáticamente, detecta el Promise Ultra33. Pero, los viejos núcleos estables (2.0.34 e inferiores) no lo detectan y, dado que muchas de las distribuciones de Linux incluyen estos últimos, puede ser bastante complicado instalar este sistema operativo.

Instalando Linux con la Promise

Aunque hay un parche para la interfaz Promise, ¡no es fácil aplicarlo y recompilar el núcleo si todavía no tiene Linux instalado! Por eso, hay un truco que le permite instalarlo. Agradecimientos a Gadi Oxman por la siguiente información sobre la obtención de la configuración de la interfaz:

Si podemos acceder a la consola con el disco de instalación, también
podemos usar "cat /proc/pci" para obtener la configuración de la interfaz:

    RAID bus interface: Promise Technology Unknown device (rev 1).
      Vendor id=105a. Device id=4d33.
      Medium devsel.  IRQ 12.  Master Capable.  Latency=32.
      I/O at 0xe000.   (a)
      I/O at 0xd804.   (b)
      I/O at 0xd400.   (c)
      I/O at 0xd004.   (d)
      I/O at 0xc800.   (e)

y pasar el parámetro "ide2=a,b+2 ide3=c,d+2" en la línea de argumentos
del núcleo.

Nótese que los números probablemente no sean los mismos que los que usted tendrá. Sólo como ejemplo, los parámetros a usar con el conjunto de números anterior sería ``ide2=0xe000,0xd806 ide3=0xd400,0xd006''. Si sólo está usando el primer canal del Ultra33 (por ejemplo, si usted sólo dispone de un dispositivo, o dos si son master y slave en el mismo canal), entonces no necesitaría especificar ide3.

Red Hat 5.1: Inicie la instalación con el disquete de arranque, pulsando ENTER cuando se le pregunte. El núcleo se cargará y entonces se le preguntará por el idioma, tipo de teclado, y modo de instalación. Se le pedirá información adicional sobre el medio de origen; no importa lo que responda mientras llegue al siguiente paso. Entonces verá una pantalla titulada ``Select Installation Path''; pulse Alt-F2 ahora para llegar al intérprete de comandos. Ejecute ``cat /proc/pci'', apunte los números como antes, y vuelva a arrancar desde el mismo disquete. Esta vez, escriba ``linux ide2= (aquí es donde debe poner los números como se mostró anteriormente) ide3=(más números)'' y luego pulse ENTER. Ahora debería ser posible alojar Linux en su disco duro sin dificultades, aunque LILO probablemente no será capaz de instalarse de forma correcta: haga un disquete de arranque y utilícelo para acceder a su sistema Linux con los mismos parámetros, hasta que pueda parchear el LILO y el núcleo.

Red Hat 5.0 y Slackware 3.4: El proceso a seguir en ambas distribuciones es similar, incluyendo el problema de que los programas de instalación ignoran los /dev/hde-h (los dispositivos en ide2 e ide3). Para poder instalar a/o desde estos dispositivos es necesario pasar por encima de uno o de los dos canales de interfaz de la placa madre. De todas maneras, asegúrese de no pasar por encima de un dispositivo que necesite para la instalación; por ejemplo, si está instalando desde un CD-ROM en /dev/hdd (ide1, interfaz en la placa madre) a un disco duro en /dev/hde (ide2, el Ultra33), debería deshabilitar el innecesario ide0 con ide2 y dejar intacto ide1. Asumiendo los números anteriores, debería arrancar con ``ide0=0xe000,0xd806''. Red Hat 5.0 le ofrecerá un intérprete de comandos si usa la capacidad de disquete de rescate (rescue disk), y Slackware incluye un intérprete en el proceso de instalación normal. Tenga en cuenta que Red Hat 5.0 es difícil de arrancar después de la instalación; si tiene problemas podría probar a bajarse un disquete de arranque de Slackware desde ftp://ftp.cdrom.com/pub/linux/slackware-3.5/bootdsks.144/ y usarlo para arrancar.

Con otras distribuciones de Linux deberá improvisar un poco, pero el proceso debería ser el mismo que el visto anteriormente.

IMPORTANTE: ¡Sin el parche (del cual se habla en la sección UDMA­Genérico), el núcleo necesita estos parámetros de arranque para poder acceder a su disco duro! Por eso es muy importante que cuando configure LILO, tanto en un disco duro como en un disquete de arranque, añada los mismos parámetros exactamente tal y como lo hizo al instalar. ¡De otra manera su sistema no arrancará! Debería ser posible pasárselos a LILO cuando arranque (por ejemplo, pulsando MAYS, escribiendo ``linux ide2=.....'' cada vez que lo haga), ¡pero sólo podrá hacerlo si guarda los números! Es recomendable que aplique el parche al núcleo tan pronto como pueda para que no deba preocuparse al respecto; una vez que pueda arrancar con el núcleo parcheado, podrá olvidarse de los parámetros de arranque. Además, por lo menos que yo sepa, no hay manera de pasar parámetros a un disquete de arranque sencillo (hecho con ``make zdisk''), deberá usar LILO u otro cargador (como LOADLIN) que le permita pasarlos.

De todas maneras, los núcleos no parcheados y programas de instalación pasan un mal rato usando ide2 e ide3, aunque los dispositivos hayan sido detectados correctamente. Por eso, si no es capaz de instalar Linux usando la técnica anterior, pruebe a especificar ide0 o ide1 en vez de ide2 o ide3 (gracias a Martin Gaitan por esta técnica). Esencialmente consiste en reemplazar el interfaz en placa por el Promise Ultra33, al menos en lo que concierne al núcleo, pudiendo seguir en la dirección de la siguiente sección como si los hubiera movido físicamente. Nótese que si está usando el CD-ROM IDE conectado a su interfaz en placa como fuente de la instalación, ¡deberá asegurarse que no deshabilita la interfaz en la que se encuentra el CD o será incapaz de instalar! Si el CD está en hda o hdb, use ide1 para su disco duro, y si está en hdc o hdd, entonces use ide0.

Instalando Linux saltándose la Promise

Si no consigue que funcionen los trucos software, tendrá que usar un método más expeditivo. Este es un método alternativo que virtualmente tiene éxito garantizado, pero va a requerir que abra su ordenador y lo modifique internamente. NOTA: ¡Si no está familiarizado con el proceso de conectar y desconectar dispositivos IDE, lea los manuales que venían con su ordenador, su disco duro y/o con la Promise Ultra33 antes de intentarlo! Si modifica algo y no sabe cómo ponerlo otra vez en su sitio, ¡podría acabar arrepintiéndose!

Habiendo dicho esto, es todo muy simple. Muchas de las placas madres de hoy en día tienen incorporadas interfaces EIDE. Desconecte su disco duro de la Ultra33 y conéctelo a la interfaz en placa. Si tiene otros dispositivos IDE en la misma interfaz, como un CD-ROM, una unidad de cintas o un disco ZIP, es más fácil si simplemente añade el disco duro en algún canal no usado (el secundario en vez del primario) o temporalmente desconecte algún dispositivo que no necesite inmediatamente (como el ZIP o la cinta). Instale Linux y, finalmente, bájese y aplique el parche para la Promise UDMA (vea la sección siguiente).

Ahora está en disposición de volver a poner el disco en la Promise... casi. Para estar seguro haga un disquete de arranque (cd /usr/src/linux ; make zdisk) que podrá usar para arrancar su sistema en caso de que LILO no funcione. Bueno, para estar muy seguro, haga dos y guarde uno de ellos por ahora.

Muy bien, ahora es el momento de pensar un poco... si sólo dispone de un disco duro que se encontrará en la Promise, entonces lo más seguro es que sea /dev/hde (a y b son para la interfaz primaria en placa, c y d para la secundaria). Si va a poner más discos, entonces el esclavo del primer canal de la Promise será /dev/hdf, el master del segundo /dev/hdg y el esclavo del segundo /dev/hdh.

Edite /etc/fstab, y cambie todas las particiones de los discos duros que está moviendo de los dispositivos en placa (/dev/hda, hdb, etc) a sus nuevas localizaciones en la Promise (/dev/hde, hdf, etc). Si tiene que poner otros dispositivos (como un CD-ROM o un disco ZIP) que desea dejar en la interfaz en placa, entonces cámbielos a su nueva localización también. Por ejemplo, si su CD-ROM era originariamente el master del canal primario (/dev/hda), pero puso su disco duro en ese lugar y tuvo que cambiar el CD al esclavo (/dev/hdb) o al canal secundario (/dev/hdc), y ahora quiere volver a ponerlo otra vez en su sitio, entonces cámbielo a /dev/hda.

Si está usando LILO, reconfigúrelo para usar la nueva localización del dispositivo (la configuración de LILO sale de las pretensiones de este documento, así que si no conoce cómo hacerlo, lea el LILO mini-HOWTO), o no será capaz, probablemente, de arrancar a menos que no use el disquete de arranque que le he hecho hacer, con el que también deseará arrancar la nueva partición. Esto se hace usando el comando rdev: introduzca el disquete y escriba ``rdev /dev/fd0 /dev/hde1''. Por supuesto, esto es suponiendo que su partición raíz es la primera de su primer dispositivo UDMA. Si no es así (por ejemplo, en mi caso es /dev/hde7), entonces use el número de partición apropiado.

Vuelva a arrancar. Su sistema tendría que funcionar correctamente.

Aplicando el parche para la Promise

El núcleo 2.0.35 y superior soporta de forma nativa la Promise Ultra33; obtenga y actualícese desde su distribución Linux o desde http://www.kernel.org.

Para instrucciones sobre cómo compilar el núcleo, lea el Kernel-COMO.

Usando dos tarjetas Ultra33 en el mismo ordenador

Esto actualmente no funciona correctamente... no lo haga por ahora a menos que esté deseoso de modificar el núcleo para hacer que las cosas funcionen.

5.2 Artop ATP850UF

Esta tarjeta está soportada por el udma-generic. La instalación de Linux en un sistema con esta tarjeta como interfaz para el disco destino debería ser similar al proceso para con la Promise Ultra33.

5.3 Añadiendo ficheros de dispositivo

Las interfaces IDE terciario y cuaternario (ide2 e ide3) usan ficheros de dispositivo entre el /dev/hde* y el /dev/hdh*. En núcleos antiguos estos dispositivos no eran creados automáticamente, por lo que podría ser necesario añadirlos de forma manual para que las cosas funcionen correctamente.

Esto se puede hacer fácilmente si tiene actualmente una copia instalada de los fuentes del núcleo; simplemente ejecute /usr/src/linux/scripts/MAKEDEV.ide y se crearán los ficheros de dispositivo relevantes.

6. Interfaces UDMA en placa

Estas son interfaces de dispositivo con capacidades UDMA incluidos dentro de la placa madre. Utilizan los puertos de E/S estándares para IDE y por ello son perfectamente operativos a velocidades lentas no-UDMA en núcleos 2.0.x sin parchear, como los que se usan para instalar Linux. Por ello, no deberían causar ningún problema durante la instalación, y parchearlos para obtener la velocidad del UDMA es un lujo bien recibido en vez de una necesidad.

6.1 Intel FX, HX, VX, TX, y LX

Gracias otra vez a Gadi por esta información:

El soporte para el DMA bus mastering en el chipset Intel TX está
disponible en el 2.0.31 y superior.

En viejos núcleos (como el 2.0.30 de la Slackware 3.4), la interfaz será usada en el modo EIDE lento. En ambos casos, será automáticamente detectado por el núcleo y no tendrá ningún problema para usarlo.

El soporte para usar el UDMA completo con estos chipsets se incluye en el parche udma-generic; vea UDMA-Generic.

6.2 El VIA VP2 y Chipsets relacionados

Esta interfaz puede ser autodetectada y usada en modo EIDE por un núcleo sin parchear pero, si tiene uno de estos, querrá usar un parche para que pueda obtener mayores tasas de transferencia y dejar en la cuneta esos molestos mensajes "unknown PCI device" (dispositivo PCI desconocido).

Uno de ellos se puede obtener en http://www.ipass.net/~prefect/; está diseñado para el chipset VIA VP2/97, que puede encontrarse en las placas madres de FIC modelos PA-2007 y PA-2011, pero puede funcionar en chipsets relacionados. Se ha informado que funciona con el chipset más moderno VIA VP3.

Nótese que este es un parche que sólo soporta el modo Bus Mastering, no el modo UDMA completo, pero todavía es mejor que el modo EIDE normal. Siga las instrucciones en el sitio Web del parche para activar el modo BMDMA.

Hay otro parche que soporta el modo UDMA completo en http://www.pyreneesweb.com/Udma/udma.html, diseñado para el VIA VT82C586B y que debe funcionar para los chipsets VP2, VP3, VPX, P6 y AGP Apollo. Siga las instrucciones para la instalación y activación del modo UDMA, aunque es recomendable que haga una copia de seguridad de todos los datos que desee guardar, ya que hay problemas potenciales con placas madres incompatibles. Pero, si funciona, lo hará sin problemas.

Nótese que el chipset VP1 no funciona con estos parches, aunque está soportado por el parche UDMA-Generic.

6.3 TX Pro y otras placas ``Pro''

Actualmente el UDMA no está soportado para las placas madre TX Pro. Son diferentes a las TX mobo, y aparentemente no informan correctamente de sus capacidades de DMA, lo cual causa el problema. He oído que alguien está trabajando en ello, por lo que podría aparecer un parche en el futuro.

7. UDMA-Generic (UDMA genérico)

El parche UDMA-Generic modificado por André Balsa, Andre Hedrick y Michel Aubry a partir del driver de DMA de la Triton de Mark Lord, da soporte UDMA a los siguientes chipsets (en su versión 0.3):

Se ha diseñado para que sea fácilmente extensible para el soporte de otros chipsets.

Udma-generic, también conocido como el Gran Parche Unificado de UDMA (GUUP - Grand Unified UDMA Patch) se ha incluido en el parche Jumbo, el cual incluye otras características útiles como la detección automática de memoria por encima de los 64 MB y la detección de la velocidad de reloj de la CPU. Puede obtener el parche Jumbo para el núcleo 2.0.35 en http://www.altern.org/andrebalsa/linux/. Este parche también puede aplicarse contra el 2.0.36pre1 y posiblemente contra los siguientes.

Aquí hay algunas notas del autor:

Las prestaciones con dispositivos UDMA de IBM en una buena placa madre se
acercan a las máximas tasas de transferencia: aproximadamente 10 MB/s
(medido con hdparm -t -T).

El chipset Intel TX tiene una única FIFO para disco duro compartida entre
sus dos interfaces IDE, por lo que usar 2 dispositivos UDMA no
significará una gran mejora respecto a usar uno solo.
Por contra, el SiS5598 tiene dos interfaces completamente separados, cada
uno con su propia FIFO. Teóricamente, se pueden llegar a los 66MB/s de
tasa de transferencia en placas madre con el chip SiS5598, usando el
controlador md  y `data stripping' en los dos discos. El SiS5571 tiene la
misma arquitectura de interfaz, creo. No tengo los caminos de datos de
los chipsets VIA, por lo que no puedo decir nada al respecto.

El controlador de núcleo IDE (U)DMA de Linux por Mark Lord tiene un
tiempo de configuración muy pequeño (latencia para las transferencias de
datos). Es ideal para las transferencias frecuentes y de pocos datos
(como las de los servidores de noticias con Linux) y puede ser en algunos
casos superior a los correspondientes competidores SCSI.

8. Activando y desactivando el UDMA

Normalmente, el núcleo compatible con UDMA automáticamente activará este soporte para los dispositivos e interfaces que lo admitan. De todas maneras, desde el núcleo 2.1.113 se desactivan las transferencias con DMA por defecto a menos que haya configurado su núcleo específicamente para automáticamente activarlo. Esto podría parecer un error, pero algunos dispositivos e interfaces no funcionan de forma adecuada con el DMA activado; vea la Lista Negra del UDMA más adelante.

8.1 Usando los parámetros de arranque del núcleo

En núcleos 2.1.113 y en adelante, puede activar el DMA para ambos dispositivos de una interfaz IDE usando el parámetro del núcleo ideX=dma, donde X es el número de la interfaz (el primero es el 0).

Los parámetros de arranque del núcleo pueden activarse mediante LILO, LOADLIN o desde la mayoría de los programas de arranque de Linux. Para más información vea el Bootdisk HOWTO.

8.2 Usando hdparm

hdparm es un programa usado para modificar los parámetros de los discos duros en Linux. Entre otras cosas puede usarlo para activar o desactivar el UDMA para un dispositivo y comprobar su tasa de transferencia sostenida.

La mayoría de las distribuciones de Linux incluyen hdparm, pero necesitará aplicar un parche para incluir el soporte UDMA. Puede obtener hdparm de ftp://sunsite.unc.edu/pub/Linux/system/hardware/hdparm-3.3.tar.gz y el parche de http://pobox.com/~brion/linux/hdparm-3.3-udma.patch.gz.

Compile e instale de esta manera:

cd /usr/src
tar zxvf /tmp/download/hdparm-3.3.tar.gz
cd hdparm-3.3
gzip -cd /tmp/download/hdparm-3.3-udma.patch.gz | patch -p0
make
if [ -f /sbin/hdparm ]; then rm -f /sbin/hdparm ; fi
make install
cp /usr/local/sbin/hdparm /sbin/hdparm

Para activar el UDMA para un disco duro: hdparm -d1 /dev/hda

Para desactivar el UDMA de un disco duro: hdparm -d0 /dev/hda

Para medir la tasa de transferencia de un disco: hdparm -Tt /dev/hda

Para ver qué opciones están activadas para un disco: hdparm /dev/hda

Para ver más información de su disco: hdparm -i /dev/hda

Para información más detallada lea la página de manual (``man 8 hdparm'').

9. Problemas

9.1 La Lista Negra del UDMA

Los siguientes dispositivos están en la ``lista negra''. No debe usar el UDMA con ellos, ya que podría causar corrupción en los datos.

La parte de UDMA en el parche Jumbo-2.0.35-9 deshabilita automáticamente el DMA para este dispositivo.

9.2 ¿Va usted demasiado deprisa?

Si lo está haciendo, ¡cuidado! Aquí tiene un trozo de la documentación de udma-generic:

NO SE PASE EN LA VELOCIDAD DE RELOJ del bus PCI. 37'5MHz es la velocidad
máxima soportada por el bus PCI. Algunos (supuestamente compatibles)
dispositivos UDMA nunca alcanzarán los 37'5MHz, pero estará correcto a
33'3MHz.

En cualquier caso, NUNCA, NUNCA ponga el bus PCI a 41'5MHz.

La configuración RECOMENDADA para su seguridad es 33MHz.

9.3 ¿Su BIOS está actualizada?

Aquí tiene otro trozo de los documentos de udma-generic:

El trabajo real que involucra el configurar los chips para las
transferencias de DMA se realiza en su mayor parte por la BIOS de cada
placa madre. Por supuesto, uno espera que la BIOS haya sido programada
correctamente...

Por ejemplo, las placas madres ASUS SP-97v con su BIOS original (Rev.
1.03) no funcionarían correctamente con el controlador modificado de Linux,
ni en el modo DMA 2 ni en los modos UDMA; funcionaría correctamente
usando el modo PIO 4 o bajo Windows 95 en cualquier modo. Obtuve la
última imagen de la BIOS (Rev. 1.06) de la Web de ASUS y la copié en la
EPROM de mi BIOS. Ha funcionado perfectamente desde entonces (a
velocidades de bus de 66MHz).

Lo que esto nos dice es que la BIOS configura el controlador de DMA con
parámetros de temporización específicos (ciclos de `active pulse' y
`recovery clock'). Mi revisión inicial de BIOS probablemente tenía mal
esos tiempos. Dado que el controlador de Windows 95 modifica estos
tiempos por sí mismo (no depende de la BIOS el configurar los parámetros
de temporización del controlador de disco), solo tenía problemas
inicialmente con el controlador de Linux, mientras que en Windows 95
funcionaba bien.

Por eso, deje que lo vuelva a repetir: este controlador de (U)DMA para
Linux depende de la BIOS para una correcta configuración. Si tiene problemas,
primero compruebe que tiene la última revisión de la BIOS para su placa madre.

[...]

Las nuevas revisiones de las BIOS pueden obtenerse desde el sitio Web del
fabricante de su placa madre. Escribir la nueva imagen de la BIOS es una
operación simple pero en la que uno debe seguir estrictamente los pasos
explicados en el manual de la placa.

Las últimas revisiones de las BIOS Award parecen ser estables con el
UDMA. Cualquiera con fecha de 1998 sería correcta.

9.4 ¡Si todavía no puede hacer que funcione!

Si nada de este documento parece ayudarle, o al menos no es suficiente para hacer que su máquina funcione, su mejor apuesta consiste en escribir un mensaje que describa sus dificultades exactamente, de qué tipo de interfaz UDMA dispone, si está en la placa o es una tarjeta externa, si su disco actual es UDMA o sólo EIDE, exactamente qué configuración de dispositivos tiene, que versión (distribución y versión del núcleo a ser posible) de Linux está usando, y mándelo al grupo de noticias comp.os.linux.hardware. Probablemente obtendrá una ayuda pronto.

10. Si tiene alguna información sobre UDMA que no aparezca en estedocumento...

¡ Perfecto ! Si sabe algo que yo no sé, enviémelo ( brion@pobox.com): lo añadiré y actualizaré pronto este documento.