Use o fio em uma instância ECS Linux para medir IOPS brutos do disco, throughput e latência para ajuste fino de desempenho de block storage.
O fio é uma ferramenta de benchmark de I/O de código aberto que testa métricas de desempenho de block storage, como operações de leitura e escrita aleatórias e sequenciais.
Procedimento
Se um dispositivo de block storage contiver partições, sistemas de arquivos ou dados, o fio poderá corromper os sistemas de arquivos e causar perda de dados. Crie snapshots antes de testar. Consulte Criar snapshot manualmente.
Não teste no disco do sistema nem em discos de dados com informações. Use um disco de dados novo, não inicializado e vazio.
Os resultados provêm de um ambiente de teste e servem apenas como referência. Em produção, o desempenho do disco em nuvem pode variar devido a condições de rede e acessos simultâneos.
-
Após testar o novo disco:
Este item está reservado e não pode ser usado diretamente. Consulte Reinicializar um disco de dados.
Se o disco não for mais necessário, faça o detach e, em seguida, o release dele.
Os exemplos a seguir usam uma imagem pública Alibaba Cloud Linux 3.2104 LTS de 64 bits. As operações podem variar conforme a imagem da sua instância.
-
Conecte-se a uma instância ECS.
Para mais informações, consulte Fazer login em uma instância Linux usando o Workbench.
-
Consulte os nomes dos dispositivos de block storage.
sudo fdisk -lu
A instância possui três dispositivos de block storage: o disco do sistema /dev/vda e dois discos de dados, /dev/vdb e /dev/vdc. -
Verifique se há partições e sistemas de arquivos nos dispositivos.
sudo blkid
Os dispositivos /dev/vda e /dev/vdb possuem partições e sistemas de arquivos. O dispositivo /dev/vdc não aparece na lista, indicando ausência de partições ou sistemas de arquivos.AvisoSe o alvo do teste contiver partições, sistemas de arquivos ou dados, o fio poderá corromper os sistemas de arquivos e provocar perda de dados. Caso seu disco de dados tenha partições e sistemas de arquivos, crie um disco de dados vazio para os testes.
Crie um disco de pagamento conforme o uso com as mesmas especificações e anexe-o à sua instância. Consulte Criar um disco de dados.
Após os testes, libere o disco de pagamento conforme o uso. Consulte Liberar um disco em nuvem.
-
Faça backup dos dados nos dispositivos antes de testar. Consulte Criar snapshot manualmente.
NotaSnapshots geram custos. Consulte Faturamento de snapshots.
-
Instale a biblioteca libaio e o fio conforme seu sistema operacional.
Alibaba Cloud Linux 2/3, or CentOS 6 or later
NotaO CentOS 6 atingiu o fim de vida útil (EOL). Conforme as regras da comunidade Linux, todo o conteúdo foi removido do seguinte endereço de repositório do CentOS 6: http://mirror.centos.org/centos-6/. Se você continuar usando o repositório padrão do CentOS 6 no Alibaba Cloud, ocorrerá um erro. Para usar pacotes de instalação específicos do CentOS 6, altere o endereço do repositório. Para mais informações, consulte Como alterar os endereços de repositório do CentOS 6?
sudo yum install libaio libaio-devel fio -yDebian 9 or later, or Ubuntu 14 or later
ImportanteO Debian 9 e o Debian 10 atingiram o EOL. Se sua instância executa Debian 9 ou Debian 10, altere os endereços dos repositórios. Consulte Alterar endereços de repositório após o CentOS ou Debian atingir o EOL
sudo apt-get update sudo apt-get install libaio* fio -y -
Acesse o diretório /tmp.
cd /tmp -
Execute os comandos de teste.
Para comandos de teste de disco em nuvem, consulte a seção Comandos de teste de disco em nuvem.
Para comandos de teste de disco local, consulte a seção Comandos de teste de disco local.
Visualize os resultados do teste. Os valores das métricas variam conforme a categoria do disco em nuvem. Os valores nas figuras a seguir servem apenas como referência.
O valor de
IOPSindica o resultado do teste de IOPS.
O valor de
BWrepresenta o resultado do teste de throughput.
O valor de lat (usec) corresponde ao resultado do teste de latência.

