Hyper-V-opslag: cachelagen en gevolgen voor gegevensconsistentie

Dit artikel biedt een overzicht van caching in de virtuele opslagstack en biedt richtlijnen voor softwareontwikkelaars en beheerders om ervoor te zorgen dat aan de gewenste vereisten voor gegevensconsistentie wordt voldaan.

Van toepassing op: Windows Server 2012 R2
Origineel KB-nummer: 2801713

Meer informatie

Op zijn minst omvatten de verschillende lagen van caching in het systeem over het algemeen het volgende:

  • Bestandssysteemcache. Windows slaat standaard bestandsgegevens op die worden gelezen van schijven en naar schijven worden geschreven. Dit betekent dat leesbewerkingen bestandsgegevens lezen uit een gebied in het systeemgeheugen dat bekend staat als de systeembestandscache in plaats van van de fysieke schijf. Schrijfbewerkingen schrijven bestandsgegevens naar de systeembestandscache in plaats van naar de schijf. Dit type cache wordt een write-backcache genoemd. Toepassingen kunnen niet-gebufferde semantiek van bestandssysteem gebruiken om ervoor te zorgen dat schrijfbewerkingen niet in de cache van het systeem worden opgeslagen.
  • Schijfstations cache. Schijfstations implementeren caching op de firmwarelaag om de prestaties van de schijfstations te verbeteren. Hoewel caching op de firmwarelaag de prestaties kan verbeteren, kunnen de gegevens op de schijf verloren gaan voordat deze naar de schijf worden geschreven in het geval van een stroomstoring. Opties voor het beheren van dit cachegedrag maken deel uit van gestandaardiseerde stationsinterfaces zoals SCSI, SATA en ATA. Deze opties zijn als volgt:
    1. Gebruik het per I/O-controlemechanisme dat bekend staat als Force Unit Access (FUA). Deze vlag geeft aan dat de schijf de gegevens naar stabiele media-opslag moet schrijven voordat de signalering is voltooid. Toepassingen die dit moeten doen, zorgen ervoor dat gegevens stabiel zijn op het schijfprobleem FUA om ervoor te zorgen dat gegevens niet verloren gaan als er een stroomstoring optreedt.

      Schijfstations van serverklasse (SCSI en Fibre Channel) ondersteunen over het algemeen de FUA-vlag. Op basisstations (ATA, SATA en USB) wordt FUA mogelijk niet gehonoreerd. Hierdoor kunnen gegevens mogelijk inconsistent blijven, tenzij de schrijfcache van het station is uitgeschakeld. Zorg ervoor dat het schijfsubsysteem FUA correct verwerkt als u afhankelijk bent van dit mechanisme.

    2. Het leegmaken van de schijfcache afdwingen. Een toepassing of systeem dat een doorspoeling naar de schijf verzendt, dwingt het schijfsubsysteem om alle gegevens in de cache naar de schijf te schrijven. Het te vaak uitgeven van flushes heeft gevolgen voor de prestaties omdat alle informatie in de schijfcache naar het schijfmedium moet worden geschreven voordat de flush wordt geretourneerd.

    3. Schijfcache uitschakelen. U kunt de schrijfcache van een schijf uitschakelen door de IOCTL_DISK_SET_CACHE_INFORMATION-besturingscode naar de schijf uit te geven. De status van de schrijfcache (aan of uit) blijft behouden bij het opnieuw opstarten van het systeem. Het uitgeven van deze controlecode heeft zeer aanzienlijke gevolgen voor de prestaties voor alle I/O-mechanismen die aan die schijf worden uitgegeven. Deze gevolgen zijn waarschijnlijk een merkbare afname van de prestaties. U moet zorgvuldig overwegen deze besturingscode te gebruiken voordat u deze implementeert.

      Opmerking

      Als u schijfcache niet kunt uitschakelen, moet u opties 1 en 2 overwegen.

Als de toepassing of workload wordt uitgevoerd in de virtuele machine (VM), hebben de verschillende cachelagen dus gevolgen voor gegevensconsistentie.

  • Cache van gastbestandssysteem. Deze laag kan worden overgeslagen met behulp van de semantiek van het bestandssysteem zonder fouten, zoals eerder is vermeld.

  • Cache van virtuele gastschijf. Het gevirtualiseerde IDE-apparaat (geĆ«muleerd of synthetisch) of SCSI-apparaat rapporteert de status van de schrijfcache die wordt geretourneerd door de lagere stack. Virtuele schijven melden dat hun schrijfcache is ingeschakeld en ze weigeren de gast de schrijfcache uit te schakelen. Het uitschakelen van de cache mislukt en reageert altijd dat de cache is ingeschakeld. Dit gedrag is nodig om de volgende redenen:

    • Hyper-V kan er niet van uitgaan dat alle VM's die op dezelfde schijf worden uitgevoerd, dezelfde instellingen voor de schijfcache moeten hebben.

    • De onderliggende opslag heeft mogelijk een altijd ingeschakelde schrijfcache die niet kan worden uitgeschakeld. Dit wordt benadrukt door het feit dat de virtuele schijf kan worden gemigreerd naar een andere schijf op dezelfde host (migratie van liveopslag) of naar een andere host (livemigratie).

      Omdat toepassingen de schijfcache niet kunnen uitschakelen, moet elke toepassing in de gast die moet zorgen voor gegevensintegriteit bij een stroomstoring, optie 1 of optie 2 gebruiken om ervoor te zorgen dat schrijfbewerkingen de schijfcache omzeilen.

  • Cache van het hostbestandssysteem. De Hyper-V-opslagstack maakt ook gebruik van niet-gebufferred schrijfbewerkingen om ervoor te zorgen dat de schrijfbewerkingen van de gast de onderliggende stack van het hostbestandssysteem omzeilen.

  • Hostschijfcache. FUA, indien ingesteld door de gast, wordt doorgegeven aan de host en aan de hostopslagstack. Het fysieke schijfsysteem van de host moet voldoen aan ten minste een van de volgende criteria om ervoor te zorgen dat de gegevensintegriteit van de gevirtualiseerde werkbelasting wordt gecontroleerd door stroomstoringen:

    • Het systeem maakt gebruik van serverklasse schijven (SCSI, Fibre Channel).
    • Het systeem zorgt ervoor dat de schijven zijn verbonden met een hostbusadapter (HBA) met batterij-ondersteuning.
    • Het systeem gebruikt een opslagcontroller (bijvoorbeeld een RAID-systeem) als opslagapparaat.
    • Het systeem zorgt ervoor dat de voeding van de schijf wordt beveiligd door een niet-onderbreekbare voeding (UPS).
    • Het systeem zorgt ervoor dat de schrijfcachefunctie van de schijf is uitgeschakeld.