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 SO 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
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
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:
Os dados do disco "Sem cache" no Armazenamento Remoto são os limites máximos de armazenamento padrão que a máquina virtual pode manipular.
Os dados do disco "Em cache" na guia Armazenamento local são limites separados quando você habilita o cache do 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 com capacidade de 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 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. Nesse 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 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 há necessidade de ler o disco. Essa leitura é contada em relação aos limites em cache da VM.
Quando uma leitura é realizada 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.
Quando uma gravação é realizada, ela precisa ser gravada no cache e no disco antes de ser 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.
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. Os clientes também 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 é contabilizado no IO sem cache.
Vamos continuar com nossa máquina virtual Standard_D8s_v3. Só que dessa vez habilitamos o cache do 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
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. Continuamos com a configuração da máquina virtual Standard_D8s_v3 e dos discos premium anexados.
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
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.