Partilhar via


Desempenho da máquina virtual e do disco

Aplica-se a: ✔️ VMs do Linux VMs ✔️ do Windows Conjuntos ✔️ ✔️ de dimensionamento flexíveis Conjuntos de dimensionamento uniformes

Este artigo ajuda a clarificar o desempenho do disco e como funciona quando combina discos do Azure Máquinas Virtuais e do Azure. Também descreve como pode diagnosticar estrangulamentos para a E/S do disco e as alterações que 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 débito com base no tipo e tamanho da máquina virtual. Os discos do SO e os discos de dados podem ser anexados a máquinas virtuais. Os discos têm os seus próprios limites de IOPS e 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. Vamos analisar alguns exemplos para clarificar este conceito. Para tornar estes exemplos fáceis de seguir, vamos ver apenas o IOPS. Contudo, a mesma lógica aplica-se ao débito.

Limite de E/S do disco

Configuração:

  • Standard_D8s_v3
    • IOPS não colocada em cache: 12 800
  • Disco do SO E30
    • IOPS: 500
  • Dois discos de dados E30 × 2
    • IOPS: 500

Diagrama a mostrar o limite ao nível do disco.

A aplicação em execução na máquina virtual faz um pedido que requer 10 000 IOPS para a máquina virtual. Todos os quais são permitidos pela VM porque o Standard_D8s_v3 máquina virtual pode executar até 12.800 IOPS.

Os 10 000 pedidos IOPS são divididos em três pedidos diferentes para os diferentes discos:

  • São pedidos 1000 IOPS ao disco do sistema operativo.
  • São pedidos 4500 IOPS a cada disco de dados.

Todos os discos anexados são discos E30 e só podem processar 500 IOPS. Assim, respondem com 500 IOPS cada. O desempenho da aplicação é limitado pelos discos anexados e só pode processar 1500 IOPS. A aplicação pode funcionar no pico do desempenho em 10 000 IOPS se forem utilizados discos com melhor desempenho, como discos SSD P30 Premium.

Limite de E/S da máquina virtual

Configuração:

  • Standard_D8s_v3
    • IOPS não colocada em cache: 12 800
  • Disco do SO P30
    • IOPS: 5000
  • Dois discos de dados P30 × 2
    • IOPS: 5000

Diagrama a mostrar o limite ao nível da máquina virtual.

A aplicação em execução na máquina virtual faz um pedido que requer 15 000 IOPS. Infelizmente, a máquina virtual Standard_D8s_v3 só é aprovisionada para processar 12 800 IOPS. A aplicação está limitada aos limites da máquina virtual e tem de alocar os 12.800 IOPS atribuídos.

Esses 12.800 IOPS pedidos são divididos em três pedidos diferentes para os diferentes discos:

  • São pedidos 4267 IOPS ao disco do sistema operativo.
  • São pedidos 4266 IOPS a cada disco de dados.

Todos os discos anexados são discos P30 que conseguem processar 5000 IOPS. Assim, respondem com os montantes pedidos.

Máquina virtual não colocada em cache vs. limites em cache

As máquinas virtuais que estão ativadas para armazenamento premium e colocação em cache de armazenamento premium têm dois limites de largura de banda de armazenamento diferentes. Vejamos o Standard_D8s_v3 máquina virtual como um exemplo. Eis a documentação sobre a série Dsv3 e a Standard_D8s_v3:

Gráfico a mostrar as especificações de D s v 3.

  • O débito máximo do disco não colocado em cache é o limite máximo de armazenamento predefinido que a máquina virtual consegue processar.
  • O limite máximo de débito de armazenamento em cache é um limite separado quando ativa a colocação em cache do anfitrião.

A colocação em cache do anfitrião funciona ao aproximar o armazenamento da VM que pode ser escrita ou lida rapidamente. A quantidade de armazenamento que está disponível para a VM para colocação em cache do anfitrião está na documentação. Por exemplo, pode ver que o Standard_D8s_v3 inclui 200 GiB de armazenamento em cache.

Pode ativar a colocação em cache do anfitrião quando criar a máquina virtual e anexar discos. Também pode ativar e desativar a colocação em cache do anfitrião nos discos numa VM existente. Por predefinição, os discos de dados com capacidade de cache terão a colocação em cache só de leitura ativada. Os discos do SO compatíveis com cache terão a colocação em cache de leitura/escrita ativada.

Captura de ecrã a mostrar a colocação em cache do anfitrião.

Pode ajustar a colocação em cache do anfitrião para corresponder aos requisitos da carga de trabalho para cada disco. Pode definir a colocação em cache do anfitrião como:

  • Só de leitura: para cargas de trabalho que só fazem operações de leitura
  • Leitura/escrita: para cargas de trabalho que fazem um equilíbrio entre operações de leitura e escrita

Se a carga de trabalho não seguir nenhum destes padrões, não recomendamos que utilize a colocação em cache do anfitrião.

Vamos ver alguns exemplos de diferentes definições de cache de anfitrião para ver como afeta o fluxo de dados e o desempenho. Neste primeiro exemplo, vamos ver o que acontece com pedidos de E/S quando a definição de colocação em cache do anfitrião está definida como Só de leitura.

