Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Elastic Volume Service/ Perguntas frequentes/ Desempenho/ Como testar o desempenho do meu disco?
Atualizado em 2023-12-28 GMT+08:00

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.

Para testar o desempenho de um disco compartilhado, os seguintes requisitos devem ser atendidos:
  • 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/.

  1. Faça logon no servidor.
  2. Pressione win+R para abrir a janela Run. Digite msinfo32 e clique em OK.

    A janela de informações do sistema é exibida.

  3. 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.

  4. 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.

    1. Defina o fluxo de trabalho.

    2. 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.

    3. 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.

    4. 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.

  1. Efetue logon no servidor e alterne para o usuário root.
  2. 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.

  3. 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.