L'IO asincrono SCSI è davvero più lento di quello sincrono?


0

Sono completamente confuso con ciò che avevo appena letto in queste due pagine:

http://www.scsifaq.org/scsifaq.html#_Hlk410546176 http://www.cse.scu.edu/~tschwarz/coen180/LN/scsi.html

Entrambi affermano che l'IO asincrono SCSI è più lento di quello sincrono. Come mai? Perché qualcuno dovrebbe preoccuparsi di scrivere la procedura asincrona solo per perdere le prestazioni?

Contraddice le mie aspettative!

Soprattutto che, nel caso di SSD, sto usando libaio per leggere in modo asincrono per ottenere prestazioni molto migliori.

Inoltre, il primo elenco sincrono come send send send wait wait wait ... Questo è esattamente ciò che è asincrono in caso di libaio.

Chiunque può far luce su di me, per favore ?!

Modifica 1

Vorrei chiarire il mio problema. Potrei avere un problema con la corretta comprensione di una differenza tra IO asincrono e sincrono.

  • Sincrono : attende il completamento di ciascuna operazione
  • Asincrono : non attende mai il completamento di ogni operazione

Ora, suppongo che se dovessi leggere in sequenza alcuni concerti di dati, leggendoli in un semplice ciclo sincrono:

while ( num_blocks-- > 0 )
    read_block() ;

Avrebbe un tipo di query "richiesta, pausa, richiesta". Praticamente vedo che se lo cambio in una procedura multithread, si estendono su diversi thread (6-8) che richiederebbero "posizione successiva da leggere" e quindi lo richiedono, potrei ottenere quasi il massimo delle prestazioni di lettura.

Qualcosa come questo:

struct request
{
    ...

    boost::mutex mutex ;
    uint64_t     block ;

    uint64_t get_block_location()
    {
        boost::mutex::scoped_lock lock( mutex ) ;
        return block++ ;
    }
} ;

void readth( request* r )
{
    try
    {
        for( ;; )
        {
            read_block( r->get_block_location()) ;
        }
    }
    catch( const FinishedException& )
    {}
}

Ho pensato, e ora, penso di iniziare a ottenerlo dopo aver ripensato quello che avevo appena letto con l'aiuto di @Robert Harvey che asincronizzare / sincronizzare è davvero solo una questione di "risparmio di tempo" nell'attesa del risultato ...

Lascio questa domanda nel caso in cui qualcuno abbia problemi cognitivi come il mio!

Risposte:


2

L'I / O asincrono non riguarda il miglioramento della velocità delle prestazioni del disco. Non puoi farlo rendendo I / O asincrono; i piatti del disco ruotano alla stessa velocità indipendentemente dal modo in cui si effettuano le chiamate I / O.

Lo scopo dell'I / O asincrono è quello di rendere possibile andare e fare altre cose mentre aspetti i dati. Sebbene ciò possa sembrare un miglioramento delle prestazioni, ciò che stai realmente facendo è liberare un processore dal dover passare al minimo quando arrivano i dati.


Che dire di spin up e spin down in caso di disco fisico? Ho notato che se "invadessi" scsi con un mucchio di richieste sequenziali in thread separati, ottengo prestazioni molto migliori (probabilmente a causa del loro ordinamento del controller.) Quando uso blocco dopo blocco, anche se sequenziale, è più lento perché ogni tempo devo aspettare la risposta, quindi avviare un'altra lettura. Mi aspettavo che in caso di lettura asincrona sia il driver SCSI che farà tutto ciò.
Grzegorz,

Hai letto il post che hai collegato? Dice "L'opzione di trasferimento asincrono attende che ogni byte sia trasferito prima che venga riconosciuto. Con il protocollo sincrono, il dispositivo che invia i dati può avanzare rispetto al dispositivo che riceve i dati da un numero di byte (chiamato offset). L'offset viene negoziato tra l'iniziatore e il target qualche tempo prima dell'inizio del trasferimento. Il protocollo sincrono è considerevolmente più efficiente e quindi più veloce di quello asincrono. "
Robert Harvey,

si: D ... ed è per questo che mi sono confuso e ho pubblicato questa domanda.
Grzegorz,

Penso che faresti meglio a essere più specifico sul problema che stai cercando di risolvere, perché in mancanza di ciò, questa è solo una domanda di curiosità. Questa descrizione è molto specifica e in molte parole afferma che il protocollo sincrono è più efficiente perché è stato progettato in modo da renderlo più efficiente. Puoi spiegare come una migliore comprensione di "più efficiente" ti aiuta a risolvere il problema che stai riscontrando?
Robert Harvey,

Sono in procinto di modificare la mia domanda. Credo di avere un conflitto di aspettative e realtà e ho bisogno di chiarimenti per renderlo corretto. Grazie per il tuo tempo!
Grzegorz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.