Delen via


Prestaties van virtuele machine en schijf

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

Dit artikel helpt de schijfprestaties te verduidelijken 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 te optimaliseren voor prestaties.

Hoe werken schijfprestaties?

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

Schijftoewijzing en prestaties

Er zijn drie paden die bandbreedte- en I/O-bewerkingen per seconde (IOPS) kunnen aannemen naar schijven die aan een virtuele machine in Azure zijn gekoppeld. Het volgende diagram toont de realtime toewijzing van deze paden.

In het volgende diagram ziet u realtime toewijzing van bandbreedte en I/O-bewerkingen per seconde (IOPS) voor schijven, met drie paden die I/O kan uitvoeren.

Diagram van een inrichtingssysteem met drie niveaus waarin bandbreedte en IOPS-toewijzing worden weergegeven.

Het eerste I/O-pad is het ongecachede pad naar de beheerde schijf. I/O-bewerkingen gebruiken dit pad wanneer u een beheerde schijf gebruikt en u de hostcaching instelt op none. I/O-bewerkingen die gebruikmaken van dit pad worden uitgevoerd op basis van inrichting op schijfniveau en vervolgens inrichting op VM-netwerkniveau voor IOPS en doorvoer.

Het tweede I/O-pad is het pad naar de beheerde schijf in de cache. Een beheerde schijf met gecachte I/O gebruikt een SSD die zich dicht bij de virtuele machine bevindt. Deze SSD heeft zijn eigen IOPS en doorvoer voorziening, en het is zichtbaar als "SSD-niveau voorziening" in het diagram.

Wanneer een beheerde schijf in de cache een leesbewerking start, controleert de aanvraag eerst of de gegevens zich in de server-SSD bevinden. Als de gegevens niet aanwezig zijn, treedt er een cache-miss op. Vervolgens wordt de I/O uitgevoerd op basis van inrichting op SSD-niveau, inrichting op schijfniveau en vervolgens inrichting op VM-netwerkniveau voor IOPS en doorvoer.

Wanneer de server-SSD leesbewerkingen start op I/O in de cache die aanwezig zijn op de server-SSD, treedt er een cachetreffer op. De I/O wordt vervolgens uitgevoerd op basis van de inrichting op SSD-niveau. Schrijft dat een beheerde ingebouwde cache-schijf altijd het pad van een cache-miss volgt. Ze doorlopen het inrichten op SSD-niveau, schijfniveau en VM-netwerkniveau.

Het derde pad is voor de lokale/tijdelijke schijf. Deze is alleen beschikbaar op VM's die lokale/tijdelijke schijven ondersteunen. Een I/O-bewerking die gebruikmaakt van dit pad wordt uitgevoerd op basis van inrichting op SSD-niveau voor IOPS en doorvoer.

In het volgende diagram ziet u een voorbeeld van deze beperkingen. Het systeem voorkomt dat een Standard_D2s_v3 VM het 5000 IOPS-potentieel van een P30-schijf bereikt, ongeacht of deze in de cache is opgeslagen of niet, vanwege limieten op de SSD- en netwerkniveaus.

Diagram van het voorzieningssysteem op drie niveaus met een Standard_D2s_v3 voorbeeldtoewijzing.

Azure maakt gebruik van een netwerkkanaal met prioriteit voor schijfverkeer. Schijfverkeer heeft voorrang op netwerkverkeer met lage prioriteit. Deze prioriteitsaanduiding helpt schijven hun verwachte prestaties te behouden als er sprake is van netwerkconflicten.

Op dezelfde manier verwerkt Azure Storage resourceconflicten en andere problemen op de achtergrond met automatische taakverdeling. Azure Storage wijst vereiste resources toe wanneer u een schijf maakt en past proactieve en reactieve verdeling van resources toe om het verkeersniveau af te handelen. Dit gedrag zorgt er verder voor dat schijven hun verwachte IOPS- en doorvoerdoelen kunnen ondersteunen. Gebruik metrische gegevens op VM-niveau en schijfniveau om de prestaties bij te houden en waar nodig waarschuwingen in te stellen.

Io-limieten voor schijf

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.

Setup:

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

Diagram met het beperken van schijfniveau.

De toepassing die op de virtuele machine wordt uitgevoerd, doet een aanvraag waarvoor 10.000 IOPS zijn vereist voor de virtuele machine. Dit wordt 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 besturingssysteemschijf.
  • Voor elke gegevensschijf worden 4500 IOPS aangevraagd.

Alle gekoppelde schijven zijn E30-schijven en kunnen slechts 500 IOPS verwerken. Ze reageren dus elk met 500 IOPS terug. De prestaties van de toepassing worden beperkt door de gekoppelde schijven en kunnen slechts 1500 IOPS verwerken. De toepassing kan werken met piekprestaties bij 10.000 IOPS als er betere prestaties 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 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 wordt beperkt door de limieten van de virtuele machine en moet de toegewezen 12.800 IOPS toewijzen.

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

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

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

Limieten voor ongecachede versus gecachede virtuele machines

Virtuele machines die zijn ingeschakeld voor zowel Premium Storage als Premium Storage Caching, hebben twee verschillende opslagbandbreedtelimieten. Laten we eens kijken naar de Standard_D8s_v3 virtuele machine als voorbeeld. Hier volgt de documentatie over de Dsv3-serie en de Standard_D8s_v3:

  • De schijfgegevens zonder cache onder Externe opslag zijn de standaardlimieten voor opslag die door de virtuele machine kunnen worden verwerkt. Grafiek met externe Dsv3-specificaties.

  • De schijfgegevens in de cache onder het tabblad Lokale opslag zijn afzonderlijke limieten wanneer u hostcaching inschakelt. Grafiek met lokale Dsv3-specificaties.

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 VIRTUELE machine voor hostcaching, vindt u in de documentatie. U kunt bijvoorbeeld zien dat de Standard_D8s_v3 wordt geleverd met 200 GiB van cacheopslag.

U kunt hostcaching inschakelen wanneer u uw virtuele machine maakt en schijven koppelt. U kunt hostcache ook in- en uitschakelen op uw schijven op een bestaande VIRTUELE machine. Standaard is caching niet ingeschakeld voor gegevensschijven die geschikt zijn voor cache. Besturingssysteemschijven die geschikt zijn voor cache, hebben lees-/schrijfcache ingeschakeld.

Schermopname van hostcaching.

U kunt de hostcache aanpassen aan uw workloadvereisten voor elke schijf. U kunt de cache 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 niet aan om hostcaching te gebruiken.

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

Setup:

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

Wanneer een leesbewerking wordt uitgevoerd en de gewenste gegevens beschikbaar zijn in de cache, retourneert de cache de aangevraagde gegevens. U hoeft niet van de schijf te lezen. Deze leesbewerking wordt geteld naar de limieten voor de cache van de virtuele machine.

Diagram dat een cache read hit bij een leeshost toont.

Wanneer een leesbewerking wordt uitgevoerd en de gewenste gegevens niet beschikbaar zijn in de cache, wordt de leesaanvraag doorgegeven aan de schijf. Vervolgens maakt de schijf het beschikbaar voor zowel de cache als de virtuele machine. Deze leesbewerking wordt geteld voor zowel de niet-cachelimiet van de virtuele machine als de limiet voor de cache van de virtuele machine.

Diagram met een cachefout bij het lezen van de leeshos

Wanneer een schrijfbewerking wordt uitgevoerd, moet de schrijfbewerking worden geschreven naar zowel de cache als de schijf voordat deze als voltooid wordt beschouwd. Deze schrijfactie wordt geteld naar de limiet zonder cache van de virtuele machine en de cachelimiet van de virtuele machine.

Diagram dat een leeshost toont die een schrijfbewerking in cache opslaat.

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 in alleen-lezen modus. Schrijfbewerkingen zijn het enige dat verschillend is bij lees-/schrijfcaching. 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 lazily naar de schijf geschreven wanneer de cache periodiek wordt leeggemaakt. Klanten kunnen ook een flush afdwingen door een f/sync of fua opdracht uit te geven. Dit betekent dat een schrijfbewerking wordt geteld voor gecachete IO wanneer deze naar de cache wordt geschreven. Wanneer het op een luie manier naar de schijf wordt geschreven, telt het mee voor de niet-gecacheerde IO.

Diagram dat het lezen/schrijven host-cache schrijfbewerkingen toont.

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. Gekoppeld aan de VIRTUELE machine zijn drie onderliggende P30-schijven 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 naar de cache worden gelezen of geschreven. Schrijfbewerkingen worden vervolgens lui naar de gekoppelde schijven geschreven.

Gecombineerde limieten voor on- en gecacheerde gegevens

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

Laten we een voorbeeld bekijken om te begrijpen hoe deze limieten samenwerken. We gaan verder met de configuratie van de virtuele machine Standard_D8s_v3 met gekoppelde 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
    • Hostcaching: 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 als 5000 IOPS voor elk van de gekoppelde schijven. Drie schijven maken gebruik van hostcaching en twee schijven maken geen gebruik van hostcache.

  • Omdat de drie schijven die gebruikmaken van hostcaching binnen de cachelimieten van 16.000 vallen, worden deze aanvragen voltooid. Er worden geen limieten voor opslagprestaties uitgevoerd.
  • Omdat de twee schijven die geen gebruik maken van hostcaching, binnen de niet-cachelimieten van 12.800 vallen, worden deze aanvragen ook voltooid. Er vindt geen beperking plaats.