Förstå cacheminnet för lagringspoolen

Gäller för: Azure Stack HCI, versionerna 22H2 och 21H2; Windows Server 2022, Windows Server 2019

Lagringsdirigering, den grundläggande lagringsvirtualiseringstekniken bakom Azure Stack HCI och Windows Server, har en inbyggd cache på serversidan för att maximera lagringsprestandan samtidigt som kostnaderna minskar. Det är en stor, beständig läs- och skrivcachen i realtid som konfigureras automatiskt vid distributionen. I de flesta fall krävs ingen manuell hantering alls. Hur cachen fungerar beror på vilka typer av enheter som finns.

Alternativ för enhetstyper och distribution

Lagringsdirigering fungerar för närvarande med fyra typer av enheter:

Typ av enhet Description
PMem PMem refererar till beständigt minne, en ny typ av låg svarstid, lagring med höga prestanda.
NVMe NVMe (Non-Volatile Memory Express) refererar till solid state-enheter som sitter direkt på PCIe-bussen. Vanliga formfaktorer är 2,5"U.2, PCIe Add-In-Card (AIC) och M.2. NVMe erbjuder högre IOPS- och I/O-dataflöde med lägre svarstid än någon annan typ av enhet som vi stöder idag förutom PMem.
SSD SSD refererar till solid state-enheter som ansluter via konventionell SATA eller SAS.
HDD HDD refererar till rotations- och magnetiska hårddiskar, som erbjuder stor lagringskapacitet till en låg kostnad.

Dessa kan kombineras på olika sätt, som vi grupperar i två kategorier: "all-flash" och "hybrid". Distributioner med alla HDD stöds inte.

Anteckning

Den här artikeln beskriver cachekonfigurationer med NVMe, SSD och HDD. Information om hur du använder beständigt minne som cache finns i Förstå och distribuera beständigt minne.

Distributionsmöjligheter för alla blixtar

All-flash-distributioner syftar till att maximera lagringsprestanda och inkluderar inte HDD.

Diagram visar all-flash-distributioner, inklusive NVMe för kapacitet, NVMe för cache med SSD för kapacitet och SSD för kapacitet.

Hybriddistributionsmöjligheter

Hybriddistributioner syftar till att balansera prestanda och kapacitet eller maximera kapaciteten och inkluderar HDD.

Diagram visar hybriddistributioner, inklusive NVMe för cache med HDD för kapacitet, SSD för cache med HDD för kapacitet och NVMe för cache med HDD plus SSD för kapacitet.

Anteckning

Hybriddistribution stöds inte i konfiguration av en enskild server. Alla flata konfigurationer av enskilda lagringstyper (till exempel all-NVMe eller all-SSD) är den enda lagringstypen som stöds för en enskild server.

Cacheenheter väljs automatiskt

I distributioner med flera typer av enheter använder Lagringsdirigering automatiskt alla enheter av den snabbaste typen för cachelagring. De återstående enheterna används för kapacitet.

Vilken typ som är "snabbast" bestäms enligt följande hierarki.

Diagram visar disktyper som ordnats snabbare till långsammare i den ordning NVMe, SSD, omärkt disk som representerar HDD.

Om du till exempel har NVMe och SSD cachelagrar NVMe för SSD:erna.

Om du har SSD och HDD cachelagrar SSD:erna för HDD:erna.

Anteckning

Cacheenheter bidrar inte med användbar lagringskapacitet till klustret. Alla data som lagras i cachen lagras också någon annanstans, eller när de har avfasningsfasen. Det innebär att den totala rålagringskapaciteten för klustret endast är summan av dina kapacitetsenheter.

När alla enheter är av samma typ konfigureras ingen cache automatiskt. Du kan välja att manuellt konfigurera enheter med högre uthållighet för cachelagring för enheter med lägre uthållighet av samma typ . Mer information finns i avsnittet Manuell konfiguration .

Tips

I vissa fall är det inte meningsfullt att använda lagringspoolens cacheminne. I alla NVMe- eller all-SSD-distributioner, särskilt i mycket liten skala, kan inga enheter "spenderas" på cachen förbättra lagringseffektiviteten och maximera prestanda. På samma sätt kan små distributioner av fjärr- eller avdelningskontor ha begränsat utrymme för cacheenheter.

