

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Avaliar a performance de volumes do Amazon EBS
<a name="benchmark_procedures"></a>

Você pode testar o desempenho dos volumes do Amazon EBS simulando I/O cargas de trabalho. O processo é o seguinte:

1. Execute uma EBS-optimized instância.

1. Crie novos volumes do EBS.

1. Anexe os volumes à sua EBS-optimized instância.

1. Configure e monte o dispositivo de blocos.

1. Instale uma ferramenta para avaliar o I/O desempenho.

1. Compare o I/O desempenho de seus volumes.

1. Exclua os volumes e encerre sua instância para não continuar a ser cobrado.

**Importante**  
Alguns procedimentos resultam na destruição de dados existentes em volumes do EBS que você compara. Os procedimentos de comparação são destinados ao uso em volumes criados especialmente para fins de teste, não volumes de produção.

## Configurar a instância
<a name="set_up_instance"></a>

Para obter o desempenho ideal dos volumes do EBS, recomendamos que você use uma EBS-optimized instância. EBS-optimized as instâncias oferecem largura de banda dedicada entre o Amazon EC2 e o Amazon EBS, com especificações que dependem do tipo de instância.

Para criar uma EBS-optimized instância, escolha **Launch como EBS-optimized instância** ao iniciar a instância usando o console do Amazon EC2 ou especifique **--ebs-optimized** ao usar a linha de comando. Certifique-se de selecionar um tipo de instância que ofereça suporte a essa opção.

### Configurar volumes de Provisioned IOPS SSD ou Finalidade geral (SSD)
<a name="setupPIOPS"></a>

