Rubrica HARDWARE

Ancora su hard disk e DMA

Attiviamo il DMA Bus Mastering!

Gli hard disk ATA e il DMA Bus Mastering: dove e come - installiamo il supporto DMA-BM sotto alcuni sistemi operativi

di Fernando Carello

Con la sempre maggiore diffusione di Sistemi Operativi multitasking e la definitiva affermazione dello standard ATA-2 per le memoria di massa low e middle-end, torna d'attualità un articolo che scrissi su BETA 3/95, riguardo alle modalità di trasferimento DMA degli hard disk.

Riassumendo brevemente, i moderni Hard Disk con interfaccia EIDE possono funzionare con due diversi protocolli di trasferimento dati: il PIO (Polled Input Output) e il DMA (Direct Memory Access).

Il primo necessita di una partecipazione attiva della CPU all'intero trasferimento, per cui, pur garantendo un Transfer Rate molto alto (vicino a quello ottenibile via DMA), tende a caricare molto il sistema: specie se i timing sono molto spinti (PIO mode 4), la potenza di elaborazione di una moderna CPU è in buona parte assorbita dalla sola gestione dell'hard disk.

Il secondo protocollo (DMA) permette invece di gestire il trasferimento come un "affare privato" tra l'host di periferica e la memoria centrale, impegnando la CPU solo in minima parte.
In realtà, esistono due diversi tipi di funzionamento DMA: quello "comandato" (Slave), in cui la periferica fa una richiesta di accesso alla memoria e poi il controller DMA centralizzato della mother board si occupa del lavoro, e quello "Bus Mastering", in cui la periferica si occupa "in proprio" di gestire l'intero traferimento, inizializzazione a parte.
Le ragioni della scarsa diffusione del protocollo DMA nel mondo della memorie di massa sono da ricercarsi proprio nelle limitazioni prestazionali che caratterizzano il primo modo di funzionamento: l'architettura del PC riserva ai modi DMA 4 canali ad 8 bit e 4 a 16 bit, tutti con clock di circa 4 MHz (all'atto pratico, buona parte di questi canali sono riservati ad uso interno).
Il throughput massimo teorico è quindi di 4 MB/s per i canali ad 8 bit e 8 MB/s per quelli a 16 bit; in realtà, un ciclo di trasferimento DMA "comandato" non avviene mai a zero stati di attesa, per cui i valori effettivi sono molto più bassi. C'è poi da considerare la necessità di allestire diversi buffer "di transito", il notevole overhead dovuto allo svolgimento di un certo numero di operazioni prima di iniziare l'effettivo trasferimento, ecc. In definitiva, solo il controller dei floppy, le schede audio, alcune schede di rete ed alcune schede di interfaccia "dedicate" (per esempio scanner) usano questa modalità di trasferimento, decisamente inadeguata per sistemi veloci come gli hard disk.

Il Bus Master DMA supera queste limitazioni, ma la necessità di implementare, su ogni periferica Bus Mastering, un'elettronica di controllo di una certa rilevanza atta a gestire questo protocollo, ne ha finora limitato l'adozione a sistemi high-end (es. adapters SCSI di fascia alta, schede di rete di qualità); un rappresentante tipico è stato per anni l'host SCSI Adaptec 1540/1542 (ISA).

Con l'avvento del chipset Intel Triton 82430 FX per mother board PC Pentium PCI, tuttavia, le cose sono cambiate: uno degli integrati costituenti il set era il PIIX "82371 FB", chip deputato tra le altre cose a gestire fino a 4 unità ATA con modi PIO 4 e Bus Master DMA Multiword 2.
Abbiamo quindi un sistema Bus Master a basso prezzo, standard (il chipset Triton, con le sue evoluzioni Triton-II 82430 HX/VX, Triton-III 82430 TX e Natoma 82440, è montato sulla grande maggioranza delle attuali mother board PC) e pronto all'uso: il compagno ideale per gli attuali dischi ATA-2.