Configuração:

  • Standard_D8s_v3
    • IOPS em cache: 16 000
    • IOPS não colocada em cache: 12 800
  • Disco de dados P30
    • IOPS: 5000
    • Colocação em cache do anfitrião: só de leitura

Quando uma leitura é executada e os dados pretendidos estão disponíveis na cache, a cache devolve os dados pedidos. Não é necessário ler a partir do disco. Esta leitura é contabilizada para os limites em cache da VM.

Diagrama a mostrar um anfitrião de leitura a colocar em cache o êxito de leitura.

Quando uma leitura é executada e os dados pretendidos não estão disponíveis na cache, o pedido de leitura é reencaminhado para o disco. Em seguida, o disco apresenta-o para a cache e para a VM. Esta leitura é contabilizada para o limite não colocado em cache da VM e para o limite em cache da VM.

Diagrama a mostrar uma leitura da cache do anfitrião como falta de leitura.

Quando uma escrita é executada, a escrita tem de ser escrita na cache e no disco antes de ser considerada concluída. Esta escrita é contabilizada para o limite não colocado em cache da VM e para o limite em cache da VM.

Diagrama a mostrar a escrita em cache de um anfitrião de leitura.

Em seguida, vamos ver o que acontece com pedidos de E/S quando a definição da cache do anfitrião está definida como Leitura/escrita.

Configuração:

  • Standard_D8s_v3
    • IOPS em cache: 16 000
    • IOPS não colocada em cache: 12 800
  • Disco de dados P30
    • IOPS: 5000
    • Colocação em cache do anfitrião: Leitura/escrita

Uma leitura é processada da mesma forma que uma só de leitura. As escritas são a única coisa que é diferente com a colocação em cache de leitura/escrita. Quando a escrita com a colocação em cache do anfitrião está definida como Leitura/escrita, a escrita só tem de ser escrita na cache do anfitrião para ser considerada concluída. Em seguida, a escrita é escrita preguiçosamente no disco quando a cache é removida periodicamente. Além disso, os clientes podem forçar uma descarga ao emitir um comando f/sync ou fua. Isto significa que uma escrita é contada para E/S em cache quando é escrita na cache. Quando é escrita preguiçosamente no disco, conta para a E/S não colocada em cache.

Diagrama que mostra a escrita em cache do anfitrião de leitura/escrita.

Vamos continuar com a nossa máquina virtual Standard_D8s_v3. Exceto desta vez, vamos ativar a colocação em cache do anfitrião nos discos. Isto 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 processar cada um 5000 IOPS.

Configuração:

  • Standard_D8s_v3
    • IOPS em cache: 16 000
    • IOPS não colocada em cache: 12 800
  • Disco do SO P30
    • IOPS: 5000
    • Colocação em cache do anfitrião: Leitura/escrita
  • Dois discos de dados P30 × 2
    • IOPS: 5000
    • Colocação em cache do anfitrião: Leitura/escrita

Diagrama a mostrar um exemplo de colocação em cache de anfitrião.

A aplicação utiliza uma máquina virtual Standard_D8s_v3 com a colocação em cache ativada. Faz um pedido de 16 000 IOPS. Os pedidos são concluídos assim que forem lidos ou escritos na cache. As escritas são escritas preguiçosamente nos Discos anexados.

Limites combinados não colocados em cache e não colocados em cache

Os limites em cache de uma máquina virtual são separados dos limites não colocados em cache. Isto significa que pode ativar a colocação em cache do anfitrião em discos ligados a uma VM e não ativar a colocação em cache do anfitrião noutros discos. Esta configuração permite que as máquinas virtuais obtenham uma E/S de armazenamento total do limite em cache e o limite não colocado em cache.

Vamos analisar um exemplo para o ajudar a compreender como estes limites funcionam em conjunto. Vamos continuar com a Standard_D8s_v3 máquina virtual e a configuração dos discos premium anexados.

Configuração:

  • Standard_D8s_v3
    • IOPS em cache: 16 000
    • IOPS não colocada em cache: 12 800
  • Disco do SO P30
    • IOPS: 5000
    • Colocação em cache do anfitrião: Leitura/escrita
  • Dois discos de dados P30 × 2
    • IOPS: 5000
    • Colocação em cache do anfitrião: Leitura/escrita
  • Dois discos de dados P30 × 2
    • IOPS: 5000
    • Colocação em cache do anfitrião: Desativado

Diagrama a mostrar um exemplo de colocação em cache de anfitriões com armazenamento remoto.

Neste caso, a aplicação em execução numa máquina virtual Standard_D8s_v3 faz um pedido de 25 000 IOPS. O pedido é dividido como 5000 IOPS em cada um dos discos anexados. Três discos utilizam a colocação em cache do anfitrião e dois discos não utilizam a colocação em cache do anfitrião.

  • Uma vez que os três discos que utilizam a colocação em cache do anfitrião estão dentro dos limites em cache de 16 000, esses pedidos são concluídos com êxito. Não ocorre uma limitação do desempenho do armazenamento.
  • Uma vez que os dois discos que não utilizam a colocação em cache do anfitrião estão dentro dos limites não colocados em cache de 12.800, esses pedidos também são concluídos com êxito. Não ocorre qualquer limitação.