(Por favor, não faça várias perguntas em um post - isso torna a resposta realmente difícil ...)
queue depth which is the number of outstanding I/O requests [...] which handles the I/O requests and sends the commands to disk (r/w) and it (not strictly?) drops the requests
Solicitações excessivas geralmente não são descartadas - não há nenhum lugar para enfileirá-las no dispositivo para que outra coisa (por exemplo, o sistema operacional) precise mantê-las e enviá-las quando houver espaço disponível. Eles não estão perdidos, eles simplesmente não são aceitos.
And the reason for having high outstading [sic] I/O requests
Existem muitos motivos diferentes - você listou um deles. Por exemplo, o dispositivo pode ser lento (pense em um cartão SD antigo) e não é capaz de acompanhar até mesmo um "cliente".
only a fixed number of outstading [sic] requests, so that it won't overload the storage devices?)
Esse é o objetivo, mas não há nada dizendo que o dispositivo será capaz de acompanhar (e às vezes existem razões / configurações em que a fusão não acontece).
Even async engines may impose OS restrictions causing the desired depth not to be achieved. This may happen on Linux when using libaio and not setting 'direct=1', since buffered I/O is not async on that OS.
Confuso com toda essa declaração.
Uma peculiaridade do Linux é que não O_DIRECT
I / O (o padrão) passa pelo cache de buffer (isso é chamado de E / S armazenada em buffer). Por causa disso, mesmo que você pense que enviou de forma assíncrona (usando o Linux AIO), na verdade você acabará tendo um comportamento síncrono. Consulte o link para obter uma explicação com palavras diferentes.
Why is Submit and complete shows 1-4
Sua configuração tem isto:
buffered=1
Você não deu atenção ao aviso sobre o qual estava se perguntando antes! buffered=1
é o mesmo que dizer direct=0
. Mesmo se você tivesse direct=1
, por padrão fio
envia I / Os um por vez, então se o seu dispositivo é tão rápido que tenha completado o I / O antes que o próximo seja enfileirado, você pode não ver uma profundidade maior do que um. Se você deseja forçar / garantir o envio em lote, consulte as iodepth_batch_*
options mencionado no fio
HOWTO / manual .
OK retornando às perguntas no título:
What does iodepth in fio tests really mean?
É a quantidade máxima de E / S pendente que fio
tentará e enfileirará internamente (mas observe que fio
talvez nunca consiga alcançá-la pelas razões dadas acima e abaixo) .
Is it [iodepth] the queue depth?
Talvez, e além disso, também dependa do que você entende por "profundidade da fila". Se você quer dizer que o avgqu-sz
informado por uma ferramenta como o iostat
do Linux, então o iodepth
pode ser semelhante ou totalmente diferente dependendo de coisas como o ioengine sendo usado, as opções sendo usadas com que o mecanismo de E / S, o tipo e o estilo da E / S sendo enviada, as camadas pelas quais ele deve percorrer até atingir o nível que está sendo relatado etc.
Acho que você fez variações sobre essas perguntas em alguns lugares diferentes - por exemplo, a lista de discussão de linhas tem uma resposta para algumas das opções acima - e esse email menciona que você também postou em link . Você pode querer tomar cuidado, porque você está potencialmente fazendo com que as pessoas respondam a perguntas que já foram respondidas em outro lugar e você não as está conectando, o que torna difícil descobrir as respostas duplicadas ...