Desempenho de máquina virtual e disco

Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjuntos de dimensionamento 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 o seu disco IO 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 operações de entrada/saída por segundo (IOPS) e limites de desempenho de taxa de transferência com base no tipo e tamanho da máquina virtual. Os discos do sistema operacional e os discos de dados podem ser anexados às máquinas virtuais. Os discos têm seus próprios limites de IOPS e taxa de transferência.

O desempenho do seu aplicativo é limitado quando ele solicita mais IOPS ou taxa de transferência do que o alocado para as máquinas virtuais ou discos conectados. Quando limitado, o aplicativo apresenta desempenho abaixo do ideal. Isso pode levar a consequências negativas, como latência aumentada. Vamos examinar alguns exemplos para esclarecer esse conceito. Para tornar esses exemplos fáceis de seguir, examinaremos apenas IOPS. Mas, a mesma lógica se aplica à taxa de transferência.

Limitação de E/S de disco

Configuração:

  • Standard_D8s_v3
    • IOPS não armazenado em cache: 12.800
  • Disco do sistema operacional E30
    • IOPS: 500
  • Dois discos de dados E30 × 2
    • IOPS: 500

Diagrama mostrando a limitação de nível de 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 eles são permitidos pela VM porque a máquina virtual Standard_D8s_v3 pode executar até 12.800 IOPS.

As 10.000 solicitações de 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.
  • 4\.500 IOPS são solicitados para cada disco de dados.

Todos os discos anexados são discos E30 e só podem lidar com 500 IOPS. Portanto, eles respondem de volta com 500 IOPS cada. O desempenho do aplicativo é limitado pelos discos anexados e ele pode processar apenas 1.500 IOPS. O aplicativo pode funcionar com desempenho máximo a 10.000 IOPS se discos de melhor desempenho forem usados, como discos SSD Premium P30.

Limitação de IO de máquina virtual

Configuração:

  • Standard_D8s_v3
    • IOPS não armazenado em cache: 12.800
  • Disco do sistema operacional P30
    • IOPS: 5.000
  • Dois discos de dados P30 × 2
    • IOPS: 5.000

Diagrama mostrando o nível de limitação 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 é provisionada apenas para lidar com 12.800 IOPS. O aplicativo é limitado pelos limites da máquina virtual e deve alocar os 12.800 IOPS alocados.

Essas 12.800 IOPS solicitadas são divididas em três solicitações diferentes para os diferentes discos:

  • 4\.267 IOPS são solicitados para o disco do sistema operacional.
  • 4\.266 IOPS são solicitados para cada disco de dados.

Todos os discos anexados são discos P30 que podem lidar com 5.000 IOPS. Então, eles respondem de volta com os valores solicitados.

Máquina virtual sem cache versus 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. Vamos examinar a máquina virtual Standard_D8s_v3 como exemplo. Aqui está a documentação sobre a Dsv3-series e a Standard_D8s_v3:

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

  • A taxa de transferência máxima do disco não armazenado em 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 de host.

O cache de host funciona colocando o armazenamento mais próximo da VM que pode ser gravada ou lida com rapidez. A quantidade de armazenamento disponível para a VM para cache de host está na documentação. Por exemplo, você pode ver que Standard_D8s_v3 vem com 200 GiB de armazenamento em cache.

Você pode habilitar o cache de 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 compatíveis com cache terão o cache de leitura/gravação habilitado.

Captura de tela mostrando o cache de host.

Você pode ajustar o cache do host para corresponder aos seus 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 equilíbrio entre 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 de host.

Vamos executar alguns exemplos de diferentes configurações de cache de host para ver como ele 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 armazenado em cache: 12.800
  • Disco de dados P30
    • IOPS: 5.000
    • Cache de host: Somente leitura

Quando uma leitura é executada e os dados desejados estão disponíveis no cache, o cache retorna os dados solicitados. Não é necessário ler do disco. Essa leitura é contada em relação aos limites em cache da VM.

Diagrama mostrando uma ocorrência de leitura de cache de 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 envia tanto para o cache quanto para a VM. Essa leitura é contada em relação ao limite não armazenado em cache da VM e ao limite em cache da VM.

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

Quando uma gravação é executada, ela precisa ser gravada no cache e no disco antes que seja considerada concluída. Essa gravação é contada em relação ao limite não armazenado em cache da VM e ao limite em cache da VM.

Diagrama mostrando uma ocorrência de gravação de cache de host de leitura.

Em seguida, vamos examinar 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 armazenado em cache: 12.800
  • Disco de dados P30
    • IOPS: 5.000
    • Cache de host: Leitura/gravação

Uma leitura é tratada da mesma maneira que uma somente leitura. As gravações são a única coisa diferente em relação ao 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. Em seguida, a gravação é gravada lentamente no disco quando o cache é liberado periodicamente. Além disso, os clientes podem forçar uma liberação emitindo um comando f/sync ou fua. Isso significa que uma gravação é contada em relação a E/S em cache quando gravada no cache. Quando ela é gravada lentamente no disco, é contada para E/S não armazenada em cache.

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

Vamos continuar com nossa máquina virtual Standard_D8s_v3. No entanto, desta vez, habilitaremos o cache de host nos discos. Isso torna o limite de IOPS da VM de 16.000 IOPS. Anexados à VM estão três discos P30 subjacentes que podem lidar com 5.000 IOPS.

Configuração:

  • Standard_D8s_v3
    • IOPS em cache: 16.000
    • IOPS não armazenado em cache: 12.800
  • Disco do sistema operacional P30
    • IOPS: 5.000
    • Cache de host: Leitura/gravação
  • Dois discos de dados P30 × 2
    • IOPS: 5.000
    • Cache de host: Leitura/gravação

Diagrama mostrando um exemplo de cache de host.

O aplicativo usa uma máquina virtual Standard_D8s_v3 com armazenamento em cache habilitado. Ele faz uma solicitação de 16.000 IOPS. As solicitações são concluídas assim que são lidas ou gravadas no cache. Em seguida, as gravações são gravadas lentamente nos Discos anexados.

Limites combinados armazenados e não armazenados em cache

Os limites em cache de uma máquina virtual são separados dos limites não armazenados em cache. Isso significa que você pode habilitar o cache de host em discos anexados a uma VM e não habilitá-lo em outros discos. Essa configuração permite que suas máquinas virtuais obtenham uma E/S de armazenamento total do limite em cache além do limite não armazenado em cache.

Vamos executar um exemplo para ajudar você a entender como esses limites funcionam juntos. Continuaremos com a máquina virtual Standard_D8s_v3 e a configuração anexada de discos Premium.

Configuração:

  • Standard_D8s_v3
    • IOPS em cache: 16.000
    • IOPS não armazenado em cache: 12.800
  • Disco do sistema operacional P30
    • IOPS: 5.000
    • Cache de host: Leitura/gravação
  • Dois discos de dados P30 × 2
    • IOPS: 5.000
    • Cache de host: Leitura/gravação
  • Dois discos de dados P30 × 2
    • IOPS: 5.000
    • Cache de host: Desabilitado

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 de 25.000 IOPS. A solicitação é dividida em 5.000 IOPS para cada um dos discos anexados. Três discos usam o cache de host e dois discos não usam o cache de host.

  • Como os três discos que usam o cache de host estão dentro dos limites em cache de 16.000, essas solicitações são concluídas com êxito. Nenhuma limitação de desempenho de armazenamento ocorre.
  • Como os dois discos que não usam o 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 nenhuma limitação.