O IO assíncrono SCSI é realmente mais lento que o síncrono?

0

Estou completamente confuso com o que acabei de ler nestas duas páginas:

link link

Ambos afirmam que o IO assíncrono SCSI é mais lento do que o síncrono. Por quê? Por que alguém se importaria em escrever procedimentos assíncronos apenas para perder desempenho?

Isso contradiz minha expectativa!

Especialmente que, no caso de SSD, estou usando o libaio para ler de forma assíncrona para obter um desempenho muito melhor.

Além disso, a primeira lista é síncrona como send send send wait espera wait ... Isso é exatamente o que assíncrona é no caso da libaio.

Alguém pode lançar uma luz sobre isso para mim, por favor?!

Editar 1

Deixe-me esclarecer meu problema. Eu posso ter um problema com a compreensão correta de uma diferença entre IO assíncrona e síncrona.

  • Síncrono : aguarda que cada operação seja concluída
  • Assíncrono : ele nunca espera que cada operação seja concluída

Agora, eu diria que se eu tivesse que ler seqüencialmente alguns shows de dados, lendo-os em um simples loop síncrono:

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

Teria um tipo de consulta "solicitar, pausar, solicitar". Praticamente vejo que, se eu alterá-lo para o procedimento multithreaded, abranger vários threads (6-8) que precisariam de 'próximo local para ler' e, em seguida, solicitá-lo, conseguiria um desempenho quase máximo de leitura.

Algo parecido com isto:

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& )
    {}
}

Eu pensei, e agora, eu acho que comecei a entender depois de repensar o que acabei de ler com a ajuda do @Robert Harvey, que async / sync é apenas uma questão de 'economizar tempo' esperando o resultado. .

Estou deixando esta questão apenas no caso de alguém ter problemas cognitivos como o meu!

    
por Grzegorz 07.04.2014 / 18:15

1 resposta

2

AE / S assíncrona não se trata de melhorar a velocidade do desempenho do disco. Você não pode fazer isso tornando a E / S assíncrona; os pratos de disco giram na mesma velocidade, independentemente da maneira como você faz chamadas de E / S.

O objetivo da E / S assíncrona é possibilitar a realização de outras tarefas enquanto você espera pelos dados. Embora isso possa parecer uma melhoria de desempenho, o que você realmente está fazendo é liberar um processador de ter que ficar ocioso enquanto os dados chegam.

    
por 07.04.2014 / 18:24

Tags