Hyper-V-Speicher: Zwischenspeichern von Ebenen und Auswirkungen auf die Datenkonsistenz

Dieser Artikel bietet eine Übersicht über die Zwischenspeicherung im virtuellen Speicherstapel und enthält Anleitungen für Softwareentwickler und Administratoren, um sicherzustellen, dass die gewünschten Datenkonsistenzanforderungen erfüllt werden.

Gilt für: Windows Server 2012 R2
Ursprüngliche KB-Nummer: 2801713

Weitere Informationen

Zumindest umfassen die verschiedenen Zwischenspeicherebenen im System im Allgemeinen Folgendes:

  • Dateisystemcache. Standardmäßig speichert Windows Dateidaten zwischen, die von Datenträgern gelesen und auf Datenträger geschrieben werden. Dies impliziert, dass Lesevorgänge Dateidaten aus einem Bereich im Systemspeicher lesen, der als Systemdateicache bezeichnet wird, anstatt von dem physischen Datenträger. Entsprechend schreiben Schreibvorgänge Dateidaten in den Systemdateicache statt in den Datenträger, und diese Art von Cache wird als Rückschreibcache bezeichnet. Anwendungen können nicht gepufferte Dateisystemsemantik verwenden, um sicherzustellen, dass Schreibvorgänge nicht im Systemcache zwischengespeichert werden.
  • Datenträgerlaufwerkcache. Datenträgerlaufwerke implementieren die Zwischenspeicherung auf der Firmwareebene, um die Leistung der Datenträger zu verbessern. Obwohl das Zwischenspeichern auf der Firmwareebene die Leistung verbessern kann, können die Daten auf dem Datenträger verloren gehen, bevor sie im Falle eines Stromausfalls auf den Datenträger geschrieben werden. Optionen zum Steuern dieses Zwischenspeicherverhaltens sind Teil standardisierter Laufwerkschnittstellen wie SCSI, SATA und ATA. Diese Optionen sind:
    1. Verwenden Sie den pro E/A-Steuerungsmechanismus, der als Force Unit Access (FUA) bezeichnet wird. Dieses Flag gibt an, dass das Laufwerk die Daten in einen stabilen Medienspeicher schreiben soll, bevor die Signalisierung abgeschlossen ist. Anwendungen, die dies tun müssen, stellen sicher, dass die Daten auf dem Datenträger stabil sind, stellen fua aus, um sicherzustellen, dass die Daten nicht verloren gehen, wenn ein Stromausfall auftritt.

      Datenträgerlaufwerke der Serverklasse (SCSI und Fibre Channel) unterstützen im Allgemeinen das FUA-Flag. Bei Standardlaufwerken (ATA, SATA und USB) wird FUA möglicherweise nicht berücksichtigt. Dies kann dazu führen, dass Daten in einem inkonsistenten Zustand bleiben, es sei denn, der Schreibcache des Laufwerks ist deaktiviert. Stellen Sie sicher, dass das Datenträgersubsystem FUA ordnungsgemäß verarbeitet, wenn Sie von diesem Mechanismus abhängig sind.

    2. Erzwingen des Leerens des Datenträgercaches. Eine Anwendung oder ein System, die eine Leerung auf den Datenträger sendet, erzwingt, dass das Datenträgersubsystem alle Daten in seinem Cache auf den Datenträger schreibt. Das Zu häufige Ausstellen von Leerungen hat Auswirkungen auf die Leistung, da alle Informationen im Datenträgercache auf die Datenträgermedien geschrieben werden müssen, bevor die Leerung zurückgegeben wird.

    3. Deaktivieren Sie die Datenträgerzwischenspeicherung. Sie können die Schreibzwischenspeicherung eines Datenträgers deaktivieren, indem Sie den IOCTL_DISK_SET_CACHE_INFORMATION Steuercode auf dem Datenträger ausgeben. Der Zustand des Schreibcaches (ein oder aus) wird über Systemneustarts hinweg beibehalten. Die Ausgabe dieses Kontrollcodes hat erhebliche Auswirkungen auf die Leistung aller E/A-Mechanismen, die auf diesem Datenträger ausgestellt werden. Zu diesen Folgen gehört höchstwahrscheinlich ein spürbarer Leistungsabfall. Sie sollten die Verwendung dieses Kontrollcodes sorgfältig in Betracht ziehen, bevor Sie ihn bereitstellen.

      Hinweis

      Wenn Sie die Datenträgerzwischenspeicherung nicht deaktivieren können, sollten Sie die Optionen 1 und 2 in Betracht ziehen.

Wenn die Anwendung oder Workload auf dem virtuellen Computer (VM) ausgeführt wird, haben die verschiedenen Zwischenspeicherebenen daher Auswirkungen auf die Datenkonsistenz.

  • Gastdateisystemcache. Diese Ebene kann umgangen werden, indem die nicht gepufferte Dateisystemsemantik verwendet wird, wie bereits erwähnt.

  • Cache des virtuellen Gastdatenträgers. Die virtualisierte IDE (emuliert oder synthetisch) oder das SCSI-Gerät meldet den Schreibcachezustand, der vom unteren Stapel zurückgegeben wird. Virtuelle Datenträger melden, dass ihr Schreibcache aktiviert ist, und weigern sich, den Schreibcache vom Gast zu deaktivieren. Das Deaktivieren des Caches schlägt fehl und antwortet immer, dass der Cache aktiviert ist. Dieses Verhalten ist aus folgenden Gründen erforderlich:

    • Hyper-V kann nicht davon ausgehen, dass alle VMs, die auf demselben Datenträger ausgeführt werden, über dieselben Datenträgercacheeinstellungen verfügen müssen.

    • Der zugrunde liegende Speicher verfügt möglicherweise über einen Always-On-Schreibcache, der nicht deaktiviert werden kann. Dies wird dadurch unterstrichen, dass der virtuelle Datenträger möglicherweise zu einem anderen Datenträger auf demselben Host (Livespeichermigration) oder zu einem anderen Host (Livemigration) migriert wird.

      Da Anwendungen den Datenträgercache nicht deaktivieren können, muss jede Anwendung im Gast, die die Datenintegrität bei einem Stromausfall sicherstellen muss, entweder Option 1 oder Option 2 verwenden, um sicherzustellen, dass Schreibvorgänge den Datenträgercache umgehen.

  • Hostdateisystemcache. Der Hyper-V-Speicherstapel verwendet auch nicht gepufferte Schreibvorgänge, um sicherzustellen, dass die Schreibvorgänge vom Gast den zugrunde liegenden Hostdateisystemstapel umgehen.

  • Hostdatenträgercache. FUA wird, wenn sie vom Gast festgelegt wird, an den Host und an den Hostspeicherstapel weitergegeben. Das physische Hostdatenträgersystem muss mindestens eines der folgenden Kriterien erfüllen, um die Datenintegrität der virtualisierten Workload durch Stromausfälle sicherzustellen:

    • Das System verwendet Datenträger der Serverklasse (SCSI, Fibre Channel).
    • Das System stellt sicher, dass die Datenträger mit einem akkugestützten Cache-Hostbusadapter (HBA) verbunden sind.
    • Das System verwendet einen Speichercontroller (z. B. ein RAID-System) als Speichergerät.
    • Das System stellt sicher, dass die Stromversorgung des Datenträgers durch eine unterbrechungsfreie Stromversorgung (USV) geschützt wird.
    • Das System stellt sicher, dass das Feature zum Zwischenspeichern von Schreibvorgängen des Datenträgers deaktiviert ist.