Hyper-V-lagring: Cachelagringslager och konsekvenser för datakonsekvens

Den här artikeln innehåller en översikt över cachelagring i den virtuella lagringsstacken och ger vägledning till programutvecklare och administratörer för att se till att önskade datakonsekvenskrav uppfylls.

Gäller för: Windows Server 2012 R2
Ursprungligt KB-nummer: 2801713

Mer information

Åtminstone omfattar de olika cachelagringsskikten i systemet vanligtvis följande:

  • Filsystemcachen. Som standard cachelagrar Windows fildata som läse från diskar och skrivs till diskar. Detta innebär att läsåtgärder läser fildata från ett område i systemminnet som kallas systemfilcachen i stället för från den fysiska disken. På motsvarande sätt skriver skrivåtgärder fildata till systemfilcachen i stället för till disken, och den här typen av cache kallas för en tillbakaskrivningscache. Program kan använda obuffertad semantik i filsystemet för att se till att skrivningar inte cachelagras i systemcachen.
  • Cacheminne för diskenheter. Diskenheter implementerar cachelagring på lagret för inbyggd programvara för att förbättra diskenheternas prestanda. Även om cachelagring på lagret för inbyggd programvara kan förbättra prestandan kan data på disken gå förlorade innan de skrivs till disken i händelse av ett strömavbrott. Alternativ för att styra det här cachelagringsbeteendet är en del av standardiserade enhetsgränssnitt som SCSI, SATA och ATA. Dessa alternativ är följande:
    1. Använd den per I/O-kontrollmekanism som kallas force unit access (FUA). Den här flaggan anger att enheten ska skriva data till stabil medielagring innan signaleringen är klar. Program som måste göra detta kontrollerar att data är stabila på diskproblemet FUA för att se till att data inte går förlorade om ett strömavbrott inträffar.

      Diskenheter i serverklass (SCSI och Fibre Channel) stöder vanligtvis FUA-flaggan. På råvaruenheter (ATA, SATA och USB) kanske FUA inte respekteras. Detta kan potentiellt lämna data i ett inkonsekvent tillstånd om inte enhetens skrivcachen är inaktiverad. Kontrollera att diskundersystemet hanterar FUA korrekt om du är beroende av den här mekanismen.

    2. Framtvinga diskcacherensning. Ett program eller system som skickar en tömning till disken tvingar diskundersystemet att skriva alla data i cacheminnet till disken. Att utfärda tömningar för ofta får prestandakonsekvenser eftersom all information i diskcachen måste skrivas till diskmediet innan tömningen returneras.

    3. Inaktivera diskcachelagring. Du kan inaktivera en disks skrivcachelagring genom att utfärda IOCTL_DISK_SET_CACHE_INFORMATION kontrollkod till disken. Tillståndet för skrivcachen (på eller av) bevaras mellan systemomstarter. Att utfärda den här kontrollkoden får mycket betydande prestandakonsekvenser för alla I/O-mekanismer som utfärdas till disken. Dessa konsekvenser kommer troligen att innebära en märkbar minskning av prestanda. Du bör noga överväga att använda den här kontrollkoden innan du distribuerar den.

      Obs!

      Om du inte kan inaktivera diskcachelagring bör du överväga alternativ 1 och 2.

Om programmet eller arbetsbelastningen körs på den virtuella datorn (VM) får därför de olika cachelagringslagren konsekvenser för datakonsekvensen.

  • Cacheminne för gästfilsystem. Det här lagret kan kringgås med hjälp av filsystemets obufferred semantik, som nämndes tidigare.

  • Virtuell gästdiskcache. Den virtualiserade IDE:n (emulerad eller syntetisk) eller SCSI-enheten rapporterar skrivcachetillståndet som returneras av den nedre stacken. Virtuella diskar rapporterar att deras skrivcachen är aktiverad och de vägrar att låta gästen stänga av skrivcachen. Inaktivering av cachen misslyckas och svarar alltid att cachen är aktiverad. Det här beteendet är nödvändigt av följande skäl:

    • Hyper-V kan inte göra ett antagande om att alla virtuella datorer som körs på samma disk måste ha samma inställningar för diskcache.

    • Den underliggande lagringen kan ha en skrivcache som alltid är aktiverad och som inte kan stängas av. Detta betonas av det faktum att den virtuella disken kan migreras till en annan disk på samma värd (direktlagringsmigrering) eller till en annan värd (direktmigrering).

      Eftersom program inte kommer att kunna stänga av diskcachen måste alla program i gästen som måste se till att dataintegriteten för ett strömavbrott använder antingen alternativ 1 eller alternativ 2 för att se till att skrivningar kringgår diskcachen.

  • Cacheminne för värdfilsystem. Hyper-V-lagringsstacken använder också obufferred skrivningar för att se till att skrivningar från gästen kringgår den underliggande värdfilsystemstacken.

  • Värddiskcachen. FUA, om det anges av gästen, sprids till värden och till värdlagringsstacken. Värddatorns fysiska disksystem måste uppfylla minst ett av följande kriterier för att säkerställa virtualiserad dataintegritet för arbetsbelastningar genom strömfel:

    • Systemet använder diskar i serverklass (SCSI, Fibre Channel).
    • Systemet ser till att diskarna är anslutna till en batteribaserad cachelagringsvärdbussadapter (HBA).
    • Systemet använder en lagringsstyrenhet (till exempel ett RAID-system) som lagringsenhet.
    • Systemet ser till att strömmen till disken skyddas av en avbrottsfri strömförsörjning (UPS).
    • Systemet ser till att diskens funktion för skrivcachelagring är inaktiverad.