Como testar o desempenho do meu disco?
Precauções
No teste de desempenho do disco, se o número do setor do começo não é 4-KiB alinhado, o desempenho do disco será muito afetado. Certifique-se de que o número do setor inicial esteja alinhado com 4-KiB antes de iniciar o teste.
- O disco compartilhado deve estar conectado a vários servidores (ECSs ou BMSs).
- Se o disco compartilhado estiver conectado a vários ECSs, esses ECSs deverão pertencer ao mesmo grupo de ECSs de antiafinidade.
Se esses ECSs não atenderem ao requisito de antiafinidade, o disco compartilhado não poderá atingir o desempenho ideal.
O processo de teste para Windows e Linux é diferente.
Se os resultados do teste não atenderem às suas expectativas, consulte Por que meu teste de desempenho de disco usando fio tem resultados incorretos?
Windows
A maneira como você testa o desempenho do disco depende do sistema operacional do servidor. Esta seção usa o Windows 7 Professional 64 bits como exemplo. Para outros sistemas operacionais de Windows, consulte as documentações correspondentes do sistema operacional.
Instale a ferramenta de medição de desempenho Iometer antes do teste. Você pode obter a ferramenta em http://www.iometer.org/.
- Faça logon no servidor.
- Pressione win+R para abrir a janela Run. Digite msinfo32 e clique em OK.
A janela de informações do sistema é exibida.
- Escolha components > storage > disks. No painel direito, veja o deslocamento da partição.
- Se 4096 puder ser dividido pelo valor do parâmetro, a partição estará alinhada com 4-KiB. Vá para 4.
- Se 4096 não puder ser dividido pelo valor do parâmetro, a partição não estará alinhada a 4-KiB. Certifique-se de alinhamento de 4-KiB para a partição antes de continuar o teste.
Se você excluir a partição e selecionar outro número de setor inicial para alinhamento de 4-KiB, você perderá todos os dados nessa partição. Tenha cuidado ao realizar esta operação.
- Use o Iometer para testar o desempenho do disco. Para obter detalhes, consulte a documentação do produto de Iometer.
Quando o IOPS do disco e a taxa de transferência são testados, as configurações de parâmetro para Iometer e fio são as mesmas. Para mais detalhes, consulte Tabela 1.
O exemplo a seguir usa o Iometer para testar o desempenho do disco.
- Defina o fluxo de trabalho.
- Defina o tempo de execução do teste.
Neste exemplo, o tempo de execução do teste é ajustado a 10 minutos, com 60 segundos de tempo de aceleração. O desempenho do disco é testado depois que as gravações são estáveis.
- Defina o tamanho do bloco de dados e a política de leitura/gravação. Neste exemplo, o tamanho do disco é definido como 64 KiB, a política é 100% de gravação sequencial.
- Veja os resultados do teste.
Linux
Se você usar uma versão antiga do sistema operacional Linux, por exemplo o CentOS 6.5, e executar fdisk para criar partições, o número padrão do setor de início não será alinhado com 4-KiB, o que afetará muito o desempenho do teste. Por esta razão, se tal sistema operacional for usado, é aconselhável selecionar um novo número de setor inicial, um que esteja alinhado com 4-KiB, ao criar partições.
A maneira como você testa o desempenho do disco depende do sistema operacional do servidor. Esta seção usa o CentOS 7.2 de 64 bit como um exemplo. Para outros sistemas operacionais de Linux, consulte as documentações correspondentes do sistema operacional.
Instale a ferramenta de medição de desempenho, fio, antes do teste.
- Efetue logon no servidor e alterne para o usuário root.
- Antes de iniciar o teste, execute o seguinte comando para verificar se o número do setor inicial está alinhado com 4-KiB:
fdisk -lu
Informação semelhante à seguinte foi exibida:[root@ecs-centos sdc]# fdisk -lu Disk /dev/xvda: 10.7 GiB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x7db77aa5 Device Boot Start End Blocks Id System /dev/xvda1 * 2048 20968919 10483436 83 Linux Disk /dev/xvdb: 10.7 GiB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdc: 53.7 GiB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x3cf3265c Device Boot Start End Blocks Id System /dev/xvdc1 2048 41943039 20970496 83 Linux
- Se 8 pode ser dividido pelo número do setor inicial, o número é 4-KiB alinhado. Vá para 3.
- Se 8 não pode ser dividido pelo número do setor inicial, o número não está alinhado com 4-KiB. Exclua a partição e selecione um número de setor inicial alinhado com 4-KiB para a nova partição antes de continuar o teste.
Se você excluir a partição e selecionar outro número de setor inicial para alinhamento de 4-KiB, você perderá todos os dados nessa partição. Tenha cuidado ao realizar esta operação.
- Execute os seguintes comandos e use fio para testar o desempenho do disco:
- Para testar IOPS de gravação aleatória, execute o seguinte comando: fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt-name=Rand_Write_IOPS_Test
- Para testar IOPS de leitura aleatória, execute o seguinte comando: fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_IOPS_Test
- Para testar a taxa de transferência de gravação, execute o seguinte comando: fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Write_BandWidth_Test
- Para testar a taxa de transferência de leitura, execute o seguinte comando: fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Read_BandWidth_Test
- Para testar a latência de leitura aleatória, execute o seguinte comando: fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=60 -group_reporting -filename=/opt/fiotest/fiotest.txt -name=Rand_Read_LATE_Test
- Ao usar fio para executar um teste de desempenho de disco bruto, certifique-se de que nenhuma partição e sistema de arquivos tenham sido criados no disco e que não haja dados armazenados no disco. Ou, o teste de disco bruto danificará o sistema de arquivos e os dados no disco se tornarão somente leitura. Nesse caso, sua única opção será excluir o disco e comprar um novo para continuar o teste.
- Não execute o teste em um disco com dados de serviço nele. Se tal teste é uma obrigação, você é aconselhado a realizar o teste da seguinte forma:
- Faça backup dos dados do disco antes do teste, pois você pode danificar os dados no disco.
- Especifique um arquivo, por exemplo -filename=/opt/fiotest/fiotest.txt, para testar o desempenho do sistema de arquivos.
Tabela 1 lista os parâmetros do teste fio.
Tabela 1 Descrição do parâmetro Parâmetro
Descrição
direct
Define se a I/O direta é usada.
- Definido como 0: I/O armazenada em buffer é usada.
- Definido como 1: I/O direta é usada.
iodepth
Define a profundidade da fila de I/O.
Essa profundidade de fila refere-se à profundidade de fila de cada thread, independentemente de um ou vários threads serem usados no teste. Total de I/O concorrente de fio = iodepth x numjobs Exemplos:
- Se houver uma única thread e -iodepth=32, a profundidade da fila de I/O deste thread é 32 e o total de I/Os concorrentes do fio é 32 (32 x 1).
- Se houver três threads e -iodepth=32, a profundidade da fila de I/O de cada thread é 32 e o total de I/Os concorrentes do fio é 96 (32 x 3).
rw
Define a política de leitura/gravação de teste.
- randread: leitura aleatória
- randwrite: gravação aleatória
- read: leitura sequencial
- write: gravação sequential
- randrw: leitura/gravação aleatória mista
ioengine
Define como o fio entrega a solicitação de I/O (síncrona ou assíncrona).
- I/O síncrona: apenas uma solicitação de I/O é entregue por vez, e a resposta é retornada após o kernel ter processado a solicitação. Dito isso, a profundidade da fila de I/O de thread único é sempre menor que 1, e o processamento simultâneo de vários threads pode ser usado para lidar com esses problemas. Normalmente, 16 a 32 threads de trabalho simultâneos ocupam totalmente a profundidade da fila de I/O.
- I/O assíncrona: múltiplas solicitações de I/O são entregues usando o libaio por vez. Aguarde a conclusão do processo e reduza os tempos de interação para melhorar a eficiência.
bs
Define o tamanho do bloco de I/O. A unidade pode ser KiB, Kb, MiB e Mb, e o valor padrão é 4 KiB.
size
Define a quantidade de dados processados pela I/Os de teste. Se parâmetros, como runtime, não forem especificados, o teste terminará quando fio tiver processado toda a quantidade de dados especificada.
O valor pode ser um número com uma unidade ou porcentagem. Um número com uma unidade indica a quantidade de dados de leitura/gravação, por exemplo size=10G, indicando uma quantidade de dados de leitura/gravação de 10 GiB. Uma porcentagem indica a proporção da quantidade de dados de leitura/gravação em relação ao tamanho total dos arquivos, por exemplo, size=20%, indicando que a quantidade de dados de leitura/gravação ocupa 20% do espaço total do arquivo.
numjobs
Define o número de threads concorrentes.
runtime
Define o tempo do teste.
Se esse parâmetro não for especificado, o teste terminará até que a quantidade de dados especificada seja processada pelo tamanho do bloco definido usando o parâmetro size.
group_reporting
Define o modo de exibição do resultado do teste. O valor do parâmetro exibe as estatísticas em um único encadeamento, em vez de todas as tarefas.
filename
Define o nome do arquivo ou dispositivo de teste.
- Se um arquivo for especificado, o desempenho do sistema de arquivos será testado. Exemplo: -filename=/opt/fiotest/fiotest.txt
- Se um nome de dispositivo for especificado, o desempenho do disco bruto é testado. Exemplo: -filename=/dev/vdb
AVISO:
Se o teste é executado em um disco já tem partições e sistemas de arquivos criados, bem como dados sobre ele, parâmetro de usuário filename para especificar um arquivo para que o sistema de arquivos original não é danificado e os dados não são substituídos.
name
Define o nome da tarefa de teste.