Cachebeteendet anges automatiskt

Cachens beteende bestäms automatiskt baserat på vilka typer av enheter som cachelagras för. När cachelagring för flash-enheter (till exempel NVMe-cachelagring för SSD:er) cachelagras endast skrivningar. När cachelagring för roterande diskenheter (till exempel SSD-cachelagring för HDD:er) cachelagras både läsningar och skrivningar.

Diagram som jämför cachelagring för all-flash, där skrivningar cachelagras och läsningar inte är, med hybrid, där både läsningar och skrivningar cachelagras.

Skrivskyddad cachelagring för all-flash-distributioner

Cachelagring kan användas i ett scenario med helt flash, till exempel genom att använda NVMe som cache för att påskynda prestanda för SSD:n. När cachelagring för all-flash-distributioner cachelagras endast skrivningar. Detta minskar slitaget på kapacitetsenheterna eftersom många skrivningar och omskrivningar kan slås samman i cacheminnet och sedan endast mellanlagras efter behov, vilket minskar den kumulativa trafiken till kapacitetsenheterna och utökar deras livslängd. Därför rekommenderar vi att du väljer skrivoptimerade enheter med högre uthållighet för cacheminnet. Kapacitetsenheterna kan rimligen ha lägre skrivförmåga.

Eftersom läsningar inte påverkar blixtens livslängd avsevärt, och eftersom SSD:er allmänt erbjuder låg läsfördröjning, cachelagras inte läsningar: de hanteras direkt från kapacitetsenheterna (förutom när data skrevs så nyligen att de ännu inte har mellanlagrats). Detta gör att cachen kan ägnas helt åt skrivningar, vilket maximerar dess effektivitet.

Detta resulterar i skrivegenskaper, till exempel skrivfördröjning, som dikteras av cacheenheterna, medan läsegenskaperna styrs av kapacitetsenheterna. Båda är konsekventa, förutsägbara och enhetliga.

Läs-/skrivcachelagring för hybriddistributioner

Vid cachelagring för HDD cachelagras både läsningar och skrivningar för att ge flashliknande svarstid (ofta ~10 x bättre) för båda. Läscachen lagrar nyligen och ofta lästa data för snabb åtkomst och för att minimera slumpmässig trafik till HDD:erna. (På grund av sök- och rotationsfördröjningar är svarstiden och förlorad tid som orsakas av slumpmässig åtkomst till en HDD betydande.) Skrivningar cachelagras för att absorbera bursts och, som tidigare, för att slå samman skrivningar och återskrivningar och minimera den kumulativa trafiken till kapacitetsenheterna.

Lagringsdirigering implementerar en algoritm som av-randomiserar skrivningar innan de mellanlagring av dem, för att emulera ett I/O-mönster till disk som verkar sekventiellt även när den faktiska I/O som kommer från arbetsbelastningen (till exempel virtuella datorer) är slumpmässig. Detta maximerar IOPS och dataflödet till HDD:erna.

Cachelagring i distributioner med NVMe, SSD och HDD

När enheter av alla tre typerna finns tillhandahåller NVMe-enheterna cachelagring för både SSD:erna och HDD:erna. Beteendet beskrivs ovan: endast skrivningar cachelagras för SSD:erna och både läsningar och skrivningar cachelagras för HDD:erna. Cachelagringsbördan för HDD:erna fördelas jämnt mellan cacheenheterna.

Sammanfattning

Den här tabellen sammanfattar vilka enheter som används för cachelagring, vilka som används för kapacitet och vad cachelagringsbeteendet är för varje distributionsmöjlighet.

Distribution Cacheenheter Kapacitetsenheter Cachebeteende (standard)
Alla NVMe Ingen (valfritt: konfigurera manuellt) NVMe Skrivskyddad (om den är konfigurerad)
Alla SSD Ingen (valfritt: konfigurera manuellt) SSD Skrivskyddad (om den är konfigurerad)
NVMe + SSD NVMe SSD Skrivskyddad
NVMe + HDD NVMe HDD Läsning + skrivning
SSD + HDD SSD HDD Läsning + skrivning
NVMe + SSD + HDD NVMe SSD + HDD Läsa + skriva för HDD, skrivskyddad för SSD

Arkitektur på serversidan

