Acho que o artigo da Wikipédia explica bem:
Absent simultaneous specifications of response-time and workload, IOPS are essentially meaningless.
...
Like benchmarks, IOPS numbers published by storage device manufacturers do not directly relate to real-world application performance. ...
Agora, as suas perguntas:
So who is deciding what is the size of the IO request?
Essa é uma pergunta fácil e difícil de responder por um não programador como eu.
Como de costume, a resposta é insatisfatória " depende " ...
As operações de E / S com relação ao armazenamento em disco por um aplicativo geralmente são chamadas do sistema para o sistema operacional e seu tamanho depende de qual chamada de sistema é feita ...
Estou mais familiarizado com o Linux do que com outros sistemas operacionais, então vou usar isso como referência.
O tamanho das operações de E / S, como open()
, stat()
, chmod()
e similar é quase insignificante.
Em um disco giratório, o desempenho dessas chamadas depende principalmente de quanto o atuador de disco precisa mover o braço e ler a posição correta no disco.
Por outro lado, o tamanho de um read()
e de write()
chamadas são inicialmente definidas pelo aplicativo e podem variar entre 0
e 0x7ffff000
(2.147.479.552) bytes em uma única solicitação de E / S ...
É claro que, uma vez que uma chamada desse sistema tenha sido feita pelo aplicativo e recebida pelo sistema operacional, a chamada receberá programada e enfileirado (dependendo de se o flag O_DIRECT foi ou não usado para contornar o cache de páginas e os buffers e a E / S direta foi selecionada).
A chamada abstrata do sistema precisará ser mapeada para / de operações no sistema de arquivos subjacente que é ordenado em blocos (cujo tamanho geralmente é definido quando o sistema de arquivos foi criado) e, eventualmente, o driver de disco opera em disco rígido setores de disco de 512 ou 4096 bytes ou páginas de memória SSD de 2K, 4K, 8K ou 16K.
(Para benchmarks normalmente as chamadas de leitura e gravação são geralmente definidas como 512B ou 4KB, que se alinham muito bem com o disco subjacente, resultando em desempenho ideal.)
There must be a limit after which the request splits in more then one IO. How to find that limit ?
Sim, há um limite, no Linux, conforme documentado no manual, um único read()
< A / a> ou write()
chamada do sistema retornará um máximo de 0x7ffff000
( 2.147.479.552) bytes. Para ler arquivos maiores, você precisará de mais chamadas do sistema.
Does reading each block means a single IO ?
Tanto quanto eu entendo, tipicamente cada ocorrência de uma chamada de sistema é o que conta como um evento IO.
Uma única chamada de sistema read()
conta como um evento de I / 0 e X nem Y IO, independentemente de como essa chamada de sistema é traduzida / implementada para acessar blocos X de um sistema de arquivos ou lendo setores Y de um disco rígido giratório.