Prestazioni di macchine virtuali e dischi

Si applica a: ✔️ macchine virtuali Linux ✔️ macchine virtuali Windows ✔️ set di scalabilità flessibili ✔️ set di scalabilità uniformi

Questo articolo illustra come interagiscono Macchine virtuali di Azure (VM) e i limiti delle prestazioni del disco gestito. Descrive anche come diagnosticare i colli di bottiglia dell'I/O del disco e ottimizzare le prestazioni di archiviazione.

Interazione tra macchine virtuali e limiti di prestazioni del disco gestito Azure

Le macchine virtuali di Azure hanno limiti di operazioni di input/output al secondo (IOPS) e di throughput in base al tipo e alle dimensioni della macchina virtuale. I dischi del sistema operativo gestiti e i dischi dati hanno limiti propri di IOPS e larghezza di banda.

Allocazione dei dischi e prestazioni

I dischi collegati a una macchina virtuale Azure usano tre percorsi di I/O. Il diagramma seguente mostra come Azure alloca le operazioni di larghezza di banda e input/output al secondo (IOPS) in questi percorsi in tempo reale.

Diagramma dell'I/O del disco gestito senza cache che passa attraverso i limiti del disco e della rete della VM. Anche l'I/O memorizzato nella cache usa i limiti dell'SSD, mentre gli hit della cache e l'I/O del disco temporaneo usano l'SSD del server.

Il primo percorso di I/O è il percorso del disco gestito non memorizzato nella cache. Le operazioni di I/O usano questo percorso quando si usa un disco gestito e si imposta la memorizzazione nella cache dell'host su none. Le operazioni di I/O che utilizzano questo percorso vengono eseguite in base al provisioning a livello di disco e successivamente al provisioning a livello di rete della macchina virtuale (VM) per operazioni di I/O al secondo e capacità effettiva.

Il secondo percorso di I/O è il percorso del disco gestito memorizzato nella cache. Le operazioni di I/O del disco gestito memorizzato nella cache usano un'unità SSD vicina alla macchina virtuale. Questa unità SSD ha un provisioning di operazioni di I/O al secondo e capacità effettiva dedicato e viene visualizzata come "provisioning a livello di unità SSD" nel diagramma.

Quando un disco gestito memorizzato nella cache avvia una lettura, la richiesta verifica innanzitutto se i dati si trovano nell'unità SSD del server. Se i dati non sono presenti, si verifica un errore memorizzato nella cache. Le operazioni di I/O vengono quindi eseguite in base al provisioning a livello di unità SSD, al provisioning a livello di disco e quindi al provisioning a livello di rete della macchina virtuale per operazioni di I/O al secondo e capacità effettiva.

Quando l'unità SSD del server avvia letture di I/O memorizzate nella cache presenti sull'unità SSD del server, si verifica un colpo nella cache. L'operazione di I/O viene quindi eseguita in base al provisioning a livello di unità SSD. Le scritture che hanno origine da un disco gestito nella cache seguono sempre il percorso di un mancato riscontro nella cache. Passano attraverso il provisioning a livello di SSD, a livello di disco e a livello di rete delle macchine virtuali.

Il terzo percorso è relativo al disco temporaneo. È disponibile solo nelle macchine virtuali che supportano dischi temporanei. Un'operazione di I/O che utilizza questo percorso si basa sul provisioning a livello di SSD per IOPS e throughput.

Il diagramma seguente illustra un esempio di queste limitazioni. Il sistema impedisce a una macchina virtuale Standard_D2s_v3 di raggiungere le 5.000 operazioni di I/O al secondo potenzialidi un disco P30, indipendentemente dalla memorizzazione nella cache, a causa dei limiti a livello di unità SSD e di rete.

Diagramma di una macchina virtuale Standard_D2s_v3 che limita le prestazioni del disco P30 a 3.200 operazioni di I/O e 32 MBps per operazioni di I/O non memorizzate nella cache o 4.000 IOPS e 32 MBps per le operazioni di I/O memorizzate nella cache.

Azure usa un canale di rete con priorità per il traffico su disco. Il traffico su disco ha la precedenza sul traffico di rete con priorità bassa. Questa definizione di priorità consente ai dischi di mantenere le prestazioni previste in caso di contesa di rete.

Analogamente, Archiviazione di Azure gestisce in background le contenzioni delle risorse e altri problemi tramite il bilanciamento automatico del carico. Archiviazione di Azure alloca le risorse necessarie quando si crea un disco e applica il bilanciamento proattivo e reattivo delle risorse per gestire il livello di traffico. Questo comportamento garantisce che i dischi possano soddisfare gli obiettivi previsti in termini di operazioni di I/O al secondo e velocità effettiva. Usare le metriche a livello di macchina virtuale e a livello di disco per tenere traccia delle prestazioni e configurare gli avvisi in base alle esigenze.

