The Linux Ultra-DMA Mini-Howto

Brion Vibber, brion@pobox.com

v2.1, 27 Maggio 1999


Questo documento è concepito per spiegare come usare i dischi e le interfacce Ultra-DMA alias Ultra-ATA alias Ultra33 e Ultra66 con Linux. La versione più recente di questo mini howto si può prelevare, in formato HTML, su http://pobox.com/~brion/linux/Ultra-DMA.html.

1. Introduzione

Questo documento è concepito per spiegare come usare i dischi e le interfacce Ultra-DMA alias Ultra-ATA alias Ultra33 e Ultra66 con Linux. In molti casi il loro utilizzo non presenta difficoltà, ma dei piccoli accorgimenti possono aumentare le prestazioni. In altri casi, avete bisogno di scavalcare ostacoli straordinari semplicemente per accedere ai vostri dischi rigidi.

1.1 Liberatoria

L'informazione in questo documento è al meglio della mia conoscenza, è corretta e dovrebbe funzionare. Tuttavia potrebbero esserci errori tipografici, potrebbero esserci misteriosi errori di trasmissione, potrebbero esserci strane incompatibilità nel vostro sistema che ostacoleranno le tecniche descritte qui e non le faranno funzionare correttamente. Perciò, prima di gingillarvi con il vostro disco rigido FATE UNA COPIA DI BACKUP DEI DATI CHE VOLETE CONSERVARE! Se non avete ancora fatto dei backup regolarmente, iniziate subito a farli per il vostro bene.

1.2 Crediti

Michel Aubry - Patch per abilitare l'UDMA per i chipset correlati ai VIA per i kernel <=2.0.33 & altre informazioni, grand unified UDMA patch per 2.0.34+

Andrew Balsa - Fornito molte informazioni sull'UDMA in generale e sulla patch Udma-generic per Intel TX, SiS, e VP1 sui kernel <=2.0.33; e anche sulla grand unified UDMA patch per i kernel 2.0.34+

Maxime Baudin - Traduzione in francese

Bokonon - "Controller" vs. "interfaccia"

John G. - Patch per il chipset VIA VP2 per i kernel <=2.0.33 & informazioni

Martin Gaitan - Rimedio per l'installazione sulla ide0/ide1 della Promise Ultra33

Andre M. Hedrick - Grand unified UDMA patch per i kernel 2.0.34+, Artop ATP850UF

Norman Jacobowitz - (Bugged me) per aggiungere informazioni sulla VP3

John Levon - Informazioni sulle schede madri TX Pro

Peter Monta - Informazioni sull'utilizzo di due schede per l'Ultra33

Masayoshi Nakano - Traduzione in giapponese

Gadi Oxman - La patch per la Promise Ultra33 per i kernel <=2.0.34 & scoperta dei "numeri segreti" per il rimedio.

Andy Pearce - Proposte informazioni aggiuntive sui file di dispositivo supplementari per hde-h

Andrei Pitis - Patch per LILO

Brion Vibber - Il documento stesso

1.3 Storia del documento

v2.1, 27 Maggio 1999: Corrette alcune lacune ed errori minori della 2.0 e aggiunto le informazioni sulla Promise Ultra66 e sui kernel 2.2/2.3.

v2.0, 7 Agosto 1998: Aggiornamenti più importanti e quasi totale ristrutturazione del documento per quanto riguarda le interfacce a bordo (schede madri) e le interfacce non a bordo (schede aggiuntive); la Grand Unified UDMA patch (una parte della Patch Jumbo) per il kernel 2.0.35. Inseriti i crediti in ordine alfabetico a partire dall'ultimo nome. Sostituito "controller" con "interfaccia" dove sembrava tecnicamente più corretto. Aggiunte informazioni su come abilitare/disabilitare l'UDMA, la lista nera e altro!

v1.45, 6 Luglio 1998: Aggiornamenti minori - Patch per la Promise Ultra33 per la Red Hat 5.1 e il kernel 2.0.34, patch per LILO per avviare dalle interfacce PCI come la Promise Ultra33

v1.41, 3 Maggio 1998: Sistemati un paio di errori tipografici, aggiunti i traduttori tra i crediti.

v1.4, 28 Aprile 1998: Patch UDMA-Generic, altre informazioni più generali. Aggiunta la sezione sui diritti di riproduzione.

v1.3, 5 Marzo 1998: Informazioni sui VIA VP3, migliori istruzioni su come applicare la patch, suggerimento sulla più recente patch per la Promise.

v1.2, 27 Gennaio 1998: Informazioni aggiuntive sul rimedio per la Promise.

