Test prestazionale SerialATA con Native Command Queuing

Analisi tecnica e prestazionale della nuova tecnologia Native Command Queuing destinata ad equipaggiare i dischi della prossima generazione e che promette di aumentare sensibilmente le prestazioni degli hard disk SerialATA grazie ad alcune ottimizzazioni in fase di lettura e scrittura
di Alessandro Bordin pubblicato il 08 Luglio 2004 nel canale StorageCenni teorici - parte 2
Esistono tuttavia delle ulteriori ottimizzazioni per rendere ancora più efficiente il lavoro delle testine sia in lettura che in scrittura. Per quanto riguarda la seek latency si possono utilizzare piatti di diametro ridotto (è il caso degli SCSI ad altissime prestazioni), con ovvie limitazioni di capienza, in contrasto con l'esigenza media attuale. Un altro metodo consiste nell'ottimizzare le richieste, in modo da minimizzare gli spostamenti della testina, organizzando meglio le richieste. L'algoritmo RPO soddisfa le richieste del sistema ad una ad una, anche nel caso di tracce distanti, con continui "avanti e indietro" sulla faccia del piatto.
La tecnologia Native Command Queuing permette di fare il punto della situazione sulle richieste e pianificare il movimento della testina trascurando l'ordine cronologico della richiesta e dando la precedenza alla vicinanza dei dati richiesti sul piatto.
Un esempio può essere utile a comprendere meglio il problema. Immaginiamo un ascensore fermo al piano terra su cui salgono quattro persone. La prima persona aziona il pulsante 4, la seconda il 2, la terza il 5 e la quarta il 3. Seguendo la logica dell'algoritmo RPO, l'ascensore si sposterebbe prima al quarto piano, poi al secondo, per poi risalire al quinto e ridiscendere al terzo, con uno spreco di tempo evidente. Sembrerà strano, ma i dischi attuali funzionano così.
L'ottimizzazione fornita dal Native Command Queuing in fatto di seek latencies può essere riassunta nel "ragionamento" fatto dall'ascensore per fermarsi al secondo, terzo, quarto e quinto piano, ignorando le precedenze ma scegliendo il metodo più veloce per accontentare le richieste. Ovviamente è una versione semplicistica di come stanno le cose, ma serve per meglio capire il ragionamento di base.
Per quanto riguarda la rotational latency le cose si complicano un po' di più. Una volta individuata la traccia, è la volta di individuare il settore. Attualmente la testina, nel peggiore dei casi, si posiziona sulla traccia, il disco fa un giro quasi completo per far scorrere il riferimento LBA, in modo che al giro seguente la testina trovi a colpo sicuro il settore ricercato. Può succedere che il riferimento sia a mezzo giro, oppure ad un angolo di pochi gradi; resta il fatto che poi serve un altro giro per rintracciare il dato.
Esistono due modi per ottimizzare il processo di individuazione del settore. Il primo è qualcosa di simile a quanto visto nell'ottimizzazione della seek latency, ovvero organizzare le richieste in modo che siano "vicine" indipendentemente dalle precedenze. Altro metodo consiste nell'ottimizzazione chiamata out-of-order data delivery. Appena posizionata sulla traccia, la testina legge tutti i settori, in modo che con un solo giro ha tutti i dati a disposizione in cache, compreso il riferimento LBA. Un algoritmo permette di relativizzare la posizione del settore cercato, risparmiando fino ad un giro intero per lo stesso risultato ottenibile con metodi tradizionali.
Il Native Command Queuing sfrutta queste ottimizzazioni, grazie anche a tre caratteristiche particolari implementate:
Race-Free Status Return Mechanism: questa caratteristica permette al disco di ricevere una qualsiasi richiesta in qualsiasi momento.Le richieste sono poi gestite dall'elettronica del disco stesso in base ai criteri sopra citati.
Interrupt Aggregation: generalmente il disco "interrompe" le richieste ulteriori da parte del sistema (anche se per un tempo brevissimo), ogni volta che ha esegue una singola richiesta. Con la tecnologia NCQ ciò può non succedere, in quanto possono essere portate a termine contemporaneamente diverse richieste, limitando così il numero di interruzioni. Non più dunque una interruzione per ogni singola richiesta, ma una interruzione ogni x richieste svolte contemporaneamente.
First Party DMA: le operazioni DMA vengono abilitate dal disco senza il supporto software del sistema operativo. Da qui il nome First Party DMA.
Sulla carta dunque il Native Command Queuing ottimizza lo spostamento della testina, stressando meno la meccanica e rendendo di conseguenza più affidabile il disco, sempre il linea teorica ma credibile.