Limite di I/O del disco

Le prestazioni dell'applicazione vengono limitate quando richiedono più operazioni di I/O al secondo o velocità effettiva rispetto a quelle assegnate per le macchine virtuali o i dischi collegati. Quando viene limitata, l'applicazione presenta prestazioni non ottimali. Questa condizione può causare conseguenze negative, ad esempio un aumento della latenza. Gli esempi seguenti utilizzano IOPS, ma la stessa logica si applica anche al throughput.

Configurazione dell'esempio di limitazione a livello di disco:

  • Standard_D8s_v3
    • Operazioni di I/O al secondo non memorizzate nella cache: 12.800
  • Disco del sistema operativo E30
    • IOPS: 500
  • Due dischi dati E30 × 2
    • IOPS: 500

Diagramma di una richiesta di 10.000 operazioni di I/O al secondo suddivise in tre dischi E30, ognuno con un massimo di 500 operazioni di I/O al secondo, con conseguente risposta di 1.500 operazioni di I/O al secondo.

L'applicazione in esecuzione nella macchina virtuale effettua una richiesta che richiede 10.000 operazioni di I/O al secondo nella macchina virtuale. Tutto ciò è supportato dalla VM perché la macchina virtuale Standard_D8s_v3 può gestire fino a 12.800 IOPS.

Le 10.000 richieste di I/O al secondo vengono suddivise in tre richieste diverse per i diversi dischi:

  • Vengono richieste 1.000 operazioni di I/O al secondo al disco del sistema operativo.
  • Per ogni disco dati sono richiesti 4.500 operazioni di I/O al secondo.

Tutti i dischi collegati sono dischi E30 e possono gestire solo 500 operazioni di I/O al secondo. Quindi, rispondono con 500 operazioni di I/O al secondo ciascuno. Le prestazioni dell'applicazione sono limitate dai dischi collegati e possono elaborare solo 1.500 operazioni di I/O al secondo. L'applicazione potrebbe funzionare a prestazioni massime a 10.000 operazioni di I/O al secondo se vengono usati dischi con prestazioni migliori, ad esempio dischi P30 SSD Premium.

Limite di I/O della macchina virtuale

Configurazione di esempio di limite a livello di macchina virtuale:

  • Standard_D8s_v3
    • Operazioni di I/O al secondo non memorizzate nella cache: 12.800
  • Disco del sistema operativo P30
    • IOPS: 5.000
  • Due dischi dati P30 × 2
    • IOPS: 5.000

Diagramma di una richiesta di 15.000 operazioni di I/O al secondo a tre dischi P30 limitati dalla macchina virtuale Standard_D8s_v3 a 12.800 operazioni di I/O al secondo.

L'applicazione in esecuzione nella macchina virtuale effettua una richiesta che richiede 15.000 operazioni di I/O al secondo. Sfortunatamente, la macchina virtuale Standard_D8s_v3 è configurata per supportare solo 12.800 IOPS. L'applicazione è limitata dai limiti della macchina virtuale e deve allocare le 12.800 operazioni di I/O al secondo.

Tali 12.800 operazioni di I/O al secondo richieste vengono suddivise in tre richieste diverse per i diversi dischi:

  • Sono richiesti 4.267 IOPS sul disco del sistema operativo.
  • Per ogni disco dati sono richieste 4.266 operazioni di I/O al secondo.

Tutti i dischi collegati sono dischi P30 che possono gestire 5.000 operazioni di I/O al secondo. Quindi, rispondono indicando gli importi richiesti.

Limiti memorizzati nella cache e non memorizzati nella cache della macchina virtuale

Le macchine virtuali abilitate sia per l'archiviazione Premium che per la memorizzazione nella cache di archiviazione Premium hanno due limiti di larghezza di banda di archiviazione diversi. Si esaminerà ora la macchina virtuale Standard_D8s_v3 come esempio. Ecco la documentazione sulla serie Dsv3 e sulla Standard_D8s_v3:

  • I dati del disco "non memorizzati nella cache" in Archiviazione remota sono i limiti massimi di archiviazione predefiniti che la macchina virtuale può gestire. Screenshot dei limiti di archiviazione remota Standard_D8s_v3 che mostra 16 dischi, 12.800 operazioni di I/O al secondo non memorizzate nella cache, velocità effettiva 192 MBps e limiti di burst di 16.000 operazioni di I/O al secondo e 400 MBps.

  • I dati del disco "memorizzati nella cache" nella scheda Archiviazione locale sono limiti separati quando si abilita la memorizzazione nella cache dell'host. Screenshot dei limiti di archiviazione locale di Standard_D8s_v3 che mostra un disco temporaneo da 64 GiB, una cache da 200 GiB, 16.000 operazioni di I/O al secondo memorizzate nella cache e una velocità effettiva memorizzata nella cache di 128 MBps.

