Dela via


Hyper-V lagring: Cachelager och konsekvenser för dataintegritet

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.

Ursprungligt KB-nummer: 2801713

Mer information

Åtminstone omfattar de olika skikten av cachelagring i systemet vanligtvis följande:

  • Filsystemcache. Som standard cachelagrar Windows fildata som läss 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 systemfilcache 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 filsystemsdebufferterade semantik för att se till att skrivningar inte cachelagras i systemcachen.
  • Diskenheter cachelagrar. 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 är känd som Force Unit Access (FUA). Den här flaggan anger att enheten ska skriva data till stabil medielagring innan signaleringen är klar. Applikationer som måste göra detta ser till att data är stabil på disken genom att utfärda FUA för att säkerställa att data inte går förlorad vid strömavbrott.

      Diskenheter i serverklass (SCSI och Fibre Channel) stöder vanligtvis FUA-flaggan. På konsumenthårddiskar (ATA, SATA och USB) kanske FUA inte stöds. Detta kan potentiellt lämna data i ett inkonsekvent tillstånd såvida inte enhetens skrivcache ä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. Avaktivera diskcache. Du kan inaktivera skrivcache på en disk genom att utfärda kontrollkoden IOCTL_DISK_SET_CACHE_INFORMATION. Tillståndet för skrivcachen (på eller av) bevaras i 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 sannolikt 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.

      Anmärkning

      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 har därför de olika cachelagringsskikten konsekvenser för datakonsekvensen.

  • Gästfilsystemets cache. Det här lagret kan kringgås med hjälp av filsystemets obufferred semantik, som nämndes tidigare.

  • Virtuell gästdiskcache. Den virtualiserade IDE-enheten (emulerad eller syntetisk) eller SCSI-enheten rapporterar det skrivcachetillstånd som returneras av den lägre stacken. Virtuella diskar rapporterar att deras skrivcache är aktiverad och de vägrar att låta gästen inaktivera 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 anta 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 applikationer inte kommer att kunna stänga av diskcacheminnet måste alla applikationer i gästen som behöver se till att dataintegriteten upprätthålls under ett strömavbrott använda antingen alternativ 1 eller alternativ 2 för att garantera att skrivningar kringgår diskcacheminnet.

  • Värdfilsystemcache. Den Hyper-V lagringsstacken använder också obufferade skrivningar för att säkerställa att skrivningarna från gästen går förbi den underliggande värdfilsystemstacken.

  • Värddiskcache. FUA, om den anges av gästen, vidarebefordras till värden och värdlagringssystemet. Värddatorns fysiska disksystem måste uppfylla minst ett av följande villkor för att säkerställa dataintegritet hos virtualiserade arbetsbelastningar vid strömstörningar:

    • Systemet använder diskar i serverklass (SCSI, Fibre Channel).
    • Systemet ser till att diskarna är anslutna till ett batteribaserat cachelagringsvärdbusskort (HBA).
    • Systemet använder en lagringskontrollant (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.