v1.1, 21 Gennaio 1998: Nuove informazioni sui chipset VIA, installare con la Promise Ultra33, e abilitare i modi di trasferimento Bus Master & UDMA.

v1.0, 19 Gennaio 1998: Più o meno completa, è la prima versione fatta in SGML.

1.4 Diritti di riproduzione

Questo documento può essere liberamente copiato e distribuito a scopo informativo. Non può essere modificato, tranne che per essere riformattato, senza il permesso dell'autore. Se volete tradurre questo documento in un'altra lingua, potete farlo, tuttavia dovete contattare prima l'autore, cosicché le versioni aggiornate di questo documento possano essere inviate immediatamente sia al traduttore sia al Linux Documentation Project.

2. Cos'è l'Ultra-DMA e perché dovrei volerlo?

Segue una breve panoramica sui dischi basati sulle tecnologie IDE:

2.1 IDE, EIDE & ATAPI

Queste sono vecchie tecnologie per i dischi. Molti dischi rigidi e interfacce per i dischi non SCSI che potete comprare oggi o che probabilmente state usando sono EIDE, benché molti dei dischi più grandi ora disponibili siano UDMA.

2.2 Bus Master DMA

Il Bus Master DMA è una tecnologia per aumentare la velocità di trasferimento dei dati dei dischi rigidi che richiede il supporto della scheda madre e del BIOS, e almeno qualche supporto dal disco. Potete imparare di più su http://developer.intel.com/design/pcisets/busmastr/FAQs.htm.

2.3 Ultra-DMA alias Ultra-ATA alias Ultra33 alias...

L'Ultra-DMA ha molti nomi, ma qui lo chiameremo solo UDMA.

UDMA è la tecnologia più avanzata che fornisce un volume di traffico fino a 33.3 MB/s nell'UDMA mode 2 e fino a 66.7 MB/s nell'UDMA mode 4, da due a quattro volte maggiore rispetto l'EIDE, a un prezzo molto più basso di quello dello SCSI. Molti nuovi computer funzionano con grandi dischi UDMA e con interfacce UDMA, ed è possibile aggiungere una scheda per l'interfaccia (come la Promise Ultra 33 o Ultra 66) ad un sistema esistente per aumentare la velocità anche dei vecchi dischi non UDMA. Potete apprendere maggiori dettagli sull'UDMA su http://www.quantum.com/src/whitepapers/ultraata/. Notate che la lunghezza del cavo deve essere tenuta più corta per l'UDMA, rispetto al DMA semplice, preferibilmente meno di 30 cm (12") di lunghezza massima. 66 MB/s richiedono un cavo speciale che deve essere tenuto anche più corto.

2.4 Perché è sempre "Ultra"

Prima di proseguire, lasciatemi chiarire un malinteso. Quello che 33 o 66 MB/s rappresentano è il picco di velocità di trasferimento, e non è qualcosa che vedrete molto spesso. Per spiegarlo, riporto un estratto dall'UDMA.txt, preso dall'UDMA-generic (la prima patch sull'UDMA n.d.t.):

 
I picchi di velocità di trasferimento istantanei sono supposti
andare da 16.6MB/s (PIO mode 4) a 16.6MB/s (DMA mode 2) fino a 33MB/s
(UDMA).  Nella sua patch al kernel 2.1.55, Kim-Hoe Pang attualmente
controlla il picco di velocità di trasferimento per l'UDMA con
un analizzatore logico: 60ns/parola, che trasferisce fino a 33MB/s.
Notate che il picco di velocità di trasferimento riguarda solo
il trasferimento dei dati dalla cache del disco EIDE (476kB per il
disco IBM da 6.4GB ), ed IMHO (In inglese "In My Humble
Opinion", "Secondo il mio modesto parere" n.d.t.) non
è particolarmente rilevante per la maggioranza degli utenti
Linux.  Il kernel di Linux tiene nella RAM una cache degli accessi al
disco più grande possibile, quindi se un dato non è
nella cache del kernel c'è una piccola possibilità che
essa possa trovarsi nella cache (molto più piccola) del disco
rigido.

Molto più rilevante è la velocità di trasferimento sostenuta, la velocità alla quale i dati possono essere trasferiti dal disco alla memoria principale dove possono essere usati. Un modo facile per misurare la velocità di trasferimento sostenuta è di usare hdparm, per esempio "hdparm -Tt /dev/hda" per misurare la velocità del primo dispositivo IDE.

 
Seguono alcuni dati raccolti dopo test esaurienti usando l'utility
hdparm (scritti anche da Mark Lord):

velocità di trasferimento sotto Linux del PIO mode 4: +/- 5.2MB/s
velocità di trasferimento sotto Linux del DMA mode 2: +/- 7.2MB/s 
velocità di trasferimento sotto Linux dell'UDMA mode 2: +/- 9.8MB/s

Come potete vedere, l'UDMA è quasi due volte più veloce del normale EIDE ed è significativamente più veloce del normale bus mastering DMA.

2.5 Come confrontare l'UDMA con lo SCSI?

Non ho molti numeri concreti da darvi, ma vi è consenso generale sul fatto che i migliori dispositivi SCSI possano dare prestazioni migliori dell'UDMA. Tuttavia se guardate recentemente i cartellini dei prezzi su alcuni dischi rigidi potete notare che i dischi UDMA tendono ad essere molto meno costosi. Il rapporto prestazioni/prezzo favorisce l'UDMA in molti casi.

3. Usare il vostro disco rigido UDMA con un'interfaccia EIDE

Questo è facile da fare. Da quando tutti i dischi UDMA sono pienamente compatibili all'indietro, appena collegate il vostro disco rigido sulla vostra interfaccia EIDE come se fosse un qualsiasi vecchio disco rigido, Linux non dovrebbe avere problemi a rilevarlo e ad utilizzarlo.

4. Usare i vostri dischi rigidi con un'interfaccia UDMA

Bene, ci sono buone notizie e cattive notizie. La buona notizia è che l'interfaccia UDMA può essere usata sia con i dischi rigidi UDMA e con i vecchi dischi rigidi EIDE, e sarà molto più veloce di un'interfaccia EIDE.

La cattiva notizia è che la vecchia serie di kernel (2.0.x) attualmente non supporta molto bene l'UDMA. Tuttavia i nuovi kernel 2.2.x supportano l'UDMA33 e ci sono numerose patch disponibili per i kernel attualmente esistenti. Inoltre, alcune interfacce che sono incluse in schede piuttosto che incorporate nella scheda madre richiedono sia delle patch sia il ricorso ad alcune astuzie per essere utilizzate sui kernel più vecchi. Questo è il motivo per cui esiste questo documento. Per spiegare come procurarsi le patch e lavorare d'astuzia.

5. Interfacce PCI UDMA non a bordo

Ci sono delle interfacce UDMA su schede PCI che possono essere usate per aggiungere il supporto per l'UDMA a un computer esistente senza sostituire la scheda madre o per aggiungere il supporto per altri quattro dischi a una macchina che ha tutte le interfacce a bordo occupate. Può essere trovata anche preinstallata in alcuni computer, specialmente sulle macchine Gateway 2000 e Dell.

Molte di esse non erano supportate dai vecchi kernel stabili (2.0.x), ma dovrebbero funzionare con un kernel 2.2.x - le distribuzioni Red Hat 6.0 e SuSE 6.1 sono basate sui kernel 2.2.x, come lo sono le più recenti versioni di molte altre distribuzioni. Tuttavia alcune delle schede più recenti (per esempio la Promise Ultra66) potrebbero non funzionare anche con gli attuali kernel 2.2.x, se voi la avete e non potete prendere una distribuzione tra le più recenti allora dovete applicare una patch al kernel, oppure aggiornarlo ad una versione più recente. Se avete bisogno di installare Linux su un disco rigido collegato ad una di queste interfacce, in questo caso avrete bisogno di ricorrere a strani stratagemmi.

5.1 Promise Ultra33

Questa è una scheda PCI che ha su di essa due canali UDMA e supporta un totale di quattro dischi. Potete vedere descrizioni particolareggiate e prezzi su http://www.promise.com.

Questa scheda è montata a bordo nei più recenti sistemi pentium II modello Gateway 2000 e può o non può esserci in modelli più recenti.

I kernel 2.0.35 e successivi e tutti i kernel 2.2.x supportano l'Ultra33 e non dovreste avere problemi installando una distribuzione basata su questi kernel. Tuttavia i più vecchi kernel stabili (2.0.34 e precedenti) non lo supportano, e poiché molte distribuzioni più vecchie di Linux includono questi vecchi kernel si possono incontrare piccole difficoltà nell'installare Linux se non volete o non potete usare una versione più recente (per esempio se avete reso standard una particolare distribuzione all'interno della vostra organizzazione).

Installare Linux con l'Ultra33

Sebbene vi sia una patch per l'interfaccia Ultra33, non è molto semplice applicare una patch e ricompilare il vostro kernel se non avete mai installato Linux prima d'ora! Così qui c'è un rimedio che vi permette di installarlo. Grazie a Gady Oxman per le seguenti informazioni date su come impostare l'interfaccia:

Ecco un trucchetto che vi consentirà di effettuare l'installazione.

Se possiamo avere accesso alla console con il disco di installazione,
possiamo anche usare "cat /proc/pci" per visualizzare le impostazioni
dell'interfaccia Promise:

    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)

e passare "ide2=a,b+2 ide3=c,d+2" come parametri al kernel dalla riga
di comando. 

Notate che i numeri non sono gli stessi a seconda di quello che volete avere. Proprio come esempio, i parametri da usare per il set di numeri riportato sopra possono essere: "ide2=0xe000,0xd806 ide3=0xd400,0xd006". Se voi state usando solo il primo canale sull'Ultra33 (per esempio se avete un solo disco, o due che sono uno master e l'altro slave sullo stesso canale), allora non avrete bisogno di specificare ide3.

Red Hat 5.1: Fate il boot con il dischetto di avvio e premete invio al prompt quando vi viene suggerito. Verrà caricato il kernel, poi vi domanderà una lingua, il tipo di tastiera e il metodo di installazione. Forse vi verrà chiesto da quale supporto effettuare l'installazione; non ha importanza ora cosa vi chiede finché potete arrivare al passo successivo. In seguito dovreste vedere una schermata intitolata "Select Installation Path"; premete ALT+F2 per ottenere un prompt dei comandi.

Avviate "cat /proc/pci", scrivete i numeri come sopra, e riavviate dal dischetto di avvio. Ora, digitate "linux ide2= (questo quando date i numeri come mostrato sopra) ide3=(altri numeri) ".

Dovreste ora essere in grado di installarlo sul vostro disco rigido senza difficoltà, tuttavia non sarà probabilmente possibile installare LILO; in alternativa preparate un floppy d'avvio e avviatelo con gli stessi parametri fino a quando potrete mettere una patch a LILO e al kernel.

Red Hat 5.0 e Slackware 3.4: Queste sono simili, ma con il trucco che il programma d'installazione ignora /dev/hde-h (i dischi sulla ide2 e sulla ide3).

Allo scopo di installarlo su o da uno di questi dischi è necessario non tenere conto di uno o di entrambi i canali delle interfacce a bordo. Tuttavia controllate di non aver tenuto conto di un dispositivo di cui avete bisogno per installare; per esempio se state installando da un lettore CD-ROM su /dev/hdd (ide1 - interfaccia a bordo) su un disco rigido su /dev/hde (ide2 - l'Ultra33), dovrete non tener conto della non necessaria ide0 con la ide2 e lasciare intatta la ide1. Supponendo i numeri sopra potreste voler avviare con "ide0=0xe000,0xd806". Red Hat 5.0 vi darà un prompt della shell se usate la possibilità del disco di rescue, e la Slackware include una shell nel regolare processo di installazione. Tuttavia Red Hat 5.0 è difficile da riavviare dopo l'installazione; se avete problemi, potete provare scaricando un disco di avvio per la Slackware da ftp://ftp.cdrom.com/pub/linux/slackware-3.5/bootdsks.144/ e usarlo per fare il boot.

Con altre distribuzioni, avrete un po' da improvvisare ma il processo dovrebbe essere lo stesso come sopra.

IMPORTANTE: Senza la patch (discussa nella sezione UDMA-Generic), il kernel necessita di questi parametri di boot per accedere al vostro disco rigido! Inoltre è molto importante che quando configurate LILO sia sul disco rigido che sul floppy d'avvio, diate esattamente gli stessi parametri che avete dato mentre stavate installando. Altrimenti il vostro sistema non si avvierà! Sarebbe possibile darli a LILO quando avviate (cioè, premere Shift, digitare in "linux ide2=....." ogni volta che avviate), ma solo se avete conservato i numeri! Si raccomanda di applicare la patch al kernel il più presto possibile così non avrete più da preoccuparvi; una volta che state avviando con il kernel "rattoppato" potrete sbarazzarvi dei parametri di boot. Inoltre, per quel che mi consta non c'è modo di far passare i parametri di boot ad un normale floppy di boot (fatto con "make zdisk"), dovete usare LILO o un altro loader (come LOADLIN) che vi permetta di passare i parametri di boot.

Tuttavia, i kernel "non rattoppati" ed i programmi di installazione attualmente hanno spesso delle difficoltà usando la ide2 e la ide3, anche se i dischi vengono correttamente rilevati. Così se non potete prendere Linux per installarlo usando le tecniche descritte sopra, provate a specificare ide0 o ide1, anziché ide2 o ide3 (grazie a Martin Gaitan per questa tecnica).

Questo essenzialmente sostituisce l'interfaccia a bordo con la Promise Ultra33 per quel che riguarda il kernel e potete seguire le istruzioni della prossima sezione come se vi foste fisicamente spostati li.

Notate che, se state usando un lettore CD-ROM IDE connesso alla vostra interfaccia a bordo per l'installazione, vi dovrete assicurare di non interferire con l'interfaccia collegata al CD altrimenti l'installazione non potrebbe andare a buon fine!

Se il CD è hda o hdb, usate ide1 per il vostro disco rigido e se esso è hdc o hdd allora usate ide0.

Installare Linux con l'Ultra33

Se non riuscite a far funzionare il rimedio software potete provare un approccio molto più brutale! Qui c'è un metodo alternativo di cui è virtualmente garantito il funzionamento, ma richiede che voi apriate il vostro computer e che vi diate da fare in esso. NB: se non avete familiarità con i processi di connessione dei dischi IDE, leggete i manuali che vi sono stati dati con il computer, con il vostro disco rigido e/o con la vostra Promise Ultra33 prima di provare a fare questo! Se scollegate qualcosa e non sapete più come rimetterlo a posto, sono spiacente ma potreste aver finito! Quanto detto è tutto realmente proprio semplice. Molte schede madri oggi hanno un'interfaccia EIDE incorporata. Disconnettete il vostro disco rigido dalla Ultra33 e connettetelo all'interfaccia a bordo. Se avete altri dispositivi IDE quali CD Rom, unità a nastro o disco Zip, sulla vostra interfaccia a bordo, è più semplice se aggiungete il disco rigido su un canale non usato (il secondario invece che il primario) o temporaneamente spostate un dispositivo di cui non avete bisogno immediatamente (come uno Zip o un'unità a nastro). Installate Linux. Scaricate e applicate la patch per la Promise Udma. (Vedere la prossima sezione).

Ora siete pronti per riportare indietro il disco sulla Promise... quasi. Per essere sicuri, fate un'immagine di boot del kernel su un floppy. (cd /usr/src/linux ; make zdisk), che sarà in grado di riavviare il vostro sistema. Eventualmente, per essere veramente sicuri, fatene due e per ora mettetene via uno. Okay, ora è il tempo di pensare un poco... se avete solo un disco rigido e esso sta funzionando sulla Promise Ultra33, allora è più probabile che esso sia /dev/hde (a e b sono per le interfacce a bordo primarie, c e d per le interfacce a bordo secondarie). Se state mettendo su essa un altro disco allora lo slave del primo canale sarà /dev/hdf, il master del secondo canale sarà /dev/hdg, e lo slave del secondo sarà /dev/hdh.

Modificate /etc/fstab, e cambiate tutte le partizioni dei dischi rigidi che state spostando dai "dischi" a bordo (/dev/hda, hdb, etc) alle loro posizioni sulla Promise (/dev/hde, hdf, etc). Se avete da disporre un qualsiasi dispositivo (come un CD Rom o un disco Zip) che volete lasciare sull'interfaccia a bordo, allora cambiateli pure alla loro nuova posizione. Per esempio, se il vostro CD Rom originariamente era master sul canale primario, (/dev/hda), ma mettete li il vostro disco rigido e avete soppiantato il CD come slave (/dev/hdb) o sul canale secondario (/dev/hdc), e ora volete rimetterlo indietro dov'era, allora cambiatelo in /dev/hda. Se state usando LILO, riconfigurate LILO per usare la nuova posizione del disco (la configurazione di LILO è al di fuori dello scopo di questo documento, se non sapete come fare leggete il LILO mini-HOWTO), altrimenti probabilmente non sarà in grado di avviarsi a meno che non usiate il floppy di avvio che avete fatto, che vorrete anche configurare per fare il boot dalla nuova partizione.

Tutto ciò viene fatto usando il comando rdev. Inserite il floppy nel drive e digitate "rdev /dev/fd0 /dev/hde1". Naturalmente si assume che la vostra partizione di root sia la prima sul primo disco UDMA. Se no (per esempio la mia è /dev/hde7), allora usate l'appropriato numero di partizione. Riavviate. Il vostro sistema ora dovrebbe funzionare bene.

Applicare le patch per l'Ultra33

I kernel 2.0.35 e successivi supportano la Promise Ultra33 in maniera nativa, scaricate un aggiornamento dalla vostra distribuzione Linux o da http://www.kernel.org. Per le istruzioni su come compilare il kernel, leggete il Kernel HOWTO.

Usare 2 schede Ultra33 in una macchina

Attualmente queste non funzionano bene, non fatelo subito, a meno che non vi stiate gingillando con il kernel per cercare di fare qualcosa per farle funzionare.

5.2 Promise Ultra66

Questa è essenzialmente uguale alla Ultra33 con il supporto per il nuovo UDMA mode 4 con velocità di trasferimento di 66 Mb/sec. Sfortunatamente essa non è ancora supportata dai kernel 2.2.x. C'è una patch per i kernel 2.0.x e 2.2.x disponibile su http://www.dyer.vanderbilt.edu/server/udma/, e il supporto è incluso nella serie di kernel 2.3.x in via di sviluppo, almeno dal 2.3.3. Tuttavia per arrivare ad applicare patch o aggiornare il kernel avrete da tirare i medesimi sporchi trucchi come per l'Ultra33 nella sezione sopra.

5.3 Artop ATP850UF

Questa scheda è supportata dall'Udma generic. L'installazione di Linux su un sistema con una di queste come interfaccia per il disco su cui effettuare l'installazione può essere simile al metodo usato per la Promise Ultra33.

5.4 Aggiungere file di dispositivo

Le interfacce IDE terziarie e quaternarie (ide2 e ide3) usano file di dispositivo della forma /dev/hde* sino a /dev/hdh*. Sui vecchi kernel questi dispositivi non erano creati automaticamente, così avevate bisogno di aggiungerli manualmente per far sì che funzionassero correttamente. Questo può essere facilmente fatto se avete installato una copia aggiornata dei sorgenti del kernel di Linux, semplicemente avviate /usr/src/linux/scripts/MAKEDEV.ide che creerà tutti i file di dispositivo importanti.

6. Interfacce UDMA a bordo.

Queste sono delle interfacce per dischi UDMA compatibili, installate nella scheda madre. Usano le porte IDE I/O standard e perciò sono interamente utilizzate alle velocità più basse non-UDMA su un kernel 2.0.x al quale non siano state applicate patch, come si è fatto quando si è installato Linux. Così potrebbero non causare alcune difficoltà durante l'installazione e applicare delle patch per la velocità UDMA è un lusso bene accetto, anziché un passo necessario. Qualche supporto UDMA è negli ultimi kernel 2.0.x, credo, ed è incluso negli attuali kernel 2.2.x per i chipset Intel.

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

Grazie ancora a Gadi per questa informazione:

Il supporto per il bus mastering DMA per il chipset Intel TX è
disponibile dal 2.0.31 e superiori.

Nei kernel più vecchi, (come ad esempio il 2.0.30 della Slackware 3.4) l'interfaccia sarà usata nella più lenta modalità EIDE. In entrambi i casi l'interfaccia sarà rilevata automaticamente dal kernel e non dovreste avere problemi usandola. Il pieno supporto UDMA per questi chipset è incluso nella patch UDMA-generic, vedere UDMA-Generic.

6.2 Il VIA VP2 e i chipset con esso compatibili

Anche questa interfaccia può essere rilevata automaticamente in modalità EIDE dal kernel senza patch, ma se avete una di queste, vorrete sicuramente applicare una patch così potrete ottenere un volume di traffico più veloce ed eliminare gli irritanti messaggi "dispositivo PCI sconosciuto". Una è disponibile su http://www.ipass.net/~prefect/; essa è progettata per il chipset VIA VP2/97, inserito sulle schede madri FIC's PA-2007 e PA-2011, ma potrebbe lavorare su chipset compatibili. È stato riferito che esso funziona sul più nuovo chipset VIA VP3, ma il comportamento potrebbe essere differente. Notate che questa patch supporta solo il modo Bus mastering non il pieno modo UDMA, ma è sempre meglio del tranquillissimo modo EIDE. Seguite le istruzioni sul sito della patch per abilitare il modo BMDMA. C'è un'altra patch che supporta il pieno modo UDMA su http://www.pyreneesweb.com/Udma/udma.html, disegnata per la VIA VT82C586B, ed essa dovrebbe funzionare sui chipset VP2, VP3, VPX, P6 e AGP Apollo. Seguono le istruzioni per l'installazione e per abilitare li l'UDMA, ma si raccomanda che facciate un backup di tutti i dati che volete conservare, e ci sono problemi potenziali con le schede madri incompatibili. Ma se esse funzioneranno, potrebbero funzionare senza problemi. Notate che il chipset VP1 non è in grado di funzionare con queste patch, ma è supportato dalla patch UDMA-Generic.

6.3 TX Pro e altre schede 'Pro'

L'UDMA non è attualmente supportato per schede madri TX Pro. Esse non sono uguali alle schede madri TX, e apparentemente riferiscono erratamente le loro capacità di DMA, da qui il problema. Ho sentito che qualcuno sta lavorando su questo problema, così tra qualche tempo apparirà una patch, ma non subito.

7. UDMA-Generic

La patch UDMA generic, modificata da André Balsa, Andre Hedrick, e Michel Aubry dal driver originale di Mark Lord per la TRITON DMA, fornisce il supporto UDMA per i seguenti chipset (dalla versione 0.3)

Essa è anche concepita perché sia facile estendere il supporto per altri chipset.

L'Udma-generic, conosciuta anche come la Grand Unified UDMA Patch (GUUP - pronunciata "goop"), è stata inclusa nella patch Jumbo che include altre caratteristiche utili quali la rilevazione automatica della memoria oltre i 64 Mb e la rilevazione della velocità del clock della CPU. Sfortunatamente questa patch è scomparsa e non sono completamente sicuro di dove trovare questa patch ora, così invece uno potrebbe andare su http://www.dyer.vanderbilt.edu/server/udma/ dove si può trovare una patch per l'IDE/UDMA per gli attuali kernel 2.0.x e 2.2.x, che ora include il supporto per i chipset HPT343 e ALi15x3. Qui vi sono alcune note dell'autore:

 
Le prestazioni con i dischi IBM UDMA su una buona scheda madre si
avvicinano alla massima velocità di trasferimento: circa 10
Mb/s (misurata con hdparm -t -T).
Il chipset Intel TX ha una FIFO singola per i dati dei dischi rigidi
ripartita tra le sue due interfacce IDE, così usando due dischi
UDMA non si hanno grossi miglioramenti rispetto ad un singolo
disco. Tuttavia, il SiS5598 ha due interfacce separate, ognuna con la
sua propria FIFO. Teoricamente, si potrebbe raggiungere la
velocità di trasferimento di picco di 66Mb/s sulle schede madri
con il chip SiS5598 usando il driver md ed il data striping sui due
dischi. Il SiS5571 ha la stessa architettura d'interfaccia, credo. Non
ho i datasheet (le specifiche tecniche - n.d.t.) per i chipset VIA,
così non posso dire niente su questi.
Il driver per il kernel Linux IDE (U)DMA di Mark Lord è
particolarmente veloce da installare (cioè ritardo per il
trasferimento dei dati). Questo è l'ideale per piccoli
trasferimenti di dati (come quelli in un server delle news per Linux),
è può essere in alcuni casi superiore alla sua
controparte SCSI.  

8. Attivare e disattivare l'UDMA

Normalmente un kernel UDMA-consapevole abiliterà automaticamente il supporto per l'UDMA per i dischi e le interfacce che lo supportano. Tuttavia a partire dal kernel 2.1.113 i trasferimenti dal disco in UDMA sono disabilitati come predefinizione, a meno che non abbiate specificatamente configurato il kernel per rilevarlo automaticamente. Questo può sembrare un inconveniente, ma molti dischi e molte interfacce non funzionano correttamente con il DMA attivato; vedere la lista nera per l'UDMA sotto.

8.1 Usare i parametri di boot per il kernel

Sui kernel 2.1.113 e superiori, potete abilitare il DMA per entrambi i dischi sull'interfaccia IDE data usando il parametro del kernel ideX=dma, dove X è il numero dell'interfaccia (la prima è 0). I parametri di boot del kernel possono essere impostati usando LILO, LOADLIN, o molti altri boot loader per Linux. Per ulteriori informazioni vedere il Bootdisk HOWTO.

8.2 Usare hdparm

hdparm è il programma usato per aggiustare i parametri dei dischi rigidi sotto Linux.

Tra le altre cose potete usarlo per abilitare o disabilitare l'UDMA per un disco e testare la sua velocità di trasferimento sostenuta.

La versione corrente di hdparm, 3.5i mentre sto scrivendo, è disponibile su http://www.dyer.vanderbilt.edu/server/udma/.

Compilatelo e installatelo con qualcosa di simile:

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

Per abilitare il DMA per un disco rigido: hdparm -d1 /dev/hda

Per disabilitare il DMA per un disco rigido: hdparm -d0 /dev/hda

Per misurare la velocità di trasferimento di un disco rigido: hdparm -Tt /dev/hda

Per vedere quali opzioni sono abilitate per un disco rigido: hdparm /dev/hda

Per vedere più informazioni sul vostro disco rigido di quelle che volevate sapere: hdparm -i /dev/hda

Per informazioni più dettagliate (come per esempio per scegliere quale modo UDMA usare) leggete la pagina man ("man 8 hdparm").

9. Problemi

9.1 La lista nera per l'UDMA

I seguenti dischi sono sulla lista nera. Non potrete usare l'UDMA con questi dischi poiché forse potrebbe danneggiare i dati.

La porzione UDMA della patch Jumbo-2.0.35-9 disabiliterà automaticamente il DMA per questo disco.

9.2 Avete overcloccato?

Se l'avete fatto, state attenti! Segue una citazione dalla documentazione per l'Udma-generic:


NON OVERCLOCCATE il bus PCI. 37.5MHz è la velocità
massima supportata dal bus PCI. Alcuni (supposti compatibili) dischi
UDMA non dovranno mai essere portati a 37.5MHz, ma potrebbero essere
OK a 33.3MHz. In ogni caso, MAI, MAI impostare il bus PCI a 41.5MHz.
L'impostazione di sicurezza RACCOMANDATA è di 33MHz.

9.3 Il vostro BIOS è aggiornato?

Segue un altro estratto dalla documentazione dell'udma-generic:

 

Il vero lavoro implicava che l'impostazione del chip per il
trasferimento DMA venisse fatta principalmente dal BIOS di ogni scheda
madre. Ora, invece si spera che il BIOS sia stato correttamente
programmato...
Per esempio, la scheda madre ASUS SP-97V con il suo BIOS originale
(Rev. 1.03) poteva funzionare male con il driver Linux modificato in
entrambi i modi UDMA e UDMA2; avrebbe lavorato meglio usando il PIO
mode 4, o sotto windows 95 in tutti i modi. Ho scaricato l'ultima
immagine del BIOS (Rev. 1.06) dal sito web della ASUS ed ho aggiornato
il BIOS EPROM con l'ultima versione del BIOS. Da allora in poi ha
funzionato perfettamente (con la velocità del bus a 66 MHz).
Ciò che questo ci dice è che il BIOS imposta il
controller DMA con dei specifici parametri di sincronizzazione
(impulsi attivi e ritorno dei cicli del clock). La mia revisione del
BIOS iniziale probabilmente aveva una scorretta sincronizzazione. Da
quando il driver per windows 95 ha impostato queste sincronizzazioni
da solo (cioè esso non dipende dal BIOS per impostare i
parametri di sincronizzazione del controller del disco rigido)
inizialmente ho avuto dei problemi solo con il driver per Linux,
mentre windows 95 funzionava bene. Così lasciatemi dichiarare
ancora questo: questo driver UDMA per Linux dipende dal BIOS per una
corretta impostazione del controller UDMA. Se avete dei problemi, per
prima cosa controllate di avere l'ultima versione del BIOS per la
vostra specifica scheda madre.
... 
Le nuove revisioni del BIOS possono essere scaricate dal sito web del
costruttore della vostra scheda madre. Aggiornare una nuova immagine
del BIOS è una operazione semplice ma si devono seguire
rigorosamente passo per passo le istruzioni spiegate sul manuale della
scheda madre. Le ultime revisioni dell'Award BIOS sembrano stabili
rispetto all'UDMA. Qualsiasi cosa con la data del 1998 dovrebbe essere
soddisfacente.  

9.4 Se ancora non riesco a farlo funzionare!

Se niente in questo documento vi è stato di aiuto, o almeno non vi ha aiutato abbastanza per far funzionare la vostra macchina, la vostra miglior scommessa è di scrivere un messaggio che descriva completamente le vostre difficoltà, che tipo di interfaccia UDMA avete, sia che sia a bordo, sia che sia una scheda, se il vostro disco è attualmente UDMA o un normale EIDE, esattamente che configurazione del disco avete, quale versione (se possibile distribuzione e versione del kernel) di Linux state usando e qualsiasi altra cosa che possa sembrare utile, e speditela al newsgroup comp.os.linux.hardware. Probabilmente otterrete presto alcuni suggerimenti che potranno esservi d'aiuto.

10. Se avete alcune informazioni sulle novità dell'UDMA che non sono incluse in questo mini howto...

Grande! Se sapete qualcosa che non so, inviatemele con qualsiasi mezzo ( brion@pobox.com) e la includerò in questo documento aggiornandolo completamente al più presto.

Hosting by: hurra.com
Generated: 2007-01-26 17:56:17