Configurare la memorizzazione nella cache dell'host

La memorizzazione nella cache dell'host funziona portando l'archiviazione più vicina alla macchina virtuale che può essere scritta o letta in modo rapido. La quantità di spazio di archiviazione disponibile per la macchina virtuale per la memorizzazione nella cache dell'host è disponibile nella documentazione. Ad esempio, è possibile visualizzare il Standard_D8s_v3 viene fornito con 200 GiB di archiviazione della cache.

È possibile abilitare la memorizzazione nella cache dell'host quando si crea la macchina virtuale e si collegano dischi. È anche possibile attivare e disattivare la memorizzazione nella cache host sui dischi di una VM esistente. Per impostazione predefinita, nei dischi dati che supportano la memorizzazione nella cache, questa non è abilitata. I dischi del sistema operativo abilitati per la cache hanno la cache in lettura/scrittura abilitata.

Screenshot delle impostazioni del disco del portale di Azure che mostra la memorizzazione nella cache di lettura/scrittura per il disco del sistema operativo, la memorizzazione nella cache di sola lettura per un disco dati e la memorizzazione nella cache di lettura/scrittura per un altro disco dati.

È possibile modificare la memorizzazione nella cache dell'host in modo che corrisponda ai requisiti del carico di lavoro per ogni disco. È possibile impostare la memorizzazione nella cache dell'host in modo che sia:

  • Sola lettura: per i carichi di lavoro che eseguono solo operazioni di lettura
  • Lettura/scrittura: per i carichi di lavoro che eseguono un bilanciamento delle operazioni di lettura e scrittura

Se il carico di lavoro non segue uno di questi modelli, non è consigliabile usare la memorizzazione nella cache dell'host.

Memorizzazione nella cache dell'host in sola lettura

Nell'esempio seguente viene illustrato il flusso delle richieste di I/O quando si imposta la memorizzazione nella cache dell'host su Sola lettura.

Esempio di configurazione della cache host di sola lettura:

  • Standard_D8s_v3
    • Operazioni di I/O al secondo memorizzate nella cache: 16.000
    • Operazioni di I/O al secondo non memorizzate nella cache: 12.800
  • Disco dati P30
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: sola lettura

Quando viene eseguita una lettura e i dati desiderati sono disponibili nella cache, la cache restituisce i dati richiesti. Non è necessario leggere dal disco. Questa lettura viene conteggiata in base ai limiti memorizzati nella cache della macchina virtuale.

Diagramma di una richiesta di lettura Standard_D8s_v3 servita dalla cache host senza accedere al disco dati P30.

Quando viene eseguita una lettura e i dati desiderati non sono disponibili nella cache, la richiesta di lettura viene inoltrata al disco. Quindi il disco lo espone sia alla cache che alla macchina virtuale. Questa lettura viene conteggiata sia per il limite non memorizzato nella cache della macchina virtuale che per il limite memorizzato nella cache della macchina virtuale.

Diagramma di un flusso di lettura senza cache dalla macchina virtuale Standard_D8s_v3 tramite la cache host al disco dati P30, con la risposta restituita tramite la cache.

Quando viene eseguita una scrittura, la scrittura deve essere scritta sia nella cache che nel disco prima che venga considerata completa. Questa scrittura viene conteggiata in base al limite non memorizzato nella cache della macchina virtuale e al limite memorizzato nella cache della macchina virtuale.

Schema di un'operazione di scrittura con cache host di sola lettura che passa dalla macchina virtuale Standard_D8s_v3 attraverso la cache host fino al disco dati P30 prima del completamento dell'operazione.

Memorizzazione nella cache dell'host di lettura/scrittura

Nell'esempio seguente viene illustrato il flusso delle richieste di I/O quando si imposta la memorizzazione nella cache dell'host su Lettura/scrittura.

Configurazione di esempio per la cache host in lettura/scrittura:

  • Standard_D8s_v3
    • Operazioni di I/O al secondo memorizzate nella cache: 16.000
    • Operazioni di I/O al secondo non memorizzate nella cache: 12.800
  • Disco dati P30
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: lettura/scrittura