Incredibilmente, tutte queste potenzialità sono state finora assai poco sfruttate: l'incomprensibile atteggiamento di Intel, che non ha mai fornito di serie driver "ufficiali" per i suoi chipset, la finora scarsa diffusione, su PC, di sistemi veramente multitasking in grado di trarre il massimo giovamento da una gestione DMA B.M. dei dischi, ed infine la poca sensibilità dimostrata dalle riviste del settore verso l'argomento (il che ha portato a una scarsa informazione nell'utenza media) hanno fatto sì che ancora oggi la maggior parte dei PC utilizzi i modi PIO 3 e 4 per gestire il traffico dei dati su disco.
Vediamo di correre ai ripari: qui di seguito illustreremo come attivare il protocollo DMA B.M. su alcuni sistemi operativi multitasking per PC.

Anzitutto, naturalmente, occorre assicurarsi di avere una mother board Pentium equipaggiata con chipset Intel Triton o Triton II, o una mother board Pentium Pro equipaggiata con chipset Intel Natoma.
Se non avete la documentazione della vostra scheda madre, dovrete ... controllare direttamente le scritte sui grossi chip quadrati che la equipaggiano: per i sistemi Pentium, su uno di essi deve essere riportata la sigla Intel 82c437 oppure 82c439; i sistemi Pentium Pro dovrebbero un chip con una sigla tipo Intel 82c44x, con x qualsiasi.
Bisogna poi controllare che gli hard disk supportino i modi ATA-2 DMA Multiword 1 o, meglio, 2; praticamente tutti gli hard disk moderni (da un anno a questa parte) con taglio di 1 GB e oltre soddisfano le specifiche ATA-2 (o Fast-ATA o Fast-ATA-2, equivalenti per i nostri fini), comunque se non avete la relativa documentazione (avete controllato sul sito Internet del costruttore?) potete sempre procurarvi un programma di test: per DOS ce ne sono diversi, ma la loro affidabilità non è sempre buona, a causa di problemi di standardizzazione dei registri IDE degli hard disk.
Alcuni hard disk recenti, pur se rispondenti alle specifiche ATA-2 o Fast-ATA, sono stati segnalati per l'insorgere di alcuni problemi durante il funzionamento in DMA: ad esempio, i Maxtor 7245AV, 71626AP e 71260AT , il Conner CFA850A, i Quantum Maverick e il Western Digital Caviar WDC1200; non è comunque escluso che le ultime revisioni di firmware abbiano eliminato i problemi su questi modelli.

Vorrei sottolineare che utilizzare le modalità di trasferimento DMA Bus Mastering non comporta necessariamente un miglioramento nelle prestazioni dei dischi (a volte si nota, anzi, un lieve peggioramento, dovuto al fatto che alcuni hard disk sono più veloci in PIO che in DMA); tuttavia, l'alleggerimento del carico sulla CPU dovrebbe, se siete utenti avanzati di sistemi multitasking, compensare abbondamentemente.

A questo punto si può entrare nel vivo: procurarci i driver e installarli sotto OS/2, Linux e Windows NT.


Installazione dei driver

OS/2 2.1 e Warp

Questo Sistema Operativo, tecnicamente molto sofisticato, ha sempre avuto nel supporto ATA uno dei suoi punti deboli: le prestazioni non eccellenti del driver di serie (IBM1S506.ADD) non possono che penalizzare un sistema nato per il multitasking, con un evoluto uso della memoria virtuale.

Per OS/2 sono reperibili due distinti driver per Intel Triton: i "Triones" (i primi ad essere apparsi) e gli Intel "PIIXIDE", arrivati più di recente.
Entrambe sono reperibili su
ftp://wuarchive.cdrom.com/pub/systems/os2/drivers ; al momento in cui scriviamo sono giunti rispettivamente alla distribuzione 1.00H e 2.06; i Triones, comunque, vengono spesso distribuiti assieme alle Mother Board Triton-2 in versioni più aggiornate: ad esempio, mentre la 1.00H corrisponde alla release 3.1, con le Soyo TritonII HX viene fornita la release 3.22 dei driver. Ciò è importante, in quanto la 3.1 non funziona in modo affidabile con il PIIX3 "82371 SB" presente sulle Triton-2, essendo stata sviluppata per l'82371 FB delle Triton.

Partiamo dai Triones.

L'installazione è molto semplice: scompattato il pacchetto e letto attentamente il README, si copia (per comodità) il file TRIOS2.ADD nella directory radice del sistema, si apre il CONFIG.SYS e si sostituisce la riga:

	BASEDEV=IBM1S506.ADD
con la:
	BASEDEV=TRIOS2.ADD
Al successivo reboot, tutto dovrebbe funzionare; tuttavia, non sempre la routine di autodetect di questi driver funziona correttamente, e potrebbe accadere che un hard disk perfettamente in grado di supportare un modo DMA venga invece configurato in PIO: per evitare ciò (sempre se si è assolutamente sicuri che il proprio hard disk supporti i modi DMA), è possibile "forzare" il driver a funzionare con un certo protocollo.
La lettura del README che accompagna il pacchetto è d'obbligo. Qui mi limito ad un esempio: supponiamo di avere un hard disk ATA-2 settato come Master del canale IDE Primario, e che si voglia forzarlo a funzionare in Bus Mastering DMA Multiword 2. Dovremo specificare:
	BASEDEV=TRIOS2.ADD /PM dma=MW2
Per controllare il corretto funzionamento del driver, basterà aprire l'utility CPU Monitor e osservare il grafico, illustrante la percentuale di utilizzo della CPU, durante il trasferimento di un grosso file su disco. Per riferimento, su un sistema Triton Pentium 100 con hard disk Quantum Fireball 1280A il carico CPU durante la copia di un grosso file è sceso dal 55% al 20% ...

Vanno segnalate alcune idiosincrasie tra i Triones ed alcuni CD-ROM ATA (quelli connessi alle stesse interfacce degli hard disk): in alcuni casi, si sono verificate delle incompatibilità risoltesi solo con il ripristino del vecchio IBM1S506.ADD e/o con lo spostamento del CD sul canale IDE Secondario.
In linea di massima, comunque, l'ultima versione dei Triones (la 3.22) sembra piuttosto stabile: io ho potuto testarla a lungo con un CD ROM ATA Pioneer 10x senza incontrare il minimo problema (anzi: nel caso specifico il CD-ROM è stato visto correttamente senza neppure aver caricato nel CONFIG.SYS il filtro IBMIDECD.ADD !).

Intel PIIXIDE

La presa di contatto è subito ostica: i driver sono "confezionati" in un pacchetto .zip da circa 380 KB, che una volta unzippato si rivela per un .exe autoscompattante.
Non basta: finito il gioco delle scatole cinesi, ci si trova di fronte ad un setup.exe che OS/2 non riesce ad eseguire ... si tratta di un eseguibile Windows !!
Mi pare superfluo sottolineare l'assurdità della cosa, per fortuna le azioni svolte dal Setup posso essere eseguite anche manualmente: dopo aver letto il README.TXT, e aver copiato i file PIIXIDE.ADD e PIIXIDE.FLT nella directory radice, si modifica il CONFIG.SYS sostituendo:

	BASEDEV=IBM1S506.ADD
con:
	BASEDEV=PIIXIDE.ADD
nonché:
	BASEDEV=IBMIDECD.ADD
con:
	BASEDEV=PIIXIDE.FLT
Al successivo reboot tutto dovrebbe funzionare correttamente.
C'è da notare che, rispetto ai Triones, questi driver permettono di specificare un minor numero di parametri: ad esempio, non è possibile "forzare" il modo di trasferimento, ma solo disabilitare il modo DMA (verrà usato il modo PIO più veloce tra quelli supportati dall'unità, tramite autodetect).

