Desempenho da máquina virtual e do disco
Aplica-se a: ✔️ VMs ✔️ Linux VMs ✔️ do Windows Conjuntos ✔️ de escala flexíveis Conjuntos de balanças uniformes
Este artigo ajuda a esclarecer o desempenho do disco e como ele funciona quando você combina Máquinas Virtuais do Azure e discos do Azure. Ele também descreve como você pode diagnosticar gargalos para a E/S do disco e as alterações que você pode fazer para otimizar o desempenho.
Como funciona o desempenho do disco?
As máquinas virtuais do Azure têm limites de desempenho de IOPS (operações de entrada/saída por segundo) e de taxa de transferência com base no tipo e tamanho da máquina virtual. Discos de sistema operacional e discos de dados podem ser ligados a máquinas virtuais. Os discos têm os seus próprios limites de IOPS e de débito.
O desempenho da sua aplicação é limitado quando pede mais IOPS ou débito do que o que é atribuído às máquinas virtuais ou discos anexados. Quando é imposto um limite, a aplicação tem um desempenho inferior ao ideal. Tal pode levar a consequências negativas, como o aumento da latência. Vejamos alguns exemplos para clarificar este conceito. Para que estes exemplos sejam fáceis de seguir, apenas analisaremos o IOPS. Mas a mesma lógica aplica-se ao rendimento.
Limite de E/S do disco
Configuração:
- Standard_D8s_v3
- IOPS não armazenadas em cache: 12.800
- Disco do SO E30
- IOPS: 500
- Dois discos de dados E30 × 2
- IOPS: 500
O aplicativo em execução na máquina virtual faz uma solicitação que requer 10.000 IOPS para a máquina virtual. Todos os quais são permitidos pela VM porque a máquina virtual Standard_D8s_v3 pode executar até 12.800 IOPS.
As 10.000 solicitações IOPS são divididas em três solicitações diferentes para os diferentes discos:
- 1.000 IOPS são solicitados para o disco do sistema operacional.
- São solicitadas 4.500 IOPS para cada disco de dados.
Todos os discos anexados são discos E30 e só podem lidar com 500 IOPS. Assim, respondem com 500 IOPS cada. O desempenho do aplicativo é limitado pelos discos anexados e ele só pode processar 1.500 IOPS. O aplicativo pode funcionar com desempenho máximo a 10.000 IOPS se forem usados discos com melhor desempenho, como discos P30 SSD Premium.
Tampamento de E/S da máquina virtual
Configuração:
- Standard_D8s_v3
- IOPS não armazenadas em cache: 12.800
- Disco do SO P30
- IOPS: 5.000
- Dois discos de dados P30 × 2
- IOPS: 5.000
O aplicativo em execução na máquina virtual faz uma solicitação que requer 15.000 IOPS. Infelizmente, a máquina virtual Standard_D8s_v3 só é provisionada para lidar com 12.800 IOPS. O aplicativo é limitado pelos limites da máquina virtual e deve alocar as 12.800 IOPS alocadas.
Essas 12.800 IOPS solicitadas são divididas em três solicitações diferentes para os diferentes discos:
- 4.267 IOPS são solicitadas para o disco do sistema operacional.
- São solicitadas 4.266 IOPS para cada disco de dados.
Todos os discos anexados são discos P30 que podem lidar com 5.000 IOPS. Assim, respondem com os valores solicitados.
Máquina virtual sem cache vs limites armazenados em cache
As máquinas virtuais habilitadas para armazenamento premium e cache de armazenamento premium têm dois limites de largura de banda de armazenamento diferentes. Vejamos a máquina virtual Standard_D8s_v3 como exemplo. Aqui está a documentação sobre a série Dsv3 e o Standard_D8s_v3:
Os dados de disco "Não armazenados em cache" no Armazenamento Remoto são os limites máximos de armazenamento padrão que a máquina virtual pode manipular.
Os dados de disco "Armazenados em cache" na guia Armazenamento Local são limites separados quando você habilita o cache do host.
O cache de host funciona aproximando o armazenamento da VM que pode ser gravada ou lida rapidamente. A quantidade de armazenamento disponível para a VM para cache de host está na documentação. Por exemplo, você pode ver o Standard_D8s_v3 vem com 200 GiB de armazenamento em cache.
Você pode habilitar o cache do host ao criar sua máquina virtual e anexar discos. Você também pode ativar e desativar o cache de host em seus discos em uma VM existente. Por padrão, os discos de dados compatíveis com cache têm o cache somente leitura habilitado. Os discos do sistema operacional com capacidade de cache têm o cache de leitura/gravação habilitado.
Você pode ajustar o cache do host para corresponder aos requisitos de carga de trabalho para cada disco. Você pode definir o cache do host como:
- Somente leitura: para cargas de trabalho que só fazem operações de leitura
- Leitura/gravação: para cargas de trabalho que fazem um balanço de operações de leitura e gravação
Se sua carga de trabalho não seguir nenhum desses padrões, não recomendamos que você use o cache do host.
Vamos examinar alguns exemplos de diferentes configurações de cache do host para ver como isso afeta o fluxo de dados e o desempenho. Neste primeiro exemplo, vemos o que acontece com as solicitações de E/S quando a configuração de cache do host é definida como Somente leitura.
Configuração:
- Standard_D8s_v3
- IOPS em cache: 16.000
- IOPS não armazenadas em cache: 12.800
- Disco de dados P30
- IOPS: 5.000
- Cache do host: somente leitura
Quando uma leitura é realizada e os dados desejados estão disponíveis no cache, o cache retorna os dados solicitados. Não há necessidade de ler a partir do disco. Essa leitura é contada para os limites armazenados em cache da VM.
Quando uma leitura é executada e os dados desejados não estão disponíveis no cache, a solicitação de leitura é retransmitida para o disco. Em seguida, o disco o apresenta no cache e na VM. Essa leitura é contada para o limite não armazenado em cache da VM e para o limite armazenado em cache da VM.
Quando uma gravação é executada, ela deve ser gravada no cache e no disco antes de ser considerada concluída. Essa gravação é contada para o limite não armazenado em cache da VM e para o limite armazenado em cache da VM.
Em seguida, vamos ver o que acontece com as solicitações de E/S quando a configuração de cache do host é definida como Leitura/gravação.
Configuração:
- Standard_D8s_v3
- IOPS em cache: 16.000
- IOPS não armazenadas em cache: 12.800
- Disco de dados P30
- IOPS: 5.000
- Cache do host: leitura/gravação
Uma leitura é tratada da mesma forma que uma leitura somente leitura. As gravações são a única coisa diferente com o cache de leitura/gravação. Quando a gravação com cache de host é definida como Leitura/gravação, a gravação só precisa ser gravada no cache do host para ser considerada concluída. A gravação é então gravada preguiçosamente no disco quando o cache é liberado periodicamente. Além disso, os clientes podem forçar uma descarga emitindo um f/sync
comando or fua
. Isso significa que uma gravação é contada para E/S armazenada em cache quando é gravada no cache. Quando é gravado preguiçosamente no disco, ele conta para a E/S não armazenada em cache.
Vamos continuar com nossa máquina virtual Standard_D8s_v3. Exceto desta vez, habilitamos o cache de host nos discos. Isso faz com que o limite de IOPS da VM seja de 16.000 IOPS. Anexados à VM estão três discos P30 subjacentes que podem lidar cada um com 5.000 IOPS.
Configuração:
- Standard_D8s_v3
- IOPS em cache: 16.000
- IOPS não armazenadas em cache: 12.800
- Disco do SO P30
- IOPS: 5.000
- Cache do host: leitura/gravação
- Dois discos de dados P30 × 2
- IOPS: 5.000
- Cache do host: leitura/gravação
O aplicativo usa uma máquina virtual Standard_D8s_v3 com cache habilitado. Faz um pedido de 16.000 IOPS. As solicitações são concluídas assim que são lidas ou gravadas no cache. As gravações são então gravadas preguiçosamente nos discos anexados.
Limites combinados de não cache e cache
Os limites armazenados em cache de uma máquina virtual são separados de seus limites não armazenados em cache. Isso significa que você pode habilitar o cache de host em discos conectados a uma VM enquanto não habilita o cache de host em outros discos. Essa configuração permite que suas máquinas virtuais obtenham uma E/S total de armazenamento do limite armazenado em cache mais o limite não armazenado em cache.
Vamos dar um exemplo para ajudá-lo a entender como esses limites funcionam juntos. Continuamos com a configuração Standard_D8s_v3 máquina virtual e discos premium anexados.
Configuração:
- Standard_D8s_v3
- IOPS em cache: 16.000
- IOPS não armazenadas em cache: 12.800
- Disco do SO P30
- IOPS: 5.000
- Cache do host: leitura/gravação
- Dois discos de dados P30 × 2
- IOPS: 5.000
- Cache do host: leitura/gravação
- Dois discos de dados P30 × 2
- IOPS: 5.000
- Cache do host: desativado
Nesse caso, o aplicativo em execução em uma máquina virtual Standard_D8s_v3 faz uma solicitação para 25.000 IOPS. A solicitação é dividida em 5.000 IOPS para cada um dos discos conectados. Três discos usam cache de host e dois discos não usam cache de host.
- Como os três discos que usam cache de host estão dentro dos limites armazenados em cache de 16.000, essas solicitações são concluídas com êxito. Não ocorre limite de desempenho de armazenamento.
- Como os dois discos que não usam cache de host estão dentro dos limites não armazenados em cache de 12.800, essas solicitações também são concluídas com êxito. Não ocorre limite máximo.