Con la memorizzazione nella cache dell'host di lettura/scrittura, le letture con riscontri nella cache vengono conteggiate in base ai limiti memorizzati nella cache della macchina virtuale. Le letture con mancato accesso alla cache vengono conteggiate sia nei limiti con cache sia in quelli senza cache della VM. Le scritture vengono gestite in modo diverso: una scrittura deve raggiungere solo la cache host da considerare completa. L’operazione di scrittura viene quindi eseguita in modo differito sul disco quando la cache viene svuotata periodicamente. È anche possibile forzare uno svuotamento impartendo il comando f/sync o fua. Una scrittura viene conteggiata come operazione di I/O nella cache quando viene scritta nella cache e come operazione di I/O non nella cache quando viene scritta in modo differito sul disco.

Diagramma che illustra una scrittura con cache host in lettura/scrittura, completata nella cache dell'host e scritta in modo differito sul disco dati P30.

Esempio di limite memorizzato nella cache

L'esempio seguente usa una macchina virtuale Standard_D8s_v3 con memorizzazione nella cache host abilitata e tre dischi P30 collegati. La macchina virtuale ha un limite di 16.000 operazioni di I/O al secondo memorizzate nella cache e ogni disco P30 può gestire 5.000 operazioni di I/O al secondo.

Configurazione dell'esempio di limite memorizzato nella cache:

  • Standard_D8s_v3
    • Operazioni di I/O al secondo memorizzate nella cache: 16.000
    • Operazioni di I/O al secondo non memorizzate nella cache: 12.800
  • Disco del sistema operativo P30
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: lettura/scrittura
  • Due dischi dati P30 × 2
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: lettura/scrittura

Diagramma di una macchina virtuale Standard_D8s_v3 che completa una richiesta di 16.000 operazioni di I/O al secondo tramite la cache host, che scrive in modo differimento in un disco del sistema operativo P30 e due dischi dati P30.

L'applicazione usa una macchina virtuale Standard_D8s_v3 con memorizzazione nella cache abilitata. Effettua una richiesta per 16.000 operazioni di I/O al secondo. Le richieste vengono completate non appena vengono lette o scritte nella cache. Le scritture vengono quindi scritte in modo differito nei dischi collegati.

Limiti combinati senza cache e con cache

I limiti memorizzati nella cache di una macchina virtuale sono separati dai limiti non memorizzati nella cache. Questa separazione significa che è possibile abilitare la memorizzazione nella cache dell'host in alcuni dischi collegati a una macchina virtuale, senza abilitare la memorizzazione nella cache dell'host in altri dischi. Questa configurazione consente alle macchine virtuali di ottenere un'I/O totale di archiviazione del limite memorizzato nella cache più il limite non memorizzato nella cache.

L'esempio seguente illustra come i limiti memorizzati nella cache e non memorizzati nella cache interagiscono in una macchina virtuale Standard_D8s_v3 con unità SSD Premium collegate.

Configurazione di esempio combinata di limiti memorizzati nella cache e non memorizzata nella cache:

  • Standard_D8s_v3
    • Operazioni di I/O al secondo memorizzate nella cache: 16.000
    • Operazioni di I/O al secondo non memorizzate nella cache: 12.800
  • Disco del sistema operativo P30
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: lettura/scrittura
  • Due dischi dati P30 × 2
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: lettura/scrittura
  • Due dischi dati P30 × 2
    • IOPS: 5.000
    • Memorizzazione nella cache dell'host: disabilitata

Diagramma di una macchina virtuale Standard_D8s_v3 che soddisfa 25.000 operazioni di I/O al secondo inviando 15.000 operazioni di I/O al secondo memorizzate nella cache a tre dischi P30 e 10.000 operazioni di I/O al secondo non memorizzate nella cache a due dischi dati P30.

In questo caso, l'applicazione in esecuzione in una macchina virtuale Standard_D8s_v3 effettua una richiesta per 25.000 operazioni di I/O al secondo. La richiesta viene suddivisa come 5.000 operazioni di I/O al secondo in ognuno dei dischi collegati. Tre dischi usano la memorizzazione nella cache dell'host e due dischi non usano la memorizzazione nella cache dell'host.

  • Poiché i tre dischi che usano la memorizzazione nella cache host sono entro i limiti memorizzati nella cache di 16.000, tali richieste vengono completate correttamente. Non si verifica alcun limite delle prestazioni di archiviazione.
  • Poiché i due dischi che non usano la memorizzazione nella cache dell'host si trovano entro i limiti non memorizzati nella cache pari a 12.800, tali richieste vengono completate correttamente. Non viene applicata alcuna limitazione.