Nota: il README.TXT afferma che, per il corretto funzionamento di questi driver, il BIOS deve inizializzare le unità IDE per le operazioni in DMA Bus Mastering.
In realtà, nessuno dei BIOS che ho avuto modo di esaminare permette questa operazione, essendo i modi di traferimento disponibili via BIOS sempre PIO. Tuttavia, settando nel BIOS Setup:

	IDE PIO mode: AUTO
tutto funzionerà correttamente.


Linux

A partire dal kernel 2.0.0 (non contando le release "di sviluppo" 1.3.xx), l'IDE block driver di Linux è stato notevolmente migliorato: tra le altre cose, è stato aggiunto il supporto per il DMA Bus Master per l'Intel PIIX 82371.
Per abilitarne il codice, occorre anzitutto ricompilare il kernel abilitando, nella sezione riguardante le unità IDE, il supporto per i chipset Triton / Triton II.
Se tutto funzionerà correttamente, al successivo reboot appariranno, tra i messaggi di apertura del kernel (ricordo che potete sempre rileggerli con dmesg|less ), le seguenti righe:

	ide: i82371 PIIX (Triton) on PCI bus 0 function 57
	    ide0: BM-DMA at 0x8000-0x8007
	    ide1: BM-DMA at 0x8008-0x800f