Comandos de teste de disco em nuvem
Executar o fio em um disco com partições, sistema de arquivos ou dados pode causar erros no sistema de arquivos e perda de dados. Se o seu disco de dados possuir partições e sistema de arquivos, crie um novo disco de dados vazio para os testes:
Crie um disco de pagamento conforme o uso com a mesma configuração e anexe-o à instância. Consulte Criar um disco de dados.
-
Após concluir o teste:
Para manter o disco: Reinicializar um disco de dados.
Caso não precise mais do disco: faça o detach e, em seguida, o release dele.
Os valores dos parâmetros nos comandos abaixo são apenas para referência. Substitua /dev/your_device pelo nome do seu dispositivo de block storage obtido na Etapa 2 da seção "Procedimento". Por exemplo, substitua /dev/your_device por /dev/vdb. Para detalhes sobre os parâmetros do fio, consulte a seção Parâmetros do fio.
-
Teste o IOPS de escrita aleatória.
sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Write_Testing -
Teste o IOPS de leitura aleatória.
sudo fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Testing -
Teste o throughput de escrita sequencial.
sudo fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_PPS_Testing -
Teste o throughput de leitura sequencial.
sudo fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Read_PPS_Testing -
Teste a latência de escrita aleatória.
sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Write_Latency_Testing -
Teste a latência de leitura aleatória.
sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Read_Latency_Testing
Consulte Testar desempenho de IOPS do ESSD.
Comandos de teste de disco local
Executar o fio em um disco com partições, sistemas de arquivos ou dados causará erros no sistema de arquivos e perda de dados. Se o seu disco de dados tiver partições e sistema de arquivos, crie uma nova instância com discos locais para os testes:
Discos locais só podem ser criados junto com uma instância. Crie uma nova instância com a mesma configuração para testar. Consulte Iniciar instâncias ECS personalizadas.
-
Após concluir o teste:
Para manter a instância, consulte Reinicializar um disco de dados.
Para descartar a instância, faça o uninstall e, em seguida, o release do disco.
Os comandos a seguir aplicam-se a SSDs NVMe locais e HDDs SATA locais. Os valores dos parâmetros servem apenas como referência. Substitua /dev/your_device pelo nome do dispositivo de block storage obtido na Etapa 2 da seção "Procedimento". Por exemplo, substitua /dev/your_device por /dev/vdb. Para detalhes sobre os parâmetros do fio, consulte a seção Parâmetros do fio.
-
Teste o IOPS de escrita aleatória.
sudo fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste o IOPS de leitura aleatória.
sudo fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste o throughput de escrita sequencial.
sudo fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste o throughput de leitura sequencial.
sudo fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste a latência de escrita aleatória.
sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste a latência de leitura aleatória.
sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste a latência de escrita sequencial.
sudo fio -direct=1 -iodepth=1 -rw=write -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test -
Teste a latência de leitura sequencial.
sudo fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
Parâmetros do fio
A tabela a seguir descreve os parâmetros do fio usados nos comandos anteriores.
|
Parâmetro |
Descrição |
|
direct |
Define se o I/O direto será usado. Valor padrão: 1. Valores válidos:
|
|
iodepth |
Profundidade da fila de I/O. Por exemplo, |
|
rw |
Política de leitura/escrita. Valores válidos:
|
|
ioengine |
Motor de I/O. Na maioria dos casos, usa-se libaio. Para outros motores, consulte a documentação do fio. |
|
bs |
Tamanho do bloco das unidades de I/O. Valor padrão: 4k. É possível especificar valores separados para leitura e escrita no formato <leitura>,<escrita>. |
|
size |
Tamanho do arquivo de teste. O fio encerra o teste após ler ou gravar o tamanho especificado, a menos que limitado pelo tempo de execução (runtime). Se não especificado, o fio usa o tamanho total dos arquivos ou dispositivos fornecidos. Também pode ser uma porcentagem (1-100). Por exemplo, size=20% usa 20% do tamanho total do arquivo ou dispositivo. |
|
numjobs |
Número de threads simultâneas. Valor padrão: 1. |
|
runtime |
Duração do teste em segundos. Se não especificado, o teste executa até que os arquivos definidos por size sejam totalmente lidos ou gravados no tamanho de bloco definido por bs. |
|
group_reporting |
Modo de exibição dos resultados. Quando especificado, os resultados são agregados por processo em vez de por tarefa. |
|
filename |
Caminho do alvo do teste — nome do dispositivo ou caminho do arquivo. Neste tópico, o alvo é um disco bruto sem sistema de arquivos. Substitua /dev/your_device pelo caminho real do dispositivo. |
|
name |
Nome do teste. Especifique conforme necessário. Nos exemplos anteriores, usou-se Rand_Write_Testing. |
Consulte fio(1) - Linux man page para a referência completa de parâmetros.