Debian 7.11 with 3.2 kernel
Atualize, se possível. Você não apenas obtém melhorias no kernel, mas o Wheezy é o fim da vida.
Sim, você vê maior utilização e profundidade da fila quando direta = 1. O manual do fio chama este caso em particular (ênfase minha):
iodepth=int
Number of I/O units to keep in flight against the file. Note that increasing iodepth beyond 1 will not affect synchronous ioengines (except for small degrees when verify_async is in use). 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. Keep an eye on the I/O depth distribution in the fio output to verify that the achieved depth is as expected
Portanto, a libaio requer O_DIRECT para assíncrono, um importante detalhe de implementação a ser conhecido. Alguém perguntou se não era direto com a libaio era uma boa ideia:
Is it valid to set direct=0 when using libaio?
You can do it but I wouldn't recommend it. With today's Linux kernels, libaio submission is likely to become blocking (and thus no longer asynchronous) without O_DIRECT which can limit the amount of parallel I/O achieved. There's a strong argument that fio examples should NOT encourage such a combination of options...
what does "queued" behavior mean in the man doc?
Se você quer dizer o frase "Note que o Linux só pode suportar comportamento em fila com E / S sem buffer " link ) Eu acho está tentando dizer:
"Em vez de bloquear no syscall da submissão até que o I / O tenha ido para baixo e voltar do dispositivo de disco mais baixo (comportamento de bloqueio), quando usando direto = 1 com libaio você pode enviar um I / O e tê-lo assincronamente em fila pelo kernel permitindo a submissão syscall para volte imediatamente e abra a oportunidade para você fazer fila outros envios antes da conclusão da E / S ".
Tente também um teste de controle com ioengine = psync e direct = 0. Mesmo as gravações síncronas com um cache podem fazer muitas IOPS.
Tudo isso evita a verdadeira pergunta: qual era o problema na carga de trabalho do banco de dados que você estava executando? Sintomas do problema, versões de software, configuração, métricas de desempenho (iostat). A implementação de E / S do SGBD pode ser muito diferente do que você simulou, as chamadas do sistema usadas, vários arquivos e tarefas que executam E / S, qualquer número de coisas. Isso vale a sua própria pergunta se você quiser investigar mais.