Prestaties van virtuele machine en schijf

Van toepassing op: ✔️ Linux-VM's ✔️ Windows-VM's ✔️ Flexibele schaalsets ✔️ Uniforme schaalsets

Dit artikel helpt bij het verduidelijken van schijfprestaties en hoe deze werkt wanneer u Azure Virtual Machines en Azure-schijven combineert. Ook wordt beschreven hoe u knelpunten voor uw schijf-IO kunt diagnosticeren en welke wijzigingen u kunt aanbrengen om de prestaties te optimaliseren.

Hoe werken schijfprestaties?

Virtuele Azure-machines hebben prestatielimieten voor invoer-/uitvoerbewerkingen per seconde (IOPS) en doorvoer op basis van het type en de grootte van de virtuele machine. Besturingssysteemschijven en gegevensschijven kunnen worden gekoppeld aan virtuele machines. De schijven hebben hun eigen IOPS- en doorvoerlimieten.

De prestaties van uw toepassing worden beperkt wanneer er meer IOPS of doorvoer wordt aangevraagd dan is toegewezen aan de virtuele machines of gekoppelde schijven. Indien beperkt, ervaart de toepassing suboptimale prestaties. Dit kan negatieve gevolgen hebben, zoals een verhoogde latentie. Laten we een paar voorbeelden bekijken om dit concept te verduidelijken. Om deze voorbeelden eenvoudig te volgen, kijken we alleen naar IOPS. Maar dezelfde logica is van toepassing op doorvoer.

Schijf-IO-limieten

Setup:

  • Standard_D8s_v3
    • IOPS zonder cache: 12.800
  • E30-besturingssysteemschijf
    • IOPS: 500
  • Twee E30-gegevensschijven × 2
    • IOPS: 500

Diagram met schijfniveaulimieten.

De toepassing die op de virtuele machine wordt uitgevoerd, doet een aanvraag waarvoor 10.000 IOPS naar de virtuele machine zijn vereist. Deze worden allemaal toegestaan door de VM omdat de Standard_D8s_v3 virtuele machine maximaal 12.800 IOPS kan uitvoeren.

De 10.000 IOPS-aanvragen worden onderverdeeld in drie verschillende aanvragen voor de verschillende schijven:

  • 1000 IOPS worden aangevraagd op de schijf van het besturingssysteem.
  • Er worden 4500 IOPS aangevraagd voor elke gegevensschijf.

Alle gekoppelde schijven zijn E30-schijven en kunnen slechts 500 IOPS verwerken. Ze reageren dus met elk 500 IOPS. De prestaties van de toepassing worden beperkt door de gekoppelde schijven en kunnen slechts 1500 IOPS verwerken. De toepassing kan bij piekprestaties bij 10.000 IOPS werken als er beter presterende schijven worden gebruikt, zoals Premium SSD P30-schijven.

IO-limieten voor virtuele machines

Setup:

  • Standard_D8s_v3
    • IOPS zonder cache: 12.800
  • P30-besturingssysteemschijf
    • IOPS: 5.000
  • Twee P30-gegevensschijven × 2
    • IOPS: 5.000

Diagram met limieten op het niveau van virtuele machines.

De toepassing die op de virtuele machine wordt uitgevoerd, doet een aanvraag waarvoor 15.000 IOPS zijn vereist. Helaas is de Standard_D8s_v3 virtuele machine alleen ingericht voor het verwerken van 12.800 IOPS. De toepassing is beperkt door de limieten voor virtuele machines en moet de toegewezen 12.800 IOPS toewijzen.

Deze 12.800 aangevraagde IOPS worden onderverdeeld in drie verschillende aanvragen voor de verschillende schijven:

  • 4.267 IOPS worden aangevraagd op de besturingssysteemschijf.
  • Er worden 4.266 IOPS aangevraagd voor elke gegevensschijf.

Alle gekoppelde schijven zijn P30-schijven die 5000 IOPS kunnen verwerken. Dus ze reageren terug met hun aangevraagde bedragen.

Limieten voor niet in cache opgeslagen virtuele machine versus limieten in cache