Para criar volumes SSD de IOPS provisionadas (`io1` e `io2`) ou SSD de uso geral (`gp2` e `gp3`) usando o console do Amazon EC2, em **Volume type** (Tipo de volume), escolha **Provisioned IOPS SSD (io1)** (SSD de IOPS provisionadas (io1)), **Provisioned IOPS SSD (io2)** (SSD de IOPS provisionadas (io2)), **General Purpose SSD (gp2)** (SSD de uso geral (gp2)) ou **General Purpose SSD (gp3)** (SSD de uso geral (gp3). Na linha de comando, especifique `io1`, `io2`, `gp2` ou `gp3` para o parâmetro **--volume-type**. Para `io1``io2`, e `gp3` volumes, especifique o número de I/O operações por segundo (IOPS) para o **--iops** parâmetro. Para obter mais informações, consulte [Tipos de volume do Amazon EBS](ebs-volume-types.md) e [Crie um volume do Amazon EBS.](ebs-creating-volume.md).

(*Somente para instâncias do Linux*) Para os testes de exemplo, recomendamos criar uma matriz RAID 0 com 6 volumes para garantir um alto nível de performance. Como você será cobrado por gigabytes provisionados (e pelo número de IOPS provisionadas para volumes de io1, io2 e gp3), e não pelo número de volumes, não há nenhum custo adicional para criar vários volumes menores e utilizá-los para criar um conjunto de stripes. Se você estiver utilizando o Oracle Orion para comparar seus volumes, ele poderá simular a segmentação da mesma forma que o ASM do Oracle; portanto, recomendamos que você deixe a segmentação a cargo do Orion. Se você estiver usando uma ferramenta de comparação diferente, precisará fazer o stripe de volumes por conta própria.

Para obter mais informações sobre como criar uma matriz RAID 0, consulte [Criar uma matriz RAID 0](raid-config.md#create-raid-array).

### Configurar volumes HDD otimizado para throughput (`st1`) ou HDD a frio (`sc1`)
<a name="set_up_hdd"></a>

Para criar um volume `st1`, escolha **Throughput Optimized HDD** (HDD otimizado para throughput) ao criar o volume usando o console do Amazon EC2 ou especifique **--type `st1`** ao usar a linha de comando. Para criar um volume `sc1`, escolha Cold HDD (HDD a frio) ao criar o volume usando o console do Amazon EC2 ou especifique **--type `sc1`** ao usar a linha de comando. Para obter informações sobre a criação de volumes do EBS, consulte [Crie um volume do Amazon EBS.](ebs-creating-volume.md). Para obter informações sobre como anexar esses volumes à sua instância, consulte [Anexar um volume do Amazon EBS a uma instância do Amazon EC2](ebs-attaching-volume.md).

(*somente instâncias Linux*) AWS fornece um modelo JSON para uso CloudFormation que simplifica esse procedimento de configuração. Acesse o [modelo](https://s3.amazonaws.com/cloudformation-examples/community/st1_cloudformation_template.json) e salve-o como um arquivo JSON. CloudFormation permite que você configure suas próprias chaves SSH e oferece uma maneira mais fácil de configurar um ambiente de teste de desempenho para avaliar `st1` volumes. O modelo cria uma instância de geração atual e um volume `st1` de 2 TiB e anexa o volume à instância em `/dev/xvdf`. 

**(*Somente instâncias do Linux*) Para criar um volume de HDD usando o modelo**

1. Abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Selecione **Criar Stack**.

1. Escolha **Upload a Template to Amazon S3** e selecione o modelo JSON que você obteve anteriormente.

1. Dê um nome para a pilha como “ebs-perf- testes” e selecione um tipo de instância (o padrão é r3.8xlarge) e a chave SSH.

1. Selecione **Next** duas vezes e, em seguida, escolha **Create Stack**.

1. Depois que o status da sua nova pilha passar de **CREATE\_IN\_PROGRESS** para **COMPLETE**, escolha **Saídas** para obter a entrada de DNS público da sua nova instância, que terá um volume `st1` de 2 TiB anexado a ela.

1. Usando SSH, conecte-se à nova pilha como usuário **ec2-user**, com o nome de host obtido da entrada de DNS na etapa anterior. 

1. Vá para [Instalar ferramentas de comparação](#install_tools).

## Instalar ferramentas de comparação
<a name="install_tools"></a>

A tabela a seguir lista algumas das ferramentas que é possível usar para comparar a performance de volumes do EBS.

### Instâncias do Linux
<a name="install_tools-linux"></a>


| Ferramenta | Descrição | 
| --- | --- | 
| fio | Para avaliar o I/O desempenho. Observe que **fio** tem uma dependência sobre `libaio-devel`.<br />Execute o comando a seguir para instalar o **fio** no Amazon Linux:<pre>$ sudo yum install -y fio</pre><br />Para instalar **fio** no Ubuntu, execute o seguinte comando:<pre>sudo apt-get install -y fio</pre> | 
| [Ferramenta de calibração do Oracle Orion](https://docs.oracle.com/cd/E18283_01/server.112/e16638/iodesign.htm#BABFCFBC) | Para calibrar o I/O desempenho dos sistemas de armazenamento a serem usados com bancos de dados Oracle. | 

### Instâncias do Windows
<a name="install_tools-windows"></a>


| Ferramenta | Description | 
| --- | --- | 
| [DiskSpd](https://github.com/microsoft/diskspd/releases) | DiskSpd é uma ferramenta de desempenho de armazenamento das equipes de engenharia de infraestrutura do Windows, Windows Server e Cloud Server da Microsoft. Ele está disponível para download em [https://github.com/Microsoft/diskspd/releases](https://github.com/Microsoft/diskspd/releases).<br />Depois de fazer download do arquivo executável `diskspd.exe`, abra um prompt de comando com direitos administrativos (escolhendo “Executar como administrador”) e navegue até o diretório onde você copiou o arquivo `diskspd.exe`. <br />Copie o arquivo executável `diskspd.exe` desejado da pasta executável apropriada, `amd64fre`, `armfre` ou `x86fre)` para um caminho curto e simples, como `C:\DiskSpd`. Na maioria dos casos, você desejará a versão de 64 bits DiskSpd do da `amd64fre` pasta. <br />O código-fonte do DiskSpd está hospedado GitHub em: [https://github.com/Microsoft/diskspd](https://github.com/Microsoft/diskspd). | 
| CrystalDiskMark | CrystalDiskMark é um software simples de benchmark de disco. Ele está disponível para download em [https://crystalmark.info/en/software/crystaldiskmark/](https://crystalmark.info/en/software/crystaldiskmark/). | 

Essas ferramentas de avaliação oferecem suporte a uma ampla variedade de parâmetros de teste. Use os comandos que aproximam workloads às quais seus volumes oferecerão suporte. Os comandos fornecidos abaixo servem como exemplos para ajudá-lo a começar a usar.

## Escolha o comprimento da fila de volume
<a name="UnderstandingQueueLength"></a>

Escolha do melhor comprimento da fila de volume com base em sua workload e tipo de volume.

### Tamanho da fila em volumes SSD-backed
<a name="SSD_queue"></a>

Para determinar o tamanho ideal da fila para sua carga de trabalho em SSD-backed volumes, recomendamos que você tenha como meta um tamanho de fila de 1 para cada 1.000 IOPS disponíveis (linha de base para volumes SSD de uso geral e a quantidade provisionada para volumes SSD de IOPS provisionadas). Depois, é possível monitorar a performance da aplicação e ajustar o valor com base nos requisitos da aplicação.

Aumentar o comprimento da fila é benéfico até que você atinja as IOPS provisionadas, a throughput ou o valor ideal de comprimento da fila de sistema, que é atualmente configurado como 32. Por exemplo, para um volume com 3.000 IOPS provisionadas deve-se ter como meta um comprimento de fila 3. É necessário experimentar ajustar esses valores para cima ou para baixo para ver qual funciona melhor para sua aplicação.

### Tamanho da fila em volumes HDD-backed
<a name="HDD_queue"></a>

Para determinar o tamanho ideal da fila para sua carga de trabalho em HDD-backed volumes, recomendamos que você tenha como meta um tamanho de fila de pelo menos 4 enquanto executa sequencialmente de 1 MiB. I/Os Depois, é possível monitorar a performance da aplicação e ajustar o valor com base nos requisitos da aplicação. Por exemplo, um `st1` volume de 2 TiB com taxa de transferência intermitente de 500 MiB/s e IOPS de 500 deve ter como alvo um tamanho de fila de 4, 8 ou 16 enquanto executa 1.024 KiB, 512 KiB ou 256 KiB sequencialmente, respectivamente. I/Os É necessário experimentar ajustar esses valores para cima ou para baixo para ver qual funciona melhor para sua aplicação.

## Desativar C-states
<a name="cstates"></a>

Antes de executar o benchmarking, você deve desativar o processador C-states. Núcleos temporariamente ociosos em uma CPU compatível podem entrar em a C-state para economizar energia. Quando o núcleo é chamado para retomar o processamento, leva um determinado tempo até o núcleo voltar a funcionar por completo. Esta latência pode interferir nas rotinas de comparação do processador. Para obter mais informações sobre C-states e quais tipos de instância do EC2 as suportam, consulte [Controle do estado do processador para sua instância do EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/processor_state_control.html).

### Instâncias do Linux
<a name="cstates-linux"></a>

Você pode desativar C-states no Amazon Linux, RHEL e CentOS da seguinte forma:

1. Obtenha o número de C-states.

   ```
   $ cpupower idle-info | grep "Number of idle states:"
   ```

1. Desative o C-states de c1 a cN. De preferência, os núcleos devem estar no estado c0.

   ```
   $ for i in `seq 1 $((N-1))`; do cpupower idle-set -d $i; done
   ```

### Instâncias do Windows
<a name="cstates-windows"></a>

Você pode desativar C-states no Windows da seguinte maneira:

1. Em PowerShell, obtenha o esquema de energia ativa atual.

   ```
   $current_scheme = powercfg /getactivescheme
   ```

1. Obtenha o GUID do esquema de energia.

   ```
   (Get-WmiObject -class Win32_PowerPlan -Namespace "root\cimv2\power" -Filter "ElementName='High performance'").InstanceID          
   ```

1. Obtenha o GUID da configuração de energia.

   ```
   (Get-WmiObject -class Win32_PowerSetting -Namespace "root\cimv2\power" -Filter "ElementName='Processor idle disable'").InstanceID                  
   ```

1. Obtenha o GUID do subgrupo da configuração de energia.

   ```
   (Get-WmiObject -class Win32_PowerSettingSubgroup -Namespace "root\cimv2\power" -Filter "ElementName='Processor power management'").InstanceID
   ```

1. Desative C-states definindo o valor do índice como 1. Um valor de 0 indica que C-states estão desativados.

   ```
   powercfg /setacvalueindex {{<power_scheme_guid>}} {{<power_setting_subgroup_guid>}} {{<power_setting_guid>}} 1
   ```

1. Defina o esquema ativo para garantir que as configurações sejam salvas.

   ```
   powercfg /setactive {{<power_scheme_guid>}}
   ```

## Benchmarking de performance
<a name="perform_benchmarking"></a>

Os seguintes procedimentos descrevem comandos de comparação para vários tipos de volumes do EBS. 

Execute os comandos a seguir em uma EBS-optimized instância com volumes do EBS conectados. Se os volumes do EBS tiverem sido criados de snapshots, inicialize-os antes do benchmarking. Para obter mais informações, consulte [Inicialize manualmente o volume após a criação](initalize-volume.md#ebs-initialize).

**dica**  
Você pode usar os histogramas de I/O latência fornecidos pelas estatísticas detalhadas de desempenho do EBS para comparar a distribuição do I/O desempenho em seus testes de benchmarking. Para obter mais informações, consulte [Estatísticas detalhadas de desempenho do Amazon EBS](nvme-detailed-performance-stats.md).

Após terminar de testar seus volumes, consulte os seguintes tópicos para obter ajuda para limpar: [Excluir um volume de Amazon EBS](ebs-deleting-volume.md) e [Encerrar a instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html).

### Avalie a performance dos volumes de Provisioned IOPS SSD e Finalidade geral (SSD)
<a name="piops_benchmarking"></a>

#### Instâncias do Linux
<a name="piops_benchmarking-linux"></a>

Execute **fio** na matriz RAID 0 que você criou.

O seguinte comando executa operações de gravação aleatórias de 16 KB.

```
$ sudo fio --directory=/mnt/{{p_iops_vol0}} --ioengine=psync --name {{fio_test_file}} --direct=1 --rw=randwrite --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap
```

O seguinte comando executa operações de leitura aleatórias de 16 KB.

```
$ sudo fio --directory=/mnt/{{p_iops_vol0}} --name {{fio_test_file}} --direct=1 --rw=randread --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap 
```

Para obter mais informações sobre como interpretar os resultados, consulte este tutorial: [Inspeção de performance de E/S de disco com fio](https://www.linux.com/training-tutorials/inspecting-disk-io-performance-fio/).

#### Instâncias do Windows
<a name="piops_benchmarking-windows"></a>

Execute **DiskSpd** no volume que você criou.

O comando a seguir executará um I/O teste aleatório de 30 segundos usando um arquivo de teste de 20 GB localizado na `C:` unidade, com uma taxa de gravação de 25% e 75% de leitura e um tamanho de bloco de 8K. Ele usará oito threads de trabalho, cada um com quatro pendentes I/Os, e uma taxa de valor de entropia de gravação de 1 GB. Os resultados do teste serão salvos em um arquivo de texto chamado `DiskSpeedResults.txt`. Esses parâmetros simulam uma workload OLTP do SQL Server.

```
diskspd -b8K -d30 -o4 -t8 -h -r -w25 -L -Z1G -c20G C:\iotest.dat > DiskSpeedResults.txt
```

Para obter mais informações sobre como interpretar os resultados, consulte este tutorial: [Inspecionar a performance de E/S com o DiskSPd](https://sqlperformance.com/2015/08/io-subsystem/diskspd-test-storage).

### Benchmark de volumes `st1` e `sc1` (instâncias do Linux)
<a name="hdd_benchmarking"></a>

Execute **fio** em seu volume do `st1` ou `sc1`.

**nota**  
Antes de executar esses testes, defina o buffer I/O em sua instância conforme descrito em. [Aumentar a leitura antecipada para workloads com muitas operações de leitura e alta throughput em `st1` e `sc1` (*somente instâncias do Linux*)](ebs-performance.md#read_ahead) 

O seguinte comando executa operações de leitura sequenciais de 1 MiB em um dispositivo de blocos `st1` anexado (por exemplo, `/dev/xvdf`):

```
$ sudo fio --filename=/dev/{{<device>}} --direct=1 --rw=read --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_read_test
```

O seguinte comando executa operações de gravação sequenciais de 1 MiB em um dispositivo de blocos `st1` anexado:

```
$ sudo fio --filename=/dev/{{<device>}} --direct=1 --rw=write --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_write_test 
```

Algumas workloads executam uma combinação de leituras e gravações sequenciais para diferentes partes de dispositivo de blocos. Para comparar essa workload, recomendamos que você use trabalhos de **fio** separados, simultâneos, para leituras e gravações, e use a opção **fio** `offset_increment` para focar em locais diferentes de dispositivo de blocos para cada trabalho. 

Executar essa workload é um pouco mais complicado do que uma workload de gravação ou leitura sequenciais. Use um editor de texto para criar um arquivo de trabalho de fio, chamado de `fio_rw_mix.cfg` neste exemplo, que contém o seguinte:

```
[global] 
clocksource=clock_gettime
randrepeat=0
runtime=180
 
[sequential-write]
bs=1M
ioengine=libaio
direct=1
iodepth=8
filename=/dev/{{<device>}}
do_verify=0
rw=write
rwmixread=0
rwmixwrite=100 

[sequential-read] 
bs=1M
ioengine=libaio
direct=1
iodepth=8
filename=/dev/{{<device>}}
do_verify=0
rw=read
rwmixread=100
rwmixwrite=0
offset=100g
```

Em seguida, execute o seguinte comando:

```
$ sudo fio fio_rw_mix.cfg
```

Para obter mais informações sobre como interpretar os resultados, consulte este tutorial: [Inspecionando o I/O desempenho do disco com fio](https://www.linux.com/training-tutorials/inspecting-disk-io-performance-fio/).

Vários **fio** trabalhos diretos I/O, mesmo usando operações sequenciais de leitura ou gravação, podem resultar em uma taxa de transferência menor do que a esperada para volumes`st1`. `sc1` Recomendamos que você use uma I/O tarefa direta e use o `iodepth` parâmetro para controlar o número de I/O operações simultâneas.