Cachen implementeras på enhetsnivå: enskilda cacheenheter på en server är bundna till en eller flera kapacitetsenheter på samma server.

Eftersom cacheminnet ligger under resten av den programvarudefinierade Lagringsstacken i Windows behöver den inte heller någon medvetenhet om begrepp som Lagringsutrymmen eller feltolerans. Du kan tänka på det som att skapa "hybrid" (en del flash, del disk) enheter som sedan presenteras för operativsystemet. Precis som med en faktisk hybridenhet är realtidsflytten av varma och kalla data mellan de snabbare och långsammare delarna av det fysiska mediet nästan osynlig för utsidan.

Med tanke på att återhämtning i Lagringsdirigering är minst på servernivå (vilket innebär att datakopior alltid skrivs till olika servrar, högst en kopia per server), drar data i cacheminnet nytta av samma återhämtning som data som inte finns i cacheminnet.

Diagrammet representerar tre servrar som är kopplade till en trevägsspegling i ett lagringsutrymmeslager, som har åtkomst till ett cachelager med NVMe-enheter som har åtkomst till omärkta kapacitetsenheter.

När du till exempel använder trevägsspegling skrivs tre kopior av alla data till olika servrar, där de hamnar i cacheminnet. Oavsett om de senare mellanlagras eller inte finns alltid tre kopior.

Enhetsbindningar är dynamiska

Bindningen mellan cache- och kapacitetsenheter kan ha valfritt förhållande, från 1:1 upp till 1:12 och senare. Den justeras dynamiskt när enheter läggs till eller tas bort, till exempel vid uppskalning eller efter fel. Det innebär att du kan lägga till cacheenheter eller kapacitetsenheter oberoende av varandra, när du vill.

Animerat diagram visar två NVMe-cacheenheter som dynamiskt mappas till första fyra, sedan sex och sedan åtta kapacitetsenheter.

Vi rekommenderar att du gör antalet kapacitetsenheter till en multipel av antalet cacheenheter, för symmetri. Om du till exempel har 4 cacheenheter får du jämnare prestanda med 8 kapacitetsenheter (1:2-förhållande) än med 7 eller 9.

Hantera fel på cacheenhet

När en cacheenhet misslyckas går alla skrivningar som ännu inte har delagrats förlorade till den lokala servern, vilket innebär att de endast finns på de andra kopiorna (på andra servrar). Precis som efter andra enhetsfel kan och återställer Lagringsutrymmen automatiskt genom att konsultera de överlevande kopiorna.

Under en kort period visas de kapacitetsenheter som var bundna till den förlorade cacheenheten inte felfria. När cachen har ombindats (automatisk) och datareparationen har slutförts (automatisk) kommer de att fortsätta visas som felfria.

Det här scenariot är anledningen till att minst två cacheenheter krävs per server för att bevara prestanda.

Animerat diagram visar två SSD-cacheenheter mappade till sex kapacitetsenheter tills en cacheenhet misslyckas, vilket gör att alla sex enheterna mappas till den återstående cacheenheten.

Du kan sedan ersätta cacheenheten precis som andra enhetsbyten.

Anteckning

Du kan behöva stänga av för att på ett säkert sätt ersätta NVMe som är Add-In Card (AIC) eller M.2 formfaktor.

Relation till andra cacheminnen

Det finns flera andra orelaterade cacheminnen i windows programvarudefinierade lagringsstack. Exempel är Lagringsutrymmen cache för återskrivning och minnesintern läscache för klusterdelade volymer (CSV).

Med Azure Stack HCI bör Lagringsutrymmen återskrivningscache inte ändras från standardbeteendet. Parametrar som -WriteCacheSize på cmdleten New-Volume bör till exempel inte användas.

Du kan välja att använda CSV-cachen eller inte – det är upp till dig. Den är aktiverad som standard i Azure Stack HCI, men den står inte i konflikt med cacheminnet som beskrivs i det här avsnittet på något sätt. I vissa scenarier kan det ge värdefulla prestandavinster. Mer information finns i Använda csv-minnesintern läscache med Azure Stack HCI.

Manuell konfiguration

För de flesta distributioner krävs ingen manuell konfiguration. Om du behöver det kan du läsa följande avsnitt.

Om du behöver göra ändringar i cacheenhetsmodellen efter installationen redigerar du dokumentet Supportkomponenter för hälsotjänsten enligt beskrivningen i Översikt över hälsotjänsten.