Virtuele machines die zijn ingeschakeld voor zowel Premium Storage als Opslag in cache hebben twee verschillende limieten voor opslagbandbreedte. Laten we de Standard_D8s_v3 virtuele machine als voorbeeld bekijken. Dit is de documentatie over de Dsv3-serie en de Standard_D8s_v3:

Grafiek met D s v 3-specificaties.

  • De maximale schijfdoorvoer zonder cache is de maximale opslaglimiet die de virtuele machine kan verwerken.
  • De maximale doorvoerlimiet voor opslag in de cache is een afzonderlijke limiet wanneer u hostcaching inschakelt.

Hostcaching werkt door opslag dichter bij de VIRTUELE machine te brengen die snel kan worden geschreven of gelezen. De hoeveelheid opslagruimte die beschikbaar is voor de VM voor hostcaching, staat in de documentatie. U kunt bijvoorbeeld de Standard_D8s_v3 wordt geleverd met 200 GiB aan cacheopslag.

U kunt hostcaching inschakelen wanneer u uw virtuele machine maakt en schijven koppelt. U kunt ook hostcaching in- en uitschakelen op uw schijven op een bestaande VM. Voor gegevensschijven die geschikt zijn voor cache is standaard alleen-lezen opslaan in cache ingeschakeld. Voor besturingssysteemschijven die geschikt zijn voor cache, is de cache voor lezen/schrijven ingeschakeld.

Schermopname van hostcaching.

U kunt de hostcaching aanpassen aan uw workloadvereisten voor elke schijf. U kunt de caching van uw host instellen op:

  • Alleen-lezen: voor workloads die alleen leesbewerkingen uitvoeren
  • Lezen/schrijven: voor workloads die een balans tussen lees- en schrijfbewerkingen uitvoeren

Als uw workload geen van deze patronen volgt, raden we u af om hostcaching te gebruiken.

Laten we een paar voorbeelden van verschillende instellingen voor de hostcache bekijken om te zien hoe dit van invloed is op de gegevensstroom en prestaties. In dit eerste voorbeeld bekijken we wat er gebeurt met IO-aanvragen wanneer de instelling voor de hostcache is ingesteld op Alleen-lezen.

Setup:

  • Standard_D8s_v3
    • IOPS in cache: 16.000
    • IOPS zonder cache: 12.800
  • P30-gegevensschijf
    • IOPS: 5.000
    • Hostcaching: alleen-lezen

Wanneer een leesbewerking wordt uitgevoerd en de gewenste gegevens beschikbaar zijn in de cache, retourneert de cache de aangevraagde gegevens. Het is niet nodig om van de schijf te lezen. Deze leesbewerking wordt meegeteld voor de limieten in de cache van de VM.

Diagram met een leestreffer in de cache van de host.

Wanneer een leesbewerking wordt uitgevoerd en de gewenste gegevens niet beschikbaar zijn in de cache, wordt de leesaanvraag doorgestuurd naar de schijf. Vervolgens wordt deze door de schijf naar zowel de cache als de VM weergegeven. Deze leesbewerking wordt meegeteld voor zowel de limiet voor niet-cache van de VM als de limiet voor de VM in de cache.

Diagram van een leeshost in de cache opslaan van een leesmuffrouw.

Wanneer een schrijfbewerking wordt uitgevoerd, moet de schrijfbewerking naar zowel de cache als de schijf worden geschreven voordat deze als voltooid wordt beschouwd. Deze schrijfbewerking wordt meegeteld voor de limiet voor niet-cache van de VM en de limiet voor de vm in de cache.

Diagram met een schrijfbewerking van een leeshost in de cache.

Laten we nu eens kijken wat er gebeurt met IO-aanvragen wanneer de instelling voor de hostcache is ingesteld op Lezen/schrijven.

Setup:

  • Standard_D8s_v3
    • IOPS in cache: 16.000
    • IOPS zonder cache: 12.800
  • P30-gegevensschijf
    • IOPS: 5.000
    • Hostcaching: lezen/schrijven

Een leesbewerking wordt op dezelfde manier verwerkt als een alleen-lezen. Schrijfbewerkingen zijn het enige dat anders is met de cache voor lezen/schrijven. Wanneer schrijven met hostcaching is ingesteld op Lezen/schrijven, hoeft de schrijfbewerking alleen naar de hostcache te worden geschreven om als voltooid te worden beschouwd. De schrijfbewerking wordt vervolgens lui naar de schijf geschreven wanneer de cache periodiek wordt leeggemaakt. Klanten kunnen bovendien een leegmaken afdwingen door een f/sync- of fua-opdracht uit te geven. Dit betekent dat een schrijfbewerking wordt meegeteld voor io in de cache wanneer deze naar de cache wordt geschreven. Wanneer deze eenvoudig naar de schijf wordt geschreven, telt het mee voor de niet-in de cache opgeslagen I/O.

Diagram van het lezen/schrijven van schrijfbewerkingen in de cache van de host.

Laten we doorgaan met onze Standard_D8s_v3 virtuele machine. Behalve deze keer schakelen we hostcaching in op de schijven. Hierdoor is de IOPS van de VM beperkt tot 16.000 IOPS. Aan de VM zijn drie onderliggende P30-schijven gekoppeld die elk 5000 IOPS kunnen verwerken.

Setup:

  • Standard_D8s_v3
    • IOPS in cache: 16.000
    • IOPS zonder cache: 12.800
  • P30-besturingssysteemschijf
    • IOPS: 5.000
    • Hostcaching: lezen/schrijven
  • Twee P30-gegevensschijven × 2
    • IOPS: 5.000
    • Hostcaching: lezen/schrijven

Diagram met een voorbeeld van een hostcaching.

De toepassing maakt gebruik van een Standard_D8s_v3 virtuele machine waarvoor caching is ingeschakeld. Er wordt een aanvraag ingediend voor 16.000 IOPS. De aanvragen worden voltooid zodra ze zijn gelezen of naar de cache zijn geschreven. Schrijfbewerkingen worden vervolgens lui naar de gekoppelde schijven geschreven.

Gecombineerde limieten voor niet-in de cache en in de cache opgeslagen

De limieten in de cache van een virtuele machine zijn gescheiden van de limieten die niet in de cache zijn opgeslagen. Dit betekent dat u hostcaching kunt inschakelen op schijven die zijn gekoppeld aan een VM, terwijl u hostcaching op andere schijven niet inschakelt. Met deze configuratie kunnen uw virtuele machines een totale opslag-IO ophalen van de limiet in de cache plus de limiet zonder cache.

Laten we een voorbeeld bekijken om u te helpen begrijpen hoe deze limieten samenwerken. We gaan verder met de configuratie Standard_D8s_v3 virtuele machine en Premium-schijven.

Setup:

  • Standard_D8s_v3
    • IOPS in cache: 16.000
    • IOPS zonder cache: 12.800
  • P30-besturingssysteemschijf
    • IOPS: 5.000
    • Hostcaching: lezen/schrijven
  • Twee P30-gegevensschijven × 2
    • IOPS: 5.000
    • Hostcaching: lezen/schrijven
  • Twee P30-gegevensschijven × 2
    • IOPS: 5.000
    • Hostcache: uitgeschakeld

Diagram met een voorbeeld van hostcaching met externe opslag.

In dit geval doet de toepassing die wordt uitgevoerd op een Standard_D8s_v3 virtuele machine een aanvraag voor 25.000 IOPS. De aanvraag wordt opgesplitst in 5000 IOPS voor elk van de gekoppelde schijven. Drie schijven maken gebruik van hostcaching en twee schijven maken geen gebruik van hostcaching.

  • Omdat de drie schijven die gebruikmaken van hostcaching zich binnen de limiet van 16.000 in de cache bevinden, worden deze aanvragen voltooid. Er worden geen limieten voor opslagprestaties uitgevoerd.
  • Omdat de twee schijven die geen hostcaching gebruiken, zich binnen de limiet van 12.800 niet in de cache bevinden, worden deze aanvragen ook voltooid. Er treedt geen limiet op.