Certa vez estava fazendo um relatório com benchmarks de um storage, e uma das ferramentas que costumo utilizar é o IOzone. Aproveitei a documentação original e traduzi para pt_BR visando explicar os diversos tipos de testes.
IOzone
IOzone é uma ferramenta de benchmark de filesystem. Este benchmark gera e
mede uma variedade de operações com arquivos. É uma ferramenta útil para
uma análise abrangente de performance de diversas condições de uso de
dispositivos de armazenamento de dados.
A seguir temos uma descrição de cada tipo de operação sobre a qual são
executados os testes com o IOzone.
Write
Este teste mede a performance de escrita de um novo arquivo. Quando um
novo arquivo é escrito, não apenas os dados necessitam ser gravados, mas
também informações adicionais sobre onde e como os dados estão
armazenados na mídia. Estas informações adicionais (overhead) são chamadas
de “metadados”, e consistem de informações do diretório, espaço alocado, e
qualquer outra informação necessária ao arquivo que não faz parte dos dados
do arquivo. É normal a performance da escrita inicial ser menor do que a
performance de uma re-escrita, devido ao tratamento dessa informação
adicional (metadados, overhead).
Re-write
Este teste mede a performance de escrita de um arquivo já existente. Nestes
casos o trabalho requerido é menor, pois já existem os metadados do arquivo.
É normal portanto que a performance de re-write seja melhor do que a
performance de escrever um novo arquivo.
Read
Este teste mede a performance de leitura de um arquivo já existente.
Re-read
Este teste mede a performance de leitura de um arquivo que foi lido
recentemente. É normal que esta performance seja melhor que a primeira
leitura, pois o sistema operacional geralmente mantém um cache dos arquivos
e dados lidos recentemente, e este cache pode ser usado para novas
chamadas de leitura (evitando uma re-leitura do disco), aumentando a
performance.
Random Read
Este teste mede a performance de leitura de um arquivo com acessos feitos a
partir de localizações randômicas do arquivo. A performance do sistema sob
este tipo de atividade pode ser influenciada por vários fatores como: tamanho
do cache do sistema operacional, número de discos, latência, entre outras.
Random Write
Este teste mede a performance de escrita de um arquivo com acessos feitos a
localizações randômicas do arquivo. Novamente, a performance do sistema sob
este tipo de atividade pode ser influenciada por vários fatores como: tamanho
do cache do sistema operacional, número de discos, latência, entre outras.
Backwards Read
Este teste mede a performance de leitura de um arquivo de trás para frente.
Pode parecer uma maneira estranha de ler um arquivo, mas existem
aplicativos que fazem isso. Enquanto a maioria dos sistemas operacionais
possuem otimizações para permitir a leitura seqüêncial de um arquivo mais
rapidamente, existem poucos sistemas operacionais que possuam alguma
melhoria para leituras de arquivos de trás para frente.
Record Rewrite
Este teste mede a performance de escrita e re-escrita de um bloco de dados
em particular de um arquivo. Com isso podemos ter comportamentos
interessantes. Se o tamanho do bloco for pequeno o suficiente para caber na
área de cache da CPU então teremos uma performance altíssima. Se o
tamanho for maior que o cache de dados da CPU mas couber no TLB, então
teremos um nível diferente de performance. Se o tamanho do bloco for maior
que o cache de dados da CPU e do TLB mas ainda couber no cache do sistema
operacional então teremos outro nível de performance, e se o tamanho do
bloco for maior que o cache do sistema operacional teremos mais outro nível
diferente de performance.
Strided Read
Este teste mede a performance de leitura de um arquivo com acesso em
passos. Um exemplo possível para explicar melhor este teste: ler com offset
zero 4Kbytes, saltar 200Kbytes, e então ler 4Kbytes, saltar 200Kbytes, e assim
por diante. Uma aplicação típica com esse comportamento é quando temos
estruturas de dados em arquivos e processos de leituras de registros dessas
estruturas. A grande maioria dos sistemas operacionais não detecta este
comportamento nem implementa nenhuma técnica de melhoria de
performance para esse tipo de acesso.
Fwrite
Este teste mede a performance de escrita de um arquivo utilizando a função
fwrite(). Esta é uma rotina de biblioteca que realiza uma operação de escrita
bufferizada, com o buffer no espaço de endereçamento de usuário. Se uma
aplicação está para escrever em transferências de tamanhos pequenos, então
as funcionalidades de buffer e blocked I/O de fwrite() podem melhorar a
performance da aplicação pela redução do número real de system calls
utilizadas e aumentando o tamanho da transferência quando as chamadas ao
sistema operacional são feitas. Como este teste é feito com a escrita de um
arquivo novo, então a carga de escrita dos metadados está inclusa na medição.
Frewrite
Este teste é semelhante ao teste de Fwrite, porém escrevendo em um arquivo
já existente. Com isso não temos a carga adicional de escrita dos metadados,
causando uma melhor performance.
Fread
Este teste mede a performance de leitura de um arquivo usando a função de
biblioteca fread(). Esta é uma rotina de biblioteca que realiza uma operação de
leitura bufferizada e blocked. com o buffer no espaço de endereçamento do
usuário. Se um aplicação está para escrever em transferências de tamanhos
pequenos, então as funcionalidades de buffer e blocked I/O de fread() podem
melhorar a performance da aplicação pela redução do número real de system
calls utilizadas e aumentando o tamanho da transferência quando as chamadas
ao sistema operacional são feitas.
Freread
Este teste é semelhante ao teste de Fread, porém relendo dados do arquivo
que já foram lidos anteriormente. Como esses dados costumam ficar no cache
do sistema operacional, um aumento de performance é obtido.