Ange cacheenhetsmodell

I distributioner där alla enheter är av samma typ, till exempel all-NVMe eller alla SSD-distributioner, konfigureras ingen cache eftersom Windows inte kan skilja egenskaper som skrivhållfasthet automatiskt mellan enheter av samma typ.

Om du vill använda enheter med högre uthållighet för att cachelagras för enheter med lägre uthållighet av samma typ kan du ange vilken enhetsmodell som ska användas med parametern -CacheDeviceModel i cmdleten Enable-ClusterS2D . Alla enheter i modellen används för cachelagring.

Tips

Se till att matcha modellsträngen exakt som den visas i utdata från Get-PhysicalDisk.

Exempel

Hämta först en lista över fysiska diskar:

Get-PhysicalDisk | Group Model -NoElement

Här är några exempel på utdata:

Count Name
----- ----
    8 FABRIKAM NVME-1710
   16 CONTOSO NVME-1520

Ange sedan följande kommando och ange cacheenhetsmodellen:

Enable-ClusterS2D -CacheDeviceModel "FABRIKAM NVME-1710"

Du kan kontrollera att de enheter som du avsåg används för cachelagring genom att köra Get-PhysicalDisk i PowerShell och kontrollera att deras användningsegenskap säger "Journal".

Manuella distributionsmöjligheter

Manuell konfiguration möjliggör följande distributionsmöjligheter:

Diagram som visar distributionsmöjligheter, inklusive NVMe för både cache och kapacitet, SSD för både cache och kapacitet samt SSD för cache och blandad SSD och HDD för kapacitet.

Ange cachebeteende

Det går att åsidosätta standardbeteendet för cachen. Du kan till exempel ställa in den på cacheläsningar även i en distribution med enbart flash. Vi avråder dig från att ändra beteendet om du inte är säker på att standardinställningen inte passar din arbetsbelastning.

Om du vill åsidosätta beteendet använder du cmdleten Set-ClusterStorageSpacesDirect och parametrarna -CacheModeSSD och -CacheModeHDD . Parametern CacheModeSSD anger cachebeteendet vid cachelagring för SSD. Parametern CacheModeHDD anger cachebeteende vid cachelagring för HDD.

Du kan använda Get-ClusterStorageSpacesDirect för att kontrollera att beteendet har angetts.

Exempel

Hämta först inställningarna för Lagringsdirigering:

Get-ClusterStorageSpacesDirect

Här är några exempel på utdata:

CacheModeHDD : ReadWrite
CacheModeSSD : WriteOnly

Gör sedan följande:

Set-ClusterStorageSpacesDirect -CacheModeSSD ReadWrite

Get-ClusterS2D

Här är några exempel på utdata:

CacheModeHDD : ReadWrite
CacheModeSSD : ReadWrite

Ändra storlek på cachen

Cacheminnet bör vara storleksanpassat för arbetsuppsättningen (data som aktivt läss eller skrivs vid en viss tidpunkt) för dina program och arbetsbelastningar.

Detta är särskilt viktigt i hybriddistributioner med hårddiskar. Om den aktiva arbetsuppsättningen överskrider cachens storlek, eller om den aktiva arbetsuppsättningen går för snabbt, ökar antalet läscachemissar och skrivningarna måste avlagras mer aggressivt, vilket försämrar den övergripande prestandan.

Du kan använda det inbyggda verktyget Prestandaövervakare (PerfMon.exe) i Windows för att granska hastigheten för cachemissar. Mer specifikt kan du jämföra cachemissläsningar/sek från räknaren för klusterlagringshybriddisk inställd på den övergripande läs-IOPS för din distribution. Varje "Hybriddisk" motsvarar en kapacitetsenhet.

Till exempel resulterar 2 cacheenheter som är bundna till 4 kapacitetsenheter i 4 "Hybrid Disk"-objektinstanser per server.

Prestandaövervakare.

Det finns ingen universell regel, men om för många läsningar saknar cacheminnet kan det vara underdimensionerat och du bör överväga att lägga till cacheenheter för att utöka cachen. Du kan lägga till cacheenheter eller kapacitetsenheter oberoende av varandra när du vill.

Nästa steg

Mer information om lagring finns i: