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 IOPS (operações de entrada/saída por segundo) e limites de desempenho 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 conectados a máquinas virtuais. Os discos têm seus próprios limites de IOPS e taxa de transferência.

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. Vamos analisar alguns exemplos para esclarecer esse conceito. Para tornar esses exemplos fáceis de seguir, vamos olhar apenas para IOPS. Mas, a mesma lógica se aplica à taxa de transferência.

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

Diagrama mostrando o limite do nível do disco.

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

Diagrama mostrando o limite de nível da máquina virtual.

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:

Gráfico mostrando as especificações D s v 3.

  • A taxa de transferência máxima de disco sem cache é o limite máximo de armazenamento padrão que a máquina virtual pode manipular.
  • O limite máximo de taxa de transferência de armazenamento em cache é um limite separado 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 terão o cache somente leitura habilitado. Os discos do sistema operacional com capacidade de cache terão o cache de leitura/gravação habilitado.

Captura de tela mostrando o cache do host.

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, veremos 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.

Diagrama mostrando um acerto de leitura de cache do host de leitura.

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.

Diagrama mostrando uma falha de leitura de cache do host de leitura.

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.

Diagrama mostrando uma gravação de cache do host de leitura.

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 comando f/sync ou fua. Isso significa que uma gravação é contada para E/S em cache quando é gravada no cache. Quando é gravado preguiçosamente no disco, ele conta para a E/S não armazenada em cache.

Diagrama mostrando a gravação em cache do host de leitura/gravação.

Vamos continuar com nossa máquina virtual Standard_D8s_v3. Exceto desta vez, ativaremos o cache do 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

Diagrama mostrando um exemplo de cache de host.

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. Continuaremos com a configuração anexada de máquina virtual Standard_D8s_v3 e discos premium.

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

Diagrama mostrando um exemplo de cache de host com armazenamento remoto.

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.