(l'esempio si riferisce ad una mother board con chipset Triton, con ambedue i canali IDE attivi)

Abilitare il supporto DMA nel kernel, però, non è sufficiente: occorre attivare la modalità DMA nel driver.

Per fare ciò, è necessaria un'utility denominata hdparm, che potete reperire presso i soliti nodi nel reparto "kernel patches", es.: ftp://sunsite.unc.edu/pub/Linux/kernel/patches/diskdrives/ .

Questa utility agisce come "complemento" al driver IDE del kernel, attivandone alcune opzioni che, per vari motivi, si è ritenuto rischioso abilitare di default.
Rimandandovi alla lettura delle man pages di hdparm, operazione assolutamente necessaria prima di attivarne le opzioni, mi limito a fornire una riga di comando di esempio nel caso vogliate attivare la modalità DMA Multiword 2 su un hard disk ATA-2 visto come /dev/hda:

	hdparm -c 1 -d 1 -m 8 -X 34 /dev/hda
In questo esempio, abbiamo abilitato l'accesso al disco tramite bus a 32 bit (opzione -c 1 ), la modalità DMA Bus Master ( -d 1 ) ed il trasferimento DMA Multiword 2 ( -X 34 ).

Voglio sottolineare l'assoluta necessità di leggere attentamente la man page di hdparm, prima di provare le opzioni proposte: è possibile che il vostro sistema non supporti tali opzioni, il che potrebbe portare a casi di grave danneggiamento del file system con conseguente perdita di dati!


Windows NT 3.51 e 4.0

Windows NT può contare, come OS/2, su due serie di driver: Triones ed Intel.

In entrambi i casi sono stati segnalati episodi di malfunzionamento, con blocco del sistema al boot e/o problemi ai CD-ROM: è quindi opportuno procedere con notevole cautela, predisponendo un hardware profile di sicurezza e quant'altro ritenuto opportuno per risolvere eventuali problemi.

I driver Triones, ormai spesso distribuiti con le mother board, sono giunti alla versione 3.22 (Giugno 1996).

Scritti per NT 3.5 - 3.51, sono utilizzabili anche sul 4.0 (sempre con molta cautela). L'installazione è quella classica di un adapter SCSI, passa quindi per il Pannello di Controllo, da dove selezionerete "Adattatori SCSI": chiederete di aggiungere un adattatore SCSI di cui avete i driver, specificando la directory nella quale avrete copiato i driver Triones.
Al termine dell'installazione, la finestra "SCSI Adapter Setup" dovrebbe mostrare, al posto del driver "IDE ATAPI 1.2", il "PIIX/PIIX3 Bus Master EIDE/ATAPI".

I driver Intel sono giunti, al momento in cui scrivo, alla versione 1.65; potrete reperirli, ad esempio, presso il sito della Asus: http://asustek.asus.com.tw/FTP/ASUS/Drivers/ con nome del tipo bmide_nt.zip.

Scompattato il pacchetto ed avviato il programma di Setup (che si limita a creare un'opportuna directory contenente i file necessari), seguite attentamente le istruzioni per il setup, comunque molto simili a quelle per i Triones; su alcuni sistemi (NT 4.0) potreste ricevere un messaggio di errore del tipo invalid library call [...] e probabilmente anche uno del tipo error in script: [...]; tuttavia, l'installazione dovrebbe funzionare egualmente, ed al successivo reboot dovreste trovare, al posto del driver IDE ATAPI 1.2, il PIIXIDE.

Un riscontro al System Performance Monitor (settore Administrative Tools ) ha evidenziato, nel caso di un sistema con chipset Triton, CPU Pentium 100 e hard disk Quantum Fireball 1280A su NT 4.0 Server, un abbassamento del carico CPU dal 65% al 25%, durante la copia di un grosso file. Tuttavia, sullo stesso sistema è stata riscontrata una diminuzione del Transfer Rate, sceso da circa 1.8 a circa 1.4 MB/s, il che può indicare sia che il driver non ha ancora una buona efficenza, sia che il sistema testato soffra di cali di rendimento in DMA sotto NT.



Fernando Carello è reperibile su Internet tramite la redazione, oppure sul sito di BETA all'indirizzo techcoord@beta.it

Copyright © 1996 BETA. Tutti i diritti riservati.


Precedente Principale Sommario Informazioni Redazione Browser Successivo