Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
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.
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
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
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.
De schijfgegevens in de cache onder het tabblad Lokale opslag zijn afzonderlijke limieten 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 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.
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.
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.
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.
